Роль DOCTYPE в общем XML - PullRequest
       16

Роль DOCTYPE в общем XML

0 голосов
/ 31 июля 2009

Я знаю назначение DOCTYPE (и каков каждый URL / идентификатор в строке) в том, что касается веб-стандартов и проверки страницы, но я не уверен в том, что это на самом деле "в контексте" документа XML.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello</p>
  </body>
</html>

Является ли это частью фактической структуры документа XML, или это какая-то похожая на комментарий «подсказка», которая отмечается, а затем удаляется?

Какое значение имеет "!" перед именем? Обозначает ли это особый тип «элемента»? Как они называются?

Пример, который я разместил, - это XHTML для Интернета, но используется ли DOCTYPE в XML-документах общего назначения?

Ответы [ 2 ]

6 голосов
/ 31 июля 2009

DOCTYPE был «унаследован» от SGML (он должен был указывать на файл DTD, который объясняет, как анализировать файл), однако не требующий пояснений синтаксис XML и пространства имен сделали его в значительной степени неактуальным. Единственное реальное использование DOCTYPE / DTD в XML - это определение разрешенных именованных объектов (например, &nbsp;).

Спецификация 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 и не используйте именованные объекты (то есть используйте &#160; вместо &nbsp;)

2 голосов
/ 31 июля 2009

DOCTYPE является частью спецификации XML (см. Соответствующий подраздел здесь ) и может включать в себя либо ссылку на DTD , "внутренние" объявления DTD, либо и то и другое. Однако многие «современные» способы использования XML вообще не используют DOCTYPE - как упоминает porneL, и XML-схема, и RelaxNG - более эффективные способы задания синтаксиса документа. См. этот пост в блоге Тима Брея , чтобы узнать больше.

...