Книга: Технология XSLT
Определение нотации
Разделы на этой странице:
Определение нотации
С точки зрения физической модели, XML-документы являются не более чем текстом. Содержимое документов и их разметка имеет исключительно текстовый вид. Вместе с тем, во многих случаях документы должны включать данные других форматов, например, графические изображения или двоичные файлы. Несовместимость физической реализации XML и внешних данных такого типа не позволяет включать их в документ посредством обычных сущностей — для этих целей используются неразбираемые сущности и нотации.
Нотация — это ни что иное, как определение формата неразбираемой сущности. Нотация дает формату имя и предоставляет некоторую информацию о приложении, которое следует использовать для обработки этого формата.
Пример
Предположим, что мы используем графические изображения в формате GIF
, для просмотра которых используется приложение gif-viewer.exe
. Определение нотации будет иметь следующий вид:
<!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-документу).
Несмотря на то, что нотации являются довольно мощным механизмом, ввиду очевидной сложности, широкого распространения их использование не получило. Почти того же самого эффекта можно добиться более простыми способами, например, используя в элементах дополнительные атрибуты.
- 1.2. Определение количества информации. Единицы измерения количества информации
- Определение версии клиента
- Определение пользовательского формата числовых данных
- Определение целей. Построение цепочек
- Определение необходимого системного вызова
- Раздел 1 Лояльность: определение и ключевые факторы
- Определение позиционного уровня
- 3.3. Определение объектов защиты
- Определение собственной миссии
- Определение факторов риска
- Определение контекстно-связанных объектов
- Определение ОС