Главная » Полезные статьи » HTML-верстка » Синтаксические различия HTML и XHTML
Распечатать статью

Синтаксические различия HTML и XHTML

Минимально возможный документ, согласно стандарту HTML 4, должен состоять из двух обязательных составляющих: ссылки на определение типа документа (DTD) и элемента <title>…</title>, содержащего название документа. К сожалению, горе-разработчики, игнорирующие и одно, и другое, встречаются на каждом шагу. Помимо перечисленного, минимальный документ HTML 4 должен включать в себя любую структурную единицу разметки полезного содержания.

Вот возможный пример одного из наиболее кратких HTML-документов, обнаруживающий соответствие DTD HTML 4.01 Strict:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <title></title> <p></p>

Убедиться в том, что документ соответствует стандарту, можно при помощи онлайнового валидатора, доступного на сайте Консорциума W3C по адресу http://validator.w3.org/.

Если мы откроем созданный нами документ при помощи какого-либо браузера, то мы увидим… пустое окно. Это неудивительно — наш документ не содержит никакой полезной информации. Элемент <title></title>, определяющий название документа, равно как и контейнер <p></p>, задающий абзац текста, в нашем примере совершенно пусты.

Давайте заполним их содержательной информацией:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <title>Минимальный документ</title> <p>Эта веб-страница имеет простейшую структуру из всех возможных.</p>

Обновив содержимое окна браузера, мы получим вполне осязаемый результат. Текст «Минимальный документ», являющийся названием нашей веб-страницы, отобразится в заголовке окна браузера, а содержимое контейнера <p>…</p> — абзац текста — мы увидим непосредственно в окошке браузера.

Если мы просто попытаемся заменить ссылку на объявление типа документа, торжественно провозгласив, что наша веб-страница отныне является никак не просто HTML-, а вовсе даже XHTML-документом, у нас ничего путного не выйдет.

XHTML-документ может содержать только один корневой элемент разметки — а у нас их целых два: это <title>…</title> и <p>…</p>. Кроме того, в XHTML 1.0 Strict являются обязательными элементы <head>…</head> и <body>…</body>, определяющие соответственно заголовок и тело документа. Впрочем, хорошим тоном считается наличие этих элементов и в документах, созданных при помощи «обычного» HTML 4.

Заголовок — это раздел документа, куда включаются служебные, вспомогательные, управляющие элементы, которые не являются частью контента страницы. Такие элементы не отображаются в окне браузера. В их числе — элемент <title>…</title>, содержимое которого, как мы помним, никак не влияет на внешний вид веб-страницы, а показывается лишь в заголовке окна браузера.
Напротив, тело документа — это контейнер, куда помещается полезное содержание веб-страницы. Оно отображается в окне браузера и воспроизводится прочими пользовательскими агентами в соответствии с определенными для них правилами.

Перевод страницы, код которой представлен в вышеприведенном листинге, на язык XHTML будет выглядеть примерно так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Минимальный документ</title> </head> <body> <p>Эта веб-страница имеет простейшую структуру из всех возможных.</p> </body> </html>

Как видите, первая строка видоизменилась — именно так выглядит ссылка на определение типа документа XHTML 1.0 Strict.

Кстати говоря, для общего развития совсем не вредно прогуляться по тем URL, которые указываются в этих самых объявлениях, и посмотреть воочию, как выглядят файлы DTD. По адресу http://www.w3.org/TR/html4/strict.dtd вы найдете определение типа документа HTML 4.01 Strict, а по адресу http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd — DTD для XHTML 1.0 Strict. Анализ файлов DTD выходит за пределы тематики нашей статьи — но ничего сверхъестественного они в себе не таят, и интересующиеся после некоторой подготовки вполне смогут самостоятельно в них разобраться.

К другим синтаксическим различиям. Необходимо, чтобы все теги XHTML-документа были набраны непременно в нижнем регистре, ибо с точки зрения синтаксических правил XML записи <html> и <HTML> являются совершенно различными. Требуется, чтобы элементы-контейнеры снабжались закрывающим тегом, а пустые элементы закрывались при помощи косой черты (к примеру, так: <br />; пробел здесь необязателен, но его рекомендуется оставлять для совместимости со старыми браузерами).

Атрибут name для элементов <a>, <applet>, <form>, <frame>, <iframe>, <img> и <map> является нежелательным, вместо него полагается использовать атрибут id.

В XML не поддерживается минимизация атрибутов, поэтому булевы атрибуты должны быть записаны в полной форме. К примеру, конструкция <option selected> с точки зрения XHTML некорректна — правильной записью будет <option selected=»selected»>, несколько смахивающая на тавтологию. К сожалению, совсем старые браузеры, не совместимые с HTML 4, могут не понимать подобных конструкций, но таковых сегодня почти не осталось.

С прицелом на будущее

Того шаблона минимального документа на языке XHTML 1.0 Strict, который был описан в предыдущем подразделе, вполне достаточно для создания весьма качественных веб-страниц.

Есть, однако, еще несколько пожеланий. Пожеланий факультативных, необязательных, но способствующих дальнейшему усовершенствованию создаваемых документов, улучшению их в плане универсальности.

W3C, пропагандируя доступность контента веб-ресурсов для максимально широкого круга пользователей и выступая за интернационализацию Всемирной паутины, рекомендует указывать язык содержимого веб-страниц при помощи атрибута lang тега <html>. Это касается документов, созданных как при помощи HTML 4, так и с применением XHTML.

Нижеследующий фрагмент XHTML-кода свидетельствует, что данный документ — на русском языке:С прицелом на будущее

Того шаблона минимального документа на языке XHTML 1.0 Strict, который был описан в предыдущем подразделе, вполне достаточно для создания весьма качественных веб-страниц.

Есть, однако, еще несколько пожеланий. Пожеланий факультативных, необязательных, но способствующих дальнейшему усовершенствованию создаваемых документов, улучшению их в плане универсальности.

W3C, пропагандируя доступность контента веб-ресурсов для максимально широкого круга пользователей и выступая за интернационализацию Всемирной паутины (см. WAI — Web Accessibility Initiative), рекомендует указывать язык содержимого веб-страниц при помощи атрибута lang тега <html>. Это касается документов, созданных как при помощи HTML 4, так и с применением XHTML.

Нижеследующий фрагмент XHTML-кода свидетельствует, что данный документ — на русском языке:

<html lang="ru"> ... </html>

Буквенный код того или иного языка, указываемый в значении атрибута lang, приводится в соответствии со стандартом ISO 639. Так, например, английскому языку соответствует код en, французскому — fr, немецкому — de, украинскому — uk, белорусскому — be и т. д.

Дальнейшее в этом подразделе касается только XHTML-документов. Любая XHTML-страница, как известно, представляет собой XML-документ.

Считается хорошим тоном начинать XML-документы с объявления XML. Оно содержит номер версии языка, а также (иногда) некоторые дополнительные параметры, например, кодировку документа. Объявление XML не является обязательным для XML-документов, но все же его рекомендуется указывать, ибо в будущем вероятны ситуации, что документы без объявления XML будут восприняты как соответствующие самой последней версии языка, что может привести к ошибкам и разного рода несовместимостям. В настоящий момент в качестве официальных рекомендаций утверждены две версии XML — 1.0 и 1.1. Язык XHTML 1.0, напоминаю, базируется на XML 1.0, являясь подмножеством последнего.

В XML, который, как мы уже говорили, является универсальным стандартом для хранения любых структурированных данных, определен атрибут xml:lang, предназначенный для тех же целей, что и атрибут lang в HTML, с той лишь разницей, что xml:lang применим для любых XML-документов, а не только для XHTML-страниц. Можно сказать, что xml:lang носит более глобальный характер, нежели lang. Применение атрибута xml:lang является предпочтительным для современных XML-ориентированных пользовательских агентов, поисковых систем и т. д., но, к сожалению, старые браузеры, не совместимые с XML, не понимают и попросту игнорируют этот атрибут. Поэтому рекомендуется употреблять как xml:lang, так и lang «в одном флаконе», чтоб уж наверняка…

Кроме того, рекомендуется указывать принадлежность элемента <html>…</html> к пространству имен XHTML.

Пояснение. XML, являя собой метаязык, позволяет разработчикам придумывать свои собственные, совершенно произвольные теги. Поскольку именами тегов назначаются, как правило, осмысленные слова естественного языка, которых, положа руку на сердце, не так уж и много в человеческой речи, в XML-документах разных типов вполне могут присутствовать одинаковые теги, обозначающие совершенно различные вещи. В этом нет ничего криминального. (Можно привести такую аналогию: скажем, в английском и французском языках есть слова, которые пишутся одинаково, но звучат по-разному, а порой обладают и различными смысловыми значениями.) Однако если элементы, наделяемые различной смысловой нагрузкой, но при этом определяемые одинаковыми тегами, встретятся в одном документе, произойдет конфликт имен — при обработке такого документа станет весьма проблематичным определить, данные какого типа несет в себе тот или иной элемент. Механизм пространств имен как раз-таки позволяет разрешать подобные конфликты. Впрочем, мне не хотелось бы здесь вдаваться в его устройство и вообще углубляться в тонкости XML — скажу лишь, что наличие или отсутствие ссылки на пространство имен XHTML никак не сказывается на поведении привычных нам браузеров; все это можно рассматривать скорее как задел на светлое будущее и лишний фактор душевного спокойствия разработчиков и уверенности в том, что все сделано «как надо». А это само по себе неплохо.

С учетом всего вышесказанного «минимальный» XHTML-документ превращается в нечто вроде такого:

<?xml version="1.0" encoding="windows-1251"?> <!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" lang="ru" xml:lang="ru"> <head> <title>Минимальный документ</title> </head> <body> <p>Эта веб-страница имеет простейшую структуру из всех возможных.</p> </body> </html>

Первая строка — то самое объявление XHTML; указываемая здесь кодировка должна, разумеется, совпадать с той, в которой документ возвращается сервером. Тег <html> «оброс» новыми атрибутами — так, значением атрибута xmlns является идентификатор пространства имен XHTML, а после атрибута lang добавился атрибут xml:lang с тем же самым значением, что и у lang.

Ограничения

По правде говоря, использовать приведенный выше «прогрессивный» шаблон XHTML-документа возможно нынче только с некоторыми ограничениями.

Большинство современных браузеров может работать в двух режимах — режиме соответствия стандартам и режиме совместимости (надо понимать, совместимости со страницами, сверстанными по «диким» правилам второй половины 1990-х).

Как правило, в режиме соответствия стандартам браузеры работают тогда, когда обрабатываемый документ снабжен правильным элементом <!DOCTYPE …>. Если таковой элемент отсутствует либо некорректен, браузер переключается в режим совместимости.
Одной из особенностей режима совместимости в Internet Explorer 6.0 является тот факт, что при отсутствующем или некорректном элементе <!DOCTYPE …> этот браузер начинает вести себя, как Internet Explorer 5.0 — например, некорректно интерпретировать CSS-свойства width и height. (Значения этих свойств, согласно спецификации CSS, относятся только к размерам содержимого блочного элемента — без учета полей, рамки и отступов. Браузер же Internet Explorer 5.x,за исключением версии 5.5 для Macintosh, в пику стандарту трактует значения свойств width и height как ширину и высоту блочного элемента с учетом величин полей и толщины рамки, но все же без учета отступов.)

«Приятный» сюрприз, подготовленный для нас компанией Microsoft, состоит в следующем. IE6 работает в режиме обратной совместимости с IE5 в любом случае, если только правильный элемент <!DOCTYPE …> не встретится этому замечательному браузеру в самой первой значащей строке кода.
А что у нас в первой строке кода? Правильно, объявление XML! Элемент <!DOCTYPE …> идет следом. Firefox, Opera и даже IE7 его исправно распознают, а вот для IE6 этой строчки будто бы и нет вовсе.

Мораль сей басни такова. Когда условия работы меняются с «учебных» на «боевые», и речь заходит о реальных проектах, а не об экспериментальных примерах, напоминающих сферического коня в вакууме, не стоит безоглядно полагаться на стандарты. Стараясь придерживаться их духа и буквы, где только это возможно, необходимо, тем не менее, принимать во внимание и особенности интерпретации тех или иных спецификаций реальными браузерами, которые, к сожалению, пока что далеки от идеала.

Пока ситуация складывается таким образом, что от объявления XML в первой строке XHTML-документов в реальной практике лучше воздерживаться, ибо «народный браузер» IE6 (которым, по данным SpyLog — http://gs.spylog.ru/ — пользуются свыше 57% посетителей сайтов Рунета; информация приводится за период с 17 мая по 4 июля 2007 г.) за объявлением XML не видит элемента <!DOCTYPE …>, влияющего на корректность отображения элементов страницы. К слову, повода для расстройства почти нет — ведь мы уже акцентировали внимание на том, что объявление XML является факультативным, необязательным элементом…

Источник: internet-technologies.ru 
Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи