> I may not be able to explain this well but I also saw no use
> for attributes
> until I had to script against the DOM. In your example, if
> you find the
> element node <note> the date is available without searching for child
> elements. Because of this, attributes make my searches so
> much easier.
This is probably the single biggest theological issue in the design of XML
structures. Early on, I reached the same conclusion Lynda has - namely, that
accessing attributes with the DOM or SAX is a heck of a lot easier than
accessing text elements. Performance-wise, it doesn't seem to make that much
of a difference - at least on the MS and IBM parsers - but simpler code is
IMO a good thing. There are some other advantages to using attributes for
data points that make them appealing to me:
- Attributes are unordered. If I'm building an XML document, and I have a
serial stream containing my data points that I'm converting to XML, it's
nice to be able to add the points in an ad-hoc way rather than having to add
them to the document in the order specified by the DTD. There's no right
answer to a question like, "Does name come before or after SSN?"
- Using attributes for data points disambiguates structure and information.
Code is much cleaner when using attributes for data points - attributes
always contain data points, and elements always contain structure. Contrast
this with the use of elements for data points, when element handling
routines must check to see what the children of an element consist of to
determine whether an element contains a data point or further structure.
- When extracting information from an XML document to store to an RDBMS, or
vice-versa, using attributes for data points forms a very clean mapping
between the systems - attributes always correspond to columns, while
elements always correspond to tables. This makes code to import and export
data between RDBMS systems and XML documents easy to write and very
flexible.
- Using attributes for data points results in a drastically smaller document
representing the same information - as much as 30% to 40% smaller, depending
on the mix of structure and information in your document.
Note that these comments only apply when the XML structures are used to hold
*data* - for XML being used to mark up text, an element-only model works
much better.
Unfortunately, a lot of others in the industry - bigger wheels than me -
disagree vehemently. For example, MS's BizTalk guidelines specify that all
information in Biztalk-compliant structures should be represented by
text-only elements. But for internal usages, or usages where custom XML is
being developed for a fixed-scope effort, I prefer to use attributes.
- Kevin
Kevin Williams
XML Architect, Ultraprise Corporation
Co-author: _Professional XML_ (Wrox Press)
Co-author: _ASP 3.0 Programmer's Reference_ (Wrox Press)
Co-author: _Professional VB XML_ (Wrox Press)