- From: Andre Cusson <ac@hyperbase.com>
- Date: Mon, 09 Feb 2004 09:01:50 -0500
- To: public-qt-comments@w3.org
Hi, In XSLT1.1, attributes like method and indent could easily be parametrized or calculated.for the xsl:document instruction, allowing one, for example, to render some documents in HTML, others in XML, some with indentation, some not. With XSLT2.0, there seems to be no way to parametrize the output format of a document : One can define multiple corresponding xsl:output instructions, each with a different specific combination of output format attributes; then one can define an xsl:result-document instruction and assign the corresponding xsl:output format name to the xsl:result-document format attribute, but the format attribute is a litteral QName and cannot be assigned, calculated, or parametrized, even with cast to xs:QName. The only remaining alternative is to duplicate the xsl:result-document instruction block (and an xsl:output instruction) for every possible xsl:output attribute value combination and to xsl:choose between them, based on the specific values and their combination. I find this inelegant, clumsy, redundant and difficult to maintain. Why can't result-document have its own output attributes ? If not, why can't the xsl:result-document format attribute be assigned a value other than a litteral QName ? Serializing output documents is a fundamental operation in XSLT and it should be parametrizable. Why separate the output format attribute from the only instruction that uses them ? Why force a litteral QName to join them later ? Thank you. Andre Here is some sample code of what it may look like in XSLT2.0 if you could assign to the format attribute. Now, this does not work. <xsl:output name="xmlyes" method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="yes" media-type="text/html"/> <xsl:output name="xmlno" method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="no" media-type="text/html"/> <xsl:output name="htmlyes" method="html" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="yes" media-type="text/html"/> <xsl:output name="htmlno" method="html" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="no" media-type="text/html"/> ... <xsl:template name="persist-file"> ... <xsl:result-document href="filename" format="{xs:QName(concat(@method, @indent))}"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> or even <xsl:result-document href="filename"> <xsl:attribute name="format"><xsl:value-of select="xs:QName(concat(@method, @indent))"/></xsl:attribute> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> ... </xsl:template> Here is a sample of what works today, if we only have four attribute value combinations : <xsl:output name="xmlyes" method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="yes" media-type="text/html"/> <xsl:output name="xmlno" method="xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="no" media-type="text/html"/> <xsl:output name="htmlyes" method="html" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="yes" media-type="text/html"/> <xsl:output name="htmlno" method="html" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" indent="no" media-type="text/html"/> ... <xsl:template name="persist-file"> ... <xsl:choose> <xsl:when test="@indent = 'yes' "> <xsl:choose> <xsl:when test="@method = 'xml' "> <xsl:result-document href="filename" format="xmlyes"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> </xsl:when> <xsl:when test="@method = 'html' "> <xsl:result-document href="filename" format="htmlyes"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> </xsl:when> </xsl:choose> <xsl:when> <xsl:when test="@indent = 'no' "> <xsl:choose> <xsl:when test="@method = 'xml' "> <xsl:result-document href="filename" format="xmlno"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> </xsl:when> <xsl:when test="@method = 'html' "> <xsl:result-document href="filename" format="xmlno"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> </xsl:when> </xsl:choose> <xsl:when> </xsl:choose> ... </xsl:template> Finally, in XSLT1.1, this is all that is required (whatever the number of attribute value combinations) isn't this much nicer ? <xsl:template name="persist-file"> ... <xsl:document href="filename" method="@method" indent="@indent" version="@version" media-type="@media-type" encoding="@encoding" omit-xml-declaration="@omit-xml-declaration"> <xsl:apply-templates mode="buildpage" select="."/> </xsl:result-document> ... </xsl:template> What happens, in XSLT2.0, if we need to support more methods and if we also need to vary the version number, the encoding, the omit-xml-declaration, and the media-type ?
Received on Monday, 9 February 2004 09:07:35 UTC