2009-09-29 3 views
30

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

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

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

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

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

ответ

22

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

  • DTD являются не пространство имен известно.

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

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

  • XSD имеет систему типа.

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

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

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

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

+2

Вы можете разместить XSD встроенный XML. Просто используйте правильное пространство имен и вставьте схему внутри документа. Обычно это файлы WSDL. DTD подвержены атакам DoS. См. Http://en.wikipedia.org/wiki/Billion_laughs – lavinio

+0

@lavinio, я думаю, вы правы в создании XSD; Я видел файлы до этого. Интересная статья о нападении Billion Laughs. –

+4

Есть ли какая-либо функция DTD, которая не может быть выполнена в XSD? –

4

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

+0

Да! EditiX предоставляет способ записи в Relax NG и конвертировать его в DTD или XSD. Я занимаюсь Relax NG. XSD иногда бывает довольно сложным для некоторых моих младших инженеров. –

10

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

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

5

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

Смежные вопросы