- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 10 Nov 2009 01:52:13 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=8253 Summary: Allow xsl:variable before xsl:param Product: XPath / XQuery / XSLT Version: Recommendation Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: XSLT 2.0 AssignedTo: mike@saxonica.com ReportedBy: gbeauch1@jhu.edu QAContact: public-qt-comments@w3.org Hello. I've been using XSLT for a while and I recently ran into a small issue. Specifically, the recommendation forbids intermixing of xsl:variable and xsl:param, which would be useful for default parameter values. This seems to me to be unnecessarily restrictive. The XSLT 2.0 recommendation defines xsl:template as follows: <xsl:template match? = pattern name? = qname priority? = number mode? = tokens as? = sequence-type> <!-- Content: (xsl:param*, sequence-constructor) --> </xsl:template> <xsl:param> elements can be assigned default values using the "select" attribute or child content, and the default value can be defined in terms of the value of other parameters. This is useful, as it allows for dynamic defaults. However, there have been times where I would like to reuse a complex XPath expression in the default values of several parameters. For example, I would like to be able to rewrite this: <xsl:template name="blah"> <xsl:param name="param0"/> <xsl:param name="param1" select="$param0/a/long[@expr][1]" /> <xsl:param name="param2" select="$param0/a/long[@expr][2]" /> </xsl:template> as this: <xsl:template name="blah"> <xsl:param name="param0" /> <xsl:variable name="tempVar" select="$param0/a/long[@expr]" /> <xsl:param name="param1" select="$tempVar[1]" /> <xsl:param name="param2" select="$tempVar[2]" /> </xsl:template> Because the content of xsl:template is: (xsl:param*, sequence-constructor) ...I am not allowed to put an xsl:variable before an xsl:param. Is there any reason why this should be the case? As a simple workaround, I can just change the <xsl:variable> to <xsl:param> and it works exactly as expected, except that now $tempVar is exposed as a template parameter when it was really supposed to be for internal template use only. Is there any chance that this could be relaxed in the next version of XSLT and the xsl:template content changed to: ((xsl:variable | xsl:param)*, sequence-constructor) ...? Likewise for xsl:function if it is ever decided to allow for default parameter values there. -- Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug.
Received on Tuesday, 10 November 2009 01:52:25 UTC