> at some point, I'm probably going to start a gentle push to *not*
> use XML attributes at all.
(Another reason I don't like XML for application protocols: attributes
do not enhance XML's expressibility and it is is ambiguous when it is
appropriate to use them. Sorry I harp so much on this.)
There seems to be a rapidly-becoming-old debate in the XML community
between "element-normal" and "attribute-normal" forms for data, and
various compromises in between. In the element-normal form,
attributes are never used, and string data is conveyed in the pcdata
of elements. In the attribute-normal form, pcdata is never used
(although compromises are likely to be made for large objects), and
string data is conveyed in the values of attributes. Our XML delta
format is attribute-normal except for text deltas and the values of
properties. The issues I know of on either side are:
* XML is stupidly verbose for elements (especially elements
with longish names), but not for attributes. So attributes
tend to soften the blow of XML's verbosity.
* In most implementations, attribute values are presented to
the application all at once along with the element name. If
the same values are present in the pcdata of sub-elements,
the application has to go to more steps to gather that data
together.
* If you have a DTD, attribute values can be restricted in
certain ways (such as "must be a unique identifier" or "must
refer to an identifier used elsewhere in the document") and
those restrictions can be enforced by a validating parser
instead of by the application.
* Similarly, if you have a DTD and a validating parser, the
DTD can do some work for the application; it can match up
IDREFs with IDs and can fill in default values when the
DTD specifies them.
* A sub-element can be extended to include further structure;
an attribute cannot be so extended, although new attributes
can of course be added alongside for some simple kinds of
extensions.
* You have to use elements no matter what, but nothing forces
you to use attributes, so element-normal form uses fewer of
XML's mechanisms. This is arguably more elegant and
simpler, although in practice, having to collect all the
pcdata together is more annoying than having to learn how
your XML implementation deals with attributes.
Note that not everyone in the XML community believes in DTDs and
validating parsers as valuble things, so not all of the advantages I
listed for attributes carry weight with everyone. In particular, we
don't use a validating parser, so DTDs don't help us except as a form
of documentation for people, or conceivably as a debugging aid.
I don't have a particular opinion on the matter, just a lot of things
to say.
Received on Sat Oct 21 14:36:12 2006