XML DTD
XML документ с корректной синтаксической структурой является «синтаксически верным».
XML документ, прошедший проверку по DTD, является «синтаксически верным» и «валидным».
Валидные XML документы
«Валидный» XML документ — это «синтаксически верный» XML документ, который также соответствует правилам DTD (определениям типов документов):
В приведенном примере, декларация DOCTYPE является ссылкой на внешний файл определений типов документа (DTD). Содержимое этого файла показано ниже.
XML DTD
Цель DTD состоит в том, чтобы определить структуру XML документа. Это делается путем определения списка допустимых элементов:
Приведенное выше DTD интерпретируется следующим образом:
#PCDATA означает разбираемые текстовые данные.
Использование DTD для определения сущностей
Определения типов документа (DTD) также можно использовать для декларации специальных символов и символьных строк, используемых в XML документе:
Сущность состоит из трех частей: амперсанда (&), имени сущности и точки с запятой (;).
Зачем нужно использовать DTD?
С DTD ваш XML файл может нести собственный формат.
С DTD различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.
С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.
Когда не стоит использовать DTD?
Вообще-то для работы XML не требуется DTD.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, то создание DTD может оказаться излишней тратой времени.
Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.
DTD – Определение типа документа (Document Type Definition)
Расширение DTD
Чем открыть файл DTD
В Windows: Altova XMLSpy, Progress Stylus Studio, SyncRO Soft oXygen XML Editor, Liquid Technologies Liquid XML Studio, JAPISoft EditiX, Microsoft Visual Studio 2010, Microsoft Notepad, Adobe ExtendScript, Adobe Dreamweaver, NotePad++ text editor, Microsoft Internet Explorer, Nvu, любой другой текстовый редактор
В Mac OS: Altova XMLSpy, MacroMates TextMate, SyncRO Soft oXygen XML Editor, Apple TextEdit, любой другой текстовый редактор
В Linux: Altova XMLSpy, SyncRO Soft oXygen XML Editor, gedit
Описание расширения DTD
Популярность:
Расширение DTD (англ. Document Type Definition определение типа документа) – это текстовый файл, который определяет элементы и атрибуты, используемые в XML, SGML, HTML или документе XHTML, может также определить порядок и вложенность элементов и их атрибутов. Документ DTD описан специальным языком DTD (DTD schema language). DTD может быть описан как внутри документа, так и вынесен в отдельный файл, по аналогии с каскадными таблицами стилей CSS. DTD файлы используются для проверки, является ли файл действительным документом. Например, до разбора XML-файла, программа может сначала проверить объявления разметки с помощью файла DTD, чтобы убедиться, что XML может быть проанализирован должным образом. Т.к. форматы XML и SGML различны, то и соответствующие файлы DTD будут иметь некоторые особенности в зависимости от документа.
Где – это объявление DTD
– это элемент документа, который указывает, что элементы to, from, heading, body должны обязательно содержатся внутри корневого элемента note.
Пример XML-документа, использующего этот DTD:
Михаил
Ирина
Напоминание
Не забудь о встрече!
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 DTD и зачем он нужен. Теперь давайте кратко рассмотрим недостатки DTD, после чего перейдем непосредственно к рассмотрению процесса создания DTD файлов для валидации XML-документов.
Недостатки XML 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-документ следующего содержания.
Теперь разберем все более подробно.
Подключение DTD для валидации XML-документов
Декларативный способ
Данный способ очень редко используется, так как его суть состоит в создании самодостаточных документов. То есть, документ будет сразу содержать и DTD и XML. Для добавления DTD в XML используется следующая конструкция.
где вместо DOCUMENT указываем корневой элемент XML-документа.
Для наглядности рассмотрим пример готового самодостаточного документа с декларативным способом включения DTD.
Внешнее определение DTD — подключение DTD-документа
Суть данного метода состоит в том, чтобы подключить к XML-документу файл DTD при помощи следующей конструкции.
где DOCUMENT – указываем корневой элемент XML-документа.
file.dtd – ссылка на файл DTD.
Для наглядности рассмотрим следующий пример.
На этом данная статья подошла к концу. Все основные моменты при работе с XML DTD мы рассмотрели и, надеюсь, у меня получилось понятно все объяснить. Если вы не хотите пропустить выпуска других уроков по XML и XSLT, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.
На этом все. Удачи вам и успехов в изучении XML!
Определение типа документа (DTD)
Зачем нужно DTD.
Написание определений DTD: общие принципы.
Ассоциирование DTD с документом XML
Блок внутренней декларации разметки тега DOCTYPE состоит из левой квадратной скобки, списка деклараций и правой квадратной скобки:
Если внешние DTD переписываются очень часто, они начинают терять свое значение, а это признак плохого первоначального проекта.
Основные декларации разметки
| Конструкция DTD | Значение |
|---|---|
| ELEMENT | Декларация типа элемента XML |
| ATTLIST | Декларация атрибутов, которые могут быть назначены конкретным типам элементов, а также разрешенных значений этих атрибутов |
| ENTITY | Декларация повторно используемого содержания |
| NOTATION | Декларация форматирования для внешнего содержания, которое не должно быть проанализировано (например, двоичные данные), а также для внешних приложений, обрабатывающих содержание |
Нотации описывают содержание, разработанное не на языке XML. Используются они для того, чтобы объявить конкретный класс данных и связать его с внешней программой. Эта внешняя программа становится обработчиком объявленного класса данных. Например, связав с документом изображение в формате JPEG, разработчик желает, чтобы программа приняла и визуализировала двоичные данные в этом формате. Конечно, в таком случае документ зависит от того, какой обработчик имеется в системе, получающей документ. В интересах портативности и переносимости некоторые авторы не приводят ссылки на обработчики. В таком случае нотация превращается просто в механизм набора текста.
Объявление элементов.
Иногда из нескольких вложенных элементов или списков (список элементов указанных в скобках) может встретиться только один. В таком случае их имена перечисляются через вертикальную черту( | ). Например:
Элементы появляются именно в таком порядке.
Если вложенный элемент можно записать в объявляемом элементе несколько раз, то необходимо это указать используя звездочку, плюс или вопросительным знак.
DTD — Краткое руководство
Объявление типа документа XML, широко известное как DTD, является способом точного описания языка XML. DTD проверяют правильность структуры и словаря XML-документа по отношению к грамматическим правилам соответствующего языка XML.
XML-документ может быть определен как —
Следующая диаграмма показывает, что DTD используется для структурирования XML-документа:
DTD может быть классифицирован на основе декларации в XML-документе, например:
Мы узнаем больше об этом в главе Синтаксис DTD
Характеристики
Ниже приведены некоторые важные моменты, которые описывает DTD:
элементы, которые могут появиться в документе XML.
порядок, в котором они могут появляться.
необязательные и обязательные элементы.
атрибуты элемента и являются ли они необязательными или обязательными.
могут ли атрибуты иметь значения по умолчанию.
элементы, которые могут появиться в документе XML.
порядок, в котором они могут появляться.
необязательные и обязательные элементы.
атрибуты элемента и являются ли они необязательными или обязательными.
могут ли атрибуты иметь значения по умолчанию.
Преимущества использования DTD
Документация — Вы можете определить свой собственный формат для файлов XML. Глядя на этот документ, пользователь / разработчик может понять структуру данных.
Проверка — это дает возможность проверить достоверность файлов XML, проверив, отображаются ли элементы в правильном порядке, имеются ли обязательные элементы и атрибуты, не были ли вставлены элементы и атрибуты неправильно, и так далее.
Документация — Вы можете определить свой собственный формат для файлов XML. Глядя на этот документ, пользователь / разработчик может понять структуру данных.
Проверка — это дает возможность проверить достоверность файлов XML, проверив, отображаются ли элементы в правильном порядке, имеются ли обязательные элементы и атрибуты, не были ли вставлены элементы и атрибуты неправильно, и так далее.
Недостатки использования DTD
Он не поддерживает пространства имен. Пространство имен — это механизм, с помощью которого имена элементов и атрибутов могут быть назначены группам. Однако в DTD пространства имен должны быть определены внутри DTD, что нарушает цель использования пространств имен.
Поддерживается только тип данных текстовой строки.
Это не объектно-ориентированный. Следовательно, концепция наследования не может быть применена к DTD.
Ограниченные возможности выразить мощность элементов.
Он не поддерживает пространства имен. Пространство имен — это механизм, с помощью которого имена элементов и атрибутов могут быть назначены группам. Однако в DTD пространства имен должны быть определены внутри DTD, что нарушает цель использования пространств имен.
Поддерживается только тип данных текстовой строки.
Это не объектно-ориентированный. Следовательно, концепция наследования не может быть применена к DTD.
Ограниченные возможности выразить мощность элементов.
DTD — Синтаксис
XML DTD может быть либо указан внутри документа, либо его можно сохранить в отдельном документе, а затем документ можно связать с документом DTD для его использования.
Синтаксис
Основной синтаксис DTD выглядит следующим образом —
В приведенном выше синтаксисе —
Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.
DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется внешним подмножеством.
Элемент указывает синтаксическому анализатору проанализировать документ из указанного корневого элемента.
DTD-идентификатор — это идентификатор для определения типа документа, который может быть путем к файлу в системе или URL-адресом к файлу в Интернете. Если DTD указывает на внешний путь, он называется внешним подмножеством.
Внутренний DTD
Синтаксис
Синтаксис внутреннего DTD выглядит так:
где root-element — это имя корневого элемента, а element-объявлений — это место, где вы объявляете элементы.
пример
Ниже приведен простой пример внутреннего DTD —
Давайте пройдемся по приведенному выше коду —
Начать декларацию — Начните декларацию XML со следующего заявления.
Объявление DOCTYPE имеет восклицательный знак (!) В начале имени элемента. DOCTYPE сообщает анализатору, что DTD связан с этим документом XML.
Тело DTD — за объявлением DOCTYPE следует тело DTD, где вы объявляете элементы, атрибуты, сущности и нотации —
Завершение объявления — Наконец, раздел объявления DTD закрывается с помощью закрывающей скобки и закрывающей угловой скобки (]>). Это эффективно завершает определение, и после этого документ XML следует сразу же.
правила
Объявление типа документа должно появляться в начале документа (с предшествующим только заголовком XML) — оно не разрешено где-либо еще в документе.
Подобно объявлению DOCTYPE, объявления элементов должны начинаться с восклицательного знака.
Имя в объявлении типа документа должно соответствовать типу элемента корневого элемента.
Объявление типа документа должно появляться в начале документа (с предшествующим только заголовком XML) — оно не разрешено где-либо еще в документе.
Подобно объявлению DOCTYPE, объявления элементов должны начинаться с восклицательного знака.
Имя в объявлении типа документа должно соответствовать типу элемента корневого элемента.
Внешний DTD
Синтаксис
Ниже приводится синтаксис для внешнего DTD —
пример
В следующем примере показано использование внешнего DTD —
Содержимое файла DTD address.dtd выглядит так:
Системный идентификатор позволяет указать местоположение внешнего файла, содержащего объявления DTD. Синтаксис выглядит следующим образом —
Как вы можете видеть, он содержит ключевое слово SYSTEM и ссылку URI, указывающую на местоположение документа.
Публичные идентификаторы предоставляют механизм для определения местоположения ресурсов DTD и записываются следующим образом:
Как видите, он начинается с ключевого слова PUBLIC, за которым следует специальный идентификатор. Публичные идентификаторы используются для идентификации записи в каталоге. Публичные идентификаторы могут следовать любому формату, однако обычно используемый формат называется формальными общедоступными идентификаторами или FPI.
DTD — Компоненты
В этой главе мы обсудим компоненты XML с точки зрения DTD. DTD будет в основном содержать объявления следующих компонентов XML:
элементы
Элементы XML могут быть определены как строительные блоки документа XML. Элементы могут вести себя как контейнер для хранения текста, элементов, атрибутов, объектов мультимедиа или их комбинации.
Каждый документ XML содержит один или несколько элементов, границы которых либо ограничены начальными и конечными тегами, либо пустыми элементами.
пример
Ниже приведен простой пример элементов XML
Атрибуты
пример
Ниже приведен простой пример атрибутов XML —
Если атрибуты используются в XML DTD, их необходимо объявить, что будет подробно обсуждаться в главе Атрибуты DTD.
юридические лица
Сущности являются заполнителями в XML. Они могут быть объявлены в прологе документа или в DTD. Объекты могут быть в первую очередь классифицированы как —
Есть пять встроенных сущностей, которые играют в правильно сформированном XML, они —
Мы подробнее рассмотрим объявления сущностей в XML DTD в главе DTD Entities
DTD — Элементы
Элементы XML могут быть определены как строительные блоки документа XML. Элементы могут вести себя как контейнер для хранения текста, элементов, атрибутов, объектов мультимедиа или их комбинации.
Элемент DTD объявляется с объявлением ELEMENT. Когда файл XML проверяется DTD, анализатор сначала проверяет корневой элемент, а затем проверяются дочерние элементы.
Синтаксис
Все объявления элементов DTD имеют эту общую форму —
Объявление ELEMENT используется для указания синтаксического анализатора, который вы собираетесь определить элемент.
elementname — это имя элемента (также называемое универсальным идентификатором ), которое вы определяете.
content определяет, какой контент (если есть) может идти внутри элемента.
Объявление ELEMENT используется для указания синтаксического анализатора, который вы собираетесь определить элемент.
elementname — это имя элемента (также называемое универсальным идентификатором ), которое вы определяете.
content определяет, какой контент (если есть) может идти внутри элемента.
Типы содержимого элемента
Содержимое объявления элементов в DTD можно классифицировать следующим образом:
Пустой контент
Ниже приводится синтаксис объявления пустого элемента —
В приведенном выше синтаксисе —
ELEMENT — объявление элемента категории EMPTY
elementname — имя пустого элемента.
ELEMENT — объявление элемента категории EMPTY
elementname — имя пустого элемента.
Ниже приведен простой пример, демонстрирующий объявление пустого элемента —
Элемент Содержимое
В объявлении элемента с содержимым элемента содержимое будет допустимым элементом в скобках. Мы также можем включить более одного элемента.
Ниже приведен синтаксис объявления элемента с содержимым элемента:
ELEMENT — тег объявления элемента
elementname — это имя элемента.
ELEMENT — тег объявления элемента
elementname — это имя элемента.
Ниже приведен простой пример объявления элемента с содержимым элемента —
Список операторов и синтаксических правил
Ниже в таблице приведен список операторов и синтаксических правил, которые можно применять при определении дочерних элементов.
| оператор | Синтаксис | Описание | пример | |
|---|---|---|---|---|
| + | Это указывает на то, что дочерний элемент может встречаться один или несколько раз внутри родительского элемента. | |||
| * | Это указывает, что дочерний элемент может встречаться ноль или более раз внутри родительского элемента. | |||
| ? | Это указывает на то, что дочерний элемент может появляться ноль или один раз внутри родительского элемента. | |||
| , | Это дает последовательность дочерних элементов, разделенных запятой, которая должна быть включена в имя элемента. |
| Sr.No. | Тип и описание |
|---|---|
| 1 |






