как браузер использует URL в DOCTYPE

98
04 февраля 2022, 01:50

Зачем при объявлении DOCTYPE указывать URL? Что браузер дальше делает с этой информацией? Если открыть URL например http://www.w3.org/TR/html4/strict.dtd, то получим некий xml файл (или dtd файл, лень смотреть что это). В этом файле весь текст является комментариями.

т.е. вряд ли браузер использует этот URL для получения в режиме реального времени некой информации о спецификации. Да и вряд ли все браузеры перед открытием страниц идут по этому URL за справочной информацией. Да в режиме отсутствия интернета они вполне отображают страницы.

Или в браузере есть локальная информация о содержимом .dtd файла, а в этом файле действительно храниться необходимая для корректного отображения страницы инфа. И браузер раз в некий период просто обновляет .dtd в локальном кэше (но все равно, зачем тогда в DOCTYPE этот URL писать).

И раз уж об этом спрашиваю, когда указываю xmlns="http://www.w3.org/1999/xhtml", что с этой информацией делает браузер? Он лезет по ссылке?

Answer 1

Отвечу сам себе. Примерно то же что написали в комментариях.

Существует язык SGML, от которого пошли HTML, XML, XHTML, SVG и прочие. SGML является мета языком (т.е. языком шаблоном) и его реализации требуют наличие dtd файла, где описано какие именно теги могут быть и что в них содержится.

В xml (который является потомком SGML) так же использовали раньше dtd, но сейчас советуют использовать xml схемы. Однако для HTML до версии 5 и xhtml используются dtd файлы для описания конкретного языка разметки.

HTML 5 не базируется на SGML и не имеет dtd файла-описания в принципе (Вроде как HTML 5 не базируется на SGML но совместима с ним. т.е. это формально другой язык, но крайне похожий на предыдущие HTML). Поэтому для HTML 5 нет никакого dtd.

И к вопросу, "а что браузеры делают с этой ссылкой можно" можно прочитать англоязычную вики https://en.wikipedia.org/wiki/Document_type_declaration. Там сказано, что браузеры используют HTML парсеры, а не dtd парсеры общего назначения.

Т.е. по сути содержимое DOCTYPE для браузера является очень длинной константой, которую он не рассматривает в качестве отдельных элементов. Такие "навороты" у DOCTYPE появились из за того, что HTML по сути является приложением SGML, которое требует что бы в DOCTYPE была всякая всячина. Расшифровки содержимого DOCTYPE вроде

<!DOCTYPE [Элемент верхнего уровня] [Публичность] "[Регистрация]//[Организация]//[Тип] [Имя]//[Язык]" "[URL]">

не имеют смысла для браузеров и не парсятся ими.

Данные расшифровки могут быть полезны например для xml файлов, работающих в составе некой системы или иных SGML языков, где действительно определяется откуда для данного документа берется dtd файл в данный момент.

  • возможно данное описание SGML и dtd не вполне коректно
READ ALSO
Создание рамки JDialog

Создание рамки JDialog

пытаюсь создать свое диалоговое окно

145
Создается 2 иконки приложения

Создается 2 иконки приложения

Причина проблемы скорее всего в нем, так как при его редактировании вторая иконка пропадаетПроблема появилась после решения сделать экран...

90
Проблема считывания чисел из консоли

Проблема считывания чисел из консоли

В программе считывается массив чиселДолжны выводиться числа, кратные 3

86
Как получить дату с calendarview?

Как получить дату с calendarview?

Как получить дату с слушателяsetOnDayChangeListener виджета CalendarView и сохранить в Postclass

216