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

4.8. Объявление параметрического внешнего разбираемого примитива

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

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

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

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

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

<!ENTITY % declarations

SYSTEM "http://bogus.com/documents/Dedarations.dtd">

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

<!ENTITY % declarations SYSTEM "Declarations.dtd">

Относительные URI в XML-документах работают подобно относительным URL для HTML-страниц. Для более подробной информации об URI обратитесь к разделу 3.13 “Использование только внешнего подмножества DTD”.

Файл параметрического внешнего примитива должен содержать полные объявления разметки всех типов, допустимых в DTD. В частности, он может содержать объявления типа элемента, объявления списка атрибутов, объявления примитивов, объявления нотаций, инструкции по обработке, или комментарии. (Эти типы объявлений разметки описаны выше.) Также можно включать ссылки на параметрические примитивы и разделы INCLUDE и IGNORE. (См. раздел 3.15. ”Условия игнорирования разделов внешнего подмножества DTD”.)

Параметрические внешние разбираемые примитивы можно использовать для хранения группы взаимосвязанных объявлений. Допустим, вы занимаетесь продажей книг, CD-ROM, плакатов и другой продукции. Вы можете поместить объявления для каждого вида продукции в отдельный файл. Это позволит объединять эти группы объявлений различными способами. Например, вы хотели бы создать XML-документ, который описывает только имеющиеся у вас в наличии книги и CD-ROM. Для этого вы можете поместить объявления для книг и CD-ROM в DTD документа с помощью параметрических внешних разбираемых примитивов, как показано в следующем примере XML-документа:

<?xml version="1.0"?>

<!DOCTYPE INVENTORY

[

<!ELEMENT INVENTORY (BOOK | CD)*>

<!ENTITY % book_decls SYSTEM "Book.dtd">

OENTITY % cd_decls SYSTEM "CD.dtd">

%book_decls;

%cd_decls;

]

>

<INVENTORY>

<BOOK>

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

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

<PAGES>473</PAGES>

</BOOK>

<CD>

<CDTITLE>Большой концерт. Опус 3</CDTITLE>

<COMPOSER>Гандель</COMPOSER>

<LENGTH>72 минуты</LENGTH>

</CD>

<BOOK>

<BOOKTITLE>Следопыт</BOOKTITLE>

<AUTHOR>Д. Ф. Купер</AUTHOR>

<PAGES>444</PAGES>

</BOOK>

<!-- дополнительные виды продукции... -->

</INVENTORY>

Вот содержимое файла примитива Book.dtd:

<!ELEMENT BOOK (BOOKTITLE, AUTHOR, PAGES)>

<!ELEMENT BOOKTITLE (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT PAGES (#PCDATA)>

А вот содержимое файла примитива CD.dtd:

<!ELEMENTCD (CDTITLE, COMPOSER, LENGTH)>

<!ELEMENT CDTITLE (#PCDATA)>

<!ELEMENT COMPOSER (#PCDATA)>

<!ELEMENT LENGTH (#PCDATA)>

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