On Nov 20, 2004, at 3:48 AM, Michael Kay wrote:
You could either (a) use the document function rather than doc -
document().
I did that, and it now works. Thanks.
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.
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[(_at_)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>
--~------------------------------------------------------------------
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>
--~--