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

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

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

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату