Месяц назад я написала статью «Не используйте доктайп 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:
Поэтому валидный документ XML должен иметь DOCTYPE.[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.
Поэтому валидный XHTML документ должен иметь аттрибут xmlns с упомянутым выше значением в родительском элементе.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, комментируйте их пожалуйста, я буду рада знать ваше мнение.


Комментарии: