Опубликован: 24.01.2007 | Уровень: для всех | Доступ: платный
Лекция 6:

Определение и использование примитивов

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

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

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

Здесь ИмяПримитива есть имя примитива. Вы можете выбрать любое имя, следуя правилам, приведенным в разделе "Объявление общего внутреннего разбираемого примитива" ранее в этой лекции.

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

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

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

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

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

<?xml version="1.0" encoding="windows-1251" ?>
<!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>The Marble Faun</TITLE>
	<AUTHOR>Nathaniel Hawthorne</AUTHOR>
	<COVERIMAGE Source="faun" />
</BOOK>

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

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

Объявление нотаций

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

Нотация имеет следующую форму записи:

<!NOTATION ИмяНотации SYSTEM СистемЛитерал>

Здесь ИмяНотации есть имя нотации. Вы можете выбрать любое имя, при условии, что оно начинается с буквы или символа подчеркивания (_), после чего могут идти или не идти другие буквы, цифры, точки (.), тире (–) или символы подчеркивания. Лучше выбирать информативное имя, позволяющее идентифицировать формат. Например, если вы определяете нотацию, описывающую точечный формат (bitmap), вам следует использовать имя BMP.

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

  • URI программы, которая может обрабатывать или отображать формат данных, как в следующих примерах:
    <!NOTATION BMP SYSTEM "Pbrush.exe">
    <!NOTATION GIF SYSTEM "http://bogus.com/ShowGif.exe">
  • URI документа в сети, который описывает формат данных, например:
    <!NOTATION STRANGEFORMAT SYSTEM "http://bogus.com/StrangeFormat.htm">
  • Простое описание формата, например:
    <!NOTATION DOC SYSTEM "Microsoft Word document">

Дополнительная информация об URI и примеры приведены в разделе "Использование только внешнего подмножества DTD" в "Создание валидных XML-документов" .

Объявление параметрических примитивов

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

Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Денис Сафронов
Денис Сафронов
Россия
жылдыз насырбекова
жылдыз насырбекова
Киргизия, бишкек