This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Loading an external file of index


Pierre,

I must say that I haven't fully got my head around how document() and key()
interact, but I'll give it my best shot.

>What does means this "for-each" as soon as I use it only to load a 
>document ?

In my head, I translate 'for-each' as 'with'.  One of the side-effects of
for-each is that it sets the current node to something that you specify, so
if you use a select expression that only contains one node, it's just like
temporarily setting the current node to that node.

>Why not only ask to load the document using an "apply-template" for 
>loading ?

Selecting a document for applying templates to is just like starting with a
new input document.  When you start processing that document, any keys that
you've defined apply to that document rather than the input document.  So,
you could alternatively do something like:

   <xsl:key name="mysetofkeys" match="/keybase/key" use="@name" />

   <!-- match on the keyref in your input document -->
   <xsl:template match="keyref">
     <!-- apply templates to the keybase of your shared document
          with a parameter giving the name of the keyref         -->
     <xsl:apply-templates select="document('../shared/shared.xml')/keybase">
       <xsl:with-param name="keyrefname" select="@name" />
     </xsl:apply-templates>
   </xsl:template>

   <!-- match on the keybase of your shared document -->
   <xsl:template match="keybase">
     <xsl:param name="keyrefname" />
     <!-- because we're within the shared document, the key()
          indexes on matching nodes within that document,
          rather than the input document.                     -->
     <b><xsl:value-of select="key('mysetofkeys', $keyrefname)/ACRONYM" /></b>
   </xsl:template>

I haven't tested this thoroughly, so it might need some fine tuning, but
I've tested the basic principal and it seems to apply.

>Does this "for-each" means that a processor needs to load and 
>reparse all keys declarations each time ?
>
>Also, I'm a little bit curious on performances : for now the document 
>database is not so heavy. But let suppose, later having a 10 000 document 
>database with something like 100 keyref in each document.
>Would an XSL transformer need to load the shared file 100 times per 
>document ? Even, looking at the syntax, would it need to load it, for each 
>keyref element, as many times as needed before finding the right key in the 
>shared document ?

I'm really not sure.  I imagine that the processor would make some
optimisations, but you'd have to ask someone who'd written one.

I'm sorry I can't be more help,

Jeni

Dr Jeni Tennison
Epistemics Ltd, Strelley Hall, Nottingham, NG8 6PE
Telephone 0115 9061301 • Fax 0115 9061304 • Email
jeni.tennison@epistemics.co.uk



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]