[jdom-interest] Namespace inheritance after cloning

Alistair Young alistair at smo.uhi.ac.uk
Sun Nov 28 04:26:17 PST 2004

Thanks Tatu and Jason,
I see what you're saying about elements in different documents having no
connection. I've been thinking too much in OOP!
Although I'm adding <next> to <root>, as far as JDOM is concerned, it
could be in any namespace, so if it doesn't have one, it bungs it in the
empty one.
I thought there wasn't a "default" namespace in XML. xmlns="" (no
namespace) is different from "default" namespace.
I expected JDOM to allow <next> to inherit it's new parent's namespace if
it didn't explicity define one. Wrong mental model for me :)
I don't suppose it's really an issue for most but I was also thinking of
bandwidth. If I have to explicitly define namespaces for each element,
that comes from a different Document, then the finished Document will have
tons of namespace "noise" in it. I'll think about that though.
As for matching namespace in <next> being replaced by xmlns="", I'll send
some code.
thanks for your help,

Alistair Young
Senior Software Engineer
UHI at Sabhal Mòr Ostaig
Isle of Skye

> Alistair Young wrote:
>> I have a strange problem. I've read the archives and the FAQ and
>> understand the non inheritance of prefix:local style namespaces.
>> However,
>> when I do:
>> Document root =
>> <root xmlns="http://test.ns">
>> </root>
>> Document next =
>> <next>some text</next>
>> root.getRootElement().addContent((Content)next.getRootElement().clone());
>> I get:
>> <root xmlns="http://test.ns">
>>   <next xmlns="">some text</next>
>> </root>
>> and it breaks the XML schema validation! <next> should obviously be in
>> the
>> test.ns namespace. JDOM seems to want to put it in an empty namespace.
> The <next> you created is in no namespace.  When you move it to another
> document, the element doesn't change namespaces.  Namespaces are an
> intrinsic part of each Element and don't depend on placement.  So on
> output JDOM has to make sure that the default namespace on <root>
> doesn't mistakenly apply to <next> so it writes xmlns="" which reassigns
> the default namespace for that context to no namespace.  JDOM's
> correctly serializing the XML data model as you created it.
>> Now, the weird thing is, if I create <next> with the same namespace as
>> <root>, JDOM still replaces it with xmlns="".
> That's not something JDOM would do.  I suspect your code isn't actually
> doing what you describe here.  :)  If you can't figure it out, send in a
> simple code sample showing the issue and we'll see if it's any real bug.
>> If <root> doesn't have a namespace, then the xmlns="" isn't added to
>> <next>.
>> Nowhere in the code is xmlns="" generated when creating the <next>
>> Element.
> Right, because there's no need to redefine the default namespace when
> there's no default namespace in effect.
> -jh-

More information about the jdom-interest mailing list