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,
и самостоятельно закрывают все необходимые тэги (`` `` становится
`` `` или `` `` в 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 ``
Hello``. Однако, поскольку люди используют
тэги в стиле XHTML, типа ````, производители браузеров внедрили
синтаксис XHTML поверх определённого спецификацией синтаксиса.
В 2007 году, под эгидой W3C, спецификация была принята в качестве основы
для новой спецификации HTML, известной как HTML5. В настоящее время
заметна такая тенденция, что XHTML сдаёт позиции, группа по XHTML2
расформирована, а HTML5 внедряется всеми основными разработчиками
браузеров.
HTML в сравнении с XHTML
------------------------
Следующая таблица даст вам краткий обзор возможностей, доступных в
HTML 4.01, XHTML 1.1 и HTML5. (XHTML 1.0 не включён, так как его сменил
XHTML 1.1, а также не слишком часто используемый XHTML5.)
.. tabularcolumns:: |p{9cm}|p{2cm}|p{2cm}|p{2cm}|
+-----------------------------------------+-----------+------------+-----------+
| | HTML4.01 | XHTML1.1 | HTML5 |
+=========================================+===========+============+===========+
| ``value`` | |Да| [1]_ | |Нет| | |Нет| |
+-----------------------------------------+-----------+------------+-----------+
| поддержка `` `` | |Нет | |Да| | |Да| [2]_ |
+-----------------------------------------+-----------+------------+-----------+
| поддержка ```` | |Нет| | |Да| | |Нет| |
+-----------------------------------------+-----------+------------+-----------+
| должен предоставляться, как `text/html` | |Да| | |Нет| [3]_ | |Да| |
+-----------------------------------------+-----------+------------+-----------+
| должен предоставляться, как | |Нет| | |Да| | |Нет| |
| `application/xhtml+xml` | | | |
+-----------------------------------------+-----------+------------+-----------+
| строгая обработка ошибок | |Нет| | |Да| | |Нет| |
+-----------------------------------------+-----------+------------+-----------+
| встроенная поддержка SVG | |Нет| | |Да| | |Да| |
+-----------------------------------------+-----------+------------+-----------+
| встроенная поддержка MathML | |Нет| | |Да| | |Да| |
+-----------------------------------------+-----------+------------+-----------+
| тэг ``