Переводы

Учебник XML. Быстро, просто и понятно.
«Как работает автомобиль» — в помощь начинающему автомобилисту.

Навигация

Главная
Обо мне
Контакт

Ссылки

Блог на Livejournal

Атрибуты 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 документ):

<note day="12" month="11" year="2002"
to="Сергей" from="Наталья" heading="Напоминание"
body="Не забудь про наши планы на эти выходные!">
</note>

Исключение из правил

У правил всегда есть исключения.

Мое правило для атрибутов имеет одно исключение:

Иногда я назначаю идентификаторы (id) элементам. Эти идентификаторы используются для доступа к определенным XML элементам, подобно тому, как это делается в HTML атрибутами NAME или ID. Вот пример, описывающих применение идентификаторов:

<messages>
<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 валидация.