□ ключевое слово #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
'(' S? Name (S? '|' S? Name)* S? ')'
Перечисление — это один или несколько именных токенов, которые разделены пробелами и знаками " |". Перечисление задает несколько возможных вариантов значения атрибута, например (серый | белый).
[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
Значение атрибута описывается продукцией DefaultDeclследующим образом:
[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'
| (('#FIXED' S)? AttValue)
Для того чтобы обеспечить достаточно выразительную мощность документов, XML позволяет разбивать их на отдельные поименованные объекты, называемые сущностями . Сущности в XML не имеют ничего общего с сущностями в методологии "сущность-связь". Самый близкий аналог в традиционных языках программирования — это макроподстановка.
Существует два способа определения сущности — внутреннее и внешнее.
Первый способ используется для того, чтобы определить именованный текстовый объект в самом документе, а затем использовать его содержимое посредством ссылки.
Внутреннее определение сущности имеет вид:
имя " значение ">
Ссылка на сущность записывается как & имя ;(амперсант, затем имя сущности, затем точка с запятой).
Пример
В документе
Продается настоящий &animal;!
сущность animalимеет значение "слон". Ссылка на сущность используется дважды — в атрибуте titleи в тексте элемента product. Этот документ эквивалентен документу
Продается настоящий слон!
Если в будущем фирма переквалифицируется, и будет продавать, скажем, жирафов, можно будет, не изменяя всего документа, заменить только значение сущности:
Продается настоящий &animal;!
Спецификация XML определяет несколько встроенных сущностей, которые перечислены в табл 1.1.
Таблица 1.1.Встроенные сущности XML
| Имя сущности |
Значение |
Описание |
lt |
< |
знак "меньше" |
gt |
> |
знак "больше" |
amp |
& |
амперсант |
apos |
' |
апостроф или одинарные кавычки |
quot |
" |
двойные кавычки |
Встроенные сущности могут быть использованы для замены некоторых символов там, где они могут быть восприняты, как разметка. В частности, символы <(знак "меньше") и &(амперсант) вообще не могут появляться в тексте документа иначе, кроме как в виде сущностей.
Читать дальше