<xsl:template match="catalog">
    <head>
       <title><xsl:value-of select="category"/></title>      
    </head>
    <body>
       <h1><xsl:value-of select="category"/></h1>      
       <xsl:apply-templates select="composer"/>
       <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>
  
  <xsl:template match="composer">
    <h2><xsl:value-of select="name"/></h2>
    <xsl:apply-templates select="../composition[@composer=current()/@id]"/>
  </xsl:template>
.. selects the parent element
/ selects a child of the context node
Square braces [] include a predicate to winnow down the 
selected nodes
The current() function refers to the matched composer element
 @composer() and @id
take the value of the composer attribute and the id 
attribute
 The = operator compares the to attributes