Michael Ludwig wrote:
Adrian Herscu schrieb:
Michael Ludwig wrote:
Hmmm... It appears that the parser completely ignores all 'xmlns'
attributes. The interesting thing is that it reads attributes from
other non-null namespaces.
The xmlns may look like an attribute, but it really isn't. It's a
namespace declaration, which happens to use attribute syntax.
http://www.w3.org/TR/xml-names/#ns-decl
[Definition: A namespace (or more precisely, a namespace binding) is
declared using a family of reserved attributes. Such an attribute's
name must either be xmlns or begin xmlns:. ...]
Hence a namespace declaration is an attribute with special meaning,
but still just an attribute.
Well, I'd say, both are right, depending on which view you take :-)
But on this list the view should probably be Xalan, hence XSLT and the
XPath Data Model. A namespace declaration attribute isn't an attribute
in XDM, because it's not on the attribute axis. The fact that namespace
declaration serialization happens to take attribute form doesn't matter.
That's why it doesn't show up among the attributes, neither in DOM
nor in XDM (XPath Data Model).
Seems like XDM is related to XPath 2.0.
The data model in XPath 1.0 is described at
http://www.w3.org/TR/xpath#data-model
According to http://www.w3.org/TR/xpath#namespace-nodes
This means that an element will have a namespace node:
* for every attribute on the element whose name starts with xmlns:;
* for every attribute on an ancestor element whose name starts
xmlns: unless the element itself or a nearer ancestor redeclares the prefix;
* for an xmlns attribute, if the element or some ancestor has an
xmlns attribute, and the value of the xmlns attribute for the nearest
such element is non-empty
They are called "attributes"!
Also in DOM2 Core there is nothing that suggests that "namespace
attributes" are not just regular attributes.
The Xerces DOM parser recognizes xmlns: prefixed attributes as
attributes. The problem was with the DTM parser used by Xalan.
Here's a small, standalone, and off-topic script in PHP using LibXML2,
where the attributes don't show up. But you're right, using Xerces they
do show up. So I guess DOM (which level?) requires them to show up. Does
anyone know whether and, if so, where the correct behaviour is
specified?
Michael Ludwig
m...@colinux:~/Werkstatt/php > expand -t2 ns-attr.php
<?php
$docstr = '<x:Urmel xmlns="urn:x-U" xmlns:x="urn:x-X" y="3" z="4"/>';
$dom = new DOMDocument;
$dom->loadXML( $docstr);
$elm = $dom->documentElement;
if ( $elm->hasAttributes() ) {
$attlist = $elm->attributes; # DOMNamedNodeMap
for ( $i = 0; $node = $attlist->item($i); $i++ ) {
echo $node->name, "\n";
}
}
m...@colinux:~/Werkstatt/php > php ns-attr.php
y
z