Месяц назад я написала статью «Не используйте доктайп XHTML», где рассказала читателям о том что xhtml'я не существует =) (дед мороза тоже нет кстати). Эта статья для тех продвинутых пользователей которые не стали читать предыдущую статью. В ней я расскажу о вариациях (вариантах) валидного XHTML 1.0 и 1.1.
Итак... вот например кратчайший документ xhtml 1.0
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <title>Минимальный документ XHTML 1.0 с указанием W3C DTD</title> </head> <body> <p>Это минимальный документ <a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a> с указанием W3C url'а для DTD.</p> </body> </html>
Вариации:
Существует несколько валидных вариантов этого примера которые нужно проверить:
- Содержит или не содержит ?xml пролог.
XHTML 1.0 ничего не говорит о прологе, значит надо смотреть в спецификации XML. Согласно которой XML 1.0, строчка<?xml version="1.0" encoding="UTF-8"?>
— пролог XML опциональна. Это ясно из примеров секции Section 2.8 и также из факта что составляет в сноске пункт [22]. "Пролог", начинается с "XMLDecl?", где символ "?" означает значение 0 или 1, т.е. опциональность. - Расширение ".html" or ".xml".
Для этого примера допустим что обычные веб-сервера сконфигурированы чтобы отдавать файлы .html или .htm как "text/html", и отдавать файлы .xml как "text/xml". XHTML 1.0 Appendix C, секция 11 говорит, что XHTML документы могут быть типаtext/html
илиtext/xml
илиapplication/xml
(а спецификация XHTML 1.1 вообще ничего не говорит). В общем остаётся полагаться на то как автор захотел назвать свой документ. По крайней мере стоит хотя бы проверить пример подачи как "text/html" (.html) и "text/xml" (.xml). Содержит или не содержит DOCTYPE.Некоторые думают что объявление DOCTYPE'а также опционально, но это не так. Согласно 1.0:
[Definition: An XML document is valid if it has an associated document type declaration and if the document complies with the constraints expressed in it.]
[Определение: XML документ является валидным если присоединённую декларацию типа документа или если документ составлен с ограничениями выраженными в нём]
Содержит или не содержит xmlns.Аттрибут xmlns также не опционален, согласно спецификации XHTML 1.0 sec. 3.1.1 критерию 3.
The root element of the document must designate the XHTML namespace using the xmlns attribute. The namespace for XHTML is defined to be http://www.w3.org/1999/xhtml.
Корневой элемент документа должен указать пространство имён XHTML в атрибуте xmlns. Пространство имён XHTML должно быть таким: http://www.w3.org/1999/xhtml.
Комбинации вариаций как тесты
Вот все возможные комбинации двух оставшихся вариантов, от "самого html'ного" до "самого xml'ного". (Предполагается что пролог "ближе" к типу документа чем mime-type и поэтому должен иметь большее влияние на то как браузер решит отобразить документ.)
- text/html без ?xml пролога: xhtmlwithoutprolog.html (валидатор: valid XHTML 1.0 Strict)
- text/xml без ?xml пролога: xhtmlwithoutprolog.xml (валидатор: valid XHTML 1.0 Strict)
- text/html с ?xml прологом: xhtmlwithprolog.html (валидатор: valid XHTML 1.0 Strict)
- text/xml с ?xml проголом: xhtmlwithprolog.xml (валидатор: valid XHTML 1.0 Strict)
Какой же медиа-тип для Xhtml желательно отдавать браузеру
А на этот вопрос написано в спецификации XHTML-media-types. Дословно, если сервер запрашивает (хидер "Accept:") тип application/xhtml+xml
, без параметра q (сокр. quantity,количество, означает приоритет), или с позитивным значением параметра q, нужно отправть документ используя этот медиа тип. Если содержит text/html, то используем этот тип. Если запрашивается */*, то необходимо вернуть text/html. Когда XHTML документ разрабатывается не придерживаясь этого руководства, то его следует отдавать только как application/xhtml+xml.
Важно, почему XHTML плох!
Повторю сказанное в предыдущей статье «Не используйте доктайп XHTML».
Если ваш XHTML документ всёже содержит необязательный пролог
<?xml version="1.0"?>
то Internet Explorer 6 для Windows использует "режим совместимости" (quirks mode).
Если вы отдаёте свой XHTML как application/xhtml+xml, то IE6 и IE7 просто проигнорируют
ваш файл и выведут диалог сохранения файла, поэтому для них обязательно использовать text/html.
Если вы отдаёте свой XHTML как text/html значит вы и не получите никаких преимуществ XHTML по сравнению с HTML. Продвинутые браузеры (FF, Opera,Safari) не будут отображать его со всей строгостью.
P.S. Все кто читает мои записи, особенно через RSS, комментируйте их пожалуйста, я буду рада знать ваше мнение.
Комментарии: