Часто задаваемые вопросы по HTML/XHTML
Документация Flask и примеры приложений используют HTML5. Вы можете заметить, что во многих случаях, когда закрывающие теги необязательны, они не используются, чтобы HTML был чище и быстрее загружался. Поскольку среди разработчиков существует много путаницы по поводу HTML и XHTML, этот документ пытается ответить на некоторые из основных вопросов.
История XHTML
В течение некоторого времени казалось, что HTML собираются заменить XHTML. Однако практически ни один сайт в Интернете не является фактическим XHTML (который представляет собой HTML, обработанный с использованием правил XML). Существует несколько основных причин, по которым это так. Одна из них — отсутствие надлежащей поддержки XHTML в Internet Explorer. Спецификация XHTML гласит, что XHTML должен передаваться с типом MIME application/xhtml+xml, но Internet Explorer отказывается читать файлы с этим типом MIME. Хотя относительно легко настроить веб-серверы для корректной передачи XHTML, это делают немногие. Вероятно, это происходит потому, что правильное использование XHTML может быть довольно сложным.
Одна из самых важных причин трудностей — драконовская (строгая и безжалостная) обработка ошибок XML. При обнаружении ошибки разбора XML браузер должен отобразить пользователю неприятное сообщение об ошибке вместо попытки восстановиться от ошибки и отобразить то, что он может. Большая часть генерации (X)HTML в веб-среде основана на не-XML движках шаблонов (таких как Jinja, используемый в Flask), которые не защищают вас от случайного создания недопустимого XHTML. Существуют движки шаблонов на основе XML, такие как Kid и популярный Genshi, но они часто связаны с большей нагрузкой во время выполнения и не так просты в использовании, так как должны подчиняться правилам XML.
В то же время большинство пользователей предполагали, что они правильно используют XHTML. Они писали доктайп XHTML вверху документа и закрывали все необходимые теги (<br> становится <br/> или <br></br> в XHTML). Однако, даже если документ правильно валидируется как XHTML, то, что действительно определяет обработку XHTML/HTML в браузерах, — это тип MIME, который, как уже говорилось, часто не задается правильно. Таким образом, валидный XHTML воспринимался как недопустимый HTML.
XHTML также изменил способ использования JavaScript. Для правильной работы с XHTML программисты должны использовать интерфейс DOM с пространством имен XHTML для поиска элементов HTML.
История HTML5
Разработка спецификации HTML5 началась в 2004 году под названием «Web Applications 1.0» рабочей группой WHATWG (которая была сформирована ведущими производителями браузеров Apple, Mozilla и Opera) с целью написания новой и улучшенной спецификации HTML, основанной на существующем поведении браузера, а не на нереалистичных и несовместимых со старыми версиями спецификациях.
Например, в HTML4 <title/Hello/ теоретически парсится точно так же, как и <title>Hello</title>. Однако, поскольку люди использовали теги, похожие на XHTML, вроде <link />, производители браузеров реализовали синтаксис XHTML вместо синтаксиса, определенного в спецификации.
В 2007 году спецификация была принята в качестве основы новой спецификации HTML под эгидой W3C, известной как HTML5. В настоящее время похоже, что XHTML теряет популярность, поскольку рабочая группа XHTML 2 была распущена, а HTML5 реализуется всеми основными производителями браузеров.
HTML по сравнению с XHTML
В следующей таблице представлен краткий обзор функций, доступных в HTML 4.01, XHTML 1.1 и HTML5. (XHTML 1.0 не включён, так как он был заменён XHTML 1.1 и малоиспользуемым XHTML5.)
HTML4.01 | XHTML1.1 | HTML5 | |
|---|---|---|---|
| |||
| |||
| |||
должен передаваться как | |||
должен передаваться как | |||
жесткая обработка ошибок | |||
встроенный SVG | |||
встроенный MathML | |||
| |||
| |||
Новые семантические теги, такие как |
-
1 -
Это малоизвестная функция, унаследованная от SGML. Она обычно не поддерживается браузерами по причинам, подробно описанным выше.
-
2 -
Это для совместимости с серверным кодом, который генерирует XHTML для тегов, таких как
<br>. Его не следует использовать в новом коде. -
3 -
XHTML 1.0 — последний стандарт XHTML, который позволяет передаваться как
text/htmlпо соображениям обратной совместимости.
Что означает «строгое»?
HTML5 имеет строго определённые правила разбора, но также точно определяет, как браузер должен реагировать на ошибки разбора — в отличие от XHTML, который просто заявляет, что разбор должен прерваться. Некоторые люди путаются из-за, казалось бы, недопустимого синтаксиса, который всё ещё генерирует ожидаемые результаты (например, пропущенные закрывающие теги или атрибуты без кавычек).
Некоторые из них работают благодаря мягкой обработке ошибок, которую используют большинство браузеров при обнаружении ошибки разметки, а другие фактически определены. Следующие конструкции являются необязательными в HTML5 по стандарту, но должны поддерживаться браузерами:
- Оборачивание документа тегом
<html> - Оборачивание заголовков тегами
<head>или тегов тела тегами<body> - Закрытие тегов
<p>,<li>,<dt>,<dd>,<tr>,<td>,<th>,<tbody>,<thead>или<tfoot>. - Использование кавычек в атрибутах, пока они не содержат пробелов или специальных символов (таких как
<,>,'или"). - Требование к булевым атрибутам иметь значение.
Это означает, что следующая страница в HTML5 является совершенно допустимой:
<!doctype html>
<title>Hello HTML5</title>
<div class=header>
<h1>Hello HTML5</h1>
<p class=tagline>HTML5 is awesome
</div>
<ul class=nav>
<li><a href=/index>Index</a>
<li><a href=/downloads>Downloads</a>
<li><a href=/about>About</a>
</ul>
<div class=body>
<h2>HTML5 is probably the future</h2>
<p>
There might be some other things around but in terms of
browser vendor support, HTML5 is hard to beat.
<dl>
<dt>Key 1
<dd>Value 1
<dt>Key 2
<dd>Value 2
</dl>
</div>
Новые технологии в HTML5
HTML5 добавляет множество новых функций, которые упрощают написание и использование веб-приложений.
- Теги
<audio>и<video>предоставляют способ встраивания аудио и видео без сложных дополнений, таких как QuickTime или Flash. - Семантические элементы, такие как
<article>,<header>,<nav>и<time>, которые упрощают понимание содержимого. - Тег
<canvas>, который поддерживает мощный API рисования, уменьшая необходимость в генерируемых на сервере изображениях для графического представления данных. - Новые типы элементов формы, такие как
<input type="date">, которые позволяют агентам пользователя упростить ввод и проверку значений. - Расширенные API JavaScript, такие как Web Storage, Web Workers, WebSockets, геолокация и автономные приложения.
Было добавлено и множество других функций. Хорошим руководством по новым функциям в HTML5 является книга Марка Пилигрима, скоро выходящая в свет, Dive Into HTML5. Однако не все из них поддерживаются браузерами, поэтому будьте осторожны.
Какой вариант следует использовать?
В настоящее время ответ — HTML5. Есть очень мало причин использовать XHTML, учитывая последние разработки в веб-браузерах. В качестве резюме причин, указанных выше:
- Internet Explorer (который, к сожалению, в настоящее время лидирует по рыночной доле) имеет слабую поддержку XHTML.
- Многие библиотеки JavaScript также не поддерживают XHTML из-за более сложного API пространств имен, который он требует.
- HTML5 добавляет несколько новых функций, включая семантические теги и долгожданные теги
<audio>и<video>. - Он имеет поддержку большинства производителей браузеров.
- Он значительно проще в написании и компактнее.
Для большинства приложений бесспорно лучше использовать HTML5, чем XHTML.
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/1.1.x/htmlfaq/