В XML не существует правил о том, когда использовать атрибуты, а когда дочерние элементы.
Используем элементы или атрибуты?
Данные могут храниться как в дочерних элементах, так и в атрибутах.
Взгляните на следующие примеры:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
В первом примере данные о поле хранятся в атрибуте "sex". Во втором примере пол указан в дочернем элементе "sex". Оба примера предоставляют одну и ту же информацию.
Не существует каких-либо жестких правил когда использовать атрибуты, а когда элементы. Тем не менее, опыт показывает, что атрибуты удобны в HTML, однако в XML следует стараться избегать их. Если информация представляет данные, то следует использовать элементы.
Лучший способ
Следует отдавать предпочтение хранению данных в элементах.
Следующие три XML документа содержат совершенно одинаковую информацию:
В первом примере дата указана в атрибуте:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Во втором примере дата указана в элементе:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
В третьем примере (наилучший вариант) для определения даты используется расширенный элемент:
<note>
<date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Избегать атрибуты
Следует ли избегать использования атрибутов?
При использовании атрибутов могут возникать некоторые проблемы:
- атрибуты не могут содержать множественные значения (элементы могут)
- атрибуты сложно расширять (для последующих изменений)
- атрибуты не могут описывать структуры (элементы могут)
- атрибуты более сложны для манипулирования программами
- значения атрибутов сложно проверять по DTD
Если использовать атрибуты в качестве контейнеров данных, то конечные документы будут сложны для чтения и манипулирования. Для описания данных следует использовать элементы. Атрибуты следует использовать для предоставления информации, не относящейся к данным.
Никогда не используйте следующие конструкции (это пример того, как не должен выглядеть XML документ):
<note
day="12"
month="11"
year="2002"
to="Tove"
from="Jani"
heading="Напоминание"
body="Не забудь обо мне в эти выходные">
</note>
Исключение к правилу использования атрибутов
У всех правил всегда есть исключения.
Для негласного правила запрета на использование атрибутов также есть одно исключение. Оно вступает в действие, когда, например, необходимо присвоить элементам идентификатор. Этот идентификатор в последствии может быть использован таким же образом, как идентификаторы в HTML. Следующий пример иллюстрирует это:
<messages>
<note id="p501">
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные</body>
</note>
<note id="p502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Напоминание</heading>
<body>Не забуду!</body>
</note>
</messages>
Атрибут ID в этих примерах является простым счетчиком или уникальным идентификатором, который идентифицирует разные заметки в XML файле и не является частью данных самой заметки.
Смысл всего сказанного заключается в том, что метаданные (т.е. данные о данных) следует хранить как атрибуты, а сами данные должны быть представлены как элементы.