Определение типа документа — DTD
Можно сказать, что XML документы состоят из элементов и атрибутов. В DTD описываются и некоторые другие объекты, опредеделения которых смотрите ниже, но документы всегда поддерживают эти две основные концепции.
По отношению к документу DTD могут быть и . Внутренние DTD описываются в непосредственно в файле XML документа вот так:
DTD может также располагаться и во внешнем файле. Внешние DTD делятся на системные (SYSTEM) и общедоступные (PUBLIC). В любом случае файл DTD должен иметь расширение . Связывание системного DTD и XML документа выглядит следующим образом:
В данном случае анализатору указывается, что DTD находится во внешнем файле, по адресу «./dtd/msg_queue.dtd». Существует ряд общеизвестных DTD, разработанных для определенных целей. В случае использования такого DTD его объявление будет иметь несколько другой вид:
На то, что DTD является общеизвестным, указывает ключевое слово . Рассмотрим поподробнее строку «-//W3C//DTD XHTML 1.1//EN». Если DTD является стандартом ISO, то данная строка начинается словом ISO. Если DTD не является стандартом ISO, но используемый стандарт был принят группой стандартизации, то DTD начинается со знака (+). Если же но не был принят официально группой стандартизации, то объявление следует начинать со знака (-). Далее, с разделителем (//) следуют владелец данного DTD, имя DTD и язык. Из приведенного примера видно, что используется DTD, не стандартизованное официально, принадлежащее компании , с именем .
Приведем несколько доводов в пользу внешних DTD:
- Внешние DTD могут быть общеизвестными (public).
- Внешние DTD позволяют отделить структуру от содержания. Вы можете изменить и расширить правила словаря, не открывая содержания XML документов.
- Можно однажды написанное DTD использовать во множестве документов.
Далее в уроке подробно рассматриваются элементы DTD.
Сущности
В языке XML есть возможность продекларировать фрагменты содержания, а затем ссылаться на них при необходимости, что позволяет сэкономить время и силы разработчикам. Объявляя сущность в DTD мы определяем ее имя и содержание, на которое она ссылается. Ссылаясь на сущность, мы заставляем анализатор заменить ссылку на содержимое сущности. Сущности бывают
- (parsed entity) — содержимое сущности анализируется, т.е, например, при встрече в нем ссылок на другие сущности, они так же замещаются их содержимым; разметка внутри таких сущностей так же интерпретируется.
- (unparsed entity) — это не обязательно текст в XML формате, или совсем не текст (графика или другое мультимедиа содержание).
Ниже приведен пример объявления и использования анализируемых сущностей author и copyright (обратите внимание: сущность copyright ссылается на author):
Строка ENTITY author «Иванов Иван Иванович»> объявляет сущность author со значением «Иванов Иван Иванович». Ссылка на сущность выглядит как символьная подстановка в HTML: &author;. При разборе документа анализатор встретит ссылку на сущность и заменит ее на значение сущности. В итоге документ примет следующий вид:
Из приведенного рисунка видно, что ссылка на сущность &author; была замененна ее содержимым «Иванов Иван Иванович», причем и в «теле» другой сущности — ©right;. Анализируемые сущности могут также содержать и разметку.
Внешние сущности
Текст замещения может содержаться во внешнем файле, тогда объявление сущности будет выглядеть так:
XML DTD
XML документ с корректной синтаксической структурой является «синтаксически верным».
XML документ, прошедший проверку по DTD, является «синтаксически верным» и «валидным».
Что такое DTD?
DTD это аббревиатура обозначающая Определение типов документа (англ. Document Type Definition).
DTD определяет структуру XML документа, а также допустимые элементы и атрибуты.
Валидные XML документы
«Валидный» XML документ — это «синтаксически верный» XML документ, который также соответствует правилам DTD (определениям типов документов):
Tove Jani Напоминание Не забудь обо мне в эти выходные!
В приведенном примере, декларация DOCTYPE является ссылкой на внешний файл определений типов документа (DTD). Содержимое этого файла показано ниже.
XML DTD
Цель DTD состоит в том, чтобы определить структуру XML документа. Это делается путем определения списка допустимых элементов:
Приведенное выше DTD интерпретируется следующим образом:
- !DOCTYPE note определяет, что корневым элементом документа является note
- !ELEMENT note определяет, что элемент note содержит четыре элемента: to, from, heading, body
- !ELEMENT to определяет, что элемент to должен быть типа «#PCDATA»
- !ELEMENT from определяет, что элемент from должен быть типа «#PCDATA»
- !ELEMENT heading определяет, что элемент heading должен быть типа «#PCDATA»
- !ELEMENT body определяет, что элемент body должен быть типа «#PCDATA»
Примечание: #PCDATA означает разбираемые текстовые данные.
Использование DTD для определения сущностей
Определения типов документа (DTD) также можно использовать для декларации специальных символов и символьных строк, используемых в XML документе:
]> Tove Jani Напоминание Не забудь обо мне в эти выходные!
Сущность состоит из трех частей: амперсанда (&), имени сущности и точки с запятой (;).
Зачем нужно использовать DTD?
С DTD ваш XML файл может нести собственный формат.
С DTD различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.
С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.
Когда не стоит использовать DTD?
Вообще-то для работы XML не требуется DTD.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, то создание DTD может оказаться излишней тратой времени.
Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.
Язык XML — Documents Type Definitions (DTD)
В XML- документах DTD определяет набор действительных элементов, идентифицирует элементы, которые могут находиться в других элементах, и определяет действительные атрибуты для каждого из них. Синтаксис DTD весьма своеобразен и от автора-разработчика требуются дополнительные усилия при создании таких документов(сложность DTD является одной из причин того, что использование SGML, требующего определение DTD для любого документа, не получило столь широкого распространения как, например, HTML). Как уже отмечалось, в XML использовать DTD не обязательно — документы, созданные без этих правил, будут правильно обрабатываться программой-анализатором, если они удовлетворяют основным требованиям синтаксиса XML. Однако контроль за типами элементов и корректностью отношений между ними в этом случае будет полностью возлагаться на автора документа. До тех пор, пока грамматика нашего нового языка не описана, его сможем использовать только мы, и для этого мы будем вынуждены применять специально разработанное программное обеспечение, а не универсальные программы-анализаторы..
В DTD для XML используются следующие типы правил: правила для элементов и их атрибутов, описания категорий(макроопределений), описание форматов бинарных данных. Все они описывают основные конструкции языка — элементы, атрибуты, символьные константы внешние файлы бинарных данных.
Для того, чтобы использовать DTD в нашем документе, мы можем или описать его во внешнем файле и при описании DTD просто указать ссылку на этот файл или же непосредственно внутри самого документа выделить область, в которой определить нужные правила. В первом случае в документе указывается имя файла, содержащего DTD- описания:
Внутри же документа DTD- декларации включаются следующим образом:
В том случае, если используются одновременно внутренние и внешние описания, то программой-анализатором будут сначала рассматриваться внутренние, т.е. их приоритет выше. При проверке документа XML- процессор в первую очередь ищет DTD внутри документа. Если правила внутри документа не определены и не задан атрибут standalone =»yes» , то программа загрузит указанный внешний файл и правила, находящиеся в нем, будут считаны оттуда. Если же атрибут standalone имеет значение «yes«, то использование внешних DTD описаний будет запрещено.
Определение элемента
Элемент в DTD определяется с помощью дескриптора !ELEMENT, в котором указывается название элемента и структура его содержимого.
Например, для элемента можно определить следующее правило:
Ключевое слово ELEMENT указывает, что данной инструкцией будет описываться элемент XML. Внутри этой инструкции задается название элемента(flower) и тип его содержимого.
В определении элемента мы указываем сначала название элемента(flower), а затем его модель содержимого — определяем, какие другие элементы или типы данных могут встречаться внутри него. В данном случае содержимое элемента flower будет определяться при помощи специального маркера PCDATA( что означает parseable character data — любая информация, с которой может работать программа-анализатор). Существует еще две инструкции, определяющие тип содержимого: EMPTY,ANY. Первая указывает на то, что элемент должен быть пустым(например, ), вторая — на то, что содержимое элемента специально не описывается.
Последовательность дочерних для текущего элемента объектов задается в виде списка разделенных запятыми названий элементов. При этом для того, чтобы указать количество повторений включений этих элементов могут использоваться символы +,*, ? :
В этом примере указывается, что внутри элемента должны быть определены элементы title, author и table-of-contents, причем элемент title является обязательным элементом и может встречаться лишь однажды, элемент author может встречаться несколько раз, а элемент table-of-contents является опциональным, т.е. может отсутствовать. В том случае, если существует несколько возможных вариантов содержимого определяемого элемента, их следует разделять при помощи символа «|» :
Символ * в этом примере указывает на то, что определяемая последовательность внутренних элементов может быть повторена несколько раз или же совсем не использоваться.
Если в определении элемента указывается «смешанное» содержимое, т.е. текстовые данные или набор элементов, то необходимо сначала указать PCDATA, а затем разделенный символом «|» список элементов.
Пример корректного XML- документа:
]> .Marks avenue 12-12-12 46-23-62 info@j.com
Определение атрибутов
Списки атрибутов элемента определяются с помощью ключевого слова !ATTLIST. Внутри него задаются названия атрибутов, типы их значений и дополнительные параметры. Например, для элемента могут быть определены следующие атрибуты:
В данном примере для элемента article определяются три атрибута: id, about и type, которые имеют типы ID(идентификатор), CDATA и список возможных значений соответственно. Всего существует шесть возможных типов значений атрибута:
- CDATA — содержимым документа могут быть любые символьные данные
- ID — определяет уникальный идентификатор элемента в документе
- IDREF( IDREFS )- указывает, что значением атрибута должно выступать название(или несколько таких названий, разделенных пробелами во втором случае) уникального идентификатора определенного в этом документе элемента
- ENTITY( ENTITIES) — значение атрибута должно быть названием(или списком названий, если используется ENTITIES) компонента (макроопределения), определенного в документе
- NMTOKEN (NMTOKENS) — содержимым элемента может быть только одно отдельное слово(т.е. этот параметр является ограниченным вариантом CDATA)
- Список допустимых значений — определяется список значений, которые может иметь данный атрибут.
Также в определении атрибута можно использовать следующие параметры:
- #REQUIRED — определяет обязательный атрибут, который должен быть задан во всех элементах данного типа
- #IMPLIED — атрибут не является обязательным
- #FIXED «значение» — указывает, что атрибут должен иметь только указанное значение, однако само определение атрибута не является обязательным, но в процессе разбора его значение в любом случае будет передано программе-анализатору
- Значение — задает значение атрибута по умолчанию
Определение компонентов(макроопределений)
Компонент (entity) представляет собой определения, содержимое которых может быть повторно использовано в документе . В других языках программирования подобные элементы называются макроопределениями. Создаются DTD- компоненты при помощи инструкции !ENTITY:
Программа-анализатор, просматривая в первую очередь содержимое области DTD- определений, обработает эту инструкцию и при дальнейшем разборе документа будет использовать содержимое DTD- компонента в том месте, где будет встречаться его название. Т.е. теперь в документе мы можем использовать выражение &hello; , которое будет заменено на строчку «Мы рады приветствовать Вас»
В общем случае, внутри DTD можно задать три типа макроопределений:
Внутренние макроопределения — предназначены для определения строковой константы, с их помощью можно организовывать ссылки на часто изменяемую информацию, делая документ более читабельным. Внутренние компоненты включаются в документ при помощи амперсанта &
В XML существует пять предустановленных внутренних символьных констант:
- < — символ »
- > — символ «>»
- & — символ «&»
- ' — символ апострофа «'»
- " — символ двойной кавычки «»»
Внешние макроопределения — указывают на содержимое внешнего файла, причем этим содержимым могут быть как текстовые, так и двоичные данные. В первом случае в месте использования макроса будут вставлены текстовые строки, во втором — бинарные данные, которые анализатором не рассматриваются и используются внешними программами
Макроопределения правил — макроопределения параметров могут использоваться только внутри области DTD и обозначаются специальным символом %, вставляемым перед названием макроса. При этом содержимое компонента будет помещено непосредственно в текст DTD- правила
Например, для следующего фрагмента документа:
можно использовать более короткую форму записи:
Макроопределения часто используются для описания параметров в правилах атрибутов. В этом случае появляется возможность использовать одинаковые определения атрибутов для различных элементов:
Типизация данных
Довольно часто при создании XML- элемента разработчику требуется определить, данные какого типа могут использоваться в качестве его содержимого. Т.е. если мы определяем элемент
Если в качестве программы на стороне клиента используется верифицирующий XML-процессор, то информацию о типе можно передавать при помощи специально созданного для этого атрибута элемента, имеющего соответствующее DTD- определение. В процессе разбора программа-анализатор передаст значение этого атрибута клиентскому приложению, которое сможет использовать эту информацию должным образом. Например, чтобы указать, что содержимое элемента должно быть длинным целым, можно использовать следующее DTD- определение:
Задав атрибуту значение по умолчанию LONG и определив его как FIXED, мы позволили тем самым программе-клиенту получить необходимую информацию о типе содержимого данного элемента, и теперь она может самостоятельно определить соответствие типа этого содержимого указанному в DTD- определении .
Вот пример XML- документа, в котором определяются и используются несколько элементов с различными типами данных:
.. 5 2 32.5 true 18346 34 р. 28 к.
Как видно из примера, механизм создания элементов документа при этом нисколько не изменился. Все необходимая для проверки типов данных информация заложена в определения элементов внутри блока DTD.
В заключении хотелось бы отметить, что DTD предоставляет нам весьма удобный механизм осуществления контроля за содержимым документа. На сегодняшний день, практически все программы просмотра документов Интернет используют DTD-правила. Однако это далеко не единственный способ проверки корректности документа. В настоящий момент в W3 консорциуме находится на рассмотрении новый стандарт языка описания структуры документов, называемый схемами данных. Следующий раздел посвящен работе с ними.
Document Type Definition (DTD) — MIF’as
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Document Type Definition Objectives (DTD) To understand what a DTD is To be able to write DTDs To be able to declare elements and attributes in a DTD To understand the difference between general entities and parameter entities To be able to use conditional sections with entities To be able to use NOTATIONS To understand how a whitespace is to be processed Outline Introduction Parsers, Well-formed and Valid XML Documents Document Type Declaration Element Type Declarations Sequences, Pipe Characters and Occurrence EMPTY, Mixed Content and ANY Attribute Declarations Attribute Defaults (#REQUIRED, #IMPLIED, #FlXED) Attribute Types Tokenized Attribute Type (ID, IDREF, ENTITY, NMTOKEN) Enumerated Attribute Types Conditional Sections Whitespace Characters Internet and World Wide Web Resources Summary Introduction Document Tvpe Definitions (DTDs) define an XML document’s structure (e.g., what elements, attributes, etc. are permitted in the document). An XML document is not required to have a corresponding DTD. However, DTDs are often recommended to ensure document conformity,
- Page 2 and 3: especially in business-to-business
- Page 4 and 5: Xerces can be used to check a docum
- Page 6 and 7: indicates that element album contai
- Page 8 and 9: This is a simple formatted sentence
- Page 10 and 11: does not conform because attribute
- Page 12 and 13: and for entities assoc and text. A
- Page 14 and 15: A more restrictive attribute type i
- Page 16 and 17: Chairman Example 11 XMLdocument t
- Page 18 and 19: Attribute id is declared with token
- Page 20: 23. Attribute types are classified