Библиотека Интернет Индустрии I2R.ru |
|||
|
XHTML, говорите?19.12.05 Одна из самых печальных вещей, которую я замечаю, когда набредаю на русскоязычные веб-разработчицкие сообщества — это полное нежелание разбираться в сути вопросов. Когда что-то у кого-то не получается, он сначала спрашивает это в форуме, где куча самозванных “гуру” начинает ему рассказывать несусветную чушь. Потом, если повезет, кто-нибудь даст ссылку на какую-нибудь более-менее адекватную статью, которая может частично касаться вопроса. Совет же почитать первоисточник (например спецификацию языка) обычно воспринимается как издевательство, потому как по-английски все “свободно разговаривают” только в своих резюме. Все это приводит к тому, что русское веб-сообщество полно совершенно странных мифов, пугающе противоречащих логике:
Вот по поводу последнего — сегодняшняя статья. “Ложки нет”Во-первых, нужно четко понимать, что чисто технически никакого XHTML в современном вебе не существует. По той простой причине, что самый распространенный браузер, которым пользуются люди, XHTML отображать не умеет. Если IE скормить реальную XHTML-страницу, то он ее покажет как любой другой XML-документ — в виде дерева элементов. Многие здесь подумают, что я объелся лебеды, и несу чушь, потому что вот же, например — известный сайт, у которого в сурсе сверху недвусмысленно написано, что это XHTML 1.0, и валидатор подтверждает, что так оно и есть. И IE его, разумеется, отображает. Загвоздка тут в том, что браузеры выясняют тип документа не по DOCTYPE. Вместо этого они смотрят на то, что указано в заголовках HTTP-ответа, с которым пришел документ. А написано там в подавляющем большинстве случаев:
… ну и еще кодировка, возможно. А это значит, что браузер для отображения документа использует HTML-ный парсер. Чтобы браузер начал отображать документ именно по правилам XHTML, нужны две вещи:
Если так сделать, то как я уже сказал, IE, у которого специального XHTML-парсера нет, будет просто показывать дерево элементов, а новые браузеры действительно включатся в XHTML-режим. DOCTYPEСтоит уточнить, зачем же все таки нужен DOCTYPE. Как я уже писал в статье про валидацию, теоретически, он указывает на отдельный документ — DTD — по которому можно фомально проверить синтаксис XHTML. Но стандарт XML позволяет браузерам этого не делать и быть невалидирующими парсерами. Они и не делают. И единственная программа, которая таки использует DTD — это сам валидатор (мне это напоминает негласное требование к москвичам носить с собой паспорт только для того, чтобы милиция могла его наличие проверять :-) ). Тем не менее, браузеры все-таки используют строчку DOCTYPE. Но исключительно для того, чтобы по совпадению этой строки с некими внутренними шаблонами включать разные режимы обратной совместимости. Например, будет ли IE6 считать размеры боксов по стандарту или в режиме совметимости с IE5, зависит от того, указать ли ему DOCTYPE строгого (X)HTML или нет. А в Gecko-браузерах таких режимов аж три: “загадочный”, “как IE” и “стандартный”. Кстати, интересующимся сильно советую почитать свежую статью Тима Брея о том, чем вреден DOCTYPE. Тим Брей, между прочим, один из авторов XML. А и не нужноДумаю, я не ошибаюь сильно, считая, что призывы писать только на XHTML основаны исключительно на том, что это модно. Я помню, что многих людей в свое время издевательски (зная ответ) спрашивал, а зачем именно они вставляют слеш (”/”) в теги Потому что на практике использовать настоящий XHTML а) трудно и б) практически незачем. Напомню, что кардинальное отличие XHTML от HTML состоит в том, что XHTML подчиняется жестким XML’ным правилам well-formed’ности. То есть, если в документе хоть чуть-чуть что-то неправильно, то барузер обязан бросить парсить документ и сообщить пользователю об ошибке. Такая строгость нужна и удобна, если ваш пользователь — программа. Тогда, чем более просты и строги правила синтаксиса, тем проще она сама. Но такое поведение не подходит на вебе. Ни одному пользователю не интересно знать, как там где-то ошибся автор страницы или автор его CMS. Они приходят пользоваться, а не отлаживать. А в современном вебе, где документы составляются из кучи разных несвязанных кусочков информации, синатксические ошибки, к сожалению, слишком часты. Что означает, что ваш правильный XHTML-сайт будет слишком много времени неюзабельным. Достаточно, например, просто перенести copy-paste’ом URL’ку из браузера в блог и, если в URL’ке есть амперсанды (&), то вы получаете сломанный XHTML, который требует, чтобы эти амперсанды были экранированы (&). ПугалкаЕсли все вышенаписанное не убедило вас в бесполезности XHTML и вы вопреки здравому смыслу думаете, что “это все равно правильно”, то я хочу вас еще немного попугать. Потому что эти настроения обычно подкрепляются мнением, что “обэксемелить” HTML — задачка все равно простая. Чего там, в общем-то: закрыть все теги, откавычить атрибуты, экранировать амперсанды и вставить слеши в одиночные теги. На самом деле все несколько сложнее. Вот небольшой и неполный список, во что это выливается:
Другими словами, в следующий раз, когда вам нужно будет сверстать страницу для веба, отриньте суету и начните ее так:
Это совершенно валидный HTML 4.01 strict. А если вам не нужна валидация, то и DOCTYPE можно сократить до минимума, чтобы только браузеры в стандартный режим включались:
Смысл все же естьЕсть редкие случаи, когда применение XHTML оправдано и на вебе тоже. Одна из областей применения — микроформаты (о которых я уже как-то писал). Поскольку они предлагаются как вещи и человекочитаемые, и машиночитаемые одновременно, то строгость XML’а для них уже полезна. Другая, еще более редкая штука — смешанные документы. XML позволяет в одном и том же документе объединять элементы разных XML-языков (поскольку синтаксис общий). Чаще всего это используется для вставления в XHTML кусков математики на MathML и графики на SVG. Есть известный блог — Musings — который это широко использует. Однако, наверное самый полезный эффект, который XHTML произвел, лежит отнюдь не в технических аспектах. Эта самая буква “X” сыграла в свое время важную роль, сделав из простого как бы всем известного и скучного HTML новую модную технологию. Не будь XHTML’а, наверное куда меньше людей заинтересовались бы идеями современной верстки CSS’ом, разделением содержимого и оформления и стали бы читать спецификации хотя бы и только для того, чтобы повесить на страницу бесполезную кнопочку валидации. Пусть… Главное — общий эффект :-)
Статьи по теме:
Автор: Иван Сагалаев |
|
2000-2008 г. Все авторские права соблюдены. |
|