RE: [xsl] NCName, QName and colons

Subject: RE: [xsl] NCName, QName and colons
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 22 Feb 2010 13:15:04 -0000
> Michael Kay wrote:
> > "XML documents operated on by XPath must conform to the XML 
> Namespaces 
> > Recommendation [XML Names]."
> >   
> Is this rule binding on an XSLT 2 processor as well (by 
> virtue of its association with XPath 2)?

I was quoting from XPath 1.0; the rule is binding on an XSLT 1.0 processor
by virtue of section 3 of XSLT 1.0 which says "The data model used by XSLT
is the same as that used by XPath with the additions described in this
section."

> 
> Source document:
> 
> <:/>
> 
> Stylesheet:
> 
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
> version="2.0">
> 
>     <xsl:output method="xml" omit-xml-declaration="yes"/>
> 
>     <xsl:template match="node()|@*">
>         <xsl:copy>
>             <xsl:apply-templates select="node()|@*"/>
>         </xsl:copy>
>     </xsl:template>
> 
> </xsl:stylesheet>
> 
> Output:
> 
> <:/>

It seems the XML parser built in to JDK 1.6 isn't reporting an error for
this source document. Really, no-one should be using this parser - it's
thoroughly buggy. (I keep saying that, but I keep finding that despite my
best intentions, I *do* use it, because it's so convenient.) The "real"
Xerces from Apache throws this document out with an error, albeit
not-all-that-helpful:

Error on line 1 column 2 of test.xml:
  SXXP0003: Error reported by XML parser: Element type "null" must be
followed by either
  attribute specifications, ">" or "/>".

> 
> 
> The error messages that I posted when initiating this thread 
> a few weeks ago gave me a forensic clue that the above might 
> work (i.e. without an error occurring).
> 
> Cheers
> Justin Johansson
> 
> 
> <original message>
> This seems rather odd.
> 
> Running an XSLT identity transform over the following source 
> document with Saxon 9b produces the error underneath:
> 
> <?xml version="1.0" encoding="UTF-8" ?>
> 
> <:a:apple xmlns:a="foo">
>    <banana/>
> </:a:apple>
> 
> Error on line 3 column 25 of foo.xml:
>  SXXP0003: Error reported by XML parser: The prefix ":a" for 
> element ":a:apple" is not bound.TransformerException: 
> net.sf.saxon.trans.XPathException: 
> org.xml.sax.SAXParseException: The prefix ":a" for element 
> ":a:apple" is not bound.
> 
> Obviously the source document is not valid XML but the error 
> message is confusing.

Direct your complaints to the vendor of the XML parser you are using!

Apache Xerces again reports

 "Element type "null" must be followed by either
  attribute specifications, ">" or "/>" 

for this one. In this case the Sun parser's error message is probably
better, though neither is wonderful.

Regards,

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

Current Thread