Технология XSLT (Валиков) - страница 29

□ значение, заключенное в кавычки, определяет значение атрибута по умолчанию.

Примеры

Декларация

>

> 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)

Определение сущности

Для того чтобы обеспечить достаточно выразительную мощность документов, XML позволяет разбивать их на отдельные поименованные объекты, называемые сущностями. Сущности в XML не имеют ничего общего с сущностями в методологии "сущность-связь". Самый близкий аналог в традиционных языках программирования — это макроподстановка.