- From: Kay, Michael <Michael.Kay@softwareag.com>
- Date: Mon, 16 Sep 2002 16:07:14 +0200
- To: "'Norman Walsh'" <Norman.Walsh@Sun.COM>, spec-prod@w3.org
Trying to convert the XSLT WD to the new xmlspec.xsl. (1) I get the error message: no template matches edtext. This simply seems to be a missing template rule? Perhaps the template rule should conditionally expand or suppress the edtext depending on a stylesheet parameter. (2) I get a few dozen messages of the form: Unsupported specref to [initiating] (Contact stylesheet maintainer). These are caused by the fact that my "specref" element is in a different XML document from the element that's the target of the reference. I obviously need to do some customizing of the stylesheet here. I suggest splitting the template rule for match="specref" into two, a template rule with match="specref" that calls a named template with a parameter, as shown below: (in the named template, all calls on key() are replaced by use of $target, otherwise the code is unchanged): <!-- specref: reference to another part of the current specification --> <xsl:template match="specref"> <xsl:variable name="target" select="key('ids', @ref)[1]"/> <xsl:call-template name="output-specref"> <xsl:with param name="target" select="key('ids', @ref)[1]"/> </xsl:call-template> </xsl:template> <!-- output a cross-reference to the element supplied in the $target parameter --> <xsl:template name="output-specref"> <xsl:param name="target"/> <xsl:if test="count($target) != 1"> <xsl:message> <xsl:text>Bad call to template output-specref: target contains </xsl:text> <xsl:value-of select="count($target)"/> <xsl:text> nodes</xsl:text> </xsl:message> </xsl:if> <xsl:choose> <xsl:when test="local-name($target)='issue'"> <xsl:text>[</xsl:text> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <b> <xsl:text>Issue </xsl:text> <xsl:apply-templates select="$target" mode="number"/> <xsl:text>: </xsl:text> <xsl:for-each select="$target/head"> <xsl:apply-templates/> </xsl:for-each> </b> </a> <xsl:text>]</xsl:text> </xsl:when> <xsl:when test="starts-with(local-name($target), 'div')"> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <b> <xsl:apply-templates select="$target" mode="divnum"/> <xsl:apply-templates select="$target/head" mode="text"/> </b> </a> </xsl:when> <xsl:when test="starts-with(local-name($target), 'inform-div')"> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <b> <xsl:apply-templates select="$target" mode="divnum"/> <xsl:apply-templates select="$target/head" mode="text"/> </b> </a> </xsl:when> <xsl:when test="local-name($target) = 'vcnote'"> <b> <xsl:text>[VC: </xsl:text> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <xsl:apply-templates select="$target/head" mode="text"/> </a> <xsl:text>]</xsl:text> </b> </xsl:when> <xsl:when test="local-name($target) = 'prod'"> <b> <xsl:text>[PROD: </xsl:text> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <xsl:apply-templates select="$target" mode="number-simple"/> </a> <xsl:text>]</xsl:text> </b> </xsl:when> <xsl:when test="local-name($target) = 'label'"> <b> <xsl:text>[</xsl:text> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <xsl:value-of select="$target"/> </a> <xsl:text>]</xsl:text> </b> </xsl:when> <xsl:otherwise> <xsl:message> <xsl:text>Unsupported specref to </xsl:text> <xsl:value-of select="local-name($target)"/> <xsl:text> [</xsl:text> <xsl:value-of select="@ref"/> <xsl:text>] </xsl:text> <xsl:text> (Contact stylesheet maintainer).</xsl:text> </xsl:message> <b> <a> <xsl:attribute name="href"> <xsl:call-template name="href.target"> <xsl:with-param name="target" select="$target"/> </xsl:call-template> </xsl:attribute> <xsl:text>???</xsl:text> </a> </b> </xsl:otherwise> </xsl:choose> </xsl:template> I can then override the template rule for match="specref" while being able to reuse the rest of the logic. (3) The message: Unsupported specref to bibl [FANDO] (Contact stylesheet maintainer). was caused by a <specref> element that pointed to a <bibl> entry; it should have been a <bibref>. Since this is my error and not yours, you might like to change the error message! Cheers, Michael Kay
Received on Monday, 16 September 2002 10:07:41 UTC