Книга: Технология 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.2. Определение количества информации. Единицы измерения количества информации
- Определение версии клиента
- Определение пользовательского формата числовых данных
- Определение целей. Построение цепочек
- 7. Унификация атрибутов
- Определение необходимого системного вызова
- Раздел 1 Лояльность: определение и ключевые факторы
- Определение позиционного уровня
- Создание списка
- Добавление, изменение и удаление элементов списка
- Восстановление элементов списка из Корзины
- Добавление, изменение и удаление столбцов списка