- From: David Brownell <david-b@pacbell.net>
- Date: Tue, 21 Dec 1999 13:22:42 -0800
- To: "www-dom@w3.org" <www-dom@w3.org>
Here are some random nodes that came up when I was finetuneing my
implementation of the latest L2 (what's there just now is a quick
update to use the latest Java bindings). There were some other
issues that came up, but I don't have notes for them just now.
- The text uses the word "platform" inappropriately. It talks about
behaviors coupled to the "platform" ... but those are really coupled
to the "implementation". As a rule, platforms can support more than
one implementation of DOM.
The point being that a given platform may have dozens of different
implementations of DOM, differing in those respects. DOM is not
part of the platform (e.g. Java, Linux, Win32) and there's no reason
to demand either that it be so, or that the DOM spec be paired with
platform-specific addenda (which then need to be negotiated, at
the usual levels of committee pain).
- For elements and attributes without a namespace, setPrefix should
throw an exception (preferably NO_MODIFICATION_ERR).
- There's still a fundamental bug in the document type creation model.
I still can't see why it'd need to be as unusable as it is.
Consider how an XML parser must use DOMImplementation if it's
going to try to populate a DOM tree using public APIs.
* Start parsing.
* Queue up an ordered list of descriptions any comment and PI
nodes found, without creating DOM nodes yet.
* If a DTD is found:
- Create a DocumentType node, and remember its position
(that is, after comments and PIs seen so far)
- Queue up an ordered list of descriptions any comment and
PI nodes found after the DTD, without creating DOM nodes.
* Read at least the name and namespace of the root element.
* ONLY NOW is there enough information to create a document
object using DOMImplementation.createDocument:
- Create the document using the root element name, its
namespace, and the document type previously created.
- Take that first set of comments and PIs, and insert
it (preserving the original order) before the DTD node.
- Take the second set of comments and PIs, and insert
it (preserving the original order) before the root.
* OK, now you can continue to populate the DOM tree with
the children of that root element, and any comments/PIs
following that element.
In short, quite an extreme level of pain for something that
is conceptually quite simple: store the data as it's parsed,
using the APIs existing for that purpose.
SUGGESTED FIX: createDocumentType doesn't belong as a method
on the DOMImplementation object. It belongs on Document,
since the DTD is feature internal to the Document.
(It appears that the current DTD model of DOM conflates the
notion of internal declarations, like XML/HTML/SGML DTDs,
with external ones such as MIME content type labels or the
conventions file systems use to record such information. The
current scheme appears to think DTDs are the latter; this
doesn't even work for XHTML.)
In the "last call" draft I could at least parse into a DOM tree
that recorded the DTD, though it was impossible to build a
populated DTD even using proprietary DocumentType extensions
(the ownership model was broken). This draft isn't even that
good; I can't use this feature at all.
- The example under "element" is incorrect; it says that there are
only element nodes, while it's clear that there should also be
three Text nodes (holding whitespace).
That's all for now.
- Dave
Received on Tuesday, 21 December 1999 16:22:54 UTC