[jdom-interest] Namespace issues, et al.

Malachi de AElfweald malachi at tremerechantry.com
Sun Feb 23 18:38:01 PST 2003

On Sun, 23 Feb 2003 20:43:35 -0500 (EST), bob mcwhirter <bob at werken.com> 

>> Ok, I misunderstood you guys. I thought you were saying that I had to 
>> change all that
>> to <jbase:request jbase:session=""/>. The point I was trying to make is 
>> that it is perfectly valid
>> (though my personal Schema says not to allow it) for <jbase:request 
>> yourname:session=""/>. What I was
>> trying to say about the spec was that <request session=""/> puts 
>> 'session' into the namespace of the 'request'
>> element (as opposed to the 'yourname' namespace above), thus not needing 
>> to explicitely put jbase:session...
> No no no.  That's still a false statement.  The 'session' attribute
> is -NOT-in the namespace of the <request> element, but it is in the
> locality of it.

Ok, so if I do something like:
<objex xmlns="http://www.temporal-wave.com/spec"
		xsi:schemaLocation="http://www.temporal-wave.com/spec jbase.xsd
			http://www.w3.org/1999/xhtml http://infomesh.net/2001/xhtmls/xhtml.xsd">
	<request xhtml:href="http://some.url">
		<tagA href="jxta://blah"/>

The scope of the objex element is the entire thing, with the default 
being "http://www.temporal-wave.com/spec".  In that scope, the prefix 
"xhtml" is also
defined as "http://www.w3.org/1999/xhtml".

The request ang tagA tags are both defined in jbase.xsd... The first href 
tag is defined in the
xhtml.xsd. The second one is defined in the jbase.xsd.....

Is this correct?

>> As far as your question, you can read it, but not create or validate it.
>> If you try to create that document, you get one of two scenarios...
>> 1) every element says xmlns="http://www.temporal-wave.com/spec" (thus, 
>> lots of overhead over the network)
> The outputter/serializer should remove gratuituous ns-decls.  But even it
> doesn't, it's still producing valid/well-formed XML.
>> 2) the top element says that, the next one says xmlns="", and then 
>> everything inside that doesn't show xmlns at all.
> Though, are your inner elements in the empty namespace?  Or did you
> create them in your namespace?

The issue was 2-fold. If I created them with the xmlns in the constructor, 
I was
also setting the xsi:schemaLocation attribute on it again -- thus the first 
The second part of it was that I assumed (since textually it is true) that 
a tag inside another (like tagA above) inherits the namespace of the parent 
This is true in XML, and is true in the textual representation -- but JDOM 
changes the
textual representation to break it... Thus, it can not inherit namespaces 
from the parent
because of the fact xmlns="" is being added without my consent. If that one 
piece was not
added, then it would all inherit correctly.

>> Thus, my original request to quit adding xmlns="", as that disables the 
>> current namespace and sets it to null. Thus,
>> every items inside that is invalid.
> I have a sneaking suspicioun that JDOM is doing exactly the correct 
> thing.

Well, since the textual representation does not originally have the 
xmlns="", JDOM should not
be adding it. I understand why it is (because JDOM forces you to NOT 
inherit namespaces), but it
should not assume I want xmlns="" unless I specifically tell it to. The 
extra bit of code in JDOM
that does this is what breaks it from behaving like many people have 
thought it should.

>> On the validation side... if I try to validate it as done on the JDOM 
>> FAQ (or on the various suggestions from the list),
>> I get a ClassCastException in Xerces. If I use Xerces directly, it 
>> correctly validates.  Read a few emails ago, there was
>> a link to the bug report I submitted to Apache....
> JAXP and Xerces have lots of class-cast exceptions.  Blame sun.
> 	-bob

Although, using JAXP + Xerces validates. Using JDOM with it doesn't.


More information about the jdom-interest mailing list