DOCTYPE был «унаследован» от SGML (он должен был указывать на файл DTD, который объясняет, как анализировать файл), однако не требующий пояснений синтаксис XML и пространства имен сделали его в значительной степени неактуальным. Единственное реальное использование DOCTYPE / DTD в XML - это определение разрешенных именованных объектов (например,
).
Спецификация XML даже позволяет «не проверять» парсеры, которые полностью игнорируют файл DTD (веб-браузеры используют такие парсеры, если только вы не попали в ловушку text/html
, в этом случае парсер XML вообще не используется).
DTD весьма плох для целей проверки (трудно определить правила для более чем одного уровня вложенности, невозможно указать типы атрибутов, кроме нескольких предопределенных типов). Схема, RelaxNG может быть гораздо точнее.
DTD также не полностью поддерживает пространства имен, что приводит к нелепым временным решениям, таким как XHTMLplusMathMLplusSVG DOCTYPE .
В веб-браузерах определенные DOCTYPE имеют желаемый побочный эффект , запускающий режим рендеринга, соответствующий стандартам . Это больше взломать, чем предполагалось использовать DOCTYPE.
Если вы используете настоящий XHTML (application/xhtml+xml
- тот, который вообще не открывается в IE), то вообще не используйте DOCTYPE (это рекомендация из XHTML 5). Режим XML запускает совместимый со стандартами рендеринг независимо от DOCTYPE.
Если вы используете режим text/html
, используйте <!DOCTYPE html>
. Это HTML 5 DOCTYPE, и он самый короткий, который запускает лучший рендеринг во всех браузерах. Браузеры не используют DOCTYPE для каких-либо других целей, поэтому вы ничего не пропустите.
Если вы обрабатываете файлы XHTML с помощью синтаксических анализаторов XML (вне браузеров), тогда , пожалуйста, не забудьте правильно настроить каталог DTD, иначе ваш анализатор может быть DoS- ing w3.org пытается каждый раз получать DTD. Если вы не можете использовать каталог DTD, отключите «внешние» в парсере или пропустите DOCTYPE и не используйте именованные объекты (то есть используйте  
вместо
)