Смекни!
smekni.com

Расширенный язык разметки гипертекста (XHTML) (стр. 2 из 5)

Незакрытые элементы (XHTML, в отличие от HTML, требует закрытия всех элементов, в том числе не имеющих закрывающего тега, как, например, <br />).

Отсутствие альтернативных текстов для изображений (достигающийся применением атрибута alt, который помогает сделать документы доступнее для устройств, которые не в состоянии отображать изображения, или предназначенных для слабовидящих людей).

Присутствие текста непосредственно в теге <body> документа (должен быть объявлен блочный элемент, внутрь которого следует помещать содержимое).

Вложение блочных элементов внутрь инлайновых (внутристрочных) (например, блочные элементы <div> или <p> не могут быть вложены внутрь инлайновых элементов <a>, <span>, <em> и так далее).

Пренебрежение заключением значений атрибутов в кавычки (<a href=http://www.ru/> вместо <a href="http://www.ru/">).

Неправильное вложение элементов (конструкции вида <strong> <em> </strong> </em>).

Неправильное использование ссылок-мнемоник (например & вместо &amp;)

Написание тегов и/или атрибутов прописными буквами (<DIV STYLE="…"> вместо <div>).

Задание в теге <! DOCTYPE …> относительного пути к DTD-файлу, скопированное с сайта www.w3.org ("DTD/xhtml11. dtd" вместо "http://www.w3.org/TR/xhtml11/DTD/xhtml11. dtd").

Преимущества перехода на XHTML 1.0 описаны выше. Вот несколько основных преимуществ:

Разработчики документов и создатели пользовательских агентов постоянно открывают новые способы выражения своих идей в новой разметке. В XML ввод новых элементов или атрибутов достаточно прост. Семейство XHTML разработано так, чтобы принимать расширения путем модулей и технологий XHTML для разработки новых соответствующих XHTML модулей (описанных в готовящейся спецификации Модуляризации XHTML). Модули позволят комбинировать существующие и новые наборы функций при разработке содержимого и создании новых пользовательских агентов.

Постоянно вводятся альтернативные методы доступа в Интернет. По некоторым оценкам, в 2010 году 95% обращений к документам в Интернет будет выполняться с альтернативных платформ. Семейство XHTML создавалось с учетом общей совместимости пользовательских агентов. С помощью нового механизма профилирования пользовательских агентов и документов серверы, прокси и пользовательские агенты смогут преобразовывать содержимое наилучшим образом. В конечном счете станет возможной разработка соответствующего XHTML содержимого, пригодного для любого соответствующего XHTML пользовательского агента.

2.1 Строго конформные документы

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

Он должен проходить проверку корректности в соответствии с одним из трех DTD, приведенных в приложении A.

Корневым элементом документа должен быть элемент <html>.

Корневой элемент документа должен назначать пространство имен XHTML с использованием атрибута xmlns. Пространство имен для XHTML определено в http://www.w3.org/1999/xhtml.

В документе до корневого элемента должно иметься объявление DOCTYPE. Открытый идентификатор, включаемый в объявление DOCTYPE, должен ссылаться на одно из трех DTD, приведенных в приложении A, с помощью соответствующего формального открытого идентификатора. Системный идентификатор может изменяться, отражая соглашения, принятые в локальной системе.

<! DOCTYPE html

PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN"

"DTD/xhtml1-strict. dtd">

<! DOCTYPE html

PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN"

"DTD/xhtml1-transitional. dtd">

<! DOCTYPE html

PUBLIC "- // W3C // DTD XHTML 1.0 Frameset // EN"

"DTD/xhtml1-frameset. dtd">

вот пример минимального документа XHTML.

<? xml version="1.0" encoding="UTF-8"? >

<! DOCTYPE html

PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN"

"DTD/xhtml1-strict. dtd">

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

<head>

<title>Виртуальная библиотека</title>

</head>

<body>

<p>Переехала по адресу <a href="http://vlib.org/">vlib.org</a>. </p>

</body>

</html>

Обратите внимание, что в данном примере включено объявление XML. Такое объявление XML не является обязательным для всех документов XML. Авторам документов XHTML настоятельно рекомендуется использовать объявления XML во всех своих документах. Такое объявление обязательно, если кодировка символов документа отличается от используемых по умолчанию UTF-8 или UTF-16.

2.2 Использование XHTML с другими пространствами имен

Пространство имен XHTML может использоваться с другими пространствами XML в соответствии с [XMLNAMES] , хотя такие документы не являются строго конформными XHTML 1.0 в соответствии с приведенным выше определением. В будущих работах W3C будут определены способы указания конформности документов, в которых используется несколько пространств имен.

В следующем примере показано, как XHTML 1.0 может использоваться с рекомендацией MathML:

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

<head>

<title>Пример Math</title>

</head>

<body>

<p>Далее приводится разметка MathML: </p>

<math xmlns="http://www.w3.org/1998/Math/MathML">

<apply> <log/>

<logbase>

<cn> 3 </cn>

</logbase>

<ci> x </ci>

</apply>

</math>

</body>

</html>

В следующем примере показан способ внедрения разметки XHTML 1.0 в другое пространство имен XML:

<? xml version="1.0" encoding="UTF-8"? >

<! - сначала пространство имен по умолчанию: "books" - ->

<book xmlns='urn: loc.gov: books'

xmlns: isbn='urn: ISBN: 0-395-36341-6' xml: lang="ru" lang="ru">

<title>На десятку дешевле</title>

<isbn: number>1568491379</isbn: number>

<notes>

<! - для комментария по умолчанию устанавливается пространство имен HTML - ->

<p xmlns='http://www.w3.org/1999/xhtml'>

Можно также найти <a href="http://www.w3.org/">в сети</a>.

</p>

</notes>

</book>

2.3 Конформность пользовательских агентов

Конформный пользовательский агент должен соответствовать всем следующим критериям:

Для соответствия рекомендации XML 1.0 [XML] пользовательский агент должен разбирать документ XHTML и оценивать его правильность. Если пользовательский агент выполняет проверку на правильность, он должен также проверять документы на соответствие с DTD, на которые они ссылаются, в соответствии с [XML] .

Если пользовательский агент поддерживает возможности, определенные в настоящей спецификации или обязательные согласно нормативной ссылке, он должен это делать в соответствии со способами, описанными в определении этой возможности.

Если пользовательский агент обрабатывает документ XHTML как общий документ XML, он должен распознавать только атрибуты типа ID (например, атрибут id большинства элементов XHTML) в качестве идентификаторов фрагментов.

Если пользовательский агент встречает элемент, который он не распознает, он должен сгенерировать содержимое элемента.

Если пользовательский агент встречает атрибут, который он не распознает, он должен проигнорировать всю спецификацию атрибута (т.е. атрибут и его значение).

Если пользовательский агент встречает значение атрибута, которое он не распознает, он должен использовать значение атрибута по умолчанию.

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

Во время генерации содержимого пользовательские агенты, если они встречают распознаваемые, но негенерируемые символы или ссылки на символьные объекты, должны представлять документ таким образом, чтобы пользователю было понятно, что корректная генерация была невозможна.

Следующие символы определены в [XML] как пробельные:

пробел (&#x0020;)

табуляция (&#x0009;)

возврат каретки (&#x000D;)

перевод строки (&#x000A;)

Процессор XML приводит коды конца строки, различные в различных в системах, в одному символу перевода строки, который передается в приложение. Пользовательский агент XHTML, кроме того, должен обрабатывать как пробельные следующие символы:

перевод страницы (&#x000C;)

пробел нулевой ширины (&#x200B;)

В элементах, в которых для атрибута 'xml: space' установлено значение 'preserve', пользовательский агент должен сохранять все пробельные символы (за исключением начальных и конечных пробельных символов, которые должны удаляться). В противном случае пробелы должны обрабатываться по следующим правилам:

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

Комментарии удаляются полностью и не влияют на обработку пробелов. Один пробельный символ в начале и в конце комментария обрабатывается как два пробела.

Начальные и конечные пробельные символы внутри элемента блока должны быть удалены.

Символы перевода строки в элементе блока должны быть преобразованы в пробел (если для атрибута 'xml: space' не установлено значение 'preserve').

Последовательность пробельных символов должна сокращаться до одного пробела (если для атрибута 'xml: space' не установлено значение 'preserve').

Относительно воспроизведения, пользовательский агент должен генерировать содержимое подходящим для языка, на котором оно написано, способом. В языках, основным написанием которых является латиница, символ пробела набора ASCII обычно используется для кодирования грамматических границ слов и типографских пробелов; в языках, основное написание которых связано с алфавитом нагари (например, в санскрите, тайском и т.д.), грамматические границы между словами могут кодироваться с помощью символа пробела набора ZW, но в генерируемом выводе они обычно не представляются типографскими пробелами; в языках с арабским написанием типографские пробелы могут кодироваться с помощью символа пробела, а также с помощью символа пробела набора ZW для отделения 'внутренних' грамматических границ (то, что для русского человека выглядит в арабском языке, как одно слово, часто может быть несколькими словами, например, 'kitAbuhum' = 'kitAbu-hum' = 'книга их' == их книга); а в языках с китайским написанием традиционно не кодируются ни пробелы между словами, ни типографские пробелы.