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

стр.

Второй вариант синтаксиса >EntityDef соответствует определению внешней сущности, то есть сущности, определение которой не содержится в самом документе.

Внешние сущности могут быть двух типов:

□ разбираемые внешние сущности (англ. parsed entity) — данные, которые воспринимаются и обрабатываются как XML;

□ неразбираемые внешние сущности (англ. unparsed entity) — данные не-XML типа (например, изображения или бинарные файлы, которые необходимо использовать в данном документе).

Неразбираемые сущности определяются наличием нетерминала >NDataDecl в определении.

>[76] NdataDecl ::= S 'NDATA' S Name

Мы до сих пор не упомянули еще один важный случай сущности — параметризованные сущности или сущности-параметры. Сущности этого типа используются в DTD для более гибкого описания логической структуры документа.

Синтаксически сущности-параметры очень похожи на обычные сущности. При объявлении и использовании сущности-параметра ее имени должен предшествовать символ '>%'. Отличием сущностей-параметров является то, что они определяются и используются только внутри DTD.

Пример

В качестве примера объявим параметризованную сущность >coords, которую впоследствии будем использовать в определениях элементов:

>

Используя объявленную сущность-параметр, элемент >sphere, состоящий из элементов >x, >y, >z (координаты сферы) и >R (радиус), можно определить следующим образом:

>

Такое определение равносильно определению >, но при этом оно является гораздо более гибким — если в новой версии создаваемого XML-языка вдруг произойдет смена регистра имен элементов >x>y и >z на >X, >Y и >Z, декларацию типа документа изменять не придется.

Сущности-параметры широко используются в спецификациях Консорциума W3. Язык XSLT тоже имеет свою декларацию типа документа, но ее невозможно будет понять, не понимая механизма сущностей-параметров.

Синтаксис использования сущности-параметра (вернее, ссылки на нее) соответствует продукции >PEReference, которая практически совпадает с продукцией >EntityRef:

>[69] PEReference ::= '%' Name ';'

Определение сущности-параметра также очень схоже с определением обычной сущности:

>[72] PEDecl ::= ''

>[74] PEDef  ::= EntityValue | ExternalID

Продукция >EntityDecl, соответствующая определению сущности, как обычной, так и сущности-параметра, имеет следующий вид:

>[70] EntityDecl ::= GEDecl | PEDecl

Напомним, что >GEDecl соответствует объявлению обычной, a >PEDecl — параметризованной сущности.

Определение нотации

С точки зрения физической модели, XML-документы являются не более чем текстом. Содержимое документов и их разметка имеет исключительно текстовый вид. Вместе с тем, во многих случаях документы должны включать данные других форматов, например, графические изображения или двоичные файлы. Несовместимость физической реализации XML и внешних данных такого типа не позволяет включать их в документ посредством обычных сущностей — для этих целей используются неразбираемые сущности и нотации.

Нотация — это ни что иное, как определение формата неразбираемой сущности. Нотация дает формату имя и предоставляет некоторую информацию о приложении, которое следует использовать для обработки этого формата.

Пример

Предположим, что мы используем графические изображения в формате >GIF, для просмотра которых используется приложение >gif-viewer.exe. Определение нотации будет иметь следующий вид:

>

Эта запись определяет нотацию с именем >GIF и указывает имя приложения, которое может быть использовано для обработки внешних сущностей этого формата.

Информация о вспомогательном приложении-обработчике (англ. helper application) указывается при определении нотации системным или публичным идентификатором. В отличие от определения внешней сущности, публичный идентификатор в нотации может указываться без системного идентификатора. Фактически, нотация имеет три варианта определения:

>имя SYSTEM "системный ид-р">

>имя PUBLIC "публичный ид-р" "системный ид-р