В 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" />
Перечисленные значения атрибута используются, когда необходимо задать список из допустимых фиксированных значений.