Критическая разница между DTD
и XML-схема является той XML-схемой
использовать синтаксис на основе XML, тогда как
DTD имеют уникальный синтаксис
из SGML DTD. Хотя DTD
часто критикуют из-за этой необходимости
выучить новый синтаксис, синтаксис
само по себе довольно кратко. Противоположность
верно для XML-схемы, которые
многословный, но также использовать теги и
XML, так что авторы XML должны найти
Синтаксис XML Schema меньше
пугающий.
Целью DTD было сохранение уровня
совместимости с SGML для
приложения, которые могут захотеть
конвертировать SGML DTD в XML DTD.
Однако в соответствии с одним из
цели XML, "краткость в разметке XML"
имеет минимальное значение, "нет
реальная забота о сохранении синтаксиса
краток.
[...]
Так, каковы некоторые другие различия, которые могут быть особенно важны, когда мы конвертируем DTD? Давайте посмотрим.
Typing
Самым значительным отличием между DTD и схемой XML является возможность создавать и использовать типы данных в схеме вместе с объявлениями элементов и атрибутов. На самом деле, это настолько важное различие, что половина Рекомендации по XML-схемам посвящена типизации данных и XML-схеме. Мы подробно рассмотрим типы данных в части 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">
[...]