RE: [xsl] xmlns created literally

Subject: RE: [xsl] xmlns created literally
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 26 Feb 2009 12:34:36 -0000
The stylesheet is an XDM instance. Therefore the XSLT processor does not see
an attribute xmlns="{$x}", it sees a namespace node whose name is "" and
whose string value is "{$x}".

Attribute value templates don't come into it. There is no attribute, so
there can be no AVT. Namespaces are not attributes.

XSLT could have defined a rule that namespace URIs within the stylesheet
must not contain curly braces. But it would be a rather curious rule: it's
for XML to define what's allowed in a namespace URI, not for XSLT.

I think the output that shows the namespace URI percent-encoded is wrong. I
can't see any justification for percent-encoding a namespace URI under any
circumstances.

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: jesper.tverskov@xxxxxxxxx 
> [mailto:jesper.tverskov@xxxxxxxxx] On Behalf Of Jesper Tverskov
> Sent: 26 February 2009 11:17
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] xmlns created literally
> 
> We are allowed to create xmlns or xmlns:* the literal way, 
> but we can apparently not use attribute value template for 
> the namespace. This is probably not that surprising since we 
> cannot create xmlns or xmlns:* with xsl:attribute.
> 
> But it surprices me that we don't get an error message. The 
> following stylesheet is tested with Saxon 9 in Oxygen and 
> with AltovaXML 2009 in
> XMLSpy:
> 
> <xsl:stylesheet version="2.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>     <xsl:output indent="yes"/>
>     <xsl:template name="start" match="/">
>         <xsl:param name="x" select="'asdf'"/>
>         <catalog>
>             <product xmlns="asdf">some data</product>
>             <product xmlns="{$x}">some data</product>
>         </catalog>
>     </xsl:template>
> </xsl:stylesheet>
> 
> We get the following output in Oxygen:
> 
> <catalog>
>    <product xmlns="asdf">some data</product>
>    <product xmlns="{$x}">some data</product> </catalog>
> 
> And the following output in XMLSpy:
> 
> <catalog>
> <product xmlns="asdf">some data</product> <product 
> xmlns="%7B$x%7D">some data</product> </catalog>
> 
> The one even more strange than the other! Should it have been 
> an error message instead? Or should the attribute value template work?
> 
> 
> Cheers,
> Jesper Tverskov
> 
> http://www.xmlkurser.dk
> http://www.xmlplease.com

Current Thread