Подтвердить что ты не робот

DTD или XML-схема. Какая из них лучше?

Каковы плюсы и минусы в DTD и XML-схемах (я даже не уверен, что такое официальное имя последнего!)? Что лучше? Почему нам нужно два способа сделать одно и то же?

Изменить: я нашел это в статье, которую я читал, и это побудило меня задать вопрос:

Почему язык схемы W3C XML?

Язык XML-схемы W3C не является только язык схемы. Фактически, XML спецификация описывает тип документа (DTD) как способ выразить схему. К тому же, предварительные версии JAXB Референс-реализация работала только с DTD - то есть не с схемами написанных на языке XML-схем. Однако язык XML-схемы гораздо богаче, чем DTD. Например, схемы, написанные в XML-схеме Язык может описывать структурные отношения и типы данных, которые не может быть выражена (или не может быть легко выраженный) в DTD. Есть инструменты доступный для преобразования DTD в W3C XML Schema Language, поэтому, если у вас есть Схемы, основанные на DTD, которые вы использовали с более ранняя версия JAXB Справочная реализация, вы можете использовать эти инструменты для преобразования схем в Язык XML-схемы. http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch

Я думаю, мне бы хотелось, чтобы примеры, иллюстрирующие, почему XML-схема лучше (если это действительно так).

4b9b3361

Ответ 1

От http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx

  • DTD не относятся к пространству имен.

  • DTD имеют #define, #include и #ifdef - или, менее C-ориентированные, возможность определять сокращенные сокращения, внешние содержимое и некоторый условный синтаксический анализ.

  • DTD описывает весь XML-документ (даже если он оставляет "дыры" ); схема может определять части.

  • XSD имеет систему типов.

  • XSD имеет гораздо более богатый язык для описания того, как выглядит элемент или атрибут. Это связано с типом система.

  • Вы можете поместить встроенный DTD в XML-документ, вы не можете сделать это с помощью XSD. Это означает, что DTD более безопасны (вы только должны защитить один bytestream - xml/dtd - и не
    кратные).дел >

  • Официальное определение "действительного XML" требует DTD. Поскольку это может быть непрактичным, если не невозможным, вам часто приходится соглашайтесь на правильность схемы, что не совсем то же самое.

Со своей стороны, довольно просто написать валидатор для некоторого XML, если у вас есть XSD. Я не видел этого с DTD, хотя я уверен, что он существует.

Ответ 2

Несколько лет назад были причины использовать DTD поверх XML-схемы (это было более распространено или лучше поддерживалось инструментами XML). Однако сегодня я не вижу причин не использовать XML Schema вместо DTD: XML Schema намного эффективнее.

Однако XML-схема далеко не идеальна (просто попробуйте прочитать спецификацию или книгу по XML-схеме...), и с тех пор было разработано много альтернатив (Schematron, Examplotron, RelaxNG). Они могут иметь технические преимущества по сравнению с XML Schema, но XML Schema настолько распространена сегодня, что я вижу очень мало случаев, когда альтернатива имела бы смысл.

Ответ 3

XML Schema может выполнять более сложные проверки. Например, если DTD может проверить, является ли тип данных элемента XML целым или строковым. В то время как XML-схема может выполнять более сложные проверки, например, если элемент xml представляет собой строку, начинающуюся с буквы верхнего регистра или целого числа позитива. Наконец, в XML-схеме используется синтаксис XML и его естественный выбор для разработки веб-сервисов.

Ответ 4

Существует также Relax NG - еще один мощный язык для проверки XML-документов, а также Schematron и других технологий из DSDL. Relax NG очень прост и имеет удобную для пользователя форму - Relax NG Compact, позволяющий писать схемы аналогично схемам BNF.