RE: parametrized result-document

Thanks for the comment, Andre. The WG will discuss this. I personally
sympathize with the requirement; I think the simplest solution might be
to make the format attribute into an AVT. I don't actually recall why we
removed the individual serialization parameters from the
xsl:result-document element but there was probably a good reason.

Michael Kay 

> -----Original Message-----
> From: public-qt-comments-request@w3.org 
> [mailto:public-qt-comments-request@w3.org] On Behalf Of Andre Cusson
> Sent: 09 February 2004 14:02
> To: public-qt-comments@w3.org
> Subject: parametrized result-document
> 
> 
> 
> 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 11:09:50 UTC