[whatwg] A Quick Greeting and Some Comments

Erik Arvidsson erik at eae.net
Tue Jun 8 01:04:17 PDT 2004

Kurt Cagle wrote:

> 9) Perhaps a continuation of #5. The goal with any such system is to 
> push  declarative rather than imperative solutions whenever possible, 
> and to  push generalized DOM solutions over application specific ones 
> when you  can't. My own estimation of DOM has changed considerably over 
> the years.  At first, I saw it as a transitional technology, but 
> increasingly I'm  coming to see DOM as being a a generalized interface 
> language that  eliminates much of the complexity of OOP framework 
> systems. Again SVG is a  good model for this - rather than creating a 
> complex set of customized  components (a rect object, an oval object, 
> whatever), each with its own  access methods and procedures, you create 
> a generalized DOM for working  with the object in an abstract fashion, 
> setting the position by changing  the value of an attribute, adding or 
> removing objects into the model  through straightforward DOM 
> insertions/deletions, and so forth.
> Where's the advantage here? Consider an e-mail system in which you 
> could  effectively represent everything as an XML object. You wanted to 
> find all  mail written by kurt at kurtcagle.net written after June 1, 2004? 
> You can use  XPath as the universal addressing system into the DOM, 
> making a call such  as
> kurtLetters = 
> incomingMail.selectNodes(".//mail[from='kurt at kurtcagle.net'  and sent 
> gte '2004-06-01']")
> You need to know the schema, but you don't need to know a specific API 
> --  and what's more, you don't need the same API on different systems 
> that  still implement this schema.
> The combination of XPath and DOM replaces a lot of specialty mail 
> systems  with one general one. Moreover, once you move more processes 
> into XML,  this permeates the method invocation system as well. Let's 
> say you wanted  to forward each of these emails to a new address  
> (myBackupAddress at kurtcagle.net). You can do so as follows:
> for (kurtLetter in kurtLetters){
>     newLetter=kurtLetter.cloneNode(true);
>     forwardNode=newLetter.document.createElement("forward");
>     forwardNode.text='myBackupAddress at kurtcagle.net';
>     newLetter.appendChild(forwardNode);
>     outgoingMail.appendChild(newLetter);
>     }
> xmlhttp.open("POST","http://www.mailServer.foo");
> xmlhttp.send(outgoingMail);
> while (outgoingMail.childNodes){
>     outgoingMail.removeChild(1);
>     }
> I'm using an e-mail system here only to show the generic nature of that  
> DOM. Yes, it is perhaps not as easy to read as a dedicated API, but its  
> very genericness means that you could create this system universally.  
> Simplicity and universality should both be bywords when dealing with 
> the  web.
> Okay, I've probably gone on longer than I should (and will probably be  
> permanently banned from this mailing list as a consequence) but I just  
> wanted to stress that a back to basics movement is fine so long as 
> people  understand that such basics should be used as a guideline, not 
> a  regressive step. Anyway, I'm looking forward to the discussions on 
> this  group.

Good post here but you seem to be missing that the XML DTD/Schema is the 
API in these cases. For SVG you need to know the attributes of the 
elements whereas in an OO API you need to know the properties of the 
classes. I don't see what the difference is in the following 3 cases:

<svg:circle x="10cm" y="10cm"/>

var circle = document.createElementNS( SVG_NS, "circle" );
circle.setAttribute( "x", "10cm" );
circle.setAttribute( "y", "10cm" );

var circle = new svg.Circle;
circle.x = "10cm";
// or using some JS2 like syntax for the unit
circle.y = 10cm;


More information about the whatwg mailing list