XML атрибуты

Как и в 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 &quot;Shotgun&quot; 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 документа содержат совершенно одинаковую информацию:

Дата записана, как атрибут:


<note date="10/01/2008">
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

Дата записана, как элемент:


<note>
   <date>10/01/2008</date>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

Дата записана, как расширенный элемент (На мой взгляд наилучший вариант):


<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 используется для идентификации разных заметок. Эта информация не является частью самой заметки.

Главная мысль всего сказанного это то, что метаданные (данные о данных) следует записывать, как атрибуты, а сами данные, как элементы.