[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
On Nov 20, 2004, at 3:48 AM, Michael Kay wrote:
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
<xsl:key name="citekey" match="db:biblioref/@linkend" use="'all'" />
<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="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] xinclude, temp trees, and keys
Subject: [xsl] xinclude, temp trees, and keys From: Bruce D'Arcus <bdarcus@xxxxxxxxxxxxx> Date: Sat, 20 Nov 2004 11:24:38 -0500 |
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[@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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] doc paths, Michael Kay | Thread | RE: [xsl] xinclude, temp trees, and, Michael Kay |
RE: [xsl] Sorting RTF, Paul Hebble | Date | RE: [xsl] xinclude, temp trees, and, Michael Kay |
Month |
Keywords