Re: [xsl] doc() concat expression and whitespace error

Subject: Re: [xsl] doc() concat expression and whitespace error
From: Bruce D'Arcus <bdarcus@xxxxxxxxxxxxx>
Date: Thu, 18 Nov 2004 17:43:39 -0500
On Nov 16, 2004, at 12:02 PM, Bruce D'Arcus wrote:

Can the former be made faster?

The easiest way is instead of sending a single query for each distinct-value of the "citekey" key, I somehow send a query that asks for all of them at once.


I'm not quite sure who to do that, though. I know that I want a "for $key in $keys return mods:mods[ID='$key']" sort of expression; I just don't know how to do that with the key.

OK, we got it working so the stylesheets grab the entire collection of bibliographic records at once (sort of a PITA with the url escaping). With a bug fixed in eXist, it seems to be much faster than the earlier approach.


Does anyone have any feedback on if there is a better, more flexible, way to code this? I'd like to make it easy for people to switch to different storage options (flat files and other sorts of url-queries in particular), probably even with a parameter option.

<xsl:template match="db:bibliography" mode="create-bibcollection">
<xsl:variable name="citekeys">
<xsl:text>(</xsl:text>
<xsl:for-each select="distinct-values(key('citekey', 'all'))">
<xsl:if test="position() &gt; 1">,%20</xsl:if>
<xsl:text>&apos;</xsl:text>
<xsl:value-of select="."/>
<xsl:text>&apos;</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>


Bruce

Current Thread