Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

4.4. Объявление общего внешнего разбираемого примитива

Объявление для общего внешнего разбираемого примитива имеет следующую форму записи:

<! ENTITY ИмяПримитива SYSTEM СистемЛитерал>

Здесь Имя Примитива есть имя примитива. Вы можете выбрать любое имя, следуя правилам задания имен для общих примитивов, приведенным в предыдущем разделе.

Систем Литерал есть системный литерал, который описывает местонахождение файла, содержащего данные примитива. Системный литерал может быть ограничен одинарными (') или двойными (") кавычками и содержать любые символы, кроме символа кавычек, используемого как ограничители.

Системный литерал задает унифицированный идентификатор ресурса (URI) файла, содержащего данные примитива. На сегодняшний день URI -практически то же самое, что стандартный Internet-адрес, известный как унифицированный указатель ресурса (URL). Можно использовать либо полный URI, например:

<!ENTITY abstract SYSTEM "http://bogus.com/documents/Abstract.xml">

либо частичный URI, который задает местонахождение относительно местонахождения XML-документа, содержащего URI, например:

<!ENTITY abstract SYSTEM "Abstract.xml">

Относительные URI в XML-документах работают аналогично относительным URL для HTML-страниц.

Файл внешнего примитива может содержать только те составляющие, которые могут быть корректно вставлены в элемент (символьные данные, вложенные элементы и т. д.). Можно вставить общий внешний разбираемый примитив только внутрь содержимого элемента. (Можно включить его в значение в объявлении внутреннего примитива, но затем нужно вставить это содержимое в элемент.) Например, следующее DTD определяет внешний файл Topics.xml как общий внешний разбираемый примитив:

<!DOCTYPE ARTICLE

[

<!ELEMENT ARTICLE (TITLEPAGE, INTRODUCTION, SECTION*)>

<!ELEMENT TITLEPAGE (#PCDATA)>

<!ELEMENT INTRODUCTION ANY>

<!ELEMENT SECTION (#PCDATA)>

<!ENTITY topics SYSTEM "Topics.xml">

]

>

Вот содержимое файла Topics.xml:

<HEADING>Заголовки</HEADING>

Необходимость XML

Назначение XML

Стандартные приложения XML

Практическое применение XML

Этот типичный файл внешнего примитива содержит два пункта, которые можно включить в XML-элемент: вложенный элемент и блок символьных данных. Его содержимое может быть корректно вставлено в элемент INTRODUCTION (который иметь любой тип содержимого), как показано в следующем примере:

<INTRODUCTION>

Ниже представлены следующте заголовки:

&topies;

</INTRODUCTION>

4.5. Объявление общего внешнего не разбираемого примитива

Объявление для общего внешнего не разбираемого примитива имеет следующую форму записи:

<! ENTITY ИмяПримитива SYSTEM СистемЛитерал NDATA ИмяНогации>

Здесь ИмяПримитива есть имя примитива. Можно выбрать любое имя, следуя правилам, приведенным выше.

СистемЛитерал есть системный литерал, который описывает местонахождение файла, содержащего данные примитива. Он действует точно так же, как системный литерал для описания местоположения общего внешнего разбираемого примитива (см. выше).

Ключевое слово NDATA указывает, что файл примитива содержит не разбираемые данные (они не обрабатываются синтаксическим анализатором).

Имя Нотации есть имя нотации, объявленной в DTD. Нотация описывает формат данных, содержащихся в файле примитива, или указывает на местонахождение программы, которая может обрабатывать эти данные.

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

Например, DTD в следующем XML-документе определяет файл Faun.gif (который содержит рисунок обложки книги) как общий внешний не разбираемый примитив с именем faun. Имя нотации этого примитива - GIF. Она указывает на местонахождение программы, которая отображает графические файлы в формате GIF (ShowGif.exe). DTD также определяет пустой элемент с именем СОVERIMAGE и атрибут типа ENTITY для этого элемента с именем Source:

<?xml version="1.0"?>

<!DOCTYPE BOOK

[

<!ELEMENT BOOK (TITLE, AUTHOR, COVERIMAGE)>

<!ELEMENT TITLE (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT COVERIMAGE EMPTY>

<!ATTLIST COVERIMAGE Source ENTITY #REQUIRED>

<!NOTATION GIF SYSTEM "ShowGif.exe">

<!ENTITY faun SYSTEM "Faun.gif NDATA GIF>

]

>

<BOOK>

<TITLE>Картинки природы<TITLE>

<AUTHOR>Фёдор Петров</AUTHOR>

<COVERIMAGE Source="faun" />

</BOOK>

В элементе Документ атрибуту Source элемента COVERIMAGE присвоено имя внешнего примитива, который содержит графические данные для отображения рисунка обложки. Поскольку Source имеет тип ENTITY, ему можно присвоить имя общего внешнего не разбираемого примитива. Фактически единственный способ использования этого типа примитива состоит в присвоении его имени атрибуту с типом ENTITY или ENTITIES.

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