Re: [xsl] problem with key

Subject: Re: [xsl] problem with key
From: "Albright, Jim jim_albright@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 14 Apr 2021 20:48:26 -0000
Thank you David and Dimitre,

You are both right.  Thank you.  I would have responded sooner but it took
me some time to find a bug that caused the file to grow.  I now pass a
/level/ parameter to facilitate deleting duplicates. Here is working XSLT

<xsl:param name="level"></xsl:param>
    <xsl:output method="xml" indent="yes" />
    <xsl:variable name="lookupDoc" select="document('step2.xml')"/>

    <xsl:key name="SemanticDomainByParent" match="CmSemanticDomain"
use="@parent" />

    <xsl:template match="CmSemanticDomain[@level=$level]"/>

    <xsl:template match="line[@tag='gd']">
        <xsl:variable name="parentSD" select="parent::*/@sd"/>
        <SubPossibilities>
            <xsl:copy-of select="key('SemanticDomainByParent', $parentSD,
$lookupDoc)"/>
        </SubPossibilities>
    </xsl:template>

    <!-- identity transform -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

I ended up building the hierarchy one transformation at a time. The
inserted text has tag = 'gd' which triggers the insertion the next time
around.  So multiple application of the same XSL does the trick.

I started by creating a file with just the 0 level of hierarchy. I then
inserted the correct information from an external file at the correct
location.  There may be easier ways of doing this.  But this is something
that I can explain fairly easily to novices.  You continue until you have
processed all the levels.

Thank you again for your help.

Jim Albright
Wycliffe Bible Translators
704-562-1529


On Mon, Apr 12, 2021 at 1:20 AM David Maus lists@xxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> On Mon, 12 Apr 2021 06:08:46 +0200,
> Albright, Jim jim_albright@xxxxxxxxxxxx wrote:
> >
> > [1  <text/plain; UTF-8 (7bit)>]
> > [2  <text/html; UTF-8 (quoted-printable)>]
> > I am trying to upconvert from a flat-file. After I get it into XML form
> I try to add hierarchy using "key".
> > -------------
> > OUTPUT
> > -------------
> > I get NO results from
> > <SubPossibilities>
> >             <xsl:copy select="key('SemanticDomainByParent',
> '$parentSD')"/>
> > </SubPossibilities>
>
> The quotes around $parentSD look wrong. You are looking up elements
> under the string key '$parentSD'.
>
> I think it should read:
>
> <xsl:copy select="key('SemanticDomainByParent', $parentSD)"/>
>
> HTH,
>   -- David
>
> >
> > so output looks like
> > <SubPossibilities/>
> >
> > So what am I doing wrong?
> >
> > Starting with this XML
> > -------------
> > XML input
> > -------------
> >
> > ...      <Possibilities>
> >          <CmSemanticDomain level="1"      sd="1"   parent=""
>  guid="I63403699-07C1-43F3-A47C-069D6E4316E5">
> >             <line tag="sd">Universe, creation</line>
> >             <line tag="gd">I63403699-07C1-43F3-A47C-069D6E4316E5</line>
> >          </CmSemanticDomain>
> >          <CmSemanticDomain level="2"  sd="1.1"   parent="1"
> guid="I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C">
> >                <line tag="sd">Sky</line>
> >                <line
> tag="gd">I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C</line>
> >           </CmSemanticDomain>
> >          <CmSemanticDomain level="3"   sd="1.1.1"    parent="1.1"
> guid="IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB">
> >             <line tag="sd">Sun</line>
> >             <line tag="gd">IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB</line>
> >          </CmSemanticDomain>
> >          <CmSemanticDomain level="4"  sd="1.1.1.1"    parent="1.1.1"
>   guid="I1BD42665-0610-4442-8D8D-7C666FEE3A6D">
> >             <line tag="sd">Moon</line>
> >             <line tag="gd">I1BD42665-0610-4442-8D8D-7C666FEE3A6D</line>
> >          </CmSemanticDomain>
> >          <CmSemanticDomain level="4"  sd="1.1.1.2"  parent="1.1.1"
> guid="IB044E890-CE30-455C-AEDE-7E9D5569396E">
> >             <line tag="sd">Star</line>
> >             <line tag="gd">IB044E890-CE30-455C-AEDE-7E9D5569396E</line>
> >          </CmSemanticDomain>
> >          <CmSemanticDomain level="4"  sd="1.1.1.3"   parent="1.1.1"
> guid="IA0D073DF-D413-4DFD-9BA1-C3C68F126D90">
> >             <line tag="sd">Planet</line>
> >             <line tag="gd">IA0D073DF-D413-4DFD-9BA1-C3C68F126D90</line>
> >          </CmSemanticDomain>
> >
> > ...
> > -------------
> > XSL
> > -------------
> > ...
> >   <xsl:key name="SemanticDomainByParent" match="CmSemanticDomain"
> use="@parent" />
> >
> >     <xsl:template match="CmSemanticDomain">
> >         <CmSemanticDomain>
> >             <xsl:apply-templates select="@* | node()"/>
> >             <xsl:apply-templates
> select="key('SemanticDomainByParent',@sd)"/>
> >         </CmSemanticDomain>
> >     </xsl:template>
> >
> >     <xsl:template match="line[@tag='gd']">
> >         <xsl:variable name="parentSD" select="parent::*/@parent"/>
> >         <SubPossibilities>
> >             <xsl:copy select="key('SemanticDomainByParent',
> '$parentSD')"/>
> >         </SubPossibilities>
> >     </xsl:template>
> >
> >     <!-- identity transform -->
> >     <xsl:template match="@* | node()">
> >         <xsl:copy>
> >             <xsl:apply-templates select="@* | node()"/>
> >         </xsl:copy>
> >     </xsl:template>
> >
> >
> > -------------
> > Desired OUTPUT
> > -------------
> > ...
> >       <Possibilities>
> >          <CmSemanticDomain level="1"      sd="1"   parent=""
>  guid="I63403699-07C1-43F3-A47C-069D6E4316E5">
> >                <line tag="sd">Universe, creation</line>
> >                <SubPossibilities>
> >                   <CmSemanticDomain level="2"  sd="1.1"   parent="1"
> guid="I999581C4-1611-4ACB-AE1B-5E6C1DFE6F0C">
> >                        <line tag="sd">Sky</line>
> >                       <SubPossibilities>
> >                           <CmSemanticDomain level="3"   sd="1.1.1"
> parent="1.1"    guid="IDC1A2C6F-1B32-4631-8823-36DACC8CB7BB">
> >                               <line tag="sd">Sun</line>
> >                               <SubPossibilities>
> >                                   <CmSemanticDomain level="4"
> sd="1.1.1.2"  parent="1.1.1"  guid="IB044E890-CE30-455C-AEDE-7E9D5569396E">
> >                                       <line tag="sd">Star</line>
> >                                   </CmSemanticDomain>
> >                                   <CmSemanticDomain level="4"
> sd="1.1.1.3"   parent="1.1.1"
> guid="IA0D073DF-D413-4DFD-9BA1-C3C68F126D90">
> >                                        <line tag="sd">Planet</line>
> >                                  </CmSemanticDomain>
> > ...
> >                              </SubPossibilities>
> >                          </CmSemanticDomain>
> >                       </SubPossibilities>
> >                   </CmSemanticDomain>
> >               </SubPossibilities>
> >           </CmSemanticDomain>
> >       </Possibilities>
> >
> > Jim Albright
> > Wycliffe Bible Translators
> > 704-562-1529
> > XSL-List info and archive
> > EasyUnsubscribe (by email)
>
> --
> David Maus M.A.
>
> Www: http://dmaus.name
> Twitter: @_dmaus

Current Thread