□ значение, заключенное в кавычки, определяет значение атрибута по умолчанию.
Примеры
Декларация
>
> title CDATA #REQUIRED
> id ID #IMPLIED
> quantity CDATA "1"
> value CDATA #FIXED "дорого"
> color (серый|белый) "серый">
определяет в элементе >product
следующие атрибуты:
□ обязательный атрибут >title
, содержащий символьные данные;
□ необязательный атрибут >id
, который может содержать уникальный идентификатор элемента внутри документа;
□ атрибут >quantity
, который может и не присутствовать в документе — в этом случае его значение будет равно >1
;
□ атрибут >value
, который всегда должен иметь значение >"дорого"
;
□ атрибут >color
, который может иметь одно из значений — >"серый"
или >"белый"
, по умолчанию >"серый"
.
Разберем синтаксис определения списка атрибутов более детально. Этому определению соответствует следующее правило:
>[52] AttlistDecl ::= ''
В этом правиле >Name
задает имя элемента, a >AttDef*
— набор определяемых атрибутов. Каждый атрибут задается правилом >AttDef
:
>[53] AttDef ::= S Name S AttType S DefaultDecl
Здесь >Name
— имя, >AttType
— тип, a >DefaultDecl
— значение атрибута по умолчанию.
>[54] AttType ::= StringType | TokenizedType | EnumeratedType
В соответствии со спецификацией, значения атрибутов бывают трех видов — строки (>StringType
), токены (>TokenizedType
) и тип перечисления (>EnumeratedType
).
>[55] StringType ::= 'CDATA'
>[56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY'
> | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
Тип перечисления (>EnumeratedType
) может задаваться нотациями (>NotationType
) и собственно перечислениями (>Enumeration
):
>[57] EnumeratedType ::= NotationType | Enumeration
>[58] NotationType ::= 'NOTATION' S
> '(' S? Name (S? '|' S? Name)* S? ')'
Перечисление — это один или несколько именных токенов, которые разделены пробелами и знаками ">|
". Перечисление задает несколько возможных вариантов значения атрибута, например >(серый | белый)
.
>[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
Значение атрибута описывается продукцией >DefaultDecl
следующим образом:
>[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'
> | (('#FIXED' S)? AttValue)