This is an archived snapshot of W3C's public bugzilla bug tracker, decommissioned in April 2019. Please see the home page for more details.
Consider the following stylesheet <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/" xml:base="http://wonka.com/"> <xsl:variable name="v" as="element()*"> <xsl:copy-of select="doc/ch"/> <xsl:copy-of select="doc/ch/gch"/> <xsl:for-each select="doc/ch"> <xsl:copy> <xsl:copy-of select="@*"/> </xsl:copy> </xsl:for-each> <xsl:for-each select="doc/ch/gch"> <xsl:copy> <xsl:copy-of select="@*"/> </xsl:copy> </xsl:for-each> </xsl:variable> <out> <xsl:value-of select="for $i in $v return base-uri($i)"/> </out> </xsl:template> </xsl:stylesheet> and input document <doc xml:base="http://example.com/foo"><ch xml:base="bar/baz"><gch/></ch></doc> According to the penultimate paragraph of 11.9.1,[1] "The base URI of a node is copied, except in the case of an element node having an xml:base attribute, in which case the base URI of the new node is taken as the value of the xml:base attribute, resolved if it is relative against the base URI of the xsl:copy instruction." The last paragraph of 11.9.2[2] contains the same text, with xsl:copy-of replacing xsl:copy. So I believe that means the output in this case should be: <?xml version="1.0" encoding="UTF-8"?><out>http://wonka.com/bar/baz http:/ /example.com/bar/baz http://wonka.com/bar/baz http://example.com/bar/baz</out> Draft erratum XT.E42 - raised for bug 8219 - changes the text in 11.9.1 to "When a node is copied, its base URI is copied, except when the result of the xsl:copy instruction is an element node having an xml:base attribute, in which case the base URI of the new node is taken as the value of its xml:base attribute, resolved if it is relative against the base URI of the xsl:copy instruction," but that doesn't appear to alter the expected output. Obviously we've been over this text a couple of times now, but did the working group really intend for the base URI of a copied element to have this quirky behaviour, where the base URI is copied only if there is no xml:base attribute in the content of the resultant node? It feels rather odd to me that the base URI of the copied gch element should be determined in such a different way from the base URI of the copied ch element. Either the working group feels the base URI from the input is more important or the base URI from the instruction in the stylesheet is more important. Right now we have a mixed view. I think the specification should either consistently use the base URI of the xsl:copy/xsl:copy-of instruction as the base URI of the new node or consistently use the base URI of the original node, and then resolve any xml:base attribute against that to come up with the ultimate base URI. [1] http://www.w3.org/TR/xslt20/#shallow-copy [2] http://www.w3.org/TR/xslt20/#copy-of
At its teleconference of 21 June 2012, the XSLT WG decided to make no change in response to this. I am closing the bug as WONTFIX.