XML Attributes

XML Attributes


XML Attributes

XML attributes are normally used to describe XML elements, or to provide additional information about elements. From HTML you can remember this construct: <IMG SRC=”computer.gif”>. In this HTML example SRC is an attribute to the IMG element. The SRC attribute provides additional information about the element.

Attributes are always contained within the start tag of an element. Here are some examples:

HTML examples:

<img src="computer.gif">
<a href="demo.asp">
XML examples:

<file type="gif">
<person id="3344">

Usually, or most common, attributes are used to provide information that is not a part of the content of the XML document. Did you understand that? Here is another way to express that: Often attribute data is more important to the XML parser than to the reader. Did you understand it now? Anyway, in the example above, the person id is a counter value that is irrelevant to the reader, but important to software that wants to manipulate the person element.


Use of Elements vs. Attributes

Take a look at these examples:

Using an Attribute for sex:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

Using an Element for sex:

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

In the first example sex is an attribute. In the last example sex is an element. Both examples provides the same information to the reader.

There are no fixed rules about when to use attributes to describe data, and when to use elements. My experience is however; that attributes are handy in HTML, but in XML you should try to avoid them, as long as the same information can be expressed using elements.

Here is another example, demonstrating how elements can be used instead of attributes. The following three XML documents contain exactly the same information. A date attribute is used in the first, a date element is used in the second, and an expanded date element is used in the third:

<?xml version="1.0"?>
<note date="12/11/99">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0"?>
<note>
<date>12/11/99</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0"?>
<note>
<date>
  <day>12</day>
  <month>11</month>
  <year>99</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

 


Avoid using attributes? (I say yes!)

Why should you avoid using attributes? Should you just take my word for it? These are some of the problems using attributes:

  • attributes can not contain multiple values (elements can)
  • attributes are not expandable (for future changes)
  • attributes can not describe structures (like child elements can)
  • attributes are more difficult to manipulate by program code
  • attribute values are not easy to test against a DTD

If you start using attributes as containers for XML data, you might end up with documents that are both difficult to maintain and to manipulate. What I’m trying to say is that you should use elements to describe your data. Use attributes only to provide information that is not relevant to the reader. Please don’t end up like this:

<?xml version="1.0"?>
<note day="12" month="11" year="99"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

This don’t look much like XML. Got the point?


An Exception to my Attribute rule

Rules always have exceptions. My rule about not using attributes has one too:

Sometimes I assign ID references to elements in my XML documents. These ID references can be used to access XML element in much the same way as the NAME or ID attributes in HTML. This example demonstrates this:

<?xml version="1.0"?>
<messages>
  <note ID="501">
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
  </note>

  <note ID="502">
    <to>Jani</to>
    <from>Tove</from>
    <heading>Re: Reminder</heading>
    <body>I will not!</body>
  </note> 
</messages>

The ID in these examples is just a counter, or a unique identifier, to identify the different notes in the XML file.