13.1. Структура XHTML-документов
13.2. Отличие XHTML от HTML
13.3. Проблемы использования XHTML
Ртак, РІ предыдущих главах РєРЅРёРіРё РІС‹ изучили возможности HTML 4.01 Рё теперь готовы разрабатывать веб-страницы, основанные РЅР° этом языке гипертекстовой разметки. Язык HTML версии 4.01 РІ РѕСЃРЅРѕРІРЅРѕРј поддерживается популярными браузерами Рнтернета, так что разработанные вами страницы Р±СѓРґСѓС‚ корректно отображаться РЅР° экранах компьютеров большинства пользователей. Рто большое достоинство HTML, появившееся РІ процессе эволюции версий языка Рё взглядов разработчиков браузеров РЅР° важность стандартизованного СЃРїРѕСЃРѕР±Р° представления информации, размещаемой РІ Сети. Однако ничего РЅРµ стоит РЅР° месте, Рё сейчас стали очевидными Рё недостатки HTML. РЎ помощью этого языка РІС‹ РЅРµ сможете адекватно воспроизвести химические или математические формулы, нотную запись, иероглифы. РћРЅ РЅРµ позволит вам корректно отобразить информацию РЅР° таких портативных устройствах, как карманные компьютеры, смартфоны, устройства чтения электронных РєРЅРёРі. Таким образом, развитие средств коммуникации Рё расширение типов информации, которую требуется РїРѕ РЅРёРј передать для анализа, воспроизведения Рё обработки, потребовали развития языка HTML. Рменно эта задача Рё была решена СЃ появлением языка XHTML.
Казалось Р±С‹, что могло быть проще? Нужно было просто создать еще РѕРґРёРЅ язык, который удовлетворял Р±С‹ новым требованиям, включить РІ текущую версию HTML 4.01 новые элементы, новые языковые конструкции, Рё РІСЃРµ встанет РЅР° СЃРІРѕРё места. Однако никто РЅРµ РјРѕРі Р±С‹ гарантировать всеобъемлющей полноты этого языка, что может привести Рє появлению множества нестандартных, плохо согласованных версий HTML. Рными словами, такой путь развития языка РјРѕРі привести Рє повторению первых этапов формирования HTML, РєРѕРіРґР° мало кто заботился Рѕ соответствии СЃРІРѕРёС… версий языка HTML стандартной версии, поддерживаемой W3C. РџСЂРё таком РїРѕРґС…РѕРґРµ браузеры различных производителей могли неадекватно отображать (Рё отображали!) содержимое «чужих» HTML-документов, поскольку просто РЅРµ понимали использованные РІ РЅРёС… языковые конструкции. Р’ те времена разработчикам веб-страниц приходилось нелегко, поскольку РёС… основная задача состояла (Рё состоит) РІ обеспечении максимально широкого доступа Рє СЃРІРѕРёРј сайтам.
Р’ результате специалисты W3C избрали РґСЂСѓРіРѕР№ путь, более продуктивный Рё перспективный. Вместо создания РЅРѕРІРѕР№ версии языка HTML РѕРЅРё предложили средство, СЃ помощью которого разработчики могли Р±С‹ определять Рё описывать собственные языки гипертекстовой разметки. Ртим средством является метаязык XML (eXtensible Markup Language – расширяемый язык разметки), то есть специальный язык, служащий для определения Рё задания РґСЂСѓРіРёС… языков гипертекстовой разметки. Термин «мета» как раз Рё означает его функцию: метаязыки – это языки, служащие для описания Рё определения новых языков.
Рспользование метаязыков РІ определении языков гипертекстовой разметки отнюдь РЅРµ инновация W3C. РЎРІРѕРёРј появлением РЅР° свет язык HTML обязан метаязыку SGML (Standard Generalized Markup Language – стандартный обобщенный язык разметки). Р’ приложении D В«HTML 4.01 DTDВ» РЅР° сайте W3C () РІСЃРµ конструкции языка HTML 4.01 описаны СЃ помощью набора определений типа документа (DTD – Document Type Definition). Рто набор специальных конструкций метаязыка SGML, описывающих язык HTML 4.01. РќР° следующем этапе развития языка гипертекстовой разметки специалисты W3C создали метаязык XML Рё СЃ помощью набора XML DTD – язык XHTML, наследующий возможности HTML 4.01, РЅРѕ СЃ некоторыми уточнениями Рё усовершенствованиями. Язык XHTML обеспечивает поддержку всех средств HTML 4.01, применяя более жесткие правила XML DTD.
Почему же специалисты W3C разработали новый метаязык XML вместо использования SGML? Причина состоит в сложности SGML: насколько он универсален и всемогущ, настолько и сложен в понимании. Поэтому он непригоден для широкого использования разработчиками специализированных версий языков гипертекстовой разметки. Язык XML для определения новых языков использует отдельные (но не все) элементы SGML, кроме того, в нем присутствуют упрощенные элементы SGML, более подходящие для широкого применения.
В настоящий момент имеется три типа DTD, используемых для определения языка XHTML.
1. Первый тип соответствует строгому применению правил XHTML DTD в данном документе. При этом запрещается использование всех тегов и атрибутов HTML, признанных устаревшими по разным причинам, например запрещены все атрибуты форматирования текста по причине их замены таблицами CSS. К числу последних относятся тег и атрибут выравнивания align. Однако такое ограничение для многих просто неприемлемо, поскольку использование элементов этого типа стало для разработчиков привычкой, выработанной годами работы над HTML-документами.
2. Второй тип XHTML DTD называется переходным и включает в себя все нежелательные элементы HTML, чтобы разработчики веб-страниц могли постепенно перейти от старого к новому. Такой подход соответствует тенденциям в развитии браузеров, которые не спешат расставаться со старыми добрыми средствами создания веб-страниц с помощью пусть и устаревших, но привычных и надежных тегов HTML.
3. Третий тип DTD определяет работу с фреймами, в остальном он соответствует переходным XHTML DTD.
В настоящее время актуальна версия 1.0 языка XHTML, но уже на подходе версия 1.1.
В основном создание документа XHTML 1.0 не отличается от создания документа HTML. Однако в синтаксисе и структуре документа имеются определенные отличия, которые обязательно должны быть учтены, если вы хотите добиться соответствия своей веб-страницы требованиям XHTML. Обсудим устройство документов XHTML 1.0 и их отличие от документов, подготовленных на основе языка HTML 4.01.
13.1. Структура XHTML-документов
Чтобы XHTML-документ полностью отвечал требованиям строгих правил XHTML DTD, ему нужно указать, какой набор XML DTD был использован при его создании, версию применяемого языка XML, а также пространство имен документа. Вся эта информация помещается в начало документа в виде объявлений. Рассмотрим эти три компонента по порядку.
Р’ настоящее время существует РґРІРµ версии языка XML: 1.0 Рё 1.1. РС… отличия РІ РѕСЃРЅРѕРІРЅРѕРј сводятся Рє более строгим требованиям Рє используемым РІ документах кодировкам символов, предъявляемым языком XML 1.1, что расширяет сферу применения соответствующих документов, например РЅР° мейнфреймах. Более широко применяется версия XML 1.0, поэтому использовать будем именно ее. Для объявления того, что РІС‹ используете РІ данном XHTML-документе язык XML версии 1.0, следует поместить РІ первой строке документа следующую строку:
В ней браузеру сообщается, что вы используете XML версии 1.0 и представление символов в кодировке Unicode с разрядностью 8.
Теперь объявим набор DTD языка разметки XHTML:
В вышеприведенной конструкции объявлено, что в данном документе корневым элементом является html, а для его разработки использован набор XHTML DTD с публичным именем «//W3C//DTD XHTML 1.0 Strict//EN». Если браузер сумеет найти эти DTD по публичному имени, он будет использовать их, иначе он может применить набор XML DTD, хранимый в файле, который указан в URL вслед за публичным именем. В данном случае это документ по адресу . Слово «strict» в названии файла означает «строгий», так что в данном документе использован строгий тип XHTML DTD. Указанный в адресе файл xhtml1-strict.dtd хранит все правила DTD, написанные на языке XML. Описание языка XML выходит за рамки этой книги, ограничимся только замечанием, что для всех разработчиков, которые хотят работать с XHTML на профессиональном уровне, знание языка XML является обязательным.
Если же вы намерены использовать переходной тип XHTML-документов, добавьте такое объявление:
Для фреймовой версии XHTML DTD объявление таково:
Ртак, РјС‹ объявили версию XML Рё набор XHTML DTD для создаваемого XHTML-документа. Теперь зададимся РІРѕРїСЂРѕСЃРѕРј: Р° что если РјС‹ используем переходные правила XHTML DTD, РЅРѕ нам требуется включить РІ СЃРІРѕР№ документ некий фрагмент, содержащий разметку РїРѕ правилам специально определенного набора DTD, например для воспроизведения нотной записи? Для этих целей РІ документах XHTML используется так называемое пространство имен.
Пространство имен – это список имен всех тегов и атрибутов, которые применяются в XHTML-документе, подчиняющемся определенному набору правил XML DTD. С этой целью в правилах XML DTD всегда задается пространство имен, уникальное для каждого конкретного набора DTD. Соответственно, в XHTML DTD также определено стандартное пространство имен, которое должно быть хотя бы раз явно объявлено в документе XHTML. Обычно это делается с помощью атрибута xmlns тега :
Здесь задано пространство имен, хранимое РІ документе РїРѕ адресу , РіРґРµ находится официальная спецификация языка XHTML. Для использования РІ XHTML-документах нескольких DTD предусмотрена возможность РїСЂСЏРјРѕРіРѕ указания пространства имен, Рє которому принадлежит данный тег или атрибут разметки. Рто делается СЃ помощью атрибута xmlns, который можно поместить РІ открывающий тег любого элемента РІ документе, например, так:
В этом случае XHTML-совместимый браузер, обрабатывая документ, получит указание, что при воспроизведении содержимого данного тега
Как видите, ссылки на пространства имен достаточно объемны. Чтобы сократить их размер и упростить себе работу по составлению документа, можно использовать так называемые метки, вставляя их в определения пространства имен в начале документа:
После этого можно будет обращаться к данному пространству имен во всех тегах документа так:
Здесь приведена сокращенная версия тега
Ртак, сведем РІСЃРµ воедино, запишем весь созданный XHTML-документ целиком (листинг 13.1).
Листинг 13.1. Образец XHTML-документа
"http://www.w3.org/TR/xhtml1/DTD/xhtml1 transitional.dtd">
...Здесь находится содержимое документа...
Все компоненты этого документа должны быть вам знакомы. В начале стоят объявления об использовании в документе языка XML 1.0 и переходных правил XHTML 1.0 DTD. В декларативной части внутри элемента head содержится элемент title заголовка документа, который в языке XHTML обязателен. В элементе html с помощью атрибута xmlns объявлено, что по умолчанию пространством имен документа будет XHTML 1.0. С помощью атрибута lang указано, что в документе XHTML применяется английский язык.
Однако что теперь РјС‹ можем ввести РІ тело XHTML-документа? Поскольку РјС‹ объявили использование для него переходных правил DTD XHTML 1.0, допустимы практически любые элементы, теги Рё атрибуты языка HTML 4.01, однако РїСЂРё РёС… использовании РјС‹ должны учитывать определенные ограничения. Рти ограничения еще более жестки РІ готовящейся версии языка XHTML 1.1, причем настолько, что практически исключают какие-либо вольности РІ составлении XHTML-документов. РњС‹ же ограничимся более либеральной версией 1.0.
13.2. Отличие XHTML от HTML
Основным отличием документа XHTML от HTML 4.01 является жесткое требование к корректности документа с точки зрения стандартов языка XML. На протяжении истории развития языка HTML сложился подход, при котором допускались многочисленные вольности и отступления от стандартов языка, объявленных W3C, а браузеры различных производителей пытались компенсировать эти вольности, угадывая и корректируя HTML-код с целью его адекватного воспроизведения. Все это отменяется в языке XHTML, если следовать строгим наборам XHTML DTD, а переходные наборы XHTML DTD служат лишь на период перехода от старого к новому: от HTML к XHTML.
Значения атрибутов должны быть в кавычках
В языке HTML значения атрибутов должны быть заключены в кавычки, только если в значение входят пробелы или специальные символы. Но в языке XHTML это недопустимо: все значения должны заключаться в кавычки. Например, в теге
Однако в языке XHTML это считается ошибкой. Следует писать так:
Хотя это и кажется избыточным, но выполнение такого правила обязательно.
Необходимо наличие закрывающего тега
В стандарте языка HTML 4.01 допускается пропуск закрывающего тега, если программа, которая будет обрабатывать соответствующий документ, сможет «догадаться» о его наличии. Поэтому вполне допустимо опускать закрывающие теги
между соседними абзацами или
Рто первый абзац
<Рто второй абзац>
Конечно, такое требование сильно загромождает код, однако устраняет какие-либо двусмысленности в разметке документа, поскольку позволяет точно идентифицировать любой элемент кода.
То же самое касается и пустых элементов. Каждый тег такого элемента должен иметь как открывающий, так и закрывающий тег, например тег обрыва строки теперь должен писаться так:
, иначе строка разорвана не будет. К счастью, в этом случае допускается запись
, то есть перед завершающей угловой скобкой следует поместить наклонную черту. Если же у тега есть атрибуты, то угловая черта пишется после них, например .
Необходимо корректно вкладывать элементы друг в друга
Рто требование стандарта XHTML РЅРµ отличается РѕС‚ требований HTML. Каждый элемент, вложенный РІ РґСЂСѓРіРѕР№ элемент, должен быть закрыт завершающим тегом, лежащим внутри содержащего его элемента. Например, РІ данном примере элемент для задания РєСѓСЂСЃРёРІРЅРѕРіРѕ текста включает тег полужирного начертания:
…форматируемый текст…
Ртот пример корректен. Однако если РјС‹ напишем так:
…форматируемый текст…
то нарушим требования HTML. Тем не менее эти и им подобные требования не всегда выполнялись разработчиками, и «добрые» браузеры обычно корректировали такие нарушения кода. Однако стандарт XHTML запрещает подобные нарушения. Кроме того, XHTML запрещает следующие вложения:
• тег
Назначение имен тегов и атрибутов зависит от регистра
В документах HTML имена тегов и атрибутов не зависят от регистра символов, так что, например, запись