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 22:28:27 -0000
In thinking about this, it looks like this can be written as a recursive
routine.  Is this correct?
Right now I run a batch file and increment the level for each step.

Jim Albright
Wycliffe Bible Translators
704-562-1529


On Wed, Apr 14, 2021 at 4:48 PM Albright, Jim jim_albright@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> 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
>>
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2835196> (by
> email <>)

Current Thread