Технология XSLT - страница 19

стр.

>

>                        '(' 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>"двойные кавычки

Встроенные сущности могут быть использованы для замены некоторых символов там, где они могут быть восприняты, как разметка. В частности, символы >< (знак "меньше") и >& (амперсант) вообще не могут появляться в тексте документа иначе, кроме как в виде сущностей.

Пример

>

>

>  Продается серый слон весом > 5 тонн!

>  Компания "слон & Слон".

>

На самом же деле в элементе >product заключен текст

>Продается серый слон весом > 5 тонн!

>Компания "Слон & Слон".

Довольно часто бывает необходимо использовать в документе символы набора Unicode, обращаясь к ним по десятичным или шестнадцатеричным кодам. В таких случаях можно использовать символьные сущности.

Символьная сущность (или, как ее еще называют, символьная ссылка) записывается в виде >&#код; или >&#xкод;, где >код — десятеричный и шестнадцатеричный Unicode-код символа в первом и втором случае соответственно.

Пример

Фраза ">Миру-мир!" может быть записана с использованием символьных сущностей следующим образом:

>&#х41С;&#х438;&#х440;&#х443; - мир!

Первое слово, ">Миру" записано с использованием шестнадцатеричных unicode-кодов кириллицы, второе слово, ">мир", записано с использованием десятичных кодов.

Внешние сущности содержатся во внешних файлах. Если ссылка на внешнюю сущность появляется в документе, то на ее место копируется содержимое внешнего файла.

Определение внешней сущности имеет следующий синтаксис:

>имя SYSTEM "URI">

В этом определении >имя точно так же, как и во внутренней сущности определяет имя сущности, в то время как >URI определяет абсолютное или относительное местоположение файла.

Пример

Предположим, что мы создали файл >animal.ent со следующим содержанием:

>огромное серое животное