<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>

<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7638.1">
<TITLE>RE: [jdom-interest] The default namespace behaviour </TITLE>
</HEAD>
<BODY>
<DIV dir=ltr><FONT face=Arial color=#000000 size=2>&gt; <FONT 
face="Times New Roman">JDOM seems to have no concept of a default namespace 
other than perhaps the</FONT></FONT></DIV>
<DIV dir=ltr><FONT face=Arial color=#000000 size=2><FONT 
face="Times New Roman">&gt; document builder.&nbsp; This seems to very much be 
erroneous.</FONT></FONT></DIV>
<DIV dir=ltr><FONT size=2>Not really. JDOM does have a concept of a default 
namespace. It's a namespace without a prefix. You are correct that default 
namespace inheritance is not directly supported except that in output 
XMLOutputter is smart enough to not define a namespace over and over 
again&nbsp;(for input, the SAX parser handles this detail and JDOM actually has 
no way of knowing where a namespace gets set or how). I think this is 
appropriate given that JDOM is&nbsp;an object model and the namespace is a 
property of each object.</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>&gt; Constructing the first XML example in memory 
with:<BR>&gt; Element easy = new Element("easy", "short");<BR>&gt; Element b = 
new Element("b");<BR>&gt; Element c = new Element("c");<BR>&gt; ...<BR>&gt; 
easy.addContent(b);<BR>&gt; b.addContent(c);<BR>&gt; constructs b and c with no 
namespace which is not as it should be.&nbsp;</FONT></DIV>
<DIV dir=ltr><FONT size=2>But&nbsp;that's what you asked it to do when you 
called new Element("b") and new Element("c"). If you want them to have the 
namespace URI "short", then just use the appropriate contructor. There might be 
an argument to be made that, under certain circumstances, Elements without a 
namespace should inherit the namspace of their parent, I personally think the 
resulting code would be significantly more unreadable.&nbsp;It's obvious what's 
going on when the lines are one after the other (as in your example), but JDOM 
doesn't require that. If those three constructors were in different methods, it 
becomes less clear what namespace you mean which elements to be in. The 
difference is really a single line of code to create the Namespace and a few 
extra characters as the namespace is explicitly passed to each appropriate 
constructor. </FONT><FONT size=2>I would write the (full) code to generate the 
first example as:</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Namespace 
nsShort = 
Namespace.getNamespace("short");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Namespace nsWeird = Namespace.getNamespace("e", 
"weird");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Document doc = new 
Document();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element easy = new 
Element("easy", nsShort);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
doc.setRootElement(easy);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element 
b = new Element("b", nsShort);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Element c = new Element("c", 
nsShort);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
easy.addContent(b);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
b.addContent(c);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element d = new Element("d", 
nsShort);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element f = new 
Element("f", nsWeird);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
f.addContent(new Element("g", 
nsShort));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
d.addContent(f);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
easy.addContent(d);</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>In general, I don't really understand what it is 
you're trying to accomplish. From your examples, it would appear that you want 
to move the element with the localName "easy" and namespace URI "short" to the 
namespace URI "ReallyLongNamespace" and move the remaining elements in the 
"short" namespace to no namespace. If so, you could do something 
like:</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator it = 
doc.getDescendants(); it.hasNext();) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object o 

it.next();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (o instanceof Element) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Element el = (Element) 
o;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if ("short".equals(el.getNamespaceURI())) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if ("easy".equals(el.getName())) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
el.setNamespace(Namespace.getNamespace("a", 
"ReallyLongNamespace"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
} else 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
el.setNamespace(Namespace.NO_NAMESPACE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>That doesn't seem like too much code.</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>I strongly disagree with your sense that:</FONT></DIV>
<DIV dir=ltr><FONT 
size=2>a.setNamespace(namespace.getNamespace("ReallyLongNamespace"));</FONT></DIV>
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT size=2>should set the namespace for all child elements that 
use the same default namespace as a. This would be a big leap for JDOM to make. 
Since it's entirely legitimate to have different default namespaces at different 
levels, having JDOM guess which ones you wanted to change would invariably be 
incorrect (in other words, what if I really wanted setNamespace() to just set 
that element's namespace). Writing the getDescendents()-using code above or even 
better, as Mr. Huffman suggested, a custom JDOMFactory would be the best way to 
go about explictingly specifying what transformation you wanted to do.
<DIV dir=ltr><FONT size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr></FONT>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> jdom-interest-bounces@jdom.org on behalf 
of Colin LeMahieu<BR><B>Sent:</B> Tue 6/6/2006 9:59 PM<BR><B>To:</B> 'Bradley S. 
Huffman'<BR><B>Cc:</B> jdom-interest@jdom.org<BR><B>Subject:</B> RE: 
[jdom-interest] The default namespace behaviour <BR></FONT><BR></DIV></DIV>
<DIV>
<P><FONT size=2>I'm thinking more along the lines of, the user types an XML 
file:<BR>&lt;easy 
xmlsn="short"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;b&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;c/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/b&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;d&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;e:f 
xmlns:e="weird"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;g/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/e:f&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/d&gt;<BR>&lt;/easy&gt;<BR><BR>And I'm looking to convert it 
to:<BR>&lt;a:easy 
xmlns:a="ReallyLongNamespace"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;b&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;c/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/b&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;d&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;e:f 
xmlns:e="weird"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;g/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/e:f&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&lt;/d&gt;<BR>&lt;/a&gt;<BR><BR>As I see it right now, with the current JDOM 
model there's no way to easily<BR>just change the namespace of a and affect 
elements b, c, d, and g as it<BR>should.<BR><BR>JDOM seems to have no concept of 
a default namespace other than perhaps the<BR>document builder.&nbsp; This seems 
to very much be erroneous.<BR><BR>Constructing the first XML example in memory 
with:<BR>Element easy = new Element("easy", "short");<BR>Element b = new 
Element("b");<BR>Element c = new 
Element("c");<BR>...<BR>easy.addContent(b);<BR>b.addContent(c);<BR><BR>constructs 
b and c with no namespace which is not as it should be.&nbsp; My 
quote<BR>earlier is from someone claiming that this is the correct behaviour, 
"if you<BR>don't know what namespace an element is in, you don't know what 
element<BR>you're creating"&nbsp; I say it's incorrect, or otherwise tell me a 
way to 
do:<BR><BR>a.setNamespace(namespace.getNamespace("ReallyLongNamespace"));<BR><BR>and 
have it affect b, c, d, and a possible g somewhere down the XML tree<BR>that 
would inherit the default namespace from a.<BR><BR>----------------<BR>Colin 
LeMahieu<BR>Phone: 408-499-5269<BR>Fax: 267-989-4575<BR>Email: 
clemahieu@gmail.com<BR><BR><BR>-----Original Message-----<BR>From: Bradley S. 
Huffman [<A 
href="mailto:hip@cs.okstate.edu">mailto:hip@cs.okstate.edu</A>]<BR>Sent: 
Tuesday, June 06, 2006 13:30<BR>To: Colin LeMahieu<BR>Cc: 
jdom-interest@jdom.org<BR>Subject: Re: [jdom-interest] The default namespace 
behaviour<BR><BR>"Colin LeMahieu" writes:<BR><BR>&gt; Essentially my problem is 
that I have a lot of longhand names and<BR>namespaces<BR>&gt; and a user will 
only pick a subset of them to use in a particular<BR>document.<BR>&gt; I would 
like to allow shorthand names in different namespaces and then<BR>&gt; translate 
them to the longhand forms.&nbsp; The document would then 
be<BR>processed<BR>&gt; further.<BR><BR>How about a custom JDOMFactory that 
overrides the element 
methods.<BR><BR>Brad<BR><BR>_______________________________________________<BR>To 
control your jdom-interest membership:<BR><A 
href="http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com">http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com</A><BR></FONT></P></DIV>

</BODY>
</HTML>