- Описание структуры XML документа средствами DTD – Document Type Definition
- КОНСТРУКЦИИDTD
- ОБЪЯВЛЕНИЕ ТИПА ЭЛЕМЕНТА
- ОБЪЯВЛЕНИЕ АТРИБУТОВ
- ОБЪЯВЛЕНИЕ СУЩНОСТЕЙ
- ОБЪЯВЛЕНИЕ ОБОЗНАЧЕНИЯ (NOTATION)
- РАЗМЕЩЕНИЕDTD
- XML DTD — проверка грамматики XML-документов (валидация) при помощи DTD
- Что такое DTD в XML и для чего он нужен
- Недостатки XML DTD
- Объявление элементов, атрибутов и сущностей в DTD. Модификаторы «*», «?», «+»
- Языки описания cхем XML
- DTD схема
Описание структуры XML документа средствами DTD – Document Type Definition
Шпаргалка по DTD.
DTD – Один из способов формализованного описания схемы документа XML, сделанного на языке, понятном программе-анализатору.
В настоящее время идет отказ от использования DTD в пользу XSD (XML Schema Definition), по ряду причин:
- DTD использует отличный от XML синтаксис.
- Отсутствует типизация узлов.
- Отсутствует поддержка пространств имён.
Тем не менее этот способ ещё широко применяется поскольку является более простым и удобным для описания несложных схем документов.
КОНСТРУКЦИИ DTD
Описание схемы состоит из объявлений разметки (markup declaration), начинающихся с пары символов “ ”
ОБЪЯВЛЕНИЕ ТИПА ЭЛЕМЕНТА
(должен быть описан каждый элемент документа)
- EMPTY – пустой (например
) - ANY – любое содержимое (встречается редко)
- (#PCDATA)– только символьные данные
- (список имен вложенных элементов ч.з. запятую) – вложенные элементы должны следовать в документе в том порядке, в котором они перечислены в объявлении. Объявляется только один уровень вложенности. Элементы можно группировать скобками.
Использование разделителя “|” между элементами указывает, что встречается один из разделенных элементов.
После элементов или скобок:
- “?” – встречается 0 или 1 раз
- “*” – 0 или несколько раз
- “+” – 1 или несколько раз
ОБЪЯВЛЕНИЕ АТРИБУТОВ
Атрибуты объявляются после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком.
Для каждого атрибута записывается его имя, тип и признак обязательности.
Типы атрибутов:
- CDATA – (Character set of data) строка символов
- Список значений атрибута в скобках, перечисл чз “|”
- ID – уникальный идентификатор
- IDREF – идентификатор, содержащий одно из значений атрибута ID, исп в качестве ссылки на др элементы
- IDREFS – идентификатор, содержащий набор значений атрибута типа ID, перечисленных через пробел , так же исп в качестве ссылки сразу на несколько элементов.
- ENTITY – имя не проверяемой анализатором сущности (объявленные в том же описанииDTD)
- ENTITIES – имена не проверяемых анализатором сущностей.
- NMTOKEN – слово, содержащее только символы, применяемые в именах (имена др элементов или атрибутов, например чтобы ссылаться на них)
- NMTOKENS – слова, перечисленные через пробелы
- NOTATION – обозначение (обозначения, расшифрованные в описанииDTD)
- NOTATIONS – список нотаций
признак обязательности:
- Значение атрибута по умолчанию – указывается в кавычках и обозначает что атрибут необязателен.
- #REQUIRED – атрибут надо обязательно записывать в элементе.
- #IMPLIED – атрибут необязателен, у него нет значения по умолчанию.
- #FIXED – у атрибута есть только одно значение, кот записывается тут же через пробел.
При исп пространства имен надо всегда указывать уточненное (QName), а не локальное имя.
Атрибуты не входят в пространство имен по умолчанию.
Атрибуты “xml:lang” и “xml:space” так же дол быть объявлены в DTD в случае их применения
ОБЪЯВЛЕНИЕ СУЩНОСТЕЙ
Внутренние сущности – задаются при объявлении сущности.
— можно применять дальше в самом DTD ниже объявления.
Внешние сущности – содержатся в отдельном файле или встроены в программу-анализатор.
Параметризованные сущности – исп только внутри описания DTD
Ссылка на параметризированную сущность начинается не с “&”, а с “%” !
Сущности делятся на разбираемые(parsed) и не разбираемые (unparsed). Разбираемые предст собой фрагмент документа XML или целый документ и подлежат обработке программой-анализатором после подстановки. После подстановки разборки сущность становится частью XML документа.
Двоичный программный код, чертеж, изображение и др. не надо обрабатывать средствами XML, для этого сущность надо объявить не разбираемой . Для этого в конце объявления сущности делается пометка “NDATA” и указывается обозначение (notation) вставляемого объекта.
ПРЕДОПРЕДЕЛЕННЫЕ СУЩНОСТИ В XML
ОБЪЯВЛЕНИЕ ОБОЗНАЧЕНИЯ (NOTATION)
Объявляются подобно сущностям, также могут быть внутренними и внешними.
Внутренняя
Внешняя
SYSTEM | PUBLIC — в данном случае равнозначны т.к. в public не обязательно общеизвестная ссылка.
РАЗМЕЩЕНИЕ DTD
Либо в отдельном файле “*.dtd” указав его имя в кавычках во второй части пролога DOCTYPE, либо включить описание непосредственно во вторую часть пролога, заключив его в квадратные скобки.
Источник
XML DTD — проверка грамматики XML-документов (валидация) при помощи DTD
Это очередная статья в цикле «Основы XML» и в ней мы рассмотрим основы описания структуры XML данных при помощи DTD. Это довольно таки старый способ описания структуры XML-документов, но он до сих пор используется, поэтому мы его все же рассмотрим.
Также хочу отметить, что это отличный способ показать, как в XML идет проверка содержимого документа, его грамматики и т.д. Более новый и совершенный способ описания структуры XML-документов с использованием технологии XML Schema мы рассмотрим в следующей статье, ну а пока перейдем непосредственно к изучению DTD XML.
В рамках данной статьи мы рассмотрим сразу несколько важных моментов. Это что такое XML DTD и для чего он нужен, поговорим о недостатках DTD, а также научимся самостоятельно составлять собственный DTD для валидации XML-документов. Все это, как обычно, будет изложено пошагово, максимально кратко и понятно с целью экономии вашего времени.
Что такое DTD в XML и для чего он нужен
DTD – это язык описания, который позволяет нам определить, какие элементы должны быть в XML-документе, сколько раз они должны повторяться, какие атрибуты должны быть у этих элементов, какие атрибуты обязательные и какие не обязательные, а также какие сущности могут использоваться в документе. Подробнее про конструкции XML читайте в статье «Элементы, теги и атрибуты XML».
Если говорить кратко, то DTD в XML используется для проверки грамматики документа и соответствия его стандарту (тому, который придумал разработчик или вы сами). Это позволяет парсеру (обработчику) на этапе обработки определить, соответствует ли документ нашим требованиям. То есть, проходит валидация XML-документа.
Необходимость проверки грамматики XML-документов заключается в следующем:
- XML-документ может быть предназначен не для вашей системы.
- XML-документ может содержать неправильные данные.
- XML-документ может содержать ошибки в структуре (Разметка и структура XML документов).
Итак, мы разобрались с тем, что такое XML DTD и зачем он нужен. Теперь давайте кратко рассмотрим недостатки DTD, после чего перейдем непосредственно к рассмотрению процесса создания DTD файлов для валидации XML-документов.
Недостатки XML DTD
- Отличный от XML синтаксис языка. Это вызывает множество проблем, таких как, например, проблемы с кодировкой или невозможность отслеживать ошибки.
- Нет проверки типов данных. В DTD есть только один тип – строка.
- В DTD нет пространств имен. Нельзя поставить в соответствие документу два и более DTD описаний.
Это был краткий список недостатков DTD, которые с успехом исправлены в XML схемах, о которых мы поговорим в следующих статьях.
Объявление элементов, атрибутов и сущностей в DTD. Модификаторы «*», «?», «+»
Для объявления элементов, атрибутов и сущностей в DTD используются специальные декларации и модификаторы. Чтобы подробно во всем разобраться, давайте для начала рассмотрим теоритическую информацию, а затем во второй части статьи перейдем к практическим примерам.
Определение элемента XML и последовательности элементов XML
Элемент book содержит по одному элементу title, author, price и description.
Альтернативы элементов
Элемент pricelist содержит элементы title, price и один элемент из трех на выбор – author, company либо sample.
Пустые элементы
Элемент none должен быть пустым.
Объявление атрибута
Элемент pricelist может содержать два атрибута – атрибут id и атрибут name. При этом атрибут id является обязательным, так как указано #REQUIRED, а атрибут name – не обязательным (указано #IMPLIED). В свою очередь CDATA указывает обработчику, что разбирать содержимое атрибутов не нужно.
Определение сущностей
Если встретится сущность «&myname;», то вместо нее автоматически подставится «Дмитрий Денисов».
Модификаторы (объясняют повторения элементов)
* — ноль или много.
? – ноль или один.
+ — один или много.
Элемент books может содержать один или более элементов book.
Теперь давайте рассмотрим, как это все выглядит на более практических примерах.
Создание DTD-файла для валидации XML-документа на примере прайс-листа книг
Пусть у нас будет все тот же прайс-лист книг, который мы используем для примеров практически в каждой статье про XML. Сам XML-документ будет выглядеть примерно следующим образом.
Конечно, вышеприведенный пример не является пределом мечтаний, но для примера вполне сойдет. Как видно с примера, у нас есть корневой элемент pricelist, который содержит вложенные элементы book. Внутри элементов book находятся элементы title, author, price и возможно description, которые могут содержать какие-то текстовые данные.
Для валидации данного прайс-листа мы можем использовать DTD-документ следующего содержания.
Теперь разберем все более подробно.
- — декларируем корневой элемент books и в скобках указываем, что он может содержать. В данном случае он может содержать один или более элементов book (плюсик означает один или более, см. выше).
- — определяем элемент book. Элемент book может содержать один элемент title, один или более элементов author (плюсик), один элемент price и один или ни одного элемента description (знак вопроса).
- — определяем элемент title. В качестве содержимого элемента указываем #PCDATA. Это означает, что анализатор обязан разбирать то, что находится внутри этого элемента.
- Аналогичным образом определяем элементы author, price, description.
- — определяем сущность. Сначала пишем саму сущность, а затем в кавычках то, что будет выводиться на ее месте. По умолчанию в XML определено только 3 сущности. Это больше («>» — ) и амперсанд («&» — &). При желании вы можете создать неограниченное количество сущностей, используя данный способ. В качестве значений могут быть не только слова, но и целые предложения значительного объема.
Подключение DTD для валидации XML-документов
Декларативный способ
Данный способ очень редко используется, так как его суть состоит в создании самодостаточных документов. То есть, документ будет сразу содержать и DTD и XML. Для добавления DTD в XML используется следующая конструкция.
где вместо DOCUMENT указываем корневой элемент XML-документа.
Для наглядности рассмотрим пример готового самодостаточного документа с декларативным способом включения DTD.
Внешнее определение DTD — подключение DTD-документа
Суть данного метода состоит в том, чтобы подключить к XML-документу файл DTD при помощи следующей конструкции.
где DOCUMENT – указываем корневой элемент XML-документа.
file.dtd – ссылка на файл DTD.
Для наглядности рассмотрим следующий пример.
На этом данная статья подошла к концу. Все основные моменты при работе с XML DTD мы рассмотрели и, надеюсь, у меня получилось понятно все объяснить. Если вы не хотите пропустить выпуска других уроков по XML и XSLT, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.
На этом все. Удачи вам и успехов в изучении XML!
Источник
Языки описания cхем XML
Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных «самодеятельных» тэгов используются схемы. Они необходимы для того, чтобы:
- описать, что именно является разметкой;
- описать точно, что означает разметка.
Наиболее известными языками описания схем являются следующие:
- DTD (Document Type Definition) — язык определения типа документов, который первоначально использовался в качестве язык описания структуры SGML-документа.
- XDR (XML Data Reduced) – диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.
- XML Schema или просто XSD ( язык определения схем XML) – рекомендация консорциума W3C с 2001 года.
Рассмотрим подробнее первые два из них. Третий язык описания схем рассматривается в лабораторной работе 11.
DTD схема
Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML .
В рамках DTD модель содержимого XML документа можно описать следующим образом:
Каждый элемент документа может иметь один из типов:
Содержание | Синтаксис | Комментарий |
---|---|---|
Данные | Содержит только текстовые данные | |
Другие элементы | Содержит только дочерние элементы | |
Смешанное | Содержит комбинацию текстовых данных и дочерних элементов | |
EMPTY | Ничего не содержит | |
ANY | Может содержать текстовые данные или дочерние элементы |
Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:
При этом атрибут в DTD может иметь один из трех типов:
- Строка
- Маркированные атрибут
- Атрибута с перечислением
Кроме типа атрибута можно также задавать и его модальность:
Значение | Описание |
---|---|
#REQUIRED | Атрибут обязательно должен быть указан |
#FIXED | Значение атрибута не должно отличаться от указанного |
#IMPLIED | Необязательное значение |
Рассмотрим в качестве примера описание атрибутов строкового типа для элемента, описывающего некоторое сообщение:
Если этот элемент содержит атрибуты с перечислением, то их описание может выглядеть, например, следующим образом:
Маркированных атрибуты элемента могут быть четырех типов:
Значение | Описание |
---|---|
ID | Уникальный идентификатор элемента (начинается с буквы, двоеточия или подчеркивания) |
IDREF | Ссылка на элемент, содержащий атрибуты ID |
ENTITIES | Ссылка на внешний элемент |
NMTOKEN | Содержит буквы, цифры, точки, знаки подчеркивания, переносы, двоеточия, но не пробелы |
И, наконец, в DTD можно использовать следующие индикаторы вхождения последовательностей:
Символ | Пример | Описание |
---|---|---|
, | (a, b, c) | Последовательное использование элементов списка |
| | (a | b | c) | Используется один из членов списка |
date | Используется один и только один элемент | |
? | subject ? | Необязательное использование (0 или 1 раз) |
+ | paragraph+ | Используется один или несколько раз |
* | brother* | Используется ноль или несколько раз |
В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:
Исходный XML документ, удовлетворяющий данной схеме, может выглядеть, например, так:
Обратите внимание на 2-ю строчку документа, в которой указывается внешняя ссылка на файл , содержащий DTD схему.
В принципе, DTD допускает два способа использования в XML документе.
В заключение укажем на следующие недостатки DTD схем:
Источник