Декларации типа документа

В этой главе рассказывается, как идентифицировать правильный документ XHTML.

Декларация типа документа

В самом начале веб-страницы вы должны определять декларацию типа документа при помощи элемента DOCTYPE. Да, да, именно должны.

Без определения типа документа ваш HTML не полноценен и большинство браузеров будут отображать его в так называемом "режиме обратной совместимости", который означает, что браузеры будут уверены в вашей некомпетентности, и будут исполнять ваш код по своему усмотрению. Будь вы хоть гуру в HTML, ваш код пусть будет безупречен, а CSS идеален, но без декларации типа документа или если она неверна, то ваша веб-страница может выглядеть так, как будто ее делал неграмотный первоклашка.

Декларация для строгого XHTML 1.0 (XHTML 1.0 Strict) выглядит следующим образом:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Ниже приводится декларация для документа XHTML 1.1, который может показаться более предпочтительным, однако так как это последняя версия XHTML, здесь кроется несколько проблем, которые мы объясним в конце этой главы…


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

Если вы по какой-либо причине хотите использовать HTML 4 или Netscape 4 для вас эталон браузеров, вы можете декларировать документ для переходного XHTML 1.0 (XHTML 1.0 Transitional):


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Правда единственной причиной такой декларации может быть желание поддержать старые и редко используемые браузеры. Переходный XHTML 1.0 разрешает использование старых элементов представления HTML 4, что может улучшить представление страницы в таких браузерах как Netscape 4, однако использование таких элементов способно пагубно сказаться на эффективности и доступности вашей веб-страницы.

Наконец, если вы один из тех эксцентричных людей, которые используют фреймы, то специально для вас существует декларация для фреймового XHTML 1.0 (XHTML 1.0 Frameset):


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

Обратите внимание, что тег DOCTYPE – своего рода бунтовщик, и его необходимо писать в верхнем регистре с восклицательным знаком перед ним. Также он нарушает еще одно правило – это единственный тег, который не нужно закрывать.

Языковая декларация

Необходимо идентифицировать основной язык документа либо через заголовок HTTP, либо через атрибут xml:lang в открывающем теге <html>. Хотя это и не требуется для создания правильного XHTML документа, но на доступность оказывает сильнейшее влияние. Значением этого атрибута является аббревиатура, такая как 'ru' (Русский), 'en' (Английский), 'de' (Немецкий), 'mg' (Малагасийский).

Например, языковая декларация для документа с русским основным языком будет выглядеть следующим образом:


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">

После декларации основного языка, если на веб-странице есть контент на другом языке, то нужно использовать атрибут xml:lang линейно (например, <span xml:lang="de">HTML Hund</span>).

Типы контента

Также необходимо определять медиатип и набор символов документа HTML, и делается это в заголовке HTTP:


Content-Type: text/html; charset=UTF-8

Первая часть (в данном примере text/html) – это MIME тип файла. Это позволяет браузеру понять, с каким типом файла он имеет дело, и решить, что с ним делать. У всех файлов есть свой MIME тип. Например, у изображения JPEG тип image/jpeg, у файла CSS - text/css, а обычный тип HTML документа - text/html.

Вторая часть заголовка HTTP (в данном примере UTF-8) – это набор символов.

Самый простой способ установить заголовок HTTP – это использовать метатег, например, следующим образом:


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Немного более сложный, но и более предпочтительный (так как в этом случае получается правильный заголовок HTTP и при этом размер кода HTML никак не изменяется) способ – это сформировать заголовок и затем отослать его при помощи скриптового языка, работающего на стороне сервера. Например, при помощи PHP это делается следующим образом:


<?php
header("Content-Type: text/html; charset= UTF-8");

Если вы не хотите (или не можете) использовать скриптовый язык, работающий на стороне сервера, то можно обратиться к самому серверу при помощи файла '.htaccess'. У большинства серверов (совместимых с Apache) есть специальный текстовый файл с именем '.htaccess', расположенный в корневой директории. Если добавить в него следующую строку, то все файлы с расширением '.html' будут ассоциироваться с указанным MIME типом и набором символов:


AddType text/html;charset=UTF-8 html

Основное правило выбора набора символов заключается в том, чтобы использовать тот набор, который будет распознаваться аудиторией вашего сайта. Наборов символов достаточно много (например, 'ISO-8859-1' – для большинства западных, основанных на латинице, языков, 'SHIFT_JIS' – для японского языка, а 'UTF-8' – в значительной степени универсальный набор, в котором есть огромное число уникальных символов, использующихся в большинстве языках). Здесь можно посоветовать использовать набор 'UTF-8', так как он может отображать почти все символы большинства языков и можно с большой долей вероятности быть уверенным, что текст вашей веб-страницы увидят большинство пользователей.

Документы XHTML должны обрабатываться как MIME тип application/xhtml+xml. Это именно тот тип, чем они и являются – приложениями XML. К несчастью, большинство браузеров совсем не знают, что это такое. Поэтому считается вполне нормальным обрабатывать их по типу text/html. Согласно стандартам документы XHTML 1.0 могут обрабатываться по типу text/html, а вот документы XHTML 1.1 нет. Вот почему все примеры в учебниках на этом сайте имеют декларацию XHTML 1.0 Strict, предполагающую обработку по типу text/html. Но вы можете назначать правильный MIME тип для тех браузеров, которые умеют работать с соответствующими документами, прибегнув к небольшой обработке на стороне сервера.

Скипт на PHP, который для браузеров, понимающих стандарт XHTML 1.1, (как Mozilla) присваивает документу соответствующую декларацию и MIME тип application/xhtml+xml, а для остальных браузеров (как IE) - XHTML1.0 Strict и MIME тип text/html, может выглядеть следующим образом:


<?php
if (stristr(\$_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) {
   header ("Content-Type: application/xhtml+xml; charset=UTF-8");
   echo ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">');
}
else {
   header ("Content-Type: text/html; charset=UTF-8");
   echo ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
}
?>

Этот скрипт следует вставлять в начале каждой веб-страницы. Он проверяет, принимает ли браузер MIME тип application/xhtml+xml, и если принимает, то отсылается именно этот MIME тип, а в декларации прописывается тип документа XHTML 1.1. Если же MIME тип не распознается браузером, тогда отсылается MIME тип text/html, а в декларации прописывается тип документа XHTML1.0 Strict.