<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