[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] temp trees and context switching


Subject: Re: [xsl] temp trees and context switching
From: Bruce D'Arcus <bdarcus@xxxxxxxxxxxxx>
Date: Sat, 13 Nov 2004 23:27:45 -0500

On Nov 12, 2004, at 7:31 PM, Bruce D'Arcus wrote:

Below is my first few templates (I can't post the entire code), with source example below it. Am I doing something wrong with using the call-template below?

I'm not sure this is the best solution (any comments?), but I ended up adding another pass to the processing, since I couldn't get it work just using the call-template:


<?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"
	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.
-->

<xsl:key name="citekey" match="db:biblioref/@linkend" use="'all'" />

<!-- first create a temporary tree that adds the raw bibliographic data based on citations -->
<xsl:template match="/">
<xsl:variable name="temp">
<xsl:apply-templates mode="create-bibcollection" />
</xsl:variable>
<xsl:apply-templates select="$temp" mode="step-2" />
</xsl:template>


  <xsl:template match="db:article" mode="create-bibcollection">
    <article>
      <xsl:apply-templates mode="create-bibcollection" />
    </article>
  </xsl:template>

  <xsl:template match="db:info" mode="create-bibcollection">
    <xsl:copy-of select="."/>
  </xsl:template>

  <xsl:template match="db:section" mode="create-bibcollection">
    <xsl:copy-of select="."/>
  </xsl:template>

<!-- next take that tree and create another temporary tree enhanced 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: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="create-bibcollection">
<bibliography>
<modsCollection xmlns="http://www.loc.gov/mods/v3">
<xsl:for-each select="distinct-values(key('citekey', 'all'))">
<xsl:variable name="bibrecord"
select="doc(concat('/Users/darcusb/Desktop/xbiblio-alt/samples/bib- data/', ., '.mods'))/mods:modsCollection/mods:mods"/>
<xsl:copy-of select="$bibrecord" />
</xsl:for-each>
</modsCollection>
</bibliography>
</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