Я гуглил этот вопрос, но я не понимаю, что такое XML-схема и DTD (определение типа документа) и почему XML-схема является более мощной по сравнению с DTD.
Любое руководство будет высоко ценится.
Из раздела « Различия между DTD и схемой» статьи « Преобразование DTD в схему» :
Критическое различие между DTD и схемой XML заключается в том, что в схеме XML используется синтаксис на основе XML, в то время как DTD имеют уникальный синтаксис, сохраняемый в DTD SGML. Хотя DTD часто подвергаются критике из-за необходимости изучения нового синтаксиса, сам синтаксис довольно краткий. Противоположность верна для XML-схемы, которая является многословной, но также использует теги и XML, так что авторы XML должны находить синтаксис XML-схемы менее пугающим.
Целью DTD было сохранение уровня совместимости с SGML для приложений, которые могут захотеть преобразовать DTD SGML в XML DTD. Тем не менее, в соответствии с одной из целей XML, «краткость разметки XML имеет минимальное значение», нет реальной проблемы с кратким изложением синтаксиса.
[...]
Итак, каковы некоторые другие различия, которые могут быть особенно важны, когда мы конвертируем DTD? Давайте взглянем.
Typing
Наиболее существенным отличием между DTD и схемой XML является возможность создавать и использовать типы данных в схеме вместе с объявлениями элементов и атрибутов. На самом деле, это настолько важное различие, что половина Рекомендации XML Schema посвящена типизированию данных и XML Schema. Мы подробно рассмотрим типы данных в части III этой книги "Типы данных XML-схемы".
[...]
Ограничения вхождения
Другая область, где DTD и Схема значительно различаются, связана с ограничениями вхождения. Если вы вспомните из наших предыдущих примеров в главе 2 «Структура схемы» (или свою собственную работу с DTD), есть три символа, которые вы можете использовать для ограничения числа вхождений элемента: *, + и?.
[...]
Перечисления
Итак, допустим, у нас был элемент, и мы хотели иметь возможность определить атрибут размера для рубашки, который позволял пользователям выбирать размер: маленький, средний или большой. Наш DTD будет выглядеть так:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
Но что, если мы хотим
size
быть элементом? Мы не можем сделать это с DTD. DTD не обеспечивают перечисления в текстовом содержимом элемента. Однако из-за типов данных в Schema, когда мы объявили перечисление в предыдущем примере, мы фактически создалиsimpleType
вызов,size_values
который мы теперь можем использовать с элементом:<xs:element name="size" type="size_value">
[...]
Различия между определением схемы XML (XSD) и определением типа документа (DTD) включают:
ОБНОВЛЕНИЕ : 2015.08.26
Не все эти пункты являются на 100% точными, но вы понимаете суть.
С другой стороны:
источник
Как уже упоминалось многими людьми, XML-схема использует синтаксис на основе XML, а DTD имеют уникальный синтаксис. DTD не поддерживает типы данных, что имеет значение.
Давайте посмотрим на очень простой пример, в котором в университете несколько студентов, и у каждого студента есть два элемента: «имя» и «год». Обратите внимание, что я использую «// ->» в своем коде только для комментариев.
Сейчас я напишу этот пример как в DTD, так и в XSD.
DTD
Определение схемы XML (XSD)
источник
DTD предшествует XML и поэтому не является допустимым самим XML. Это, наверное, самая главная причина изобретения XSD.
источник
Сходства между XSD и DTD
Различия между XSD и DTD
Более того, хотя XSD немного многословен, его синтаксис является расширением XML, что делает его удобным для быстрого обучения.
источник
1
,0 or 1
,0 or more
, в то время как XSD можно указать минимальное и максимальное число.Одно из отличий состоит в том, что в DTD модель содержимого элемента полностью определяется его именем, независимо от того, где он появляется в документе:
Предполагая, что вы хотите иметь
person
элементname
name
сама имеет дочерние элементыfirst
иlast
.Как это
Если
city
элемент в том же документе также должен иметь «имя» дочерний элемент ОТД требует , чтобы этот элемент «имя» должен иметь дочерние элементыfirst
иlast
как хорошо. Несмотря на то, чтоcity.name
не требуетfirst
иlast
как дети.Напротив, XML-схема позволяет вам объявлять типы дочерних элементов локально; Вы можете объявить
name
дочерние элементы для обоихperson
иcity
отдельно. Таким образом, предоставляя им подходящие модели содержания в этих контекстах.Другим важным отличием является поддержка пространств имен. Поскольку DTD являются частью исходной спецификации XML (и унаследованы от SGML), они вообще не учитывают пространство имен, поскольку пространства имен XML были указаны позже. Вы можете использовать DTD в сочетании с пространствами имен, но это требует некоторых искажений, таких как принудительное определение префиксов в DTD и использование только этих префиксов вместо возможности использовать произвольные префиксы.
Для меня другие различия в основном поверхностны. Поддержка типов данных может быть легко добавлена к DTD, а синтаксис - это просто синтаксис. (Я, например, нахожу синтаксис схемы XML ужасным и никогда не захочу поддерживать схему XML вручную, чего я бы не сказал о схемах DTD или RELAX NG; если по какой-то причине мне нужна схема XML, я обычно пишу расслабьтесь и преобразуйте его
trang
.)источник
Сходства :
DTD и схемы выполняют одинаковые основные функции:
Отличия:
DTD лучше подходят для приложений с интенсивным использованием текста, в то время как схемы имеют ряд преимуществ для рабочих процессов с интенсивным использованием данных.
Схемы написаны на XML и, следовательно, следуют тем же правилам, в то время как DTD написаны на совершенно другом языке.
Примеры:
DTD:
XSD:
источник
DTD может иметь только два типа данных, CDATA и PCDATA. Но в схеме вы можете использовать все примитивные типы данных, которые вы используете в языке программирования, и вы можете гибко определять свои собственные типы данных.
Разработчик, создающий схему, может создавать собственные типы данных на основе основных типов данных и с использованием различных операторов и модификаторов.
источник
Когда впервые появился XML, нам сказали, что он решит все наши проблемы: XML будет удобным для пользователя, бесконечно расширяемым, избегает строгой типизации и не потребует никаких навыков программирования. Я узнал о DTD и написал свой собственный анализатор XML. Спустя 15 с лишним лет я вижу, что большая часть XML не удобна для пользователя и не очень расширяема (в зависимости от его использования). Как только некоторые умные засорения подключили XML к базе данных, я понял, что типы данных практически неизбежны. И вы должны увидеть XSLT (файл преобразования), с которым мне пришлось работать на днях. Если это не программирование, я не знаю, что это такое! В настоящее время нет ничего необычного в том, что все виды проблем, связанных с XML-данными или интерфейсами, испортились. Я люблю XML, но он далек от своей первоначальной альтруистической отправной точки.
Краткий ответ? DTD устарели в пользу XSD, потому что XSD позволяет вам определять структуру XML с большей точностью.
источник
XML DTD
Целью DTD является определение структуры документа XML. Он определяет структуру со списком юридических элементов:
XML-схема
Схема XML позволяет авторам схемы указывать, что данные о количестве элементов должны быть числовыми или, более конкретно, целыми числами. В следующем примере я использовал
string
:источник
DTD в значительной степени устарел, потому что он ограничен в своей полезности в качестве языка схемы, не поддерживает пространство имен и не поддерживает тип данных. Кроме того, синтаксис DTD довольно сложен, что затрудняет его понимание и поддержку.
источник
DTD указывает синтаксис элемента XML
XML-схемы являются альтернативой DTD от Microsoft для проверки XML
источник