Выбрать главу

<!NOTATION GIF SYSTEM "gif-viewer.ехе">

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

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

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

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

<!NOTATION имя PUBLIC "публичный ид-р">

Если информация о вспомогательном приложении несущественна, можно воспользоваться определением следующего вида:

<!NOTATION имя SYSTEM "">

Существует два основных способа применения нотаций. Первый — объявление неразбираемых сущностей и использование их имен в атрибутах типа ENTITY или ENTITIES, второй — указание имени нотации в атрибуте типа NOTATION для того, чтобы задать формат данных, который содержит данный элемент.

Первый способ можно продемонстрировать простым документом, который задает меню (листинг 1.5).

Листинг 1.5. Использование неразбираемых сущностей в атрибутах элементов

<!DOCTYPE menu [

 <!ELEMENT menu (menuitem*)>

 <!ELEMENT menuitem EMPTY>

 <!ATTLIST menuitem

  image ENTITY #REQUIRED

  title CDATA #REQUIRED

  href CDATA #REQUIRED>

 <!NOTATION gif SYSTEM "gif-viewer.exe">

 <!NOTATION jpg SYSTEM "jpg-viewer.exe">

 <!ENTITY news SYSTEM "news.gif" NDATA gif>

 <!ENTITY products SYSTEM "prod.jpg" NDATA jpg>

 <!ENTITY support SYSTEM "support.gif" NDATA gif>

]>

<menu>

 <menuitem image="news" title="News" href="news.htm"/>

 <menuitem image="products" title="Products" href="prods.htm"/>

 <menuitem image="support" title="Support" href="support.htm"/>

</menu>

Проанализируем декларацию типа этого документа.

□ Декларация типа <!DOCTYPE menu [..] > говорит о том, что корневым элементом этого документа является элемент menu.

□ В соответствии с определением <!ELEMENT menu (menuitem* )> этот элемент состоит из нескольких субэлементов menuitem.

□ В соответствии с определением <!ELEMENT menuitem EMPTY> элемент menuitem должен быть пустым.

□ Запись <!ATTLIST menuitem ... > определяет в элементе menuitem следующие атрибуты:

 • обязательный атрибут image, в котором должно указываться имя сущности;

 • обязательный атрибут title, содержащий символьные данные;

 • обязательный атрибут href, содержащий символьные данные.

□ Запись <!NOTATION gif SYSTEM "gif-viewer.exe"> определяет нотацию с именем gif и закрепляет за ней приложение gif-viewer.exe.

□ Запись <!NOTATION jpg SYSTEM "jpg-viewer.ехе"> определяет нотацию с именем jpg и закрепляет за ней приложение jpg-viewer.exe.

□ Запись <!ENTITY news SYSTEM "news.gif" NDATA gif> определяет внешнюю неразбираемую сущность с именем news, которая имеет формат (нотацию) gif.

□ Запись <!ENTITY products SYSTEM "prod.jpg" NDATA jpg> определяет внешнюю неразбираемую сущность с именем products, которая имеет нотацию jpg.

□ Запись <!ENTITY support SYSTEM "support.gif" NDATA gif> определяет внешнюю неразбираемую сущность с именем support, которая имеет нотацию gif.

Посмотрим теперь, какую информацию нам дают такие громоздкие определения. Обратимся к записи одного из элементов menuitem:

<menuitem image="products" title="Products" href="prods.htm"/>

С атрибутами title и href все ясно: они содержат простые символьные данные. Атрибут image несколько сложнее, он предоставляет гораздо больше информации. Типом этого атрибута является ENTITY, значит текст, который он содержит, является не просто символьными данными: он задает имя сущности, связанной с данным атрибутом. Иначе говоря, с атрибутом image связывается сущность.

Анализируя определение сущности products, обрабатывающая программа может понять, что это — неразбираемая внешняя сущность формата jpg, которая хранится в файле prod.jpg и для обработки которой можно использовать приложение jpg-viewer.exe.

Вторым способом использования нотаций является присвоение определенного формата содержимому элемента. Один (но не более чем один) из атрибутов элемента может иметь тип NOTATION. Значением этого атрибута должно быть имя нотации, которое и будет задавать формат содержимого элемента.

Пример
Листинг 1.6. Использование нотаций для определения формата содержимого элемента

<!DOCTYPE root [

 <!ELEMENT root (#PCDATA)>

 <!ATTLIST root

  type NOTATION (rtf|htm|txt) #REQUIRED>

 <[NOTATION rtf SYSTEM "winword.exe">

 <!NOTATION htm SYSTEM "iexplore.exe">

 <!NOTATION txt SYSTEM "notepad.exe">

]>

<root type="htm">

 <![CDATA[

  <html>

   <head>

    ...

   </head>

   <body>

    ...

   </body>

  </html>]]>

</root>

В этом документе определяется три нотации, три формата данных: rtf, htm и txt. Атрибут type элемента root указывает формат данных, которые содержатся в этом элементе — в данном случае это "htm" (что, очевидно, соответствует HTML-документу).

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

Символьные данные в XML-документах

Каковы бы ни были структура и синтаксис текстового документа, основой его всегда являются символы. Для хранения и обработки текста на компьютерах, которые по своей природе являются цифровыми устройствами, каждому символу нужно поставить в соответствие числовой код.