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.