Технология XSLT - страница 18
— имя атрибута, >тип
— тип атрибута и >значение
— значение атрибута.
>Имя
атрибута отвечает в 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
, за которым следует значение, заключенное в кавычки — это задает атрибут, который всегда должен иметь одно и то же фиксированное значение;
□ значение, заключенное в кавычки, определяет значение атрибута по умолчанию.
Декларация
>
> 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