Технология 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 "публичный ид-р" "системный ид-р