The first version of DOM, sometimes called DOM Level 0, wasn't an official specification but merely the object model that Netscape Navigator 3 and Internet Explorer 3 browsers implemented. (These were actually two different object models only marginally compatible with each other.)
DOM Level 2 cleaned up the DOM1 interfaces. The big change was namespace support in the Element and Attr interfaces. In addition, DOM2 added a number of supplementary interfaces for events, traversal, ranges, views, and stylesheets. I'll address these in upcoming chapters. In 2002, all significant XML parsers that support DOM support DOM2. There's not a lot of reason to worry about the difference between DOM1 and DOM2. From this point forward, I'm just going to teach DOM2.
DOM Level 3 is visible not far up the road. Parts of it are just beginning to be supported by bleeding-edge parsers, most especially Xerces 2. In the core, DOM3 just adds a few missing pieces needed to allow DOM to fully support all XML Information Set (Infoset) properties. This includes the original encoding and base URI of the document. However, DOM3 will also provide some crucial functionality missing from DOM2. In particular, DOM2 doesn't provide a parser-independent means to create a new Document object, either by parsing a file or by building one from scratch in memory. DOM3 will provide standard ways of doing both. DOM3 will also add a lot more support for DTDs and schemas. But despite all its new features and functionality, DOM3 will not replace DOM2. Everything that works today in DOM2 will continue to work the same way in DOM3. DOM3 extends the DOM into new territory, but it doesn't change what has gone before it.