Книга: Технология XSLT

Определение списка атрибутов

Определение списка атрибутов

Список атрибутов некоторого элемента задается следующим образом:

<!ATTLIST элемент
 атрибут1 тип1 значение1
 атрибут2 тип2 значение2
 и т. д...>

В этом определении элемент задает имя элемента, для которого определяется данный список атрибутов, атрибут — имя атрибута, тип — тип атрибута и значение — значение атрибута.

Имя атрибута отвечает в XML тем же самым требованиям, что и имя элемента — оно должно начинаться с буквы и может содержать другие буквы, цифры и некоторые знаки препинания.

Тип атрибута может быть одним из следующих:

CDATA — символьные данные;

ID — уникальный идентификатор;

IDREF — ссылка на уникальный идентификатор;

IDREFS — набор ссылок;

ENTITY — сущность;

ENTITIES — набор сущностей;

NMTOKEN — именной токен;

NMTOKENS — набор именных токенов;

NOTATION — нотация;

? перечисление возможных значений атрибута.

Следует поподробнее остановиться на типе ID, поскольку атрибуты этого типа играют важную роль в повышении эффективности обработки XML-документов. Атрибуты типа ID могут содержать значения, которые однозначным образом идентифицируют элемент в документе. То есть, если тип атрибута объявлен как ID, его значение должно быть уникальным внутри документа. Это позволяет создавать для элементов с ID-атрибутами индексы по значению атрибута, для более быстрого доступа. Например, в языке XPath, имеется функция id, которая по данному строковому параметру возвращает множество, состоящее из элемента, ID-атрибут которого совпадает с этим параметром. Естественно, тип ID не гарантирует, что доступ к элементам в любом случае будет производиться быстрее — это зависит от реализации обрабатывающих программ. Однако большинство современных XML-процессоров при работе с ID-атрибутами используют механизмы оптимизации.

Тип ID может быть полезен и при создании кросс-ссылок между элементами в самих XML-документах, для описания информации, структура которой выходит за рамки обычных деревьев. Уникальные значения, заданные в атрибуте ID могут использоваться в атрибутах типов IDREF (ссылка на идентифицирующее значение) и IDREFS (набор таких ссылок).

Значение определяет, как и какие значения должны быть присвоены атрибуту. Значением может быть:

? ключевое слово #REQUIRED, которое показывает, что этот атрибут должен всегда присутствовать в элементе и иметь некоторое значение;

? ключевое слово #IMPLIED, которое показывает, что атрибут является необязательным и может отсутствовать в элементе;

? ключевое слово #FIXED, за которым следует значение, заключенное в кавычки — это задает атрибут, который всегда должен иметь одно и то же фиксированное значение;

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

Примеры

Декларация

<!ATTLIST product
 title CDATA #REQUIRED
 id ID #IMPLIED
 quantity CDATA "1"
 value CDATA #FIXED "дорого"
 color (серый|белый) "серый">

определяет в элементе product следующие атрибуты:

? обязательный атрибут title, содержащий символьные данные;

? необязательный атрибут id, который может содержать уникальный идентификатор элемента внутри документа;

? атрибут quantity, который может и не присутствовать в документе — в этом случае его значение будет равно 1;

? атрибут value, который всегда должен иметь значение "дорого";

? атрибут color, который может иметь одно из значений — "серый" или "белый", по умолчанию "серый".

Разберем синтаксис определения списка атрибутов более детально. Этому определению соответствует следующее правило:

[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'

В этом правиле 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)

Оглавление книги


Генерация: 1.221. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз