Specialist name() treatment of XHTML elements
DomUtils.nameoOfNode() treats elements in the namespace
http://www.w3.org/1999/xhtml as a special case - returning a
QName with a blank (@""@) URI. This of course has the advantage that within normal SaxonJS operation XPath expressions automatically apply to either HTML or XHTML elements in the document.
There are however some consequences of this:
Using a namespace prefix bound to
http://www.w3.org/1999/xhtmlwithin an XPath expression doesn't match elements within that namespace, as their
name()is returned in the "" uri namespace, but this is checked against @http://www.w3.org/1999/xhtml@.
xpath-default-namespace="http://www.w3.org/1999/xhtml"has similar effect - no elements in that namespace are now retrieved from unprefixed names in an XPath expression
In cases where the XPath expression is dynamic, such as in
xsl:evaluate or in the forthcoming XPath API, this becomes more complicated as it is still not possible to select XHTML elements via a bound prefix.
#1 Updated by Michael Kay about 3 years ago
I think this is by design, and I'm not sure what you are suggesting we should do differently. Essentially we've made a decision that in our XDM representation of the HTML DOM, HTML elements should be treated as no-namespace elements. We could have chosen to treat them as being in the XHTML namespace, but that would have made most queries more difficult. I don't think other solutions such as matching them in either namespace would help.
#2 Updated by John Lumley about 3 years ago
- Status changed from New to Resolved
Understood..... and this should only apply to HTML DOM traversal, not XML. Perhaps worth putting a note in the documentation (http://www.saxonica.com/saxon-js/documentation/index.html#!development/source-documents - first bullet point) that a consequence is that prefixes or xpath-default-namespace bound to XHTML will therefore be inoperative on such documents.
Please register to edit this issue