Атрибуты XML
XML элементы могут иметь атрибуты, наподобие атрибутов в HTML.
Атрибуты предназначены для указания дополнительной информации об элементе.
XML атрибуты
XML элементы могут иметь атрибуты.
Вы наверняка помните, что в HTML было <IMG SRC="computer.gif">. Атрибут SRC предоставляет дополнительную информацию о IMG элементе.
В HTML (и в XML) атрибуты предоставляют дополнительную информацию об элементах.
<img src="computer.gif"><a href="demo.asp">
Атрибуты часто предоставляют информацию, которая не является частью данных. В примере, приведенном ниже, значение типа файла не имеет никакого отношения к данным, но оно будет важно для ПО, которое будет осуществлять обработку этого элемента.
<file type="gif">computer.gif</file>Стиль кавычек, "female" or 'female'?
Значения атрибутов должны быть заключены в кавычки, причем вы можете для этой цели использовать как одинарные, так и двойные кавычки. Указать пол человека мы может так:
<person sex="female">или так:
<person sex='female'>Важно: если в значении атрибута есть двойные кавычки, то это значение должно быть записано внутри одинарных кавычек:
<gangster name='George "Shotgun" Ziegler'>Важно: если в значении атрибута есть одинарные кавычки, то это значение должно быть записано внутри двойных кавычек:
<gangster name="George 'Shotgun' Ziegler">Что использовать? Элементы против атрибутов
Данные можно хранить в атрибутах или в дочерних элементах.
Взгляните на следующие примеры.
<person sex="female"><firstname>Anna</firstname>
<lastname>Smith</lastname>
</person> <person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
В первом примере пол (sex) записан как атрибут, а вот во втором примере пол — это дочерний элемент. Оба примера содержат одинаковую информацию.
Нет никаких строгих правил, указывающих, где следует использовать атрибут, а где — дочерний элемент. Тем не менее лучше забыть о том, в каких случаях используются атрибуты в HMTL. Для хранения всего, что ближе к данным, чем к служебной информации, используются дочерние элементы.
Мой любимый способ
Я предпочитаю хранить данные в дочерних элементах.
Три нижеприведенных элемента содержат одинаковую информацию:
В первом для хранения даты используется атрибут:
<note date="12/11/2002"><to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь про наши планы на эти выходные!</body>
</note>
Во втором примере значение даты записано в специальном элементе.
<note><date>12/11/2002</date>
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь про наши планы на эти выходные!</body>
</note>
В третьем примере дата записана в расширенном (и более гибком) элементе. Это мой любимый способ:
<note><date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь про наши планы на эти выходные!</body>
</note>
Избегать использования атрибутов?
Должны ли вы избегать использования атрибутов?
С использованием атрибутов связаны некоторые проблемы:
- атрибуты не могут содержать больше одного значения (дочерние элементы могут)
- атрибуты тяжело расширяются (в случае каких-либо изменений)
- структуры нельзя описать атрибутами (а дочерними элементами — можно)
- программам тяжело работать с атрибутами
- атрибуты не легко проконтролировать на соответствие единому ОТД — определению типа документа, устанавливающему валидность того или иного XML документа.
Если вы используете атрибуты для хранения данных, то учтите, что ваши документы сложны для чтения и записи. Старайтесь использовать элементы для хранения данных. А атрибуты используйте, только чтобы указать информацию, не имеющую отношение к данным.
Не опускайтесь до такого (пример того, как не стоит писать XML документ):
<note day="12" month="11" year="2002"to="Сергей" from="Наталья" heading="Напоминание"
body="Не забудь про наши планы на эти выходные!">
</note>
Исключение из правил
У правил всегда есть исключения.
Мое правило для атрибутов имеет одно исключение:
Иногда я назначаю идентификаторы (id) элементам. Эти идентификаторы используются для доступа к определенным XML элементам, подобно тому, как это делается в HTML атрибутами NAME или ID. Вот пример, описывающих применение идентификаторов:
<note id="p501">
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь про наши планы на эти выходные!</body>
</note>
<note id="p502">
<to>Наталья</to>
<from>Сергей</from>
<heading>Re: Напоминание</heading>
<body>Не забуду!</body>
</note>
</messages>
В этом примере идентификатор играет всего лишь роль счетчика и позволяет ориентироваться среди различных записок в XML файле. При всем при этом, идентификаторы не являются частью данных.
Смысл сказанного в том, что метаданные (данные о данных) должны храниться в атрибутах, в то время как сами данные должны храниться в элементах.
Далее — урок 6. XML валидация.