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[(_at_)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="{(_at_)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>
--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--