Таблицы определения данных DTD | Определение атрибутов

Определение атрибутов


Составив представление о том, какие элементы нам нужны, как часто они могут использоваться, а также как они относятся к другим элементам, на следующем шаге мы можем определить, какие атрибуты необходимы этим элементам. После того как мы определим элементы для данного документа, мы можем предоставить процессору XML дополнительную информацию об этих элементах при помощи атрибутов. Для того чтобы точно указать, что можно, а что нельзя помещать в элементы, какую информацию требуется поместить в элемент, составляется список атрибутов, снабженный служебным словом ATTLIST. Поскольку элементы документа гибко конфигурируются можно свободно создавать любые необходимые атрибуты.

Здесь начинается трудный этап. Хотя атрибуты помогают прояснить, какое содержание могут иметь элементы, для них требуется больше информации, чем для элементов, поскольку атрибуты указывают, что именно делают те или иные элементы. Именно поэтому их конструкция несколько сложнее, следовательно, необходимо тщательно продумать каждый элемент, как его следует описывать, причем важно учитывать, что элементы не только обрабатываются анализатором, нужно также, чтобы эти элементы были понятны тем, кто их будет просматривать. Анализатор, читающий DTD, использует набор атрибутов для того, чтобы устанавливать некоторые флаги (признаки), например, те, которые определяют порядок обработки. Приложение, в свою очередь, использует флаг для того, чтобы определить, можно ли редактировать данные.

Основной формат атрибута ATTLIST выглядит так:

<ATTLIST имя_элемента имя_атрибута тип использование_по умолчанию>

Разберем эту строку слева направо. Первый параметр — имя_элемента — указывает главным образом, что этот элемент, которому назначен данный атрибут, описан первым. Атрибуты могут располагаться либо сразу после элементов, либо где угодно в DTD, таким образом, нам необходимо включать эту информацию, поскольку во многих случаях атрибуты не располагаются непосредственно за теми элементами, которые они описывают.

Вторая часть этой строки — значение имя_атрибута — указывает имя, которое мы хотим присвоить данному атрибуту. Это имя необходимо в тех случаях, когда в приложении нужно сделать ссылку (reference) на атрибут.

Значение тип указывает тип атрибута — строковый (string), маркерный (tokenized) или нумерованный (enumerated).

Наконец, мы можем указать значение атрибута, используемое по умолчанию. Следующий список даст вам представление о некоторых значениях атрибутов, которые присваиваются им по умолчанию:

# IMPLIED — указывает, что это значение является необязательным для данного атрибута. Процессор должен указать системе, что значение не установлено, но документ по-прежнему будет рассматриваться как действительный XML-документ.
#FIXED — значение не может быть изменено. Документ не является действительным, в том случае если данный атрибут используется со значением, отличным от принятого по умолчанию.
#REQUIRED — значение обязательно для данного атрибута. Если значение не установлено, то документ не является действительным.

Вот пример атрибута для элемента <ARTICLE>, который точно определяет, что может содержать элемент <ARTICLE>:

<!ELEMENT ARTICLE (headLINE, BYLINE, LEDE, STORY)>
   EDITORS CDATA #IMPLIED
   DATE CDATA #IMPLIED
   EDITION CDATA #IMPLIED>

Первая строка представленного фрагмента кода служит для объявления элемента. Остальная часть — для объявления следующих четырех атрибутов:

AUTHORS (авторы) — у рассказа может быть несколько авторов. Хотя, возможно, читателям безразлично, кто эти многочисленные авторы, однако редактору газеты это далеко не безразлично, особенно при вручении пулитцеровских премий.
EDITORS (редакторы) — помещая эту информацию в качестве атрибута, вы тем самым связываете данный рассказ с редактором (или редакторами), которые помогли создать это произведение.
DATE (дата) — этот атрибут поможет в дальнейшем определить статью и точно ее датировать. Мы можем создать элемент, который указывает дату газеты, но в данном случае мы применяем атрибут DATE для элемента <ARTICLE>, чтобы легче было искать по дате отдельные статьи.
EDITION (издание) — это может быть атрибут как для элемента <NEWSPAPER>, так и для элемента <ARTICLE>, но в данном случае мы создали его в качестве атрибута элемента <ARTICLE>.

Обратите внимание, что в приведенном фрагменте кода обязательными данными являются только имена авторов. Наличие остальных данных является предположительным (implied), но не обязательным (отмечено значением #IMPLIED). Вся информация представляет собой символьные данные:

<!ATTLIST ARTICLE AUTHORS CDATA #REQUIRED
   EDITORS CDATA #IMPLIED
   DATE CDATA #IMPLIED
   EDITION CDATA #IMPLIED>

Когда нужно использовать атрибуты, а когда — элементы?

Бывает трудно разобраться, когда применять атрибуты, а когда элементы. Вы знаете, что элементы служат для определения структуры объекта, а атрибуты — для определения каких-либо его свойств, но можно легко ошибиться, создав атрибут вместо элемента и наоборот. Итак, атрибуты применяются

Для того чтобы определить, как представить некую часть (item) объекта — как элемент или как атрибут элемента, посмотрите, нуждается ли сам объект в дальнейших пояснениях, или же эта часть в действительности описывает новый объект. Если она относится к другому, уже определенному вами элементу, то она, по всей вероятности, является атрибутом. Если она имеет сходство с рассматриваемым объектом, но, в целом, описывает новый объект, тогда эта часть является элементом. Бывает непросто определить, как объявить ту или иную часть, но если вы уже в общих чертах описали основную структуру, а затем определили отношения, то вы быстро поймете, в каких случаях следует создавать элементы, а в каких — атрибуты.

<< назад | содержание | вперед >>