I found something interesting. Doesn't look like w3c agrees with me about nodes inheriting namespace changes.
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/namespaces-algorithms.html#conflicting --Evan Evan Kirkconnell wrote: > I complete disagree and believe that there a big misinterpretations > here leading to poor implementation and massive confusion. > > The misinterpretation that I've seen stated in many places and by > Richard Eckart earlier in this thread is: > > XPath statement operates on the default namespace (xmlns="") > > > From the XML 1.0 spec, I find this statement to be completely wrong. > There is no such thing as "The default namespace" in a global sense. > Default namespace as a term, is clearly a matter of inheritance, and I > don't see how anyone could argue otherwise after reading the bit about > default namespace from the XML 1.0 spec.( > http://www.w3.org/TR/REC-xml-names/#defaulting ) The simplest support > of my interpretation is the statement in the spec: "The attribute > value in a default namespace declaration /MAY/ be empty. This has the > same effect, within the scope of the declaration, of there being no > default namespace." > > I believe the implementation error is that elements that are using a > default namespace are being assigned a namespace rather than being > setup to inherit them. From the spec, the example for setting the > empty namespace as the default namespace is: > > <?xml version='1.0'?> > <Beers> > <!-- the default namespace inside tables is that of HTML --> > <table xmlns='http://www.w3.org/1999/xhtml'> > <th><td>Name</td><td>Origin</td><td>Description</td></th> > <tr> <!-- no default namespace inside table cells --> > <td><brandName xmlns="">Huntsman</brandName></td> > <td><origin xmlns="">Bath, UK</origin></td> > <td> > <details xmlns=""><class>Bitter</class><hop>Fuggles</hop> > <pro>Wonderful hop, light alcohol, good summer beer</pro> > <con>Fragile; excessive variance pub to pub</con> > </details> > </td> > </tr> > </table> > </Beers> > > So, logically <details xmlns="" is applying the default namespace for > its children. Therefore, its children should be dependent on it > supplying this default namespace. If it were to no longer supply this > default namespace, then the children would logically default to the > xhtml namespace. Also, if you were to take this XML document and > change <details xmlns=""> to <details xmlns="urn:blah.com:blah"> and > reparse the document then of course the children are now in the new > default namespace. I am of the opinion that if you were to > programatically change the namespace on this nodes, that it's > completely logical that you'd have the same end result and that the > descendant nodes would inherit the new namespace. > > I also believe that the Jaxen has made the same misinterpretation > which led to the implementation assuming the empty namespace when no > namespace is specified. As much as I wish the XPath docs stated what > the default namespace for XPath processing should be, I haven't found > anything. I still believe, however, that there is more merit and > logic in using the context node's namespace rather than the empty > namespace, and that there is no specification backing for using the > empty namespace as the default namespace. > > In regard to me disagreeing with Edwin's statement that attributes > must be specifically declared in a namespace. I'd quote the XML spec > in saying, "Default namespace declarations do not apply directly to > attribute names; the interpretation of unprefixed attributes is > determined by the element on which they appear." My interpretation of > this is that default namespaces don't apply DIRECTLY to, but they can > apply indirectly to attributes. The attribute has the same namespace > as the element unless specified otherwise, and there's no reason that > the element couldn't be using the default namespace in scope. In > regard to the quote, I believe that "The namespace name for an > unprefixed attribute name always has no value." does not imply that > the attribute has no namespace, but that it has no "namespace name" > which I believe must have different meaning. > > --Evan > > > > Edwin Dankert wrote: >> Attributes always need to be specifically declared in a namespace. >> >> "If there is a default namespace declaration in scope, the expanded >> name corresponding to an unprefixed element name has the URI of the >> default namespace as its namespace name. If there is no default >> namespace declaration in scope, the namespace name has no value. The >> namespace name for an unprefixed attribute name always has no value. >> In all cases, the local name is local part (which is of course the >> same as the unprefixed name itself)." >> >> http://www.w3.org/TR/REC-xml-names/#defaulting >> >> Regards, >> Edwin >> > > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ dom4j-user mailing list dom4j-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dom4j-user