<xsl:template match="composition">
    <h3><xsl:number value="position()"/>.
      <a name="{generate-id()}">
        <xsl:value-of select="title"/>
      </a>
    </h3>
    <ul>
     <xsl:if test="string(date)">
       <!--not Y10K safe! -->
       <li><xsl:value-of select="substring(date,2,4)"/></li>
     </xsl:if>
     <xsl:if test="string(length)">
       <li><xsl:value-of select="length"/></li>
     </xsl:if>
     <xsl:if test="string(instruments)">
       <li><xsl:value-of select="instruments"/></li>
     </xsl:if>
     <xsl:if test="string(publisher)">
       <li><xsl:value-of select="publisher"/></li>
     </xsl:if>    
    </ul>
    <p><xsl:apply-templates select="description"/></p>    
    
  </xsl:template>
substring(string, offset, length)
1 is the first character
length is optional
node sets are automatically converted to their values