W3C

Ответы на часто задаваемые вопросы по XHTML и HTML

(перевод «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.

Содержание

  1. Зачем нужен XHTML? Не достаточно ли HTML?
  2. В чем преимущества XHTML перед HTML?
  3. Можно ли просто добавить объявление XML в начало существующего документа HTML? Можно ли смешивать код HTML 4.01 и XHTML?
  4. Как проще всего преобразовать документы HTML в XHTML?
  5. Почему разработчики браузеров так суетятся с XML? Не лучше ли для браузеров работать с HTML?
  6. Зачем мне беспокоиться о верности кода HTML? В моем браузере документ отображается верно.
  7. Как можно проверить корректность разметки в документе?
  8. Почему вы не всегда используете термин «пользовательский агент» («user agent») вместо «браузер»?
  9. Для чего нужно использовать именные пространства (namespace) в XHTML?
  10. Почему документы XHTML 1.0 не стоит отправлять как text/html?
  11. Какие браузеры принимают тип данных application/xhtml+xml?
  12. Принимает ли Microsoft Internet Explorer тип application/xhtml+xml?
  13. В CSS есть правила, которые относятся только к HTML. Применяются ли эти правила к XHTML?
  14. Работает ли document.write в XHTML?
  15. Почему нельзя передавать докуметы XHTML 1.1 в качестве text/html?
  16. Почему из XHTML 1.1 был ликвидирован атрибут target?
  17. Для чего используется модуляризация (Modularization) XHTML?
  18. Зачем нужен XHTML2? Не достаточно ли XHTML 1?
  19. Будет ли в XHTML2 элемент <img> заменен элементом <object>?
  20. Почему XHTML2 не использует XLink?
  21. Почему в XHTML2 нет совместимости со старыми версиями XHTML?
  22. Почему атрибут xml:space установлен как 'preserve' для всех элементов XHTML2? Я не хочу видеть в выводе браузера дополнительные пробелы.

Зачем нужен XHTML? Не достаточно ли HTML?

HTML — возможно, самый популярный в мире язык разметки документов. С появлением XML было организовано обсуждение, нужна ли новая версия HTML в рамках XML. Участники ответили однозначно «да»: версия HTML, основанная на XML, позволит использовать элементы XHTML в других языках XML, а документы XHTML смогут использовать элементы других языков XML. Кроме того, будет возможным привести в порядок HTML, ликвидировав его самые «неопрятные» элементы и расширив его функциональность, например, улучшенной реализацией форм.

В чем преимущества XHTML перед HTML?

Если документ составляет простой XHTML 1.0 (без использования других языков разметки), то вы не заметите существенной разницы. Однако со временем доступными становятся все больше и больше инструментов, основанных на XML (таких как XSLT для преобразования документов) и вы рано или поздно заметите преимущества использования XHTML. Например, технология XForms позволит вам редактировать документы XHTML (и любые другие документы XML). Приложения Семантической Сети (Semantic Web) будут способны использовать преимущества XHTML.

Если документ содержит нечто большее, чем XHTML 1.0, например, включения языков MathML, SMIL, SVG, то преимущества налицо: вы бы не смогли использовать эти технологии с HTML.

Можно ли просто добавить объявление XML в начало существующего документа HTML? Можно ли смешивать код HTML 4.01 и XHTML?

Нет. Формат HTML не основан на XML. Чтобы интерпретировать данные как XML, вы должны внести необходимые изменения, чтобы сделать код документа верным кодом XML.

Как проще всего преобразовать документы HTML в XHTML?

Программа HTML Tidy позволяет получить XHTML из кода HTML. Браузер и веб-редактор Amaya сохраняет HTML документы в формате XHTML.

Почему разработчики браузеров так суетятся с XML? Не лучше ли для браузеров работать с HTML?

XML вводит более строгие правила обработки документов. Браузеры HTML работают с любыми входными данными, коректными и некоректными, и пытаются их интерпретировать. Схема обработки ошибок очень усложняет разработку программ, особенно если учесть, что предполагается, что реакция всех браузеров на некоректные данные должна быть одинаковой. Кроме того, это означает, что огромное число документов HTML содержат ошибки, но нормально отображаются браузерами, и авторы не подозревают о том, что код HTML некорректен. Вот почему необычайно сложно создать новый пользовательский агент, пока документы, выдаваемые за HTML, часто очень плохи.

Зачем мне беспокоиться о верности кода HTML? В моем браузере документ отображается верно.

Все браузеры способны обрабатывать верный код HTML. Но если код неверен, браузер вносит исправления; так как разные браузеры по-разному обрабатывают ошибки, это приводит к тому, что документ по-разному выглядит в разных браузерах. Браузеров существует сотни, их число постоянно растет (не только для ПК, но и для КПК, мобильных телефонов, телевизоров, принтеров и даже холодильников), протестировать документ на всех браузерах невозможно. Если ваш документ содержит ошибки и неправильно отображается в конкретном браузере, это ваша вина, но если код HTML корректен, то неверное отображение уже на совести разработчиков программы.

Как можно проверить корректность разметки в моем документе?

W3C предоставляет для этого валидатор: http://validator.w3.org/. Браузер Amaya сообщает, верен ли код отображаемых документов.

Почему вы не всегда используете термин «пользовательский агент» («user agent») вместо «браузер»?

В то время как браузеры являются важными пользователями HTML и XHTML, существует много других программ и систем, которые используют (X)HTML документы. Поисковые машины, например, считывают документы, хотя и не относятся к браузерам. Используя термин «пользовательский агент», мы стараемся подчеркнуть разницу.

Например, сделав запрос поисковику Google, в результатах поиска вместе со ссылкой можно увидеть текст «веб-страница использует фреймы, но ваш браузер не поддерживает их»; некоторые люди игнорируют такие ссылки. Создатели таких сайтов не представляют себе, что контент требуется не одним лишь браузерам, и что элемент <noframes> должен содержать более предусмотрительный текст, не выглядящий столь глупо в глазах людей, использующих поиск.

Для чего нужно использовать именные пространства (namespace) в XHTML?

Во времена становления HTML различные группы и компании добавляли по своему желанию новые элементы и атрибуты в HTML. Это грозило путаницей с версиями HTML, не являющимися общепринятыми. XML («X» означает «расширенный», «Extensible») позволяет всем использовать элементы из различных языков, но браузер или другой пользовательский агент должен как-то определять, к какому языку относится тот или иной элемент. Для этого и требуются объявления именных пространств (namespace).

Почему документы XHTML 1.0 не стоит отправлять как text/html?

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.

Какие браузеры принимают тип данных application/xhtml+xml?

Известные нам браузеры — все основанные на Mozilla (Mozilla, Netscape 5+, Galeon, Firefox), Opera, Amaya, Camino, Chimera, DocZilla, iCab, Safari, плюс все программное обеспечение для мобильных телефонов, работающих с WAP2. Фактически, любой современный браузер должен принимать тип данных application/xml. Обратитесь к тесту на тип данных XHTML за подробностями.

Принимает ли Microsoft Internet Explorer тип application/xhtml+xml?

Нет, но есть уловка, которая позволит передавать 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>

Файл должен содержаться на том же сайте, с которого передается документ.

Вы передаете документ как XML, он проходит обработку, в итоге браузер считает, что получен text/html; таким образом, пользуясь приведенным советом, вы должны учитывать все правила, которые требуются для обеспечения совместимости XHTML 1.0 с браузерами HTML.

Документ будет работать для браузеров, которые принимают XHTML 1.0 как application/xml.

В CSS есть правила, которые относятся только к HTML. Применяются ли эти правила к XHTML?

Нет. Правила CSS, относящиеся только к HTML, применяются только к документам, переданным как text/html.

Работает ли document.write в XHTML?

Нет. Сама суть XML предполагает, что невозможно генерировать разметку скриптами, в то время как парсер еще обрабатывает разметку.

Можно добиться того же эффекта, что и document.write, но для добавления и удаления элементов нужно использовать DOM.

Почему нельзя передавать докуметы XHTML 1.1 в качестве text/html?

XHTML 1.1 представляет собой обычный XML, предназначеный только для обработки в качестве XML. XHTML 1.1 нельзя передавать браузерам HTML. Поэтому документы XHTML 1.1 обязательно должны передаваться с типом данных, относящимся к XML, таким как application/xhtml+xml.

Почему из XHTML 1.1 был ликвидирован атрибут target?

Атрибут 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?

Модуляризация XHTML (Modularization) предназначена для применения разработчиками языков, основанных на XHTML, но не пользователями языков. Компании и группы часто разрабатывают собственные версии HTML и XHTML, которые не совместимы между собой. Модуляризация разделяет XHTML на модули, которые могут по отдельности использоваться при определении нового языка; так, например, любая версия языка, использующая таблицы, будет работать с единым для XHTML определением таблиц. Кроме того, модуляризация разъясняет, в каких случаях можно добавлять новые элементы, а в каких — нет.

Зачем нужен XHTML2? Не достаточно ли XHTML 1?

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

Будет ли в XHTML2 элемент <img> заменен элементом <object>?

Нет. Элемент <img> будет заменен в XHTML2, но чем-то другим (хотя вы можете использовать и <object>, если хотите).

Дизайн <img> в HTML имеет много недостатков:

В 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 имеют различные требования для использования ссылок, и эти требования не совместимы.

Почему в XHTML2 нет совместимости со старыми версиями XHTML?

Совместимость есть, но она реализована иначе, чем прежде.

Ранние версии HTML были языками для конкретной области применения (не соотносящимися с каким-то общим инструментом разметки), поэтому было важно поддерживать совместимость, так чтобы старые браузеры корректно воспринимали документы. Например, по этой причине элемент <meta> содержит данные в своем атрибуте, а не в качестве своего содержимого — так обеспечена совместимость с прежним программным обеспечением.

Однако благодаря XML и таблицам стилей, такой строгий механизм совместимости больше не нужен, так как браузер XML (на момент написания этого текста 95% браузеров принимают XML) может обрабатывать новый язык без обновления. Многие возможности XHTML 2 уже доступны в современных браузерах, не создававшихся специально для XHTML2. Многое работает, но не все: когда формы и таблицы были добавлены в HTML, людям пришлось подождать появления новых браузеров; точно так же особые элементы XHTML 2, такие как XForms и XML Events, требуют от программного обеспечения понимания их функциональности.

Почему xml:space установлен как 'preserve' для всех элементов XHTML2? Я не хочу видеть в выводе браузера дополнительные пробелы.

Атрибут xml:space связан с вводом: он требуется, чтобы контролировать, будут ли пробелы представлены в DOM (т.е. во внутренней версии документа, с которой работает браузер); это не относится к конечному отображению документов. Вывод пробельных символов устанавливается свойтвом CSS 'whitespace'. Присвойте ему значение 'pre', чтобы все пробельные символы DOM были видны при выводе; значение 'normal' скроет пробельные символы (CSS3 будет содержать более богатые средства контроля вывода).

Именно поэтому для всех элементов XHTML установлено xml:space="preserve": иначе бы свойство 'whitespace' не имело дейсивия. Таблица стилей по умолчанию устанавливает 'whitespace' значение 'normal' для всех элементов, кроме <pre>, но вы можете это изменить в своих таблицах.


Copyright © 2006 Alexey Beshenov, Russian translation.