|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] variables vs. modes
I'm considering reworking my (2.0) stylesheets towards greater reliance
on global variables.
In my current approach, I use multiple passes, with multiple modes. However, I feel that it may make more sense (be more flexible, easier to integrate with other stylesheets and to maintain, etc.) to use variables instead. Below is a simple example of what I mean. Are there any counter-arguments I may be missing before I actually do this? Bruce <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:mods="http://www.loc.gov/mods/v3" xmlns:db="http://docbook.org/docbook-ng" xmlns:exist="http://exist.sourceforge.net/NS/exist" exclude-result-prefixes="db mods exist"> <xsl:output method="xml" encoding="utf-8" indent="yes"/> <!-- grab all the citation pointers --> <xsl:variable name="citerefs" select="//db:biblioref/@linkend"/> <!-- construct a list of unique references to pass to a query -->
<xsl:variable name="citekeys">
<xsl:text>(</xsl:text>
<xsl:for-each-group select="$citerefs" 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>
<xsl:text>)</xsl:text>
</xsl:variable><!-- take list of references, and grab them from a database over http; in this case it's an XQuery to eXist, but it should be parameterized for flexibility --> <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]"))' /> <!-- create raw bib collection; in a real implementation, this might be where enhancement (grouping, sorting, adding content for processing, etc.) would take place --> <xsl:variable name="raw-biblist"> <mods:modsCollection> <xsl:copy-of select="$bibrecord/exist:result/mods:mods" /> </mods:modsCollection> </xsl:variable> <!-- take raw biblist and format it -->
<xsl:variable name="formatted-biblist">
<xsl:for-each select="$raw-biblist/mods:modsCollection/mods:mods">
<p id="{@ID}">
<xsl:apply-templates select="mods:titleInfo"/>
</p>
</xsl:for-each>
</xsl:variable> <xsl:template match="/">
<div id="bibliography">
<xsl:copy-of select="$formatted-biblist"/>
</div>
</xsl:template> <xsl:template match="mods:titleInfo">
<span class="title">
<xsl:apply-templates select="mods:title"/>
<xsl:apply-templates select="mods:subTitle"/>
</span>
</xsl:template> <xsl:template match="mods:title">
<xsl:value-of select="."/>
</xsl:template> <xsl:template match="mods:subTitle">
<xsl:text>: </xsl:text>
<xsl:value-of select="."/>
</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
|

Cart








