<xsl:template match="catalog">
<head>
<title><xsl:value-of select="title"/></title>
</head>
<body>
<h1><xsl:value-of select="title"/></h1>
<ul>
<xsl:for-each select="composition/name">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
<hr/>
<xsl:apply-templates select="composition">
<xsl:sort select="composer/last_name"/>
<xsl:sort select="composer/first_name"/>
<xsl:sort select="composer/middle_name"/>
<xsl:sort select="name"/>
</xsl:apply-templates>
<hr/>
Copyright <xsl:value-of select="copyright"/><br/>
Last Modified: <xsl:value-of select="last_updated"/><br/>
<xsl:apply-templates select="maintainer"/>
</body>
</xsl:template>
. selects the context node
xsl:for-each iterates through the selected nodes,
setting each one to the current node in turn but does not
apply templates to that node.