<xsl:template match="composition">
    <h3><xsl:value-of select="title"/></h3>
    <ul>
     <xsl:if test="date">
       <li><xsl:value-of select="date"/></li>
     </xsl:if>
     <xsl:if test="length">
       <li><xsl:value-of select="length"/></li>
     </xsl:if>
     <xsl:if test="instruments">
       <li><xsl:value-of select="instruments"/></li>
     </xsl:if>
     <xsl:if test="publisher">
       <li><xsl:value-of select="publisher"/></li>
     </xsl:if>    
    </ul>
    <p><xsl:apply-templates select="description"/></p>    
    
  </xsl:template>
Non-empty node sets are true. Empty node sets are false.
Zero length strings are false. Other strings are true.
There are all the <, >, =, !=, 
<= and >= operators you expect