[jdom-interest] Namespace inheritance after cloning

Per Norrman per.norrman at austers.se
Sun Nov 28 14:27:01 PST 2004

I've been harbouring (spelling?) an idea where there were two distinct
modes of Element/Attribute creation. One namespace unaware, in which it would be 
impossible to create Elements in any namespace but NO_NAMESPACE; and one 
namespace aware mode, where it would be impossible to create Elements without
explicitly declaring their namespace. Lot's of headaches would be alleviated.

Not sure how to solve it though, except a Design Rule: When dealing with
namespaces, ALWAYS use the namespace enabled constructors.


Jason Hunter wrote:
> 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-
> _______________________________________________
> To control your jdom-interest membership:
> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com

More information about the jdom-interest mailing list