Your query might be much slicker and more efficient if you wrote it
completely in XQuery. Did you think about that?



Furst, Thomas <thomas.fu...@rcmt.com> schrieb am Do., 21. Mai 2020, 17:22:

> I have a large XML file stored in BaseX that I need to split up into
> smaller, modular documents. I have created an XSL file to do so:
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>
>     xmlns:xs="http://www.w3.org/2001/XMLSchema";
>
>     exclude-result-prefixes="xs"
>
>     version="2.0">
>
>     <xsl:output indent="yes" encoding="UTF-8"/>
>
>     <xsl:param name="schema"/>
>
>     <xsl:param name="model"/>
>
>     <xsl:param name="sysDiff"/>
>
>     <xsl:param name="sys"/>
>
>     <xsl:param name="subsys"/>
>
>     <xsl:param name="subsubsys"/>
>
>     <xsl:param name="assy"/>
>
>     <xsl:param name="disassy"/>
>
>     <xsl:param name="disassyv"/>
>
>     <xsl:param name="info"/>
>
>     <xsl:param name="infov"/>
>
>     <xsl:param name="itemloc"/>
>
>     <xsl:param name="tname"/>
>
>     <xsl:param name="iname"/>
>
>     <xsl:param name="outputDir"/>
>
>
>
>     <xsl:template match="/">
>
>         <xsl:result-document href="{concat($outputDir,
> '/DMC-',$model,'-',$sysDiff,'-',$sys,'-',$subsys,$subsubsys,'-',$assy,'-',$disassy,$disassyv,'-',$info,$infov,'-',$itemloc,'.xml')}"
> method="xml">
>
>             <dmodule>
>
>                 <identAndStatusSection>
>
>                     <dmAddress>
>
>                         <dmIdent>
>
>                             <dmCode modelIdentCode="{$model}"
> systemDiffCode="{$sysDiff}">
>
>                                 <xsl:attribute name="systemCode"
> select="$sys"/>
>
>                                 <xsl:attribute name="subSystemCode"
> select="$subsys"/>
>
>                                 <xsl:attribute name="subSubSystemCode"
> select="$subsubsys"/>
>
>                                 <xsl:attribute name="assyCode"
> select="$assy"/>
>
>                                 <xsl:attribute name="disassyCode"
> select="$disassy"/>
>
>                                 <xsl:attribute name="disassyCodeVariant"
> select="$disassyv"/>
>
>                                 <xsl:attribute name="infoCode"
> select="$info"/>
>
>                                 <xsl:attribute name="infoCodeVariant"
> select="$infov"/>
>
>                                 <xsl:attribute name="itemLocationCode"
> select="$itemloc"/>
>
>                             </dmCode>
>
>                             <language languageIsoCode="en"
> countryIsoCode="US"/>
>
>                             <issueInfo issueNumber="000" inWork="01"/>
>
>                         </dmIdent>
>
>                     </dmAddress>
>
>                 </identAndStatusSection>
>
>             </dmodule>
>
>         </xsl:result-document>
>
>     </xsl:template>
>
> </xsl:stylesheet>
>
>
>
> My issue is that when using the xslt:transform() function in BaseX it only
> returns (creates) the first document. This is the XQuery I have for this:
>
> let $style := doc('file:///C:/base.xsl')
>
>
>
>    for $d in doc('file:///C:/Users/tfurst/Documents/Book1-test.xml')//title
>
>       for $newD in //*[title]
>
>       where $newD/title/@id eq $d/@id
>
>         let $schema := $d/schemaName
>
>         let $model := $d/modelic
>
>         let $sdc := $d/sdc
>
>         let $sys := $d/systemCode
>
>         let $subsys := $d/subsys
>
>         let $subsubsys := $d/subsubsys
>
>         let $assy := $d/assy
>
>         let $disassy := $d/disassy
>
>         let $disassyv := $d/disassyv
>
>         let $info := $d/infoCode
>
>         let $infov := $d/infov
>
>         let $itemloc := $d/itemloc
>
>         let $tname := $d/tname
>
>         let $iname := $d/iname
>
>         return xslt:transform($newD,$style, map {"outputDir":"
> file:///G:/LMA-Conv/Flight/test-conv-out", "model":$model,
> "sysDiff":$sdc, "sys":$sys, "subsys":$subsys, "subsubsys":$subsubsys,
> "assy":$assy, "disassy":$disassy, "disassyv":$disassyv, "info":$info,
> "infov":$infov, "itemloc":$itemloc, "tname":$tname, "iname":$iname})
>
>
>
> The document named Book1-test.xml is essentially a map of existing IDs of
> elements to new output file names. After it creates the first XML output
> file BaseX returns ERROR [FODC0002] "" (Line 1): Premature end of file.
> When I looked up the error code in the BaseX documentation this error is
> defined as *"The specified document resource cannot be retrieved. "*. Is
> there some limitation to the use of the xslt:transform function in a loop?
> I am not understanding why it was able to retrieved the first time, but not
> after that. I have tried to move the XSL to different file locations, no
> luck. Am I missing something ridiculously obvious here? This XSL stylesheet
> is a very simplified version of what it will ultimately become, I wanted to
> get the process down before fully developing the XSL.
>
>
>
> Thank you,
>
>
>
> Tom Furst
>
> NOTE: This email message and any attachments are for the sole use of the
> intended recipient(s) and may contain confidential and/or privileged
> information. Any unauthorized review, use, disclosure or distribution is
> prohibited. If you are not the intended recipient, please contact the
> sender by replying to this email, and destroy all copies of the original
> message. Thank you, RCM Technologies. <https://www.rcmt.com>
>
>
> NOTE: This email message and any attachments are for the sole use of the
> intended recipient(s) and may contain confidential and/or privileged
> information. Any unauthorized review, use, disclosure or distribution is
> prohibited. If you are not the intended recipient, please contact the
> sender by replying to this email, and destroy all copies of the original
> message. Thank you, RCM Technologies. <https://www.rcmt.com>
>

Reply via email to