xsl-list
[Top] [All Lists]

Re: [xsl] inserting data from second file using key and document

2019-01-13 23:45:57
Hi Jim,

I have once been struggling too to solve this. The way I do it now is by
placing the key() function after a variable that references a node in
the external document. E.g.:

<xsl:variable name="doc" select="doc('some-uri')"/>
...
<xsl:apply-templates select="$doc/key(...)"/>

Pieter

On 1/14/19 3:20 AM, Jim Albright jim_albright(_at_)wycliffe(_dot_)org wrote:
File #1 is Louw-Nida data translated into Portuguese:

<html>
<head></head>
<body>
<p class='entry' domain='1.1' >
      <span class='LNgrk'><span class='k'>κόσμος</span><span 
class='zsup'>a</span>, <span class='k'>ου</span> <span 
class='it'>m</span></span>
      <span class='LNdfe'>o universo como uma estrutura ordenada</span>
      <span class='LNgle'>cosmo, universo</span>
      <span class='LNill'><span lang='gk'>ὁ θεὸς ὁ ποιήσας τὸν κόσμον καὶ 
πάντα τὰ ἐν αὐτῷ</span>, “o Deus que fez o universo e tudo o que nele existe” 
(At 17.24). Em muitas línguas, não existe termo específico para o universo. O 
equivalente mais próximo pode ser simplesmente “tudo o que existe”. Em outros 
casos, pode-se usar uma locução como “o mundo e tudo o que está acima dele” 
ou “o céu e a terra”. Em algumas línguas, o conceito da totalidade do 
universo pode ser expresso apenas como “tudo o que há na terra e no 
céu”.</span>
</p>
...
<p class='entry' domain='60.45' >
      <span class='LNgrk'><span class='k'>μύριοι, αι, α</span>; <span 
class='k'>μυριάς</span><span class='znsup'>a</span>, <span 
class='k'>άδος</span> <span class='it'>f</span> — “dez mil”.</span>
      <span class='p2'><span class='ke'>μύριοι:</span> <span lang='gk'>εἷς 
ὀφειλέτης μυρίων ταλάντων</span>, “um que lhe devia dez mil talentos” (Mt 
18.24).</span>
      <span class='p2'><span class='ke'>μυριάς</span><span 
class='zsup'>a</span>: <span lang='gk'>ἀργυρίου μυριάδας πέντε</span>, 
“cinquenta mil moedas de prata” (At 19.19).</span>
</p>...


I want to insert the p into a second document based on the domain /1.1/

File #2 is the Semantic Domain of Biblical Greek:

<?xml version="1.0"?>
<Lexicon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
  <Lexicon_Entry Id="000001000000000" Lemma="α" Version="0" 
HasAramaic="false">
   
 <BaseForms>
      <BaseForm Id="000001001000000">
        <LEXMeanings>
          <LEXMeaning Id="000001001001000" IsBiblicalTerm="Y">
            <LEXDomains>
              <LEXDomain>60.46</LEXDomain>
            </LEXDomains>
            <LEXSenses>
              <LEXSense LanguageCode="en" LastEdited="" LastEditedBy="">
                <DefinitionLong />
                <DefinitionShort>first in a series involving time, space, or 
set</DefinitionShort>
                <Glosses>
                  <Gloss>first</Gloss>
                </Glosses>
                <Comments>Occurring only in titles of NT writings: πρὸς 
Κορινθίους α ‘First Letter to the Corinthians’; Ἰωάννου α ‘First Epistle of 
John.’</Comments>
              </LEXSense>
              <LEXSense LanguageCode="pt" LastEdited="" LastEditedBy="">
                <DefinitionLong />
                <DefinitionShort>o primeiro numa série envolvendo tempo, 
espaço ou ordem</DefinitionShort>
                <Glosses>
                  <Gloss>primeiro</Gloss>
                </Glosses>
                <Comments />
              </LEXSense>
   ...

I want to insert some contents from p from file #1 into file #2 into 
/Comments/ found in /LanguageCode/=pt.

Desired output...
   <LEXSense LanguageCode="pt" LastEdited="" LastEditedBy="">
                <DefinitionLong />
                <DefinitionShort>o primeiro numa série envolvendo tempo, 
espaço ou ordem</DefinitionShort>
                <Glosses>
                  <Gloss>primeiro</Gloss>
                </Glosses>
                <Comments >
              <span class='p2'><span class='ke'>μύριοι:</span> <span 
lang='gk'>εἷς ὀφειλέτης μυρίων ταλάντων</span>, “um que lhe devia dez mil 
talentos” (Mt 18.24).</span>
              <span class='p2'><span class='ke'>μυριάς</span><span 
class='zsup'>a</span>: <span lang='gk'>ἀργυρίου μυριάδας πέντε</span>, 
“cinquenta mil moedas de prata” (At 19.19).</span>
      </Comments
              </LEXSense>

My xslt

   <xsl:variable name="LN" select="document('LN-PT-converted2.html')"/>
    <xsl:key name="insert" match="$LN/html/body/p" use="@domain"/>
    
    <xsl:template match="Comments[parent::LEXSense[@LanguageCode='pt']]">
       <xsl:variable name="item_number" select="preceding::LEXDomain"/>
              <xsl:element name="Comments">
                      <xsl:apply-templates 
select="$LN/html/body/p[@domain=$item_number]"/>
              </xsl:element>
        </xsl:template>

This works but takes 9 hours 30 minutes.

The following attempt yield nothing.

    <xsl:template match="Comments[parent::LEXSense[@LanguageCode='pt']]">
       <xsl:variable name="item_number" select="preceding::LEXDomain"/>
      <xsl:element name="Comments">
                      <xsl:apply-templates select="key('insert', 
$item_number)"/>
      </xsl:element>
        </xsl:template>
      
I'm sure that /key/ should be much faster but am stuck getting it to work.
I know how to omit the LNxxx data.

Jim Albright
704-562-1529 unlimited cell
Wycliffe Bible Translators



--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

Attachment: signature.asc
Description: OpenPGP digital signature

<Prev in Thread] Current Thread [Next in Thread>