Mark L. Fussell fussellm at alumni.caltech.edu
Sun Dec 14 12:18:41 GMT 1997

I am a bit confused by the recent statements about the "complexity of 
DOM" and the proposed simpler alternatives for an object model.  The DOM 
model seems as simple and direct as all the proposed alternatives.  I 
could see suggesting changes (I have myself) but it would seem these 
should be relative to the DOM as it is or have some significantly new 
features.  The core DOM 'content' information classes [with the read part 
of their interfaces[*1] ] are:

    public interface Node {
      public int /*NodeType*/ getNodeType();
      public Node     getParentNode();
      public NodeList getChildren();

    public interface Element extends Node {
      public String   getTagName();
      public NodeList getAttributes();

    public interface Attribute extends Node {
      public String   getName();
      public NodeList getValue();
      public boolean  isSpecified();

    public interface Text extends Node {
      public String  getData();
      public boolean isIgnorableWhitespace();

I can't see how you could get much simpler in the number of classes and 
the concept for each class[*2].  

So if we have the Grove model and the DOM, of what value is another 
similar, less-standard standard object model?  


I can see a different problem though: it may be that no model will be 
useful to standardize for the actual interfaces.  Each application will 
want slightly different object models that have very small changes that 
are very significant to it.  Two examples I have in the above are both 
from the same type of problem: restricted Typing.  In the above 
interfaces I would much rather have NodeList->List [the JDK 1.2 interface 
for a general indexed collection] because I have many more 
implementations and functionality to use for manipulating lists than I do 
for NodeList [I could wrapper and delegate all the functionality but that 
is much more effort and less maintainable for no real benefit].  Likewise 
I would rather have Attribute's value be an Object or a String than a 
NodeList.  These minor changes make the DOM interfaces themselves 
impossible to use: I can have interfaces just like them but they will 
have to be my own version.  

   I suspect this may always be the case.  I have helped build many large 
and small information system models and none of them committed to using 
exactly somebody else's code for the DomainModel[*3].  Having control 
over the model of the information your application works with is crucial 
to both good design and good/maintainable implementations.  This isn't to 
say you can't use someone else's designs: that works excellently (e.g. 
Design Patterns and Analysis Patterns).  You can even start with someone 
else's code but you will almost certainly need to modify that model ever 
so slightly (or majorly) at some point.

    An approach that works better than defining an exact ObjectModel 
(i.e. exact Types) to implement is to think from outside the Model: to 
the client and supplier points of views.  From the outside people only 
care about limited interfaces and protocols that a DomainModel must 
support to work with them.  This is how Swing's TreeModel works (as long 
as you support the TreeModel interface you are worthy) and other 'M's in 
the MVC pattern.  This is also how Java Beans work, but with a runtime 
signature-binding approach.  In all these cases, the client/supplier 
requirements come first and you can decide if you want to work with them 
by suitably designing and implementing your DomainModel.

So I suspect all of the following are true: 
   (1) The DOM interfaces will be exactly suitable to some 
   (2) There are many applications that the DOM interfaces 
       (as exact code) will not be suitable 
   (3) The DOM model is a good design model and template for 
       a good number of these applications
   (4) It would be good to suggest possible modifications to the 
       DOM to either make it better or as possible alternatives 
       for people in situation (2)
   (5) There are many good reasons to start defining the possible 
       clients and services that (Document) DomainModels may want 
       to use. [*4]
   (6) There is no reason to have a similar model to the DOM 
       and make it a semi-standard
   (7) Frequently (2) will turn to using (3), (4), and (5) to make a 
       suitable model, so these will be very valuable.

So it would seem good to focus on all of (1)-(5) in the above but not on 
(6) except as it helps to understand the others[*5].

mark.fussell at chimu.com

[1] I made a couple minor stylistic/convention changes (e.g 'is' for 
booleans) to these interfaces.

[2] I coded a skeleton implementation (able to construct, inspect, and 
print objects) of the level-1 DOM model (i.e. including the DocumentType 
classes) in a part of an evening and offered to provide it as source in a 
previous email.

[3] Except, for a while, when the model can be extended without changing 
the source (a Smalltalk/ENVY feature).

[4] As an example of (5) in DOM, the DOM interfaces are generally Java 
Bean compatible.  This is very useful in Java: the MONDO DOM 
ObjectBuilder had exactly one line of code to specify how to take a 
recipe for a (for example) ModelGroup and build a ModelGroup object:

[5] In the above I am not referring to an event oriented API, but will 
respond to that in a different email.

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)

More information about the Xml-dev mailing list