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