, поскольку атрибуты этого типа играют важную роль в повышении эффективности обработки 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*
— набор определяемых атрибутов. Каждый атрибут задается правилом
Для того чтобы обеспечить достаточно выразительную мощность документов, XML позволяет разбивать их на отдельные поименованные объекты, называемые сущностями. Сущности в XML не имеют ничего общего с сущностями в методологии "сущность-связь". Самый близкий аналог в традиционных языках программирования — это макроподстановка.
Существует два способа определения сущности — внутреннее и внешнее.
Первый способ используется для того, чтобы определить именованный текстовый объект в самом документе, а затем использовать его содержимое посредством ссылки.
Внутреннее определение сущности имеет вид:
<!ENTITY имя "значение">
Ссылка на сущность записывается как
&имя;
(амперсант, затем имя сущности, затем точка с запятой).