Эту статью в 2000 году написал небезызвестный веб-разработчик Петер-Пауль Кох (Peter-Paul Koch), который поддерживает один из лучших ресурсов по JavaScript http://www.xs4all.nl/~ppk/js. Его взгляды на XHTML во многом совпадают с моими личными взглядами на этот язык разметки. По прошествии двух лет можно сказать, что PPK был совершенно прав, тем интереснее будет читать...
Быть веб-разработчиком нелегко. Мало того, что вам надо каждый день обходить ловушки и западни популярных браузеров, так еще надо хотя бы вполглаза следить за технологиями, которые могут повлиять (или не повлиять), на вашу работу. Пока вы совершенствуете свое мастерство в работе с таблицами стилей и DHTML, на новые технологии не остается времени. Какие из них важны в настоящий момент? Какие можно пока проигнорировать?
В этой статье я выражаю свой взгляд на язык, который W3C разработало под видом улучшения HTML: XHTML. Согласитесь вы со мной или нет, в любом случае статья заставит вас задуматься и поможет принять решение.
Вначале я объясню, что такое XHTML, затем дам четыре правила для написания корректного XHTML, и в заключение скажу несколько слов о том, зачем вам может понадобиться XHTML.
Что же такое XHTML?
XHTML — это HTML, записанный в соответствии с синтаксическими правилами XML. Таким образом, для понимания XHTML мы должны понять XML. О нем уже написано много статей, так что ограничимся кратким описанием:
XML — это обобщенный язык разметки. В отличие от HTML, XML позволяет создавать собственные теги и таким образом формировать собственную структуру документа. Вам нужен тег ? Добавьте его в ваш документ, убедитесь что программа знает, что обозначает этот тег, и все готово.
Существует несколько простых правил для XML документа (они будут перечислены ниже). До тех пор, пока все теги написаны согласно этим правилам, XML без разницы, что эти теги обозначают. XML обобщенный язык разметки, так что вы можете его использовать как вам угодно.
В противоположность XML, HTML гораздо более строго определенный язык разметки с ограниченным набором тегов. В любом случае, общий характер XML позволяет рассматривать HTML-документы как XML-документы с набором тегов для отображения в веб-браузерах. Однако, старые стандарты HTML не до конца совместимы с XML. Например, в HTML необязательно закрывать тег
, то есть тег
можно опускать. Веб-браузеру на это плевать, так как он запрограммирован, но XML-парсер выдаст ошибку о том, что ваш HTML-документ не является "правильно сформированным" (well-formed).
Чтобы устранить разрыв между этими двумя языками разметки и был разработан XHTML. По существу это обычный HTML, в который добавили синтаксические правила XML для создания well-formed документов. Так что веб-страницы станут XML-совместимыми, а веб-разработчики познакомятся с синтаксисом XML.
Правила игры
На практике, в HTML надо добавить четыре правила, чтобы получился XHTML:
Все теги должны быть записаны в нижнем регистре, то есть нельзя писать , а надо писать
Все теги должны быть закрыты
2a. В случае, если элемент не имеет закрывающего тега (например, или
), надо добавлять слэш в конце тега и
Вложенность тегов должна быть корректной. Например, нельзя писать
текст
, а надо писать
текст
Все атрибуты должны быть заключены в кавычки. Например, нельзя писать
, а надо писать
.
Хорошая новость в том, что у браузеров практически нет проблем с XHTML. Вообще говоря, правила 1, 2 и 4 уже есть в HTML, но не являются обязательными, тогда как правило 3 является обязательным, хотя браузеры в большинстве случаев игнорируют ошибки вложенности. Единственное действительно новое правило — это правило 2а. Однако, это правило приводит к проблемам со старыми браузерами только в том случае, когда вы записываете слэш без пробелов, вот так
. Браузер думает, что это тег br/, а такого он знать не знает, так что никак на него не отреагирует. Если вставлять пробел, то проблема будет решена. Если вы напишите
, то браузер увидит тег br с неизвестным атрибутом /. Тег br будет отработан корректно, а неизвестный атрибут / тихо проигнорирован.
Плохая новость в том, что многим придется изменить свои привычки кодирования. Лично мне не нравится правило 1. Во-первых, я не могу понять, почему XML теги могут быть только в нижнем регистре, во вторых, я всегда пишу теги в верхнем регистре, потому что тогда они лучше выделяются в тексте. Почему я должен отказаться от этого, если это удобно? В любом случае, я не изменю своих привычек без веской на то причины.
Зачем использовать XHTML?
Итак, зачем использовать XHTML вместо старого доброго HTML? Консорциум W3C выделяет следующие причины:
"Разработчики документов и разработчики браузеров откроют новые пути выражения своих идей через новую разметку. В XML относительно легко вводить новые элементы или новые атрибуты. Язык XHTML разработан для согласования этого расширения посредством специальных XHTML-модулей, которые можно разрабатывать совершенно самостоятельно. Эти модули позволят комбинировать существующие и новые возможности при разработке новых документов и новых браузеров."
"Постоянно появляются новые альтернативные способы доступа в интернет. […] XHTML разрабатывался с учетом общей совместимости пользовательских браузеров (user agents). Так чтобы новые пользовательские браузеры, сервера и прокси могли достичь наилучшей трансформации контента. В конечном счете, можно будет разработать XHTML-конформный контент, который будет доступен из любого XHTML-конформного пользовательского браузера"
Короче говоря в будущем, которое пока неизвестно, улучшения XHTML будут позволять разработчикам использовать новейшие, пока не написанные, модули для расширения XHTML, чтобы включать новые, пока не определенные, вещи в свои веб-страницы. В добавок ко всему, W3C ожидает, что в будущие браузеры будут использовать XHTML вместо HTML.
X это из своего списка
Я не считаю, что этих двух причин достаточно для того, чтобы мы, веб-разработчики, перешли с HTML на XHTML.
Первая причина в настоящий момент не важна сама по себе. Возможно, модули XHTML ошеломят нас, возможно, они вообще ни на что не сгодятся. В любом случае, появятся они года через два-три, так что мы пока даже не можем предполагать, как они будут работать и что они будут делать. Даже если с ними не будет особых проблем, мы все равно пока ничего не можем с ними сделать или как-то приготовиться к их появлению.
Вторая причина пока тоже не важна. В настоящее время нет чистых XHTML-конформных браузеров, которым необходим XHTML. Да и вообще неизвестно, появятся ли они когда-либо. В конце концов, если вы создадите браузер, который отображает только XHTML, он не будет корректно отображать HTML-страницы. Производители браузеров этого совсем не хотят.
У примеру, Эдди Конечный-Пользователь заходит на свой любимый сайт новым, требующим XHTML, только что установленным браузером "Ультра-Бразуер X7" и видит только множество сообщений об ошибках, касающихся валидности XHTML-кода. Что он подумает: "Проклятые веб-разработчики! Вы должны были использовать XHTML!" или "Хренов браузер с кучей багов!"?
Так что, если новый браузер выйдет, разработчики все равно позаботятся о поддержке старого доброго HTML. Новые браузеры на каких-то новых платформах возможно и будут требовать XHTML (хотя я так не думаю), но Netscape и Explorer никогда, потому что они должны быть консервативными в выборе языка.
Запас прочности
Я думаю, что многие люди недооценивают запас прочности HTML. Это стандарт на сегодняшний момент, без которого вы не сможете сделать веб-страницу. Потому что все веб-разработчики используют HTML. Потому что из-за этого все будущие браузеры, которые хотят отображать традиционные страницы, должны включать поддержку HTML. Потому что из-за этого все разработчики будут продолжать использовать HTML, так что веб-страницы будут по-прежнему написаны на HTML, так что браузерам придется поддерживать его и т.д.
А что с новыми браузерами? Что можно сказать о новых областях Интернет, таких как WAP? Как насчет изучения XML используя XHTML? Читайте дальше…
Просто скажите нет
Конечно, новые браузеры на новых платформах могут требовать XHTML. Но тогда они столкнутся с той же проблемой, что и старые браузеры на старых платформах: они не смогут корректно отображать существующие HTML-страницы, а это означает крайнее недовольство конечных пользователей. Во избежании этого, новые браузеры должны поддерживать HTML.
Конечно, XHTML может стать стандартом для новых областей Интернет, как WML стал стандартным языком для WAP. Это одна из причин, по которой W3C разрабатывал XHTML. Но, откровенно говоря, я в это не верю. Новые области Интернет требуют действительно новых языков, потому что они отличаются от WWW, тогда как XHTML хорошо подходит только для традиционных WWW-страниц.
Конечно, XHTML может уменьшить разрыв между HTML и XML и познакомить веб-разработчиков с синтаксисом XML. Однако я сомневаюсь, что XML настолько важен для истинных веб-разработчиков. Я не считаю, что каждый веб-разработчик должен знать XML, потому что не знаю широко используемых браузеров, которые корректно отображали XML на стороне клиента. XML на стороне сервера, конечно, другое дело.
В заключении, повторю фразу W3C:
"В конечном счете, можно будет разработать XHTML-конформный контент, который будет доступен из любого XHTML-конформного пользовательского агента"
Это не кажется вам знакомым? Разве HTML разрабатывался не для всех типов пользовательских агентов? Мы все знаем, что случилось с этим планом…
Итак, если HTML останется, зачем переходить на более сложный язык, который изменит ваши привычки кодирования, но ничего не даст? Я не вижу ни одной причины начать использовать XHTML. Я с наслажденьем продолжу писать теги в верхнем регистре и буду пропускать иногда теги
, если почувствую, что все будет хорошо и без них.
Как и все спецификации W3C, XHTML — это интересная теоретическая конструкция, которая может развиться и сыграть важную роль в Интернете. Но пока она бесполезна на практике. Разработчики браузеров должны сделать первый ход. Они должны внедрить поддержку XHTML конструктивным способом, чтобы пользователи не отвернулись от их продуктов. Только в этом случае за ними потянется остальная часть веба.
А те фанатики, которые считают, что каждое слово W3C имеет силу Божьей Заповеди и смотрят на всех, кто не использует XHTML, как на еретиков, которых надо сжечь на костре и чем раньше, тем лучше, просто ошибаются. XHTML — это не о настоящем, XHTML — это о будущем.