Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

<!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="#"/>

 <menuitem image="products" title="Products" href="#"/>

 <menuitem image="support" title="Support" href="#"/>

</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="#"/>

С атрибутами

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-документах

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

Проблема многих языков заключается в том, что для них существует несколько альтернативных кодировок символов. Например, для кириллицы существуют такие кодировки, как CP-866, KOI8-R, CP-1251, ISO-8859-5, кодовая страница Macintosh и другие, но вместе с тем не существует единого стандарта, принятого де-факто. В итоге, для того, чтобы быть уверенным, что документ будет прочтен, его нужно представлять в трех или четырех кодировках, что очень неудобно.

Для того чтобы решить эти и некоторые другие проблемы, был создан стандарт Unicode. Unicode присваивает уникальный код любому символу, независимо от платформы, независимо от программы, независимо от языка. Символам кириллицы Unicode присваивает коды в диапазоне от

#x400
до
#x4ff
. Таблица кодов для кириллицы может быть найдена в формате PDF на Web-сайте Unicode:

Поделиться с друзьями: