Валиков Алексей Н.
Шрифт:
<!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">