DTD часто получают плохой рэп, и часто по плохо продуманным причинам, таким как то, что можно назвать «увлечением разработчиков и модой» (например, последняя вещь - лучшая вещь). Например, довольно странно думать, что DTD не являются XML. Я думаю, что люди часто имеют в виду, что синтаксис DTD не является синтаксисом разметки документов XML, что является правильным. Но DTD являются по сути XML, то есть они являются в значительной степени частью Рекомендации XML, безусловно, в большей степени, чем Схема XML, которая, подобно пространствам имен XML, появилась позже как одна из большого числа дополнительных Рекомендаций, которая вызывает сложный вопрос "что такое XML-документ?" Но мы не будем касаться этого здесь. уверен в том, что каждый совместимый XML-процессор должен поддерживать декларацию DOCTYPE
и обработку DTD; это бесплатно, вам больше ничего не нужно. А такие проекты, как Apache Catalog Resolver, обеспечивают поддержку как TR 9401, так и XML-каталогов («Entity Resolution»), которые имеют долгую историю отраслевой поддержки как в открытых, так и в коммерческих продуктах.
В отличие от этого, XML-схема поддерживается не всеми процессорами XML (или, по крайней мере, последовательно), а средства, с помощью которых XSD связан с экземпляром документа, обрабатываются с помощью ряда довольно запутанных атрибутов пространства имен XML, которые являются частью экземпляра документа (атрибуты корневого элемента), а не часть пролога. (По сути, это означает, что процессоры должны начать обработку документа до получения схемы. Если вы не понимаете важности этого различия, вам следует выполнить некоторую домашнюю работу.) Взаимозависимости в гибридных типах документов, использующих несколько XSD, являются сложными и недостаточно указанными. Вы можете обнаружить, что должны предоставить собственную поддержку для разрешения сущности.
И наличие ваших схем в разметке XML не всегда полезно, если вы не планируете управлять ими с помощью программных средств. DTD гораздо удобнее для чтения человеком, и, несмотря на некоторые противоречивые мнения, вы можете использовать префиксы пространства имен (см. XHTML Modularisation ). Если ваши требования к проверке носят в основном структурный характер (например, ваш контент ориентирован на документы, а не на данные), вы, вероятно, пытаетесь не проверять контент, а скорее разметку. DTD хороши для этого. Вы также можете взглянуть на совершенно разные подходы к проверке и ограничениям документов, такие как Schematron, который очень хорошо дополняет проверку DTD. Наконец, большинство инструментов, которые могут генерировать XSD, также могут генерировать DTD, и есть доступные приложения преобразования (см. Джеймс Кларк trang ).
DTD также будут существовать примерно столько же, сколько XML, скажем, 50-100 лет. В долгосрочной перспективе мы можем обнаружить, что XML-схема не выживет: она является лишь одним из множества жизнеспособных конкурентов, конкурентов, которые прибыли на сцену из-за множества отказов XSD. Я считаю, что комбинация DTD и Schematron в значительной степени идеально подходит для моих нужд и является гибким решением. Но YMMV.
Таким образом, вы действительно должны взглянуть на свои фактические требования к схеме / ограничениям, прежде чем принимать общие рекомендации по точному выбору. Вы можете обнаружить, что DTD работают очень хорошо. Они делают это примерно с 1971 года.