Структура XHTML-документа.
Любой XHTML-файл состоит из трех разделов - тега <! DOCTYPE>, заголовка (<HEAD>) и тела документа (<BODY>). Последние два элемента перекочевали из HTML и ничем не отличаются от своего родоначальника (пример 1).
Пример 1. Простейший XHTML документ.
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <! - Этот раздел предназначен для заголовка страницы и технической информации. - -> </head> <body> <! - А здесь надо размещать все, что хочется увидеть на странице. - -> </body> </html>
Тег <! DOCTYPE> сообщает браузеру о типе текущего документа и как его интерпретировать. Различают несколько версий и типов XHTML-документов, они приведены в табл.1.
Табл.1. Версии XHTML и допустимые типы документа
Версия XHTML | Тип документа | Описание |
XHTML 1.0 | Strict | "Строгое" описание документа, включающее все правила. |
XHTML 1.0 | Transitional | "Переходный" тип, более лояльно относящийся к коду документа. |
XHTML 1.0 | Frameset | Устанавливается при использовании на странице фреймов. |
XHTML 1.1 | XHTML 1.1 | Эта версия основана на XHTML 1.0 Strict, но понимается браузерами как XML-приложение. В первую очередь предназначено для работы с различными медиа-данными. |
XHTML 1.0 Strict
Используется в том случае, если в документе идет четкое разделение оформления и содержания. При этом код веб-страницы содержит только теги разметки, а сам вид элементов задается через стили (пример 2).
Пример 2. Документ со строгой разметкой
<! 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"> <head>... </head> <body>... </body> </html>
XHTML 1.0 Transitional
Обычно применяется, когда правило разделения оформления и содержания выполняется не в полной мере. В этом случае допускается в коде документа использовать теги физического проектирования (например, тег <TT>) и лишь частично стили. В примере 3 показан вид тега <! DOCTYPE> для подобных документов.
Пример 2.3 "Переходный" документ
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>... </head> <body>... </body> </html>
XHTML 1.0 Frameset
Применяется, когда окно браузера делится на два или более фрейма (пример 4).
Пример 4. Документ с фреймами
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Frameset // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset. dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>... </head> <frameset>... </frameset> </html>
Тег <! DOCTYPE> хотя и обязателен, но не является непосредственной частью XHTML-документа, поэтому для него закрывающего тега не требуется.
XHTML 1.1
Является старшей версией "строгого" XHTML (пример 5).
Пример 5. XHTML 1.1
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.1 // EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11. dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>... </head> <body>... </body> </html>
Шаблон документа XHTML Strict
Тег <HTML> является корневым для остальных элементов веб-страницы и располагается сразу после определения типа документа <! DOCTYPE>. Поскольку тип документа может быть любым, а не только тем, что приведен в табл.1, то необходимо дать понять браузеру, что он имеет дело со спецификой XHTML. Для чего в тег <HTML> добавляется параметр xmlns.
Замечание:
Хотя параметр xmlns в теге <HTML> и считается обязательным, но валидатор не выдает ошибки, если xmlns отсутствует.
Также в контейнере <HEAD> требуется наличие заголовка <TITLE>. Таким образом, минимальный XHTML-документ с метатегом, устанавливающим кодировку веб-страницы, показан в примере 2.6
Пример 6. Шаблон XHTML-документа
<! 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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Новый документ</title> </head> <body> </body> </html>
Задачей XHTML 1.0 был переход HTML на свойственный XML словарь. Эта спецификация ввела ограничения синтаксиса XML в HTML: регистрозависимость, принудительное заключение в двойные кавычки значений атрибутов и симметричные тэги. Таким образом XHTML 2.0 пытается решить проблемы HTML как языка для разметки web-страниц.
В своей презентации на конференции XTech 2005 в Амстердаме, сотрудник W3C Стивен Пембертон (Steven Pemberton) выразил цели проекта XHTML 2.0:
Использовать XML везде, где это возможно: Если функция языка уже существует в XML, она не дублируется и не проектируется повторно;
Сначала структура, затем представление: Благодаря таблицам стилей CSS больше нет необходимости в явно презентационных тэгах в HTML;
Сделать HTML проще в написании: Устранить некоторые бесполезные идиосинкразии HTML;
Больше доступности, аппаратной независимости: Сделать столько предположений, сколько возможно, о способе, которым документ будет прочитан;
Улучшенная интернационализация;
Улучшенные формы: Необходимые давно назревшие усовершенствования!
Снизить необходимость использования сценариев: Включить типичные применения сценариев в синтаксис самого HTML;
Улучшенная семантика: Упростить интеграцию HTML с семантическими web-приложениями.
Я испытываю некоторое удивление по поводу текстовых структурных элементов этого языка. Зачем нужны шесть уровней заголовков, и в какой ситуации можно было бы применить их все? Итак, почему бы заголовкам каким-либо образом не включать разделы, которые они озаглавливают? У XHTML 2.0 есть ответ на этот вопрос благодаря новым элементам <section> и <h> (заголовок):
<section>
<h>Level 1 heading</h>
...
<section>
<h>Level 1 heading</h>
...
</section>
</section>
Это более логичное структурирование, чем в XHTML 1.0, и оно будет ближе пользователям многих других словарей. Одно из существенных преимуществ для программистов заключается в том, что они смогут включать разделы материалов прямо в документ, при этом не нужно переделывать номера уровней заголовков.
После этого для заголовков можно использовать стили CSS. Хотя ожидается, что реализация XHTML 2.0 в браузерах по умолчанию будет включать кое-что из описанного здесь как предварительно заданные параметры, но если написать их явным образом, они могут выглядеть примерно так (если абстрагироваться от спецификации XHTML 2.0):
h {font-family: sans-serif; font-weight: bold; font-size: 200%}
section h {font-size: 150%} /* Заголовок второго уровня */
section section h {font-size: 120%} /* Заголовок третьего уровня */
Еще одно логическое несоответствие в XHTML 1.0 заключается в том, что необходимо закрыть абзац, чтобы использовать список. По сути, абзацы следует закрывать для использования любых блочных элементов (блоков цитат, преформатированных разделов, таблиц и т.д.). Поступать так не всегда логично, если материал может вполне правомерно использоваться как часть одного абзаца. XHTML 2.0 устраняет это ограничение. Единственное, чего нельзя делать - это помещать один абзац в другой.
Тэг <img> в HTML на самом деле имеет довольно ограниченную гибкость. Как отмечает Пембертон, он не предоставляет никакого механизма нейтрализации ошибки, за исключением альтернативного текста alt (что препятствует утверждению новых форматов изображения), текст в тэгах alt нельзя разметить, а атрибут longdesc никогда не войдет в моду из-за своей неуклюжести. (longdesc используется для того, чтобы указать URI более полного описания изображения, чем то, что приводится в атрибуте alt)
В XHTML 2.0 появляется элегантное решение этой проблемы: возможность любому элементу иметь атрибут src. Браузер впоследствии заменяет содержимое элемента содержимым, которое находится по указанному URI. В самом простом случае это изображение. Но нигде не сказано, что это не может быть SVG, XHTML или любой другой тип содержимого, которое способен интерпретировать браузер.
Тэг <img> как таковой остается, но теперь он может включать содержимое. Новое действие атрибута src означает, что текст alt теперь представляет собой содержимое элемента, как в этом примере разметки:
<p><imgsrc="http://example.com/water. png">H<sub>2</sub>O</img></p>
Это особенно приятная новость для таких языков, как японский для которого комментарии Ruby требуют строчной разметки, которая до этого была невозможна в значении атрибута.
XHTML 2.0 предлагает более общую форму включения изображения в элемент <object>, который можно применять для включения любого вида объектов - от изображений и клипов до исполняемого кода наподобие технологий Flash или Java. Это дает возможность использовать изящную технику для обработки постепенного уменьшения возможностей в зависимости от свойств браузера; можно внедрять несколько элементов <object> один в другой. Например, flash-ролик можно поместить на самый внешний уровень, видеофайл AVI внутрь flash-ролика, фотоизображение внутрь avi-файла и, наконец, фрагмент текста в центре группы вложенных объектов. Смотрите Модуль объектов XHTML, где приведена дополнительная информация по этой теме.
HTML всегда имел некоторые элементы с семантическими ассоциациями, например, <address> и <title>. Проблема заключается в том, что таких элементов мало, и они не являются расширяемыми. Между тем, предпринимались попытки использовать атрибут class для того, чтобы привнести семантику в элементы HTML. Это расширение задач атрибута class по сравнению с тем, для чего он был создан; такое применение атрибута затрудняется тем, что он преимущественно используется для применения стилей CSS. (Некоторых людей раздражает такое утверждение задачи атрибута class, но со вторым применением трудно спорить).