[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

xinclude, temp trees, and keys

Subject: xinclude, temp trees, and keys
From: Bruce D'Arcus <bdarcus@xxxxxxxxxxxxx>
Date: Sat, 20 Nov 2004 11:24:38 -0500
xsl template mode
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() &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>


<!--+ ==============================================================
| 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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.