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

В DTD атрибуты определяются при помощи декларации ATTLIST.

Декларация атрибутов

Декларация атрибутов имеет следующий синтаксис:


<!ATTLIST имя-элемента имя-атрибута тип-атрибута значение-атрибута>

Пример DTD:


<!ATTLIST payment type CDATA "check">

Пример XML:


<payment type="check" />

Параметр "тип-атрибута" может принимать следующие значения:

ТипОписание
CDATAЗначение — символьные данные
(en1|en2|..)Значение должно быть из перечисленного списка
IDЗначение — уникальный идентификатор
IDREFЗначение — идентификатор другого элемента
IDREFSЗначение — список других идентификаторов
NMTOKENЗначение — допустимое XML имя
NMTOKENSЗначение — список допустимых XML имен
ENTITYЗначение — сущность
ENTITIESЗначение — список сущностей
NOTATIONЗначение — имя нотации
xml:Значение — предопределенное xml значение

Параметр "значение-атрибута" может принимать следующие значение:

ЗначениеОписание
valueЗначение атрибута по умолчанию
#REQUIREDАтрибут обязателен
#IMPLIEDАтрибут не обязателен
#FIXED valueАтрибут имеет фиксированное значение

Значение атрибута по умолчанию

DTD:


<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

XML:


<square width="100" />

В приведенном примере элемент "square" декларируется, как пустой элемент с атрибутом "width", который имеет тип CDATA. Если атрибут "width" не задан, то он будет иметь значение по умолчанию 0.

#REQUIRED

Синтаксис:


<!ATTLIST имя-элемента имя-атрибута тип-атрибута #REQUIRED>

Пример

DTD:


<!ATTLIST person number CDATA #REQUIRED>

Правильный XML:


<person number="5677" />

Неправильный XML:


<person />

Используйте ключевое слово #REQUIRED, если у вас нет вариантов по значению по умолчанию, но вам все же нужно, чтобы атрибут обязательно присутствовал.

#IMPLIED

Синтаксис:


<!ATTLIST имя-элемента имя-атрибута тип-атрибута #IMPLIED>

Пример

DTD:


<!ATTLIST contact fax CDATA #IMPLIED>

Правильный XML:


<contact fax="555-667788" />

Правильный XML:


<contact />

Ключевое слово #IMPLIED используется, если нет необходимости в обязательном использовании атрибута, и нет вариантов по значению по умолчанию.

#FIXED

Синтаксис:


<!ATTLIST имя-элемента имя-атрибута тип-атрибута #FIXED "значение">

Пример

DTD:


<!ATTLIST sender company CDATA #FIXED "Microsoft">

Правильный XML:


<sender company="Microsoft" />

Неправильный XML:


<sender company="MSiter" />

Ключевое слово #FIXED используется, когда необходимо, чтобы у атрибута было некое фиксированное значение, которое автор XML файла не может изменять. Если автор XML файла задаст другое значение такого атрибута, то парсер вернет ошибку.

Перечисленные значения атрибута

Синтаксис:


<!ATTLIST имя-элемента имя-атрибута (en1|en2|..) значение-по-умолчанию>

Пример

DTD:


<!ATTLIST payment type (check|cash) "cash">

XML:


<payment type="check" />

или


<payment type="cash" />

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