[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: xinclude, temp trees, and keys
> However, I've exposed another problem which I can't quite wrapped my > head around how to solve. I have this key at the top of the main > stylesheet: > > <xsl:key name="citekey" match="db:biblioref/@linkend" > use="'all'" /> > > My problem (I think) is that I need this to apply this to the content > that I am xincluding, while my guess is the key is constructed before > it gets included in the temporary tree. The key is applicable to any document (but only one at a time). The key() function searches the document containing the context node, and you can reasonably assume that the index will be constructed for a particular document the first time it is used to search that document. I don't really see what a key with a constant "use" expression achieves. Apart from the fact that it applies to whichever document is current at the time, you could just as well (and probably better) use a global variable <xsl:variable name="citekey" select="//db:biblioref/@linkend"/> What's more, I would probably replace: <xsl:for-each select="distinct-values(key('citekey', 'all'))"> <xsl:if test="position() > 1">,%20</xsl:if> <xsl:text>'</xsl:text> <xsl:value-of select="."/> <xsl:text>'</xsl:text> </xsl:for-each> with <xsl:for-each-group select="//db:biblioref/@linkend" group-by="."> <xsl:if test="position() > 1">,%20</xsl:if> <xsl:text>'</xsl:text> <xsl:value-of select="."/> <xsl:text>'</xsl:text> </xsl:for-each-group> One reason is that for-each-group gives you more control over ordering in the result than distinct-values (the order of the result of distinct-values is implementation-defined). Incidentally, the ' could just as well be written '. However, I don't understand the problem well enough to know which document you are trying to search at this point. Michael Kay http://www.saxonica.com/ > > Below is my entire driver file. Help would, as always, be much > appreciated. > > Bruce > > <?xml version="1.0" encoding="utf-8"?> > <xsl:stylesheet version="2.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:db="http://docbook.org/docbook-ng" > xmlns:mods="http://www.loc.gov/mods/v3" > xmlns:bib="http://xbiblio.sourceforge.net" > xmlns="http://docbook.org/docbook-ng" > xmlns:xi="http://www.w3.org/2001/XInclude" > xmlns:exist="http://exist.sourceforge.net/NS/exist" > exclude-result-prefixes="mods bib db xs"> > > <!-- > This driver file creates a temporary tree of the document for > subsequent processing. In the case of footnote class > citations, this means wrapping all citations in a footnote > element. > --> > > <!--+ > ============================================================== > | first, create a temporary tree that adds raw bib data > to document > | based on unique citation keys, and any xincluded docs > +--> > > <xsl:key name="citekey" match="db:biblioref/@linkend" > use="'all'" /> > > <xsl:template match="/"> > <xsl:variable name="temp"> > <xsl:apply-templates mode="resolve-linked-docs" /> > </xsl:variable> > <xsl:apply-templates select="$temp" mode="step-2" /> > </xsl:template> > > <xsl:template match="db:article" mode="resolve-linked-docs"> > <article> > <xsl:apply-templates mode="resolve-linked-docs" /> > </article> > </xsl:template> > > <xsl:template match="db:book" mode="resolve-linked-docs"> > <book> > <xsl:apply-templates mode="resolve-linked-docs" /> > </book> > </xsl:template> > > <xsl:template match="db:chapter" mode="resolve-linked-docs"> > <xsl:copy-of select="."/> > </xsl:template> > > <xsl:template match="db:info" mode="resolve-linked-docs"> > <xsl:copy-of select="."/> > </xsl:template> > > <xsl:template match="db:section" mode="resolve-linked-docs"> > <xsl:copy-of select="."/> > </xsl:template> > > <!--+ > ============================================================== > | resolve xincludes > +--> > <xsl:template match="xi:include" mode="resolve-linked-docs"> > <xsl:copy-of select="document(@href)" /> > </xsl:template> > > <xsl:template match="db:bibliography" mode="resolve-linked-docs"> > <xsl:variable name="citekeys"> > <xsl:text>(</xsl:text> > <xsl:for-each select="distinct-values(key('citekey', 'all'))"> > <xsl:if test="position() > 1">,%20</xsl:if> > <xsl:text>'</xsl:text> > <xsl:value-of select="."/> > <xsl:text>'</xsl:text> > </xsl:for-each> > <xsl:text>)</xsl:text> > </xsl:variable> > <!--+ > ============================================================== > | bibrecord variable identifies where to locate the bib > records; in > | this case, we access them via http from an eXist XML DB > +--> > <xsl:variable name="bibrecord" > > select='doc(concat("http://localhost:8080/exist/servlet/db/biblio?", > > "_query=declare%20namespace%20mods=%22http://www.loc.gov/mods/v3%22;", > "%20for%20$citekey%20in%20", > $citekeys, > > "%20return%20/mods:modsCollection/mods:mods[@ID=$citekey]"))' /> > <bibliography> > <modsCollection xmlns="http://www.loc.gov/mods/v3"> > <xsl:copy-of select="$bibrecord/exist:result/mods:mods" /> > </modsCollection> > </bibliography> > </xsl:template> > > <!--+ > ============================================================== > | next, take that temporary tree and enhance it for subsequent > processing > +--> > > <xsl:template match="/" mode="step-2"> > <xsl:variable name="temp"> > <xsl:apply-templates mode="enhanced-bib" /> > </xsl:variable> > <xsl:apply-templates select="$temp" mode="modified" /> > </xsl:template> > > <xsl:template match="db:article" mode="enhanced-bib"> > <article> > <xsl:apply-templates mode="enhanced-bib" /> > </article> > </xsl:template> > > <xsl:template match="db:book" mode="enhanced-bib"> > <book> > <xsl:apply-templates mode="enhanced-bib" /> > </book> > </xsl:template> > > <xsl:template match="db:chapter" mode="enhanced-bib"> > <chapter> > <xsl:apply-templates mode="enhanced-bib" /> > </chapter> > </xsl:template> > > <xsl:template match="db:info" mode="enhanced-bib"> > <xsl:copy-of select="."/> > </xsl:template> > > <xsl:template match="db:section[$citation-class='author-year']" > mode="enhanced-bib"> > <xsl:copy-of select="."/> > </xsl:template> > > <xsl:template match="db:bibliography" mode="enhanced-bib"> > <bibliography> > <xsl:apply-templates select="mods:modsCollection" > mode="enhanced-bib"/> > </bibliography> > </xsl:template> > > <xsl:template match="db:section[$citation-class='note']" > mode="enhanced-bib"> > <section> > <xsl:apply-templates mode="enhanced-bib"/> > </section> > </xsl:template> > > <xsl:template match="db:section[$citation-class='note']/db:info" > mode="enhanced-bib"> > <xsl:copy-of select="."/> > </xsl:template> > > <xsl:template match="db:footnote[$citation-class='note']" > mode="enhanced-bib"> > <footnote> > <xsl:apply-templates mode="enhanced-bib"/> > </footnote> > </xsl:template> > > <xsl:template match="db:section/db:para[$citation-class='note']" > mode="enhanced-bib"> > <para> > <xsl:apply-templates mode="enhanced-bib"/> > </para> > </xsl:template> > > <xsl:template match="db:footnote/db:para[$citation-class='note']" > mode="enhanced-bib"> > <para> > <xsl:apply-templates mode="enhanced-bib"/> > </para> > </xsl:template> > > <xsl:template match="db:citation[$citation-class='note']" > mode="enhanced-bib"> > <!--+ > ============================================================== > | with footnote class citations, wrap all citations in a > footnote, > unless > | already in a footnote > +--> > <xsl:choose> > <xsl:when test="ancestor::db:footnote"> > <xsl:copy-of select="."/> > </xsl:when> > <xsl:otherwise> > <footnote> > <xsl:copy-of select="."/> > </footnote> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > </xsl:stylesheet>
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|