(перевод «HTML and XHTML Frequently Answered Questions»)
Редактор: Стивен Пэмбертон (Steven Pemberton), W3C/CWI
Перевод на русский язык: Алексей Бешенов
Версия: 21 июля 2004 г.
Перевод: 22 июня 2006 г.
Другие связанные FAQ:
Комментарии и предложения по содержанию этого документа направляйте на e-mail www-html-editor@w3.org, в теме сообщения укажите «FAQ». По поводу русского перевода обращайтесь по адресу bav.272304@gmail.com.
HTML — возможно, самый популярный в мире язык разметки документов. С появлением XML было организовано обсуждение, нужна ли новая версия HTML в рамках XML. Участники ответили однозначно «да»: версия HTML, основанная на XML, позволит использовать элементы XHTML в других языках XML, а документы XHTML смогут использовать элементы других языков XML. Кроме того, будет возможным привести в порядок HTML, ликвидировав его самые «неопрятные» элементы и расширив его функциональность, например, улучшенной реализацией форм.
Если документ составляет простой XHTML 1.0 (без использования других языков разметки), то вы не заметите существенной разницы. Однако со временем доступными становятся все больше и больше инструментов, основанных на XML (таких как XSLT для преобразования документов) и вы рано или поздно заметите преимущества использования XHTML. Например, технология XForms позволит вам редактировать документы XHTML (и любые другие документы XML). Приложения Семантической Сети (Semantic Web) будут способны использовать преимущества XHTML.
Если документ содержит нечто большее, чем XHTML 1.0, например, включения языков MathML, SMIL, SVG, то преимущества налицо: вы бы не смогли использовать эти технологии с HTML.
Нет. Формат HTML не основан на XML. Чтобы интерпретировать данные как XML, вы должны внести необходимые изменения, чтобы сделать код документа верным кодом XML.
Программа HTML Tidy позволяет получить XHTML из кода HTML. Баузер и веб-редактор Amaya сохраняет HTML документы в формате XHTML.
XML вводит более строгие правила обработки документов. Браузеры HTML работают с любыми входными данными, коректными и некоректными, и пытаются их интерпретировать. Схема обработки ошибок очень усложняет разработку программ, особенно если учесть, что предполагается, что реакция всех браузеров на некоректные данные должна быть одинаковой. Кроме того, это означает, что огромное число документов HTML содержат ошибки, но нормально отображаются браузерами, и авторы не подозревают о том, что код HTML некорректен. Вот почему необычайно сложно создать новый пользовательский агент, пока документы, выдаваемые за HTML, часто очень плохи.
Все браузеры способны обрабатывать верный код HTML. Но если код неверен, браузер вносит исправления; так как разные браузеры по-разному обрабатывают ошибки, это приводит к тому, что документ по-разному выглядит в разных браузерах. Браузеров существует сотни, их число постоянно растет (не только для ПК, но и для КПК, мобильных телефонов, телевизоров, принтеров и даже холодильников), протестировать документ на всех браузерах невозможно. Если ваш документ содержит ошибки и неправильно отображается в конкретном браузере, это ваша вина, но если код HTML корректен, то неверное отображение уже на совести разработчиков программы.
W3C предоставляет для этого валидатор: http://validator.w3.org/. Браузер Amaya сообщает, верен ли код отображаемых документов.
В то время как браузеры являются важными пользователями HTML и XHTML, существует много других программ и систем, которые используют (X)HTML документы. Поисковые машины, например, считывают документы, хотя и не относятся к браузерам. Используя термин «пользовательский агент», мы стараемся подчеркнуть разницу.
Например, сделав запрос поисковику Google, в результатах поиска вместе со ссылкой можно увидеть текст «веб-страница использует фреймы, но ваш браузер не поддерживает их»; некоторые люди игнорируют такие ссылки. Создатели таких сайтов не представляют себе, что контент требуется не одним лишь браузерам, и что элемент <noframes>
должен содержать более предусмотрительный текст, не выглядящий столь глупо в глазах людей, использующих поиск.
Во времена становления HTML различные группы и компании добавляли по своему желанию новые элементы и атрибуты в HTML. Это грозило путаницей с версиями HTML, не являющимися общепринятыми. XML («X» означает «расширенный», «Extensible») позволяет всем использовать элементы из различных языков, но браузер или другой пользовательский агент должен как-то определять, к какому языку относится тот или иной элемент. Для этого и требуются объявления именных пространств (namespace).
XHTML имеет формат XML; это означает, что тип данных документа XHTML должен соотноситься с XML (application/xhtml+xml
, application/xml
, либо text/xml
). Однако XHTML 1.0 создавался таким образом, чтобы документы могли верно отображаться пользовательскими агентами HTML. Если вы последуете нескольким простым правилам, документы XHTML 1.0 будут подходить для браузеров HTML. Но так как последние работают только с типом данных text/html, вам необходимо передавать XHTML 1.0 как text/html, чтобы обеспечить совместимость с устаревшим программным обеспечением. Но знайте: документ с заголовоком text/html
всегда будет обрабатываться как простой HTML, а не XHTML.
Известные нам браузеры — все основанные на Mozilla (Mozilla,
Netscape 5+, Galeon, Firefox), Opera, Amaya, Camino, Chimera, DocZilla, iCab, Safari, плюс все программное обеспечение для мобильных телефонов, работающих с WAP2. Фактически, любой современный браузер должен принимать тип данных application/xml
. Обратитесь к тесту на тип данных XHTML за подробностями.
Нет, но есть уловка, которая позволит передавать XHTML1.0 для Internet Explorer в качестве application/xml
.
Добавьте в начало документа выделенную ниже строку:
<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="copy.xsl"?> <!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>
файл copy.xsl
должен содержать такой код:
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform"> <template match="/"> <copy-of select="."/> </template> </stylesheet>
Файл должен содержаться на том же сайте, с которого передается документ (использование XSLT с других сайтов может быть запрещено в Microsoft Internet Explorer из соображений безопасности — прим. пер.).
Вы передаете документ как XML, он проходит обработку, в итоге браузер считает, что получен text/html
; таким образом, пользуясь приведенным советом, вы должны учитывать все правила, которые требуются для обеспечения совместимости XHTML 1.0 с браузерами HTML.
Документ будет работать для браузеров, которые принимают XHTML 1.0 как application/xml
.
Нет. Правила CSS, относящиеся только к HTML, применяются только к документам, переданным как text/html
.
Нет. Сама суть XML предполагает, что невозможно генерировать разметку скриптами, в то время как парсер еще обрабатывает разметку.
Можно добиться того же эффекта, что и document.write, но для добавления и удаления элементов нужно использовать DOM.
XHTML 1.1 представляет собой обычный XML, предназначеный только для обработки в качестве XML. XHTML 1.1 нельзя передавать браузерам HTML. Поэтому документы XHTML 1.1 обязательно должны передаваться с типом данных, относящимся к XML, таким как application/xhtml+xml.
Атрибут target не ликвидировался из XHTML 1.1. XHTML 1.0 подразделяется на три разные версии: strict, transitional и frameset. Все разновидности обеспечивают такую совместимость с HTML 4.01, которую только позволяет XML. XHTML 1.1 — обновленная версия XHTML 1.0 strict, а атрибута target
не было ни в одной версии HTML strict. Другие версии, transitional и frameset, не были обновлены, так как в этом нет необходимости. Если вы хотите использовать атрибут target
, используйте XHTML 1.0 transitional.
Модуляризация XHTML (Modularization) предназначена для применения разработчиками языков, основанных на XHTML, но не пользователями языков. Компании и группы часто разрабатывают собственные версии HTML и XHTML, которые не совместимы между собой. Модуляризация разделяет XHTML на модули, которые могут по отдельности использоваться при определении нового языка; так, например, любая версия языка, использующая таблицы, будет работать с единым для XHTML определением таблиц. Кроме того, модуляризация разъясняет, в каких случаях можно добавлять новые элементы, а в каких — нет.
HTML и XHTML выполнили возложенные на них задачи, но в этих языках есть множество элементов, которые нужно улучшить. В XHTML2 особое внимание уделено улучшению возможностей структурирования, удалению элементов, которые уже есть в XML, удобству использования (usability), доступности (accessibility), интернационализации, аппаратной независимости, улучшенному механизму форм, устранению необходимости в использовании скриптования.
Нет. Элемент <img>
будет заменен в XHTML2, но чем-то другим (хотя вы можете использовать и <object>
, если хотите).
Дизайн <img>
в HTML имеет много недостатков:
alt
, если браузер не воспринимает формат PNG. Это как раз и помешало распространению формата PNG (лучшего, чем GIF и JPG), так как авторы контента использовали более старые форматы, чтобы быть уверенными, что графика доступна для всех пользователей.alt
не может быть размечен, так что если вы используете alt
, то вам доступен только простой текст.longdesc
на описание изображения, но эта возможность редко реализуется.В XHTML2 изображения приравниваются к составляющим контента, это осуществляется присваиванием войства src
любому элементу. Если изображение доступно и браузер может его обработать, графика будет использована, иначе браузер будет использовать содержимое элемента. Например:
<p src="map.png">Выход со станции, повернитесь налево, поднимитесь по ступеням на <strong>Верхнюю Улицу</strong> и поверните направо</p>
Преимущество этого в том, что в случае, если изображение недоступно (к примеру, из-за ошибок в сети) или не может быть обработано браузером, документ остается доступным. Если требуется использовать более одного изображения, код будет выглядеть так:
<p src="map.png"><span src="map.gif">Выход со станции...</span></p>
конечно, лучше использовать технологию content negotiation, если ее поддерживает ваш сервер:
<p src="map">Выход со станции...</p>
В таком случае, сервер «договаривается» с браузером, какой формат графики передать программе. Если доступных изображений нет, будет использовано содержимое элемента. Это позволяет добавить изображения отдельного формата позже, не меняя код страниц.
XLink и XHTML имеют различные требования для использования ссылок, и эти требования не совместимы.
Совместимость есть, но она реализована иначе, чем прежде.
Ранние версии HTML были языками для конкретной области применения (не соотносящимися с каким-то общим инструментом разметки), поэтому было важно поддерживать совместимость, так чтобы старые браузеры корректно воспринимали документы. Например, по этой причине элемент <meta>
содержит данные в своем атрибуте, а не в качестве своего содержимого — так обеспечена совместимость с прежним программным обеспечением.
Однако благодаря XML и таблицам стилей, такой строгий механизм совместимости больше не нужен, так как браузер XML (на момент написания этого текста 95% браузеров принимают XML) может обрабатывать новый язык без обновления. Многие возможности XHTML 2 уже доступны в современных браузерах, не создававшихся специально для XHTML2. Многое работает, но не все: когда формы и таблицы были добавлены в HTML, людям пришлось подождать появления новых браузеров; точно так же особые элементы XHTML 2, такие как XForms и XML Events, требуют от программного обеспечения понимания их функциональности.
Атрибут xml:space
связан с вводом: он требуется, чтобы контролировать, будут ли пробелы представлены в DOM (т.е. во внутренней версии документа, с которой работает браузер); это не относится к конечному отображению документов. Вывод пробельных символов устанавливается свойтвом CSS 'whitespace
'. Присвойте ему значение 'pre
', чтобы все пробельные символы DOM были видны при выводе; значение 'normal
' скроет пробельные символы (CSS3 будет содержать более богатые средства контроля вывода).
Именно поэтому для всех элементов XHTML установлено xml:space="preserve"
: иначе бы свойство 'whitespace
' не имело дейсивия. Таблица стилей по умолчанию устанавливает 'whitespace
' значение 'normal
' для всех элементов, кроме <pre>
, но вы можете это изменить в своих таблицах.
Copyright © 2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements.
Copyright © 2006 Alexey Beshenov, Russian translation.