Прощай, XHTML!..

Артемий Ломов

В предыдущей заметке, затронувшей причудливые повороты судьбы HTML, мы упомянули о том, что W3C и вместе с ним все профессиональное сообщество веб-разработчиков связывали большие надежды с XHTML. В сущности, еще совсем недавно, несколько лет тому назад, веб-разработчики прогрессивных взглядов верили в то, что рано или поздно XHTML в самом деле воцарится на планете и заменит собой «классический» HTML.

Здесь сто́ит пояснить, что речь идет о так называемом «истинном» XHTML. Многие сайты в последние годы создавались с использованием синтаксических правил, определенных спецификациями XHTML 1.0 и 1.1 (с примерами можно ознакомиться хотя бы в списках номинантов и призеров прошлогоднего конкурса WebHiTech), но подавляющее большинство из них — если не сказать, что фактически все — по сути не являются XHTML-сайтами, поскольку их страницы отдаются сервером с указанием в поле заголовка Content-Type MIME-типа text/html. Поведение таких страниц ничем не отличается от специфики обработки браузерами документов, созданных с использованием HTML 4.01. «Истинный» же XHTML предполагает, что документы должны иметь тип application/xhtml+xml или application/xml и обрабатываться в соответствии со строгими правилами XML. В этом случае страницы могут быть отображены браузером только после полной загрузки и последующего синтаксического анализа, причем любые, даже самые незначительные с точки зрения HTML-кодеров ошибки синтаксиса приведут к полной невозможности отображения документа — вместо веб-страницы запросивший ее пользователь увидит сообщение об ошибке.

С одной стороны, это, конечно, правильно. Программисты, разрабатывающие разнообразные приложения с использованием, скажем, C++, Perl или PHP, хорошо знают, что компилятор (или интерпретатор) того или иного языка программирования откажется транслировать исходный код в исполняемый (или же выполнять скрипт) при наличии в нем любых синтаксических ошибок, даже если речь идет о каких-нибудь «пустяках» вроде пропущенной точки с запятой в конце оператора или незакрытой скобке.

С другой стороны, к W3C и сочувствующим постепенно пришло понимание того, что «истинный» XHTML — это, скорее всего, утопия. Основная проблема, похоже, даже не в том, что повсеместное внедрение XHTML потребовало бы переучить и дисциплинировать миллионы HTML-кодеров. А в том, что к созданию веб-страниц в наше время причастны очень многие люди, вообще не имеющие представления о том, что такое HTML, не говоря уже про XHTML — достаточно вспомнить UGC как краеугольный камень философии Web 2.0, молоденьких девушек-менеджеров, публикующих новости на сайтах и, мягко говоря, кхм, далекие от совершенства CMS и всякие прочие конструкторы сайтов, производящие ошибки HTML-разметки в товарных количествах буквально на ровном месте. Нужно признать, что HTML — это все-таки не язык программирования, а лишь средство описания структуры документов. И при этом весьма популярный формат обмена данными.

Что должно измениться с внедрением HTML5?

Нам предлагают единый язык разметки, в котором можно использовать два вида синтаксиса — достаточно вольный HTML-ориентированный и строгий XML-ориентированный. Документы, создаваемые с использованием HTML-синтаксиса, должны иметь тип text/html и обрабатываться HTML-парсером. Документы, использующие XHTML-синтаксис, должны использовать пространство имен http://www.w3.org/1999/xhtml (как и прежние версии XHTML), отдаваться сервером с указанием MIME-типа application/xhtml+xml и обрабатываться XML-парсером. Это называется XHTML5. (Где же XHTML3 и XHTML4? А нету. Запутывают нас, как только могут. :-))

С XHTML5, вроде бы, все ясно. (И, в частности, то, что использоваться на практике он будет, скорее всего, в единичных, почти экзотических случаях при разработке каких-нибудь весьма специальных веб-приложений.) А чем грозит нам «обычный» HTML5? Попробуем сформулировать ключевые особенности.

Во-первых, язык HTML5, в отличие от HTML 4.01, никак не связан с SGML, будучи определенным в терминах DOM. Это избавляет нас от разнообразных формальностей, требуемых с точки зрения совместимости с правилами SGML. В частности, конструкция <!DOCTYPE html>, которую требуется помещать в самом начале HTML-документа, теперь преследует единственную цель — переключение браузеров в режим соответствия стандартам (standards mode). В XHTML5-документах доктайп можно вообще не использовать.

Во-вторых, HTML5 не утрачивает совместимости с предыдущими версиями HTML и устаревшими браузерами. Правда, на данном этапе приходится при помощи CSS явно указывать display: block для новых структурных элементов (таких как <section>, <article> и им подобных), а Internet Explorer’у до восьмой версии включительно «скармливать» даже особый скрипт, создающий в DOM новые элементы HTML5 как таковые. Но, в любом случае, самое худшее, на что способен браузер — это просто проигнорировать незнакомые теги разметки, тогда как в случае гипотетического сценария массового внедрения XHTML говорить о текстуальной доступности контента для пользователей устаревших браузеров не пришлось бы.

В-третьих, спецификация HTML5 детально, в мелочах расписывает правила обработки документов, что должно привести к одинаковым последствиям одинаковых ошибок кода разметки веб-страниц в различных браузерах. Это, по-видимому, весьма разумный компромисс между чрезвычайной вольностью интерпретации ошибок браузерами, свойственной уходящей эпохе HTML 4.01 (и использующихся аналогичным образом XHTML 1.0 и 1.1) и полным отсутствием у разработчика права на ошибку, возведенным в абсолют «истинным» XHTML.

В-четвертых, HTML5 позволяет использовать SVG- и MathML-вставки (каждый из упомянутых языков, напомним, является подмножеством XML и предполагает соответствующие правила обработки) внутри HTML-документов, имеющих тип text/html.

В общем, следует признать, что HTML5 — шаг вперед не только по сравнению с HTML 4.01, но и в сравнении с бескомпромиссным и оторванным от жизни «истинным» XHTML