Lists Home |
Date Index |
On Mon, 2002-01-07 at 22:41, Elliotte Rusty Harold wrote:
> Correct, DOM does not do that. When creating an element in the
> http://www.foo.com/ namespace, DOM2 does not add an
> xmlns="http://www.foo.com/" in the right place to make this work.
> Section 1.1.8 states:...
Having just built an object model (MOE - http://moe.sourceforge.net)
that supports namespace-aware names, I'm happy to testify that this is
not a simple problem, nor does it have a single clear answer. The
variety of options in SAX2 for handling namespaces (or not) is also
testimony to the difficulty of making namespace declarations work
> In other words, what should happen is that any code that moves DOM to
> some other model such as SAX, XPath, or a text file should insert the
> necessary namespace declarations. What actually does happen though,
> is that such code often neglects to insert them, thus requiring users
> to add the attributes in DOM manually. This is a big honking mess.
The only sane approach I've found is to use a visitor class to traverse
the document and maintain a list of namespace declarations that have
been made, so that when a new declaration is needed, it appears. I
don't think expecting the object model itself to handle this is
plausible or workable, especially given issues like fragment
(You can have the objects themselves refer to the visitor class for
toString() and the like, but it's still a tricky process.)
Alternate approaches include things like having elements declare their
namespaces and those of their attributes every time. It does produce
easily-decomposed XML documents, but it's not especially pretty as a
> It gets even nastier when you consider the possibility of namespaces
> being in scope on things other than element and attribute names,
> since DOM really can't keep track of these at all.
Yes, though I've argued long and hard that those QName usages are a
wretched idea in the first place.
Ring around the contents, a pocket full of brackets
Errors, errors, all fall down.