- •Оглавление
- •1. История появления xml и его особенности. Хорошо оформленный документ
- •2. Структура документа xml. Верный документ
- •3. Ссылки на сущности, секция cdata. Комментарии, атрибуты, имена
- •4. Пространства имён xml. Инструкции по обработке
- •5. Конструкции dtd: объявление типа элемента, объявление атрибутов
- •6. Конструкции dtd: объявление сущности, объявление обозначения
- •7. Размещение описания dtd. Программы-анализаторы xml
- •8. Описание схемы документа на языке xsd. Встроенные простые типы
- •9. Определение новых простых типов в xsd
- •10. Объявление элементов и их атрибутов в xsd
- •11. Определение сложных типов в xsd
- •12. Пространства имён языка xsd. Связь документа xml со своей схемой
- •13. Создание ссылок на языке xLink. Пространство имён языка xLink
- •14. Атрибуты, используемые при создании ссылок на языке xLink
- •15. Типы ссылок, создаваемых на языке xLink
- •16. Создание банка ссылок. Программы-обработчики атрибутов xLink
- •17. Таблицы стилей css в языке xml. Язык описания стилей xsl
- •18. Язык записи преобразований xslt бред, не стала разбираться, что из этого надо, а что нет
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 в любом порядке.