Some topics in this section use the following file.
XSLT File (lib_cat.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="categ_key" match="book" use="category"/>
<xsl:key name="author_key" match="book" use="author"/>
<xsl:template match="/">
<html>
<head>
<title>Scootney Publishing: Special Exhibit</title>
<style>
h1 {font-family: Arial,Helvetica,Univers,sans-serif;
font-size: 18pt; font-weight: bold;
background-color: teal;
width: 75%}
h2 {font-family: Arial,Helvetica,Univers,sans-serif;
font-size: 14pt; font-weight: bold;
background-color: white;
width: 75%}
h3 {font-family: Arial,Helvetica,Univers,sans-serif;
font-size: 12pt; font-weight: bold;
background-color: gold;
width: 75%;
border-width: 1;
border-style: solid}
</style>
</head>
<body>
<h1>Scootney Publishing: Special Exhibit Catalog</h1>
<xsl:apply-templates select="lib_cat" mode="grp_categ"/>
<xsl:apply-templates select="lib_cat" mode="grp_author"/>
</body>
</html>
</xsl:template>
<xsl:template match="lib_cat" mode="grp_categ">
<h2>Titles Grouped by Category</h2>
<xsl:for-each select="book[count(. | key('categ_key', category)[1])=1]">
<h3><xsl:value-of select="category" /></h3>
<xsl:for-each select="key('categ_key', category)">
<xsl:sort select="title"/>
<table border="0" width="75%">
<tr>
<th width="10%" align="right">Title</th>
<td width="90%" align="left"><xsl:value-of select="title" /></td>
</tr>
<tr>
<th width="10%" align="right">Author</th>
<td width="90%" align="left"><xsl:value-of select="author" /></td>
</tr>
<tr>
<th width="10%" align="right">Copyright</th>
<td width="90%" align="left"><xsl:value-of select="copyright" /></td>
</tr>
<tr>
<th width="10%" align="right">Pages</th>
<td width="90%" align="left"><xsl:value-of select="pages" /></td>
</tr>
<tr>
<th width="10%" align="right" valign="top">Summary</th>
<td width="90%" align="left" valign="top"><xsl:value-of select="description" /></td>
</tr>
</table>
<hr width="75%" align="left"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template match="lib_cat" mode="grp_author">
<h2>Titles Grouped by Author</h2>
<xsl:for-each select="book[generate-id() = generate-id(key('author_key', author)[1])]">
<xsl:sort select="author"/>
<h3><xsl:value-of select="author" /></h3>
<xsl:for-each select="key('author_key', author)">
<xsl:sort select="title"/>
<table border="0" width="75%">
<tr>
<th width="10%" align="right">Title</th>
<td width="90%" align="left"><xsl:value-of select="title" /></td>
</tr>
<tr>
<th width="10%" align="right">Category</th>
<td width="90%" align="left"><xsl:value-of select="category" /></td>
</tr>
<tr>
<th width="10%" align="right">Copyright</th>
<td width="90%" align="left"><xsl:value-of select="copyright" /></td>
</tr>
<tr>
<th width="10%" align="right">Pages</th>
<td width="90%" align="left"><xsl:value-of select="pages" /></td>
</tr>
<tr>
<th width="10%" align="right" valign="top">Summary</th>
<td width="90%" align="left" valign="top"><xsl:value-of select="description" /></td>
</tr>
</table>
<hr width="75%" align="left"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>