Как и в HTML, XML элементы могут иметь атрибуты. При этом значение атрибутов в XML и правило их создания во многом похожи на атрибуты в HTML.
Атрибуты предоставляют дополнительную информацию об элементе.
XML атрибуты
В HTML атрибуты предоставляют некоторую дополнительную информацию об элементе:
<img src="computer.gif">
<a href="demo.asp">
Атрибуты часто предоставляют информацию, не являющуюся частью данных. В примере ниже тип файла не зависит от данных, но эта информация может быть важна для приложений, которые будут манипулировать этим элементом:
<file type="gif">computer.gif</file>
XML атрибуты должны заключаться в кавычки
Значение атрибута всегда должно заключаться в кавычки. Это могут быть либо двойные, либо одинарные кавычки. Например, пол персонажа можно записать так:
<person sex="female">
либо так:
<person sex='female'>
Если значение атрибута само содержит двойные кавычки, то можно использовать одинарные кавычки. Например:
<gangster name='George "Shotgun" Ziegler'>
либо использовать символы сущностей:
<gangster name="George "Shotgun" Ziegler">
XML элементы или атрибуты
Посмотрите на следующие примеры:
Пример 1
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
Пример 2
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
В первом примере пол указан в атрибуте. Во втором, пол записан, как элемент. Оба примера предоставляют одну и ту же информацию.
Нет правил, регулирующих то, когда использовать атрибуты, а когда элементы. Атрибуты широко используются в HTML. В XML, на наш взгляд, лучше их избегать, и вместо них использовать элементы.
Что лучше?
Следующие три XML документа содержат совершенно одинаковую информацию:
Пример 1
Дата записана, как атрибут date:
<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Пример 2
Дата записана, как элемент <date>:
<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Пример 3
Дата записана, как расширенный элемент <date>, что на наш взгляд является наилучшим вариантом:
<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Избегать XML атрибуты?
При использовании атрибутов возникают некоторые проблемы:
- атрибуты не могут содержать множественные значения (элементы могут)
- атрибуты не могут содержать древовидные структуры (элементы могут)
- атрибуты сложно расширять (для будущих изменений)
Атрибуты нелегко читать и обслуживать. Используйте элементы для данных, а атрибуты для информации, не относящейся к данным.
Никогда не используйте следующие конструкции:
<note
day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Напоминание"
body="Не забудь обо мне в эти выходные!">
</note>
XML атрибуты для метаданных
Иногда элементам присваивают идентификаторы. Эти идентификаторы используются для идентификации XML элементов в точности также, как идентификационные атрибуты в HTML. Следующий пример демонстрирует это:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Напоминание</heading>
<body>Не забуду</body>
</note>
</messages>
В приведенном примере атрибут id используется для идентификации разных заметок. Эта информация не является частью самой заметки.
Главная мысль всего сказанного это то, что метаданные (данные о данных) следует записывать, как атрибуты, а сами данные, как элементы.