• en
  • Language: ru
  • Documentation version: 1.1.x

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ ПО HTML/XHTML

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

История XHTML

Некоторое время казалось, что HTML вот-вот будет заменен XHTML. Однако почти ни один сайт в Интернете не является XHTML (это HTML, обработанный с использованием правил XML). Есть несколько основных причин, почему так происходит. Одна из них - отсутствие в Internet Explorer надлежащей поддержки XHTML. В спецификации 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 doctype в верхней части документа и самостоятельно закрывали все необходимые теги (<br> становится <br/> или <br></br> в XHTML). Однако, даже если документ правильно валидирован как XHTML, то, что действительно определяет обработку XHTML/HTML в браузерах - это MIME-тип, который, как уже говорилось, часто не установлен должным образом. Таким образом, валидный XHTML обрабатывался как невалидный HTML.

XHTML также изменил способ использования JavaScript. Чтобы правильно работать с XHTML, программисты должны использовать интерфейс DOM с пространством имен XHTML для запроса элементов HTML.

История 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 году эта спецификация была принята за основу новой спецификации 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

<tag/value/ == <tag>value</tag>

Yes 1

No

No

<br/> поддерживается

No

Yes

Yes 2

<script/> поддерживается

No

Yes

No

должны обслуживаться как text/html

Yes

No 3

Yes

должны обслуживаться как application/xhtml+xml.

No

Yes

No

строгая обработка ошибок

No

Yes

No

инлайн SVG

No

Yes

Yes

встроенный MathML

No

Yes

Yes

<video> тег

No

No

Yes

<audio> тег

No

No

Yes

Новые семантические теги, такие как <article>

No

No

Yes

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>.

  • Атрибуты цитирования, если они не содержат пробелов или специальных символов (например, <, >, ' или ").

  • Требование, чтобы атрибуты boolean имели значение.

Это означает, что следующая страница в 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, Web Sockets, геолокация и автономные приложения.

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

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

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

  • Internet Explorer (который, к сожалению, в настоящее время лидирует по доле рынка) имеет слабую поддержку XHTML.

  • Многие библиотеки JavaScript также не поддерживают XHTML из-за более сложного API пространства имен, которое он требует.

  • HTML5 добавляет несколько новых возможностей, включая семантические теги и долгожданные теги <audio> и <video>.

  • Он пользуется поддержкой большинства производителей браузеров.

  • Его гораздо легче писать, и он более компактен.

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