За свою историю язык разметки гипертекста HTML был как производным продуктом на базе другого языка, вобрав в себя его идеи и синтаксис, так и прародителем новых языков. В итоге HTML стал независимым и самостоятельным языком.
HTML изначально создан как приложение SGML. Тим Бернерс-Ли при проектировании нового языка для будущего Интернета не стал изобретать велосипед, а взял за основу уже существующий и стандартизированный язык SGML и его диалект CERN SGML.
Сам SGML — это метаязык для создания других языков разметки компьютерного текста, независимого от устройства. SGML определяет синтаксис и правила, а по ним описывается конкретный набор элементов, атрибутов и правил их применения.
Суть SGML в том, чтобы описывать типы документов (DTD), в которых определён список доступных элементов, атрибутов и специальных сущностей, обязательность или необязательность открывающих и закрывающих тэгов, правила вложенности.
Первые версии HTML были конкретным типом документа SGML. Это отражалось в длинной конструкции
DOCTYPE с ссылкой на DTD, где описываются все доступные HTML-элементы, правила вложенности и атрибуты.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Такая конструкция была на страницах до HTML5 и простого
<!DOCTYPE html>. Она означала «это размеченный с помощью SGML документ типа HTML, определение которого находится по такому-то адресу».SGML, с одной стороны, был достаточно простым языком в плане синтаксиса. С другой стороны, он был крайне сложным по части парсинга. Из-за этого браузерам того времени было сложно обрабатывать документы на SGML-языках.
В ответ на сложность SGML появился XML. Цель та же: универсальный метаязык для описания языков разметки. Разница в более строгом синтаксисе, упрощённых правилах парсинга и удалении сложных и редко используемых возможностей SGML.
XML стал новым стандартом, на его основе были созданы различные языки разметки. Возникла идея «переписать» HTML с SGML на XML. Так появился стандарт XHTML, первая версия которого — перенос HTML 4 с SGML на строгий синтаксис XML.
XHTML 1.0 не добавлял ничего нового, а делал HTML 4 строже. Пропущенный тэг, недопустимое значение атрибута, отсутсвие кавычек или неверная вложенность делают весь документ невалидным, прекращая парсинг и отображая ошибку.
За XHTML 1.0 последовала версия 1.1 с идеей разбивки на модули. Затем вышла версия 2.0 с полным переосмыслением идей HTML. XHTML 2.0 был новым языком для веба, который должен был заменить существовавший на то время HTML 4.
XHTML 2.0 не был совместим ни с HTML 4, ни с XHTML 1.0/1.1, которые поддерживали браузеры. Такое радикальное изменение ставило под угрозу совместимость веба, а потенциальная польза и затраты усилий на внедрение не стоили того.
От XHTML 2.0 отказались и было принято решение развивать уже существующий HTML 4 менее радикально. От строго XML синтаксиса тоже отказались в пользу более толерантного к ошибкам, похожего на SGML. Итогом стал HTML 5.
Для HTML 5 был разработан собственный парсер, который проще, чем у SGML, но не такой строгий, как у XML. С тех пор HTML стал отдельным самостоятельным языком, который не совместим ни с SGML, ни с XML, но впитал части от обоих.
Сегодня HTML развивается как живой стандарт без номера версий (больше нет никакого HTML 5) и сохраняет толерантный к ошибкам парсер. Даже самая невалидная разметка будет как-то разобрана, ляжет в основу DOM и отобразится в браузере.
#ydkhtml