FAQ по HTML/XHTML

Документация на Flask и примеры приложений используют HTML5. Вы могли заметить, что во многих ситуациях, когда закрывающие теги необязательны, они не используются, и HTML-код получается более чистым и быстрым при его загрузке. Так как среди разработчиков встречается много недопониманий о HTML и XHTML, этот документ пытается ответить на некоторые самые главные вопросы.

История XHTML

Какое-то время назад казалось, что XHTML сменил HTML. Однико, наврядли все сайты в Internet являются в точности XHTML (т. е. HTML, подчиняющимся правилам XML). На это есть несколько серьёзных причин. Одна из них в том, что Internet Explorer не поддерживает XHTML надлежащим образом. По спецификации XHTML, он должен снабжаться MIME типом application/xhtml+xml, однако Internet Explorer отвергает при попытках чтения такие файлы. Хотя сконфигурировать веб-серверы для надлежащей обработки XHTML относительно просто, мало кто это делает. Возможно, потому, что правильное использование XHTML не всегда безболезненно.

Одной из важнейших причин, вызывающих болезненную реакцию, является драконовская - строгая и беспощадная - обработка ошибок со стороны XML. Если при парсинге XML браузер встречает ошибку, он он должен показать пользователю безобразное сообщение об ошибке, вместо попытки восстановить свою работу с отображением того, что возможно. Большинство генераторов (X)HTML в Интернет построены на не-XML шаблонизаторах (например, на Jinja, которым пользуется Flask), которые не защищают вас от случайного создания недопустимого XHTML. Конечно, существуют и заточенные под XML шаблонизаторы, такие, как Kid и популярный Genshi, однако, так как им приходится подчиняться правилам XML, часто они работают с повышенными накладными вычислительными расходами и не слишком просты в использовании.

Однако, большинство пользователей считают, что они используют XHTML надлежащим образом. Они указывают в начале документа doctype как XHTML, и самостоятельно закрывают все необходимые тэги (<br> становится <br/> или <br></br> в XHTML). Однаког, даже если документ проходит все проверки на соответствие правилам XHTML, то, как происходит реальная обработка браузером, определяется MIME-типом, который, как упомяналось ранее, часто указан не так, как надо. В итоге вполне годный XHTML обрабатывается, как неправильный HTML.

Также, XHTML сменил способ работы с JavaScript. Для надлежащей работы с XHTML, для запроса элементов HTML, программисты должны использовать интерфейс DOM с пространствами имён, в данном случае - с пространством имён XHTML.

История HTML5

Разработка спецификации HTML5 стартовала в 2004 году под названием «Web Applications 1.0». Работа велась группой «Web Hypertext Application Technology Working Group» (сокращённо WHATWG), которую сформировали основные поставщики браузеров - Apple, Mozilla и Opera. Была поставлена задача закрепить новую улучшенную спецификацию HTML, с учётом исторически сложившегося поведения браузеров, без революционного отрыва от реальности и с учётом необходимости сохранения обратной совместимости.

К примеру, в HTML4 <title/Hello/ теоретически, парсится в точности, как и <title>Hello</title>. Однако, поскольку люди используют тэги в стиле XHTML, типа <link />, производители браузеров внедрили синтаксис XHTML поверх определённого спецификацией синтаксиса.

В 2007 году, под эгидой W3C, спецификация была принята в качестве основы для новой спецификации HTML, известной как HTML5. В настоящее время заметна такая тенденция, что XHTML сдаёт позиции, группа по XHTML2 расформирована, а HTML5 внедряется всеми основными разработчиками браузеров.

HTML в сравнении с XHTML

Следующая таблица даст вам краткий обзор возможностей, доступных в HTML 4.01, XHTML 1.1 и HTML5. (XHTML 1.0 не включён, так как его сменил XHTML 1.1, а также не слишком часто используемый XHTML5.)

  HTML4.01 XHTML1.1 HTML5
<tag/value/ == <tag>value</tag> |Да| [1] |Нет| |Нет|
поддержка <br/> |Нет |Да| |Да| [2]
поддержка <script/> |Нет| |Да| |Нет|
должен предоставляться, как text/html |Да| |Нет| [3] |Да|
должен предоставляться, как application/xhtml+xml |Нет| |Да| |Нет|
строгая обработка ошибок |Нет| |Да| |Нет|
встроенная поддержка SVG |Нет| |Да| |Да|
встроенная поддержка MathML |Нет| |Да| |Да|
тэг <video> |Нет| |Нет| |Да|
тэг <audio> |Нет| |Нет| |Да|
Новые семантические тэги, такие, как <article> |Нет| |Нет| |Да|
[1]Эта непонятная особенность унаследована из SGML. Она не поддерживается браузерами по причинам, более подробно изложенным выше.
[2]Сохранено для совместимости с кодом сервера, который генерирует тэги типа <br>. Не должно использоваться в новом коде.
[3]XHTML 1.0 - последний стандарт XHTML, который может быть обслужен как text/html, исходя из цели обеспечения обратной совместимости.

Что означает «строгий»?

Для HTML5 есть строго определённые правила парсинга, кроме того, он описывает, каким образом, в точности, должен реагировать браузер на ошибки парсинга - в отличие от XHTML, в котором сформулировано просто прерывание парсинга. Некоторых людей смущает, что очевидно недопустимый синтаксис всё ещё генерирует ожидаемые результаты (например, при отсутствии закрывающих тэгов или при незаключённых в кавычки атрибутах).

Некоторые из этих ошибок работают, так как у большинство браузеров, когда они сталкиваются с ошибками разметки, то используют их мягкую обработку, другие указаны фактически. По стандарту, следующие конструкции HTML5 не являются обязательными, но должны поддерживаться браузерами:

  • Оборачивание документа в тэг <html>
  • Оборачивание элементов заголовка в <head> или элементов тела в <body>
  • Закрытие тэгов <p>, <li>, <dt>, <dd>, <tr>, <td>, <th>, <tbody>, <thead>, or <tfoot>.
  • Атрибуты цитирования, пока они не содержат пробелов или специальных символов (таких, как <, >, ', или ").
  • Требование, чтобы логические атрибуты имели значение.

Это значит, что следующая HTML5-страница является абсолютно допустимой:

<!doctype html>
<title>Привет, HTML5</title>
<div class=header>
  <h1>Привет, HTML5</h1>
  <p class=tagline>HTML5 прекрасен
</div>
<ul class=nav>
  <li><a href=/index>Начало</a>
  <li><a href=/downloads>Загрузки</a>
  <li><a href=/about>О сайте</a>
</ul>
<div class=body>
  <h2>Возможно, HTML5 - это будущее</h2>
  <p>
    Может быть, бывает и нечто иное, но с точки зрения поддержки
    разработчиками браузеров, HTML5 сложно превзойти.
  <dl>
    <dt>Ключ 1
    <dd>Значение 1
    <dt>Ключ 2
    <dd>Значение 2
  </dl>
</div>

Новые технологии в HTML5

HTML5 добавил много новых особенностей, которые делают веб-приложения более лёгкими в написании и использовании.

  • Тэги <audio> и <video> дают способ встроить аудио и видео без лишних сложностей с дополнениями типа QuickTime или Flash.
  • Семантические элементы типа <article>, <header>, <nav> и <time>, делающие содержимое более простым для понимания.
  • Тэг <canvas>, который поддерживает мощный API для рисования, снижает потребность в изображениях, генерируемых сервером для представления данных в графическом виде.
  • Новые типа контроля над формами, такие, как <input type="date">, которые позволяют агентам пользователя упросить ввод и проверку значенийthat.
  • Расширенные API для JavaScript APIs типа Web Storage, Web Workers, Web Sockets, geolocation, и оффлайновые приложения.

Также, было добавлено много других особенностей. Хорошее руководство по новым особенностям HTML5 это книга Марка Пилигрима (Mark Pilgrim), которая вот-вот выйдет в свет, под названием Погружение в HTML5 (Dive Into HTML5).

Что следует использовать?

В настоящий ответ, ответ: HTML5. Учитывая последние разработки в области веб-браузеров, есть очень мало причин к использованию XHTML. Подытожим причины, перечисленные выше:

  • Internet Explorer (который, к несчастью, занимает наибольшую долю рынка) имеет слабую поддержку XHTML.
  • Многие библиотеки JavaScript также не поддерживают XHTML, из-за более сложного пространства имён API, который он требует.
  • HTML5 добавляет несколько новых особенностей, включая семантические тэги и долгожданные тэги <audio> and <video>.
  • Имеет за собой поддержку большинства фирм-разработчиков браузеров.
  • На нём проще писать, и результат получается более кратким.

Для большинства приложений, несомненно, лучше использовать HTML5, а не XHTML.