Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
xml.docx
Скачиваний:
45
Добавлен:
16.04.2015
Размер:
115.97 Кб
Скачать

6. Конструкции dtd: объявление сущности, объявление обозначения

Ссылки на сущности используются как краткие обозначения для громоздких или часто повторяющихся фрагментов документа XML. Сами сущности (entity), подставляемые в документ вместо ссылок, объявляются в описании DTD.

Все сущности можно разделить на три группы:

внутренние сущности — задаются при объявлении сущности;

внешние сущности — содержатся в отдельных файлах или встроены в программу-анализатор;

параметризованные сущности — используются только внутри описания DTD.

Объявление внутренней сущности начинается с символов <!ENTITY, после которых идет имя сущности. Через пробел записывается сама сущность — ее значение в кавычках. Например:

<!ENTITY author "Александр Сергеевич Пушкин">

После такого объявления программа-анализатор, увидев в документе ссылку на сущность &author; подставит вместо нее имя, отчество и фамилию великого поэта. Ссылку на сущность можно применять тут же, в описании DTD, уже в следующем объявлении:

<!ENTITY cover "Автор &author;. Название &title;.">

Конечно, надо следить за тем, чтобы сущности author, title и cover не определялись друг через друга, образуя бесконечную рекурсию.

Такие сущности называются внутренними, потому что для их объявления не нужен никакой внешний объект. Сущность представлена тут же, в этом же объявлении. Сущности могут быть и внешними. Для внешних сущностей указывается только место их располо-жения в виде адреса URL Перед указанием адреса записывается одно из слов SYSTEM или PUBLIC. Вот примеры объявления внешних сущностей:

<!ENTITY tel

SYSTEM "http://www.tty.com/TelDef.xml">

<!ENTITY tel

PUBLIC "-//DTD/Teletanomy//TEXT The new teletanomy definition//EN" "http://www.tty.com/TelDef.xml">

Разница между пометками SYSTEM И PUBLIC заключается в том, что после слова PUBLIC идет какое-то общеизвестное объявление. Обычно здесь записывается известная ссылка, введенная консорциумом W3C или другой организацией. Часто значение такой ссылки встраивается прямо в программу-анализатор. Если программа-анализатор не найдет эту ссылку, то она воспользуется адресом URL, идущим за ссылкой.

Объявление параметризованных сущностей, используемых только внутри описания DTD, выполняется точно так же, как объявление внутренних и внешних сущностей, только между началом объявления <!ENTITY и именем сущности вставляется знак процента, отделенный пробелами:

<!ENTITY % lang "ru_RU">

Ссылка на параметризованную сущность начинается не с амперсанда, а со знака процента, в примере — %lang;. Ссылка %lang,- будет использована в описании DTD для обозначения языка и территории. Введение этой ссылки удобно тем, что при смене языка надо будет поменять значение ru_RU только в одном месте описания.

Все сущности можно разделить и по другому признаку — разбираемые (parsed) и не разбираемые (unparsed) программой-анализатором. Разбираемые сущности представляют собой фрагмент документа XML или целый документ и подлежат обработке программой-анализатором после подстановки их вместо ссылки на сущность. После подстановки разбираемая сущность становится просто частью документа XML.

Обозначение объявляется подобно сущности. Обозначения могут быть внутренними и внешними. При объявлении внутренних обозначений после символов <! NOTATION записывается имя обозначения, затем в кавычках — его расшифровка.

При объявлении внешних обозначений используются пометки SYSTEM ИЛИ PUBLIC, причем за словом PUBLIC не обязательно должна следовать общеизвестная ссылка, так что слова SYSTEM И PUBLIC здесь равнозначны.

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

Это объявление связывает обозначение image-gif с программой обработки изображений, находящейся в файле viewer.exe.

Описание DTD записной книжки. В первой строке слово ELEMENT означает, что элемент notebook может содержать вложенные элементы person, которые перечисляются в круглых скобках. Звездочка после закрывающей скобки означает, что их может быть сколько угодно.

Во второй строке объявляется элемент person. Он может содержать элементы name, birthday, address, phone-list. Порядок перечисления этих вложенных элементов в скобках должен соответствовать порядку их появления в документе.

Элемент name обязателен и может встретиться внутри элемента person только один раз.

Элементы birthday и phone-list необязательны, но могут встретиться только один раз.

Элемент address необязателен, его можно записать несколько раз.

Слово EMPTY в третьей строке листинга 2.1 означает, что элемент name — пустой.

Далее, слово ATTLIST начинает описание списка атрибутов элемента name. Для каждого атрибута указывается имя, тип и обязательность указания атрибута. Существует всего девять типов атрибута, они приведены выше, но чаще всего употребляется тип CDATA, означающий произвольную строку символов Unicode, или перечисляются значения типа. Так сделано в описании атрибута type элемента city, принимающего одно из трех значений: город, поселок или деревня. В кавычках показано значение по умолчанию город.

Объявление атрибута surname заканчивается пометкой #REQUIRED, означающей, что атрибут надо записывать обязательно. Атрибуты first и second помечены # IMPLIED. ЭТИ атрибуты необязательны. У атрибута type вместо этих пометок задано значение по умолчанию город. Такое объявление делает атрибут type необязательным.

При объявлении элемента phone-list звездочка поставлена после имени каждого вложенного элемента. После такого объявления вложенные элементы work-phone и home-phone можно записывать в документе XML в любом порядке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]