- From: Mike Champion <mcc@arbortext.com>
- Date: Thu, 4 Jun 1998 15:10:15 -0400
- To: DOM List <www-dom@w3.org>, Berlin Design <design@berlin-consortium.org>
At 05:05 PM 6/2/98 -0400, ANOQ of the Sun wrote:
>First of all, I'm not quite sure wheter the general opinion
>is to have everything in DOM implemented as Nodes/NodeIterators
>or if attributes should be a special case, with an
>AttributeList.
We've moved away from the idea of attributes being a special case.
>
>I would like to see a special-case implementation for
>attributes, as opposed to using Nodes for attributes.
We discussed attribute handling in yesterday's DOM teleconference, and we
agreed to leave it roughly as it was INTENDED to be in the April 15 draft
(with errors corrected). Your proposal is rather more elaborate than we'd
like to have the DOM core be at this point. The performance efficiency of
implementations is of less concern to the WG at this point than keeping the
spec simple and re-using the basic interfaces whereever possible, so we're
going to keep Attributes specified using Nodes and NodeLists. There are a
lot of interesting convenience methods in this proposal, however, so it
might be useful to implement them ON TOP of the DOM as an "aftermarket"
product, or if experience indicates that they are indeed very useful, they
might be specified as part of an optional package in a subsequent release
of the DOM spec.
In a nutshell, here's how attribute will be specified in the next draft of
the DOM API spec. Please let us know what you think -- there's still time
to get suggestions considered at next week's face to face DOM WG meeting:
[a bit of background information]
We've removed NodeIterator from the Core (it may come back in a
later revision of the DOM API, probably as an optional package
rather than part of Core). Everywhere we once
used NodeIterator, we now use NodeList: To be consistent with the
Java 1.2 terminology, we accept the definition of the the word
"Set" to mean a grouping of unique objects,
"Collection" to mean a grouping that allows duplicates but
doesn't define a particular ordering, and "List" to mean an
ordered collection. In most uses in the DOM, the
sets of objects we manipulate may contain duplicates but
are in a specific order, so NodeList seems like the best label
for the set of child nodes of an Element, the set of
entity declarations in a DocumentType, etc.
Attribute is derived from Node. This SHOULD have been specified
in the 4/15 draft. mea culpa ...
In the "object model", the value of an attribute is specified by
the Attribute's child nodes. In the simple case, the value would
be a single Text node, in the more complicated
case where the attribute value contains entity references, this
may be a list of nodes or even a list of Elements and subtrees.
This is unchanged from the 4/15 draft.
The Attribute interface will look just like it did in the 4/15
draft:
interface Attribute : Node {
wstring getName();
wstring getValue();
attribute boolean specified;
wstring toString();
};
Since Attribute is a Node, it has a getParent() method ... we are
discussing whether it should return NULL (since Attributes are not
"children" of elements), and have a getElementNode method on Attribute
to get the Element that contains an Attribute. Thoughts????
There is no longer an AttributeList interface; instead Element has a
NodeList containing the Attribute nodes to represent all the
attribute-value pairs defined for a given element.
[OK, it should probably be a "NodeSet", but a) we don't want to
add an interface just to be "politically correct" with respect to
terminology, and b) the actual set of attributes
is in SOME order defined by the implementation (if not by the XML
spec), and NodeList provides the methods needed to enumerate all
the Attributes.]
The "power user" MAY index into the NodeList of attributes and use
the Attribute interface to get and set specific attribute values.
This will be useful mainly to those using XML where attribute
values may have entity references.
The typical user may use various "convenience" methods on the
Element interface to get/set/remove Attribute Node's by the name
of the attribute, and to get/set/remove attribute VALUES
represented as strings.
Thus, the Element interface will look as follows:
interface Element : Node {
wstring getTagName();
NodeList getAttributeList();
wstring getAttribute(in wstring name);
void setAttribute(in string name,
in string value);
void removeAttribute(in wstring name);
Attribute getAttributeNode(in wstring name);
void setAttributeNode(in Attribute newAttr);
void removeAttributeNode(in Attribute
oldAttr);
void getElementsByTagName(in wstring
tagname);
};
(normalize() will -- I hope -- be removed)
Are there any other issues that have been discussed on the www-dom list
with respect to Attributes that are still murky?
Received on Thursday, 4 June 1998 15:11:29 UTC