XSLT File (predicate.xsl)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40" >
<xsl:output method="html" />
<!-- Override built-in template rules for elements
and text nodes (note empty <xsl:template element). -->
<xsl:template match="*" />
<!-- Process the document root. -->
<xsl:template match="/">
<html>
<head><title><xsl:value-of select="book/title"/></title></head>
<h1><xsl:value-of select="book/title"/></h1>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="book">
<xsl:apply-templates select="@*|*"/>
</xsl:template>
<xsl:template match="@copyright[.>=2001]">
<cite>
[Copyright <xsl:value-of select="."/>
(21st century)]
</cite>
</xsl:template>
<xsl:template match="@copyright[.<=2000]">
<cite>
[Copyright <xsl:value-of select="."/>
(Previous century)]
</cite>
</xsl:template>
<xsl:template match="book[not(@copyright)]">
<cite>
[No copyright date supplied]
</cite>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="chapter[position()<2]">
<hr />
<hr />
<div style="background-color: teal">
<h2 align="right">Chapter <xsl:value-of select="position()-2"/>:</h2>
<xsl:apply-templates select="title"/>
</div>
<xsl:apply-templates select="section|notes"/>
</xsl:template>
<xsl:template match="chapter[position()>1]">
<hr />
<div style="background-color: teal">
<h2 align="right">Chapter <xsl:value-of select="position()-2"/>:</h2>
<xsl:apply-templates select="title"/>
</div>
<xsl:apply-templates select="section|notes"/>
</xsl:template>
<xsl:template match="title[name(..)!='book']">
<xsl:choose>
<xsl:when test="parent::*[name()='chapter']">
<h2 align="right"><xsl:value-of select="."/></h2>
</xsl:when>
<xsl:otherwise>
<div style="background-color: silver">
<h3 align="left"><xsl:value-of select="."/></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="section">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="notes">
<hr width="75%" align="left" />
<h4>Notes for this chapter:</h4>
<xsl:apply-templates select="note"/>
</xsl:template>
<xsl:template match="note">
<p><a name="#{@id}" />[<xsl:value-of select="count(preceding::note[ancestor::chapter//.])+1"/>] <xsl:value-of select="text()"/></p>
</xsl:template>
<xsl:template match="noteref">
<xsl:variable name="note_num" select="count(preceding::noteref[ancestor::chapter//.])+1"/>
[<a href="#{@idref}">Note <xsl:value-of select="$note_num"/></a>]
</xsl:template>
<xsl:template match="figure">
<br clear="left" />
<img border="1" height="200" width="200" alt="{@caption}" src="{@location}" />
<br clear="left" />
</xsl:template>
<xsl:template match="text[substring(.,1,1)='T' or substring(.,1,1)='B' or substring(.,1,1)='A' or substring(.,1,1)='P']">
<p><span style="font-weight: bold; font-size: 18pt; font-family=Verdana,Arial">
<xsl:value-of select="substring(.,1,1)"/>
</span>
<xsl:value-of select="substring(., 2, string-length(.)-1)"/>
<xsl:apply-templates select="noteref|figure"/>
</p>
</xsl:template>
<xsl:template match="text[substring(.,1,1)!='T' and substring(.,1,1)!='B' and substring(.,1,1)!='A' and substring(.,1,1)!='P']">
<p>
<xsl:apply-templates select="noteref|figure|text()"/>
</p>
</xsl:template>
</xsl:stylesheet>