[jdom-interest] API Inertia

Elliotte Rusty Harold elharo at metalab.unc.edu
Mon Apr 30 11:01:23 PDT 2001

At 11:22 AM -0400 4/30/01, Rosen, Alex wrote:

>I haven't tried it in either one, but... why would a Node interface help?
>Assuming you actually want to do something useful with each visited node, why
>is getting a Node any better than getting an Object? It seems clear that the
>Node interface would have few (if any!) methods on it, so you'll probably need
>to cast anyway.

I think it would help because the Node interface would have 
hasChildren() and getChildren() methods. These would be applicable to 
all nodes. Sometimes hasChildren() would return true, sometimes it 
would return false. Sometimes getChildren() would return a list that 
has members. Sometimes it would return an empty list. This lets you 
walk the tree without caring excessively about the type of each node 
in the tree or without a lot of casting.

Frankly I'm amazed that Jason seems worried about typing an 
occasional few lines of extra code in the rare case that he needs to 
move an element, as evidenced in the detach() thread, while being 
completely unfazed by the huge number of lines doing nothing but 
casting and type checking that permeate the JDOM code base today. 
Both positions are reasonable and well argued by Jason. I just don't 
see how he can fit both of them into the same brain at the same time. 

>Also - I would imagine that a lot of tree traversing code only cares about
>Elements, no? Node would be irrelevent here. And, if you didn't just 
>care about
>Elements, which things would you care about? Would you want to visit Entities?
>Attributes? CDATAs? Strings? It's not clear what should be a Node and what

Everything's a node. By default you visit everything except 
attributes (which aren't children) but we can put filters in the 
utilities package.

The one exception I'd be willing to make (WARNING: BIG YUCKY CAN OF 
WORMS ABOUT TO BE OPENED) are entities. In fact I'd like to throw 
entities out completely. Here's my logic:

1. Entities are part of the physical structure of an XML document, 
not the logical structure.Anytime you start mixing and matching the 
logical and physical structures of an XML document the API gets way 

2. The 90/10 split is on the logical side; not the physical side. 
Proof of point: entities are totally broken now and almost nobody's 
noticed or complained!

I think we should resolve all entities at build time, and then forget 
about them. This requires the use of a validating parser, which is 
not a big problem. It does not require us to validate, merely to read 
the external DTD subset, which is not a big deal.

| Elliotte Rusty Harold | elharo at metalab.unc.edu | Writer/Programmer |
|                  The XML Bible (IDG Books, 1999)                   |
|              http://metalab.unc.edu/xml/books/bible/               |
|   http://www.amazon.com/exec/obidos/ISBN=0764532367/cafeaulaitA/   |
|  Read Cafe au Lait for Java News:  http://metalab.unc.edu/javafaq/ |
|  Read Cafe con Leche for XML News: http://metalab.unc.edu/xml/     |

More information about the jdom-interest mailing list