Одна из самых печальных вещей, которую я замечаю, когда набредаю на русскоязычные веб-разработчицкие сообщества -- это полное нежелание разбираться в сути вопросов. Когда что-то у кого-то не получается, он сначала спрашивает это в форуме, где куча самозванных "гуру" начинает ему рассказывать несусветную чушь. Потом, если повезет, кто-нибудь даст ссылку на какую-нибудь более-менее адекватную статью, которая может частично касаться вопроса. Совет же почитать первоисточник (например спецификацию языка) обычно воспринимается как издевательство, потому как по-английски все "свободно разговаривают" только в своих резюме.

Все это приводит к тому, что русское веб-сообщество полно совершенно странных мифов, пугающе противоречащих логике:

Вот по поводу последнего -- сегодняшняя статья.

"Ложки нет"

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

Многие здесь подумают, что я объелся лебеды, и несу чушь, потому что вот же, например -- известный сайт, у которого в сурсе сверху недвусмысленно написано, что это XHTML 1.0, и валидатор подтверждает, что так оно и есть. И IE его, разумеется, отображает.

Загвоздка тут в том, что браузеры выясняют тип документа не по DOCTYPE. Вместо этого они смотрят на то, что указано в заголовках HTTP-ответа, с которым пришел документ. А написано там в подавляющем большинстве случаев:

Content-type: text/html

... ну и еще кодировка, возможно. А это значит, что браузер для отображения документа использует HTML-ный парсер. Чтобы браузер начал отображать документ именно по правилам XHTML, нужны две вещи:

Если так сделать, то как я уже сказал, IE, у которого специального XHTML-парсера нет, будет просто показывать дерево элементов, а новые браузеры действительно включатся в XHTML-режим.

DOCTYPE

Стоит уточнить, зачем же все таки нужен DOCTYPE. Как я уже писал в статье про валидацию, теоретически, он указывает на отдельный документ -- DTD -- по которому можно формально проверить синтаксис XHTML. Но стандарт XML позволяет браузерам этого не делать и быть невалидирующими парсерами. Они и не делают. И единственная программа, которая таки использует DTD -- это сам валидатор (мне это напоминает негласное требование к москвичам носить с собой паспорт только для того, чтобы милиция могла его наличие проверять :-) ).

Тем не менее, браузеры все-таки используют строчку DOCTYPE. Но исключительно для того, чтобы по совпадению этой строки с некими внутренними шаблонами включать разные режимы обратной совместимости. Например, будет ли IE6 считать размеры боксов по стандарту или в режиме совметимости с IE5, зависит от того, указать ли ему DOCTYPE строгого (X)HTML или нет. А в Gecko-браузерах таких режимов аж три: "загадочный", "как IE" и "стандартный".

Кстати, интересующимся сильно советую почитать свежую статью Тима Брея о том, чем вреден DOCTYPE. Тим Брей, между прочим, один из авторов XML.

А и не нужно

Думаю, я не ошибаюь сильно, считая, что призывы писать только на XHTML основаны исключительно на том, что это модно. Я помню, что многих людей в свое время издевательски (зная ответ) спрашивал, а зачем именно они вставляют слеш ("/") в теги <img/> и <br/> и зачем именно они пишут в начале документа DOCTYPE разных вариантов XHTML. Никакого внятного ответа я на свой вопрос не получал.

Потому что на практике использовать настоящий XHTML а) трудно и б) практически незачем.

Напомню, что кардинальное отличие XHTML от HTML состоит в том, что XHTML подчиняется жестким XML'ным правилам well-formed'ности. То есть, если в документе хоть чуть-чуть что-то неправильно, то браузер обязан бросить парсить документ и сообщить пользователю об ошибке.

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

Но такое поведение не подходит на вебе. Ни одному пользователю не интересно знать, как там где-то ошибся автор страницы или автор его CMS. Они приходят пользоваться, а не отлаживать. А в современном вебе, где документы составляются из кучи разных несвязанных кусочков информации, синатксические ошибки, к сожалению, слишком часты. Что означает, что ваш правильный XHTML-сайт будет слишком много времени неюзабельным. Достаточно, например, просто перенести copy-paste'ом URL'ку из браузера в блог и, если в URL'ке есть амперсанды (&), то вы получаете сломанный XHTML, который требует, чтобы эти амперсанды были экранированы (&amp;).

Пугалка

Если все вышенаписанное не убедило вас в бесполезности XHTML и вы вопреки здравому смыслу думаете, что "это все равно правильно", то я хочу вас еще немного попугать. Потому что эти настроения обычно подкрепляются мнением, что "обэксемелить" HTML -- задачка все равно простая. Чего там, в общем-то: закрыть все теги, откавычить атрибуты, экранировать амперсанды и вставить слеши в одиночные теги. На самом деле все несколько сложнее. Вот небольшой и неполный список, во что это выливается:

Другими словами, в следующий раз, когда вам нужно будет сверстать страницу для веба, отриньте суету и начните ее так:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<title>Страница</title>
<p>Текст

Это совершенно валидный HTML 4.01 strict. А если вам не нужна валидация, то и DOCTYPE можно сократить до минимума, чтобы только браузеры в стандартный режим включались:

<!DOCTYPE html>
<title>Страница</title>
<p>Текст

Смысл все же есть

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

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

Другая, еще более редкая штука -- смешанные документы. XML позволяет в одном и том же документе объединять элементы разных XML-языков (поскольку синтаксис общий). Чаще всего это используется для вставления в XHTML кусков математики на MathML и графики на SVG. Есть известный блог -- Musings -- который это широко использует.

Однако, наверное самый полезный эффект, который XHTML произвел, лежит отнюдь не в технических аспектах. Эта самая буква "X" сыграла в свое время важную роль, сделав из простого как бы всем известного и скучного HTML новую модную технологию. Не будь XHTML'а, наверное куда меньше людей заинтересовались бы идеями современной верстки CSS'ом, разделением содержимого и оформления и стали бы читать спецификации хотя бы и только для того, чтобы повесить на страницу бесполезную кнопочку валидации. Пусть... Главное -- общий эффект :-)

Комментарии: 84 (feed)

  1. Fabler

    "Достаточно, например, просто перенести copy-paste’ом URL’ку из браузера в блог и, если в URL’ке есть амперсанды (&), то вы получаете сломанный XHTML". Совершенно верно, тому, что ввел пользователь верить нельзя, иначе не только испорченный xhtml можно получить, но и много разных гадостей.
    "Такая строгость нужна и удобна, если ваш пользователь — программа." А разве это в 99,999% случаев не так? Единственно что оправдывает xml - это то, что его удобно генерировать и парсить.

  2. Иван Сагалаев

    Совершенно верно, тому, что ввел пользователь верить нельзя, иначе не только испорченный xhtml можно получить, но и много разных гадостей.

    Я тут не совсем про пользователей... Страницу может сломать сам автор, если набирает, скажем, текст поста в блоге и копирует URL из соседнего окна браузера.

    “Такая строгость нужна и удобна, если ваш пользователь — программа.” А разве это в 99,999% случаев не так?

    Нет, ну понятно, что в любом случае это программа :-). Я имею в виду, что одно дело, когда это браузер, который юзеру показывает страницы, а другое - когда это, скажем, поисковик или какой-нибудь другой парсер, который делает какой-то машинный анализ. В первом случае не совсем корректный парсинг имеет смысл.

  3. uncle.f

    Отличная статья! Давно пора было поведать миру об этом. Согласен с каждым словом (хотя сам пишу часто на XHTML - люблю порядок страшно! ;-)) )

  4. Fabler

    Движок блога должен проверять и нормализовывать то, что автор напечатал. В конце концов это реализуется элементарно.
    Четкой границы между браузером и небраузером на самом деле нет. Вот rss-reader - это что? И почему, например, тот же wordpress создает одновременно отдельно корректный фид и отдельно html-страницы? Не говоря уже о том, что сами эти rss с atom'ом лишние сущности. Если можно упростить жизнь себе и другим используя формат более строгий чем html, то почему бы этого не делать.

  5. agat

    Я пишу на чистом XHTML из-за того, что это обеспечивает кроссбраузерную совместимость и существенно облегчает вёрстку сайтов.

  6. sas171

    Хм... жаль, что я прочитал эту статью: сразу испортилось впечатление об авторе. Могу оспорить каждый аргумент (времени и желания нет)

  7. edgy

    Непонятно, для чего эта статья.

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

    Напомнило статью Лебедева об экономии на кавычках, но он вроде бы стебался, здесь я этого не ощущаю.

  8. Иван Сагалаев

    Честно говоря, ожидаемая реакция :-).

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

    Вот, Agat, например:

    Я пишу на чистом XHTML из-за того, что это обеспечивает кроссбраузерную совместимость и существенно облегчает вёрстку сайтов.

    Верстку облегчает разделение контента и стиля, а чем верстать контент - c X или без, неважно. Кроме того, как я писал, XHTML как раз обеспечивает полную несовместимость с IE. Кстати, сайт http://agat.in/ отдается браузерам в виде text/html, и парсится как HTML. А единственный, кто парсит его как XHTML -- валидатор -- находит там 2 ошибки. Кстати, довольно незначительных. И очень хорошо, что пользователи могут видеть сайт, а не обращать внимание на отсутсвие alt в двух местах.

    edgy:

    Понимаю, что иногда хочется понизвергать основы, но ведь это прочитают и те, кто не будет видеть разницы

    Неправильно понять, в общем-то, можно все, что угодно. Я могу лишь стараться написать все доходчиво, но я не властен над нежеланием понять. Если написал не доходчиво, то по результатам комментариев напишу еще статью. Но пока я не вижу ни одного конкретного возражения, если честно.

    Это, кстати, опять не я придумал :-).

    • Классическая статья Йена Хиксона: http://www.hixie.ch/advocacy/xhtml (даже более радикальная, он пишет, что XHTML через text/html не только бесполезно, но и вредно!)
    • Много об этом пишет голландец Анне ван Кестерен.

    Эти люди -- одни из самых известных евангелистов стандартов в мире, и тема эта, вообще-то, известна в англоязычном интернете очень давно, я лишь собрался у нас это все изложить.

  9. Иван Сагалаев

    А, вот забыл... Насчет того, что блогный софт должен следить за well-formed'ностью. Да, наверное должен. Но факт состоит в том, что большинство софта, которым пользуются люди, это не делают. Что в свою очередь тоже показывает отсутствие необходимости.

  10. edgy

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

    Особенно "пугалка" и рекомендации в конце. Не было бы их, был бы хороший пост, провоцирующий на интересную, возможно, дискуссию по актуальному, как видим, вопросу.

    Пугалка абсолютно не пугает, вот нисколько, честно. Это не сложно, и Вы это понимаете. Это даже полезно, нужен хоть какой-то порог вхождения, простота html уже сыграла свою вредную роль.

    Если есть какие-то проблемы с написанием xhtml, может быть не стоит его вообще писать? Это не rocket science, но свои правила и здесь есть.

    Пусть у xhtml очень мало плюсов на данный момент, но ведь они есть? А какие плюсы у html, кроме тех, что его "проще" писать, что тоже, я думаю, у многих уже не так?

    Мне бы, для валидности HTML пришлось потом кавычки стирать специально и слэши убирать у одиночных тегов.

  11. Алексей Захлестин

    о! спасибо за статью :-) дам ссылку паре человек.. у самого всё руки не доходили до написания чего-то подобного.

    Наш выбор: html 5 :)

    <blockquote cite="edgy"><p>Мне бы, для валидности HTML пришлось потом кавычки стирать специально и слэши убирать у одиночных тегов.</p></blockquote>

    ну.. слеши — это понятно. а кавычки-то зачем?

  12. Alena

    Одна из самых печальных вещей, которую я замечаю, когда набредаю на русскоязычные веб-разработчицкие сообщества — это полное нежелание разбираться в сути вопросов. Когда что-то у кого-то не получается, он сначала спрашивает это в форуме, где куча самозванных “гуру” начинает ему рассказывать несусветную чушь.

    Обычное дело, не только для форумов веб-разработчиков. Форум надо осторожно выбирать.

  13. Иван Сагалаев

    Ok, пугалка не страшная :-). Опишу в следующей статье случай, когда у одного и того же сурса в XHTML и HTML режимах получается разный DOM. Моя основная мысль в том, что эти вещи многим просто неизвестны, и поэтому если уж хочется писать именно XHTML, надо про них знать. И надо знать про то, что писать на чистом XHTML не получится (например сокращать парные пустые теги), придется писать XHTML, совместимый с HTML, что, опять-таки, дает больше работы.

    У HTML есть один большой плюс -- он рапространен. Большинство того, что сейчас самими авторами считается XHTML'ом, им не является с того момента, как сурс отдается браузеру. Поэтому вопрос не в том, стоит ли переходить с XHTML на HTML, а как раз наоборот: если у вас есть рабочий HTML, нет оснований прибавлять себе работы.

  14. Tomaz
        <p>Может я чего-то не догоняю, но мне никак не удается заставить IE показать XHTML документ как XML.</p>
    

    <p>Пишу так:<br /> <code /></p> <pre><code>Untitled

    text </code></pre> <p /> <p>Но на ожидаемое дерево документа IE выдает строку "text".</p>

  15. Tomaz

    Сорри, забыл скобки заменить.

    Пишу так:
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head>    <meta http-equiv="Content-Type" content="application/xhtml+xml">    <title>Untitled</title> </head> <body>    <tag>text</tag> </body> </html>

  16. Иван Сагалаев

    Тут не в коде дело. Чтобы заставить IE воспринимать документ как XHTML, надо либо подкрутить на сервере, чтобы Content-type был "application/xhtml+xml", либо, если это файл на диске, дать ему расширение ".xml"

    P.S. Кстати, насчет кода в комментариях. Если лень заменять < на &lt;, то можно еще его вставлять прямо в первозданном виде, но с отступом слева на 4 пробела. Тогда он будет сам экранироваться и переводы строк соблюдать.

  17. Иван Сагалаев
        <p>Вот, сделал тестовый документ. Один и тот же исходный код, который отдается с сервера с разными Content-type:</p>
    

    <ul> <li> <p>test.xml, Content-Type: application/xml<br /> IE6 показывает в виде дерева.</p> </li> <li> <p>test.xhtml, Content-Type: application/xhtml+xml<br /> IE6 у меня его вообще отказался показывать, предложил сохранить на диск.</p> </li> </ul> <p>Firefox оба документа показывает как веб-страницу. То есть пишет title в заголовке и применяет дефолтные стили к абзацу. Кстати, интересно, что несмотря на то, что в первом случае тип документа -- "какой-нибудь XML вообще", он все равно опознается, как XHTML. Почему? По namespace. На него браузер смотрит, когда content-type'а недостаточно.</p>

  18. Michael Yakovis

    Это даже полезно, нужен хоть какой-то порог вхождения, простота html уже сыграла свою вредную роль.
    Вы, наверное, программист. Я почти уверен.

    Простота создания сайтов -- это лучшее, что есть в интернете. Какими бы кривыми и косыми они ни были. Благодаря этой простоте и низкому порогу вхождения интернет существует в том виде, в котором мы его знаем.

    Автор редкой коллекции не должен бежать к профессионалу, чтобы показать ее миру.

    Это я говорю как человек, который получает деньги от тех, кто до профессионалов все же добегает.

    Не нужно путать свое благо и общественное.

  19. edgy

    http://softwaremaniacs.org/blog/wp-content/test.xhtml
    IE6 показал также как FF :)

  20. Владимир Яшников

    Интересная статья, что-то подобное (но не столь обстоятельное и арументированное) я читал на 456 Berea Street.

    Много об этом пишет голландец Анне ван Кестерен.

    Вроде это женщина? :)

    P.S. Очень бы хотелось, чтобы вы сделали подписку на комментарии. :)

  21. Алексей Захлестин

    Много об этом пишет голландец Анне ван Кестерен.

    Вроде это женщина? :)

    нет. это как раз "молодой человек"

  22. Corwin

    А мне кажется что весь геморой в работе браузеров как раз от того, что так фривольно начали трактовать html. Тут обязателен закрывающий тег, тут не обязателен ... И пошло поехало ...
    Основная мысль твоей статьи должны была быть - "использование безполезно, т.к. никогда не использовали", а не то что это зло по определению.
    Что то тебя в какие то крайности заносит последнее время :)

  23. [...] Иван Сагалаев о том, что такое XHTML на самом деле. Статья позволяет реалистично взглянуть на различия между XHTML и HTML (без X). А принципиальных различий, на сегодняшний день, нету. ” нужно четко понимать, что чисто технически никакого XHTML в современном вебе не существует” [...]

  24. Иван Сагалаев

    То, что IE6 показал application/xhtml+xml -- это, сдается мне, на WinXP SP2? Они, вроде, хотели там чинить как раз обработку Content-type...


    Corwin, да весь геморрой именно от этого. Но проблема в том, что не будь этого, веб никогда не дошел бы до такой степени популярности. Абсолютно чистых решений ведь не бывает. Это вот теперь, когда и браузеры доработаны, и технологии проверены, можно потихоньку начинать чинить веб. Но я бы поспорил, что это надо делать именно XHTML, потому что обратная совместимость с HTML, который уже написан за эти 15 лет, игнорировать нельзя.

    Кстати, то что XHTML -- зло, я и не писал :-). Основная мысль статьи там выше, в жирной красной рамке :-).


    Подпиской на комментарии я, наверное, таки займусь... А feed не поможет?

  25. vilky

    В моём скромном мнении, статья запоздала года на три. Тогда некоторые авторы воевали против XHTML, а потом они начали разрабатывать микроформаты XHTML.

    Редкие случаи, в которых полезен брат Икс, уже давно нередки, строгость синтаксиса и DOM-конструкции давно привычны, а как сектанты с горящим взором воспринимаются противники XHTML.

    P.S. А Анне ван Кестерен лучше не упоминать. Вы на WHATWG-рекомендации смотрели?

  26. Алексей Захлестин

    [re: vilky]

    DOM-конструкции замечательно работают и в HTML. А важным недостатком XHTML являются высокие требования к качеству продукта, который его использует.
    К сожалению время от времени случаются ситуации, когда какой-либо сайт вследствии некорректного user-input начинает отображать вместо сайта ошибку "non well-formed xml" и до вмешательства разработчика (а вы ещё достучитесь до него) сайт простаивает и владелец теряет деньги…

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

    HTML — низкий порог вхождения, быстрый старт, эффективная разработка

    XHTML — удобство пост-процессинга

  27. Tomaz

    Не смотря на то, что DOM работает как для HTML так и для XHTML, я на практике часто использую специфичные для HTML DOM свойства и методы.

    Ну нравится мне работать с атрибутами тегов как со свойствами объекта. Вместо того, чтобы вызывать функции getAttribute('attr') и setAttribute('attr', 'value') я просто использую = .

    Мне также нравится сокращать объем кода в 2 - 3 раза и делать его более читабельным, используя методы HTML DOM для редактирования таблиц.

    До тех пор, пока мне не нужно в моих проектах использовать MathML, SVG или другой XML язык, я останусь верен HTML.

    Как правильно Иван заметил - пока самый распространенный браузер не будет воспринимать XHTML - для веба эта технология не востребованна. Как вы думаете, когда IE6 будет занимать меньше 2% рынка браузеров (чтобы можно было не принимать его во внимание)? Я думаю лет через 5 - 7.

  28. Владимир Яшников

    Фид был бы предпочтительнее.

  29. Julik

    У XHTML есть масса других достоинств, которые ты не упомянул (а может быть забыл). Одно из них - элементарная внятность кода. Ты же знаешь например, что три вложенных друг в друга списка без закрывающих тегов малочитаемы? Равно как малочитаема для твоего парсера ситуация что теги в нижнем регистре. Обычный HTML слабопригоден для машинного потребления.

    И примеров кода приводить не хочу, потому что эти ваши питоновские четыре пробела мне впились :-) больно много печатать придется.

  30. Иван Сагалаев

    Ты же знаешь например, что три вложенных друг в друга списка без закрывающих тегов малочитаемы?

    Если для человека, то читаемость управляется в основном отступами, а не закрывающими тегами. И ей богу, на мой вкус закрывающие </li> читаемость скорее ухудшают.

    Обычный HTML слабопригоден для машинного потребления.

    Скажем так -- менее пригоден, чем XML, тут не поспоришь. Но дело в том, что эта проблема во многом уже решена. Да, парсеры HTML куда более здоровы и витиеваты, но они есть, написаны.

    И примеров кода приводить не хочу, потому что эти ваши питоновские четыре пробела мне впились :-)

    Это markdown'овские 4 пробела :-). Я обычно пишу код в текстовом редакторе с любыми отступами, а потом двигаю на 4 пробела весь блок. Удобно.

  31. Julik

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

    Что же касается парсеров - ты издеваешься, да? Плюс - подумай об XML-шаблонах (не о тех которые XSLT а о тех которые XML + namespace шаблонера). Как ты их комфортабельно сделаешь на HTML?

    Я считаю что XHTML даже в частичном варианте неплох, потому что меньше ambiguity и раздрая (+есть шанс обработать получившиеся документы в будущем ну хоть ЧЕМ нибудь кроме браузера).

  32. Александр Вольф

    Всё написанное в статье верно, но только взгляд на "проблему" получился несколько однобоким. Не понимаю, зачем циклиться на desktop-вариантах UA? Есть и мобильные UA, для которых парсить XHTML предпочтительнее HTML.

  33. Иван Сагалаев

    Я, в общем-то, и не имел в виду только десктопные браузеры. Но вопрос действительно интересный.

    Насколько я понимаю, одним из вкусных плюсов, который виделся при создании XHTML'а, было то, что поскольку строгий парсер проще и меньше, этот язык даст толчок развитию чистых XHTML-браузеров как раз на мобильных устройствах, где простота и размер крайне важны.

    Но есть одна очень неприятная проблема: огромное количество существующего HTML-контента. Браузер, который не может показывать текущий веб, никому не нужен. То, что именно эта проблема -- Самая Главная Проблема Браузера, красочно доказывают первые 3-4 года развития Mozill'ы, когда этот самый на то время распродвинутый браузер не был никому известен, потому что из-за маниакального пристрастия к чистоте стандартов, он не показывал множества страниц. Зато потом они осознали свои ошибки, сделали quirks mode, и реализовали <marquee>. И сразу браузер стал куда популярнее, даже несмотря на плохой UI, раздутый размер и медленную скорость.

    Так вот, решить эту проблему можно только двумя способами: или переписать весь веб на XHTML, или впихнуть HTML-парсер в мобильные устройства. Большинству из нас здесь с инженерными мозгами первый вариант покажется, вероятно, лучшим. Потому что лучше иметь четкую технологию и управляемые инструменты, чем кашу тегов и перепатченные парсеры.

    Но реальность отличается. Несмотря на многолетние усилия евангелистов, веб-мастеры не переделали веб в XHTML. А вот зато Мозилла и Опера таки умудрились засунуть свои движки на мобильные устройства: Minimo и Opera Mobile. Причем со стороны мозилловцев это вообще удивительно, учитывая неслабые размеры Gecko...

    И чем дальше я про это думаю, тем больше понимаю, что и быть не могло по-другому. Что проще, заставить миллионы бизнесменов выложить деньги, чтобы починить то, что и так уже работает или двум-трем командам инженеров напрячься и совместить растущие мощности мобильных устройств и усилия по оптимизации кода?

  34. Баранов Андрей

    Неплохо все написано, однако проблема существует в большей степени из-за неповоротливости производителя широко распространенного браузера (вспомните, сколько ему уже лет).
    Хотелось бы еще поправить:

    Например, будет ли IE6 считать размеры боксов по стандарту или в режиме совметимости с IE5, зависит от того, указать ли ему DOCTYPE строгого (X)HTML или нет.

    Это зависит от отсутствия/наличия какого-либо текста перед строкой DOCTYPE. Т.е. Standards mode можно включать как в xhtml strict, так и в transitional. В html4 для ие6 тоже можно с помощью doctype переключать режим quirks или standards, только немного иначе.

    Фоновый цвет body в XHTML не распространяется автоматически на все окно

    И не должен. Значение высоты body по умолчанию: auto, т.е. зависит от высоты содержимого, а не размеров окна браузера. В HTML4.01 фоновый цвет body тоже не заливает все окно. Заливка всего окна происходит лишь в ие6 если вовсе не указывать doctype, а в ие5-5,5 не зависимо от наличия все того же doctype.

  35. Иван Сагалаев

    В HTML4.01 фоновый цвет body тоже не заливает все окно.

    Все же заливает. Несмотря на то, что высота его остается auto. Это легко проверить, указав фоновый цвет и рамку на body.

    Это, насколько я понимаю, исторически сложилось. А сейчас закреплено в CSS 2.1: http://www.w3.org/TR/CSS21/colors.html#q2 (там весь четвертый абзац).

  36. Баранов Андрей
        <ol>
    

    <li> <p><a href="http://xhtml.ru/experiment/bodyheight/html401tr.html" rel="nofollow">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br /> "http://www.w3.org/TR/html4/loose.dtd"&gt;</a></p> </li> <li> <p><a href="http://xhtml.ru/experiment/bodyheight/html401tr99.html" rel="nofollow">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br /> "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"&gt;</a></p> </li> <li> <p><a href="http://xhtml.ru/experiment/bodyheight/html40.html" rel="nofollow">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"<br /> "http://www.w3.org/TR/html4/loose.dtd"&gt;</a></p> </li> <li> <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;</p> </li> <li> <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;</p> </li> </ol> <p>как можно убедиться, заливка body зависит не от версии html, а от режима браузера: standards, quirks...</p>

  37. Иван Сагалаев

    А... Понятно. Я говорил о случае (и в ссылке на CSS2.1 тоже о нем), когда элементу HTML не назначен цвет. Извиняюсь за неточность :-)

  38. Баранов Андрей

    уточню: высота body зависит не от версии html, а от режима браузера: standards, quirks…
    причем:
    FF - заливает только body, но не страницу.
    it6 - заливает только body, но не страницу, зато в режиме BackCompat растягивает его на высоту окна
    opera8 - при загрузке заливает все окно, хотя body не растягивает, после сворачивания/разворачивания окна все становится как в FF (вероятно глюкавость браузера)

    /все под win XP sp2/

  39. Иван Сагалаев

    Андрей, вы смешиваете две вещи: высоту и фон. Высота body действительно зависит от режимов, и именно так, как вы написали.

    А вот фон body все браузеры передают на окно, если не задан фон html. Вы в Вашем исследовании его всегда задаете, поэтому получаете другие результаты.

    Если совсем коротко:

    • если 1) HTML и 2) не задан фон html, то фоном body красится окно
    • в остальных случаях (XHTML или задан фон html) магии не происходит

    Исключение для первого случая сделано для обратной совместимости, когда цвет окна задавался через атрибут <body bgcolor="...">, а о возможности задать фон элемента html никто и не подозревал.

  40. Баранов Андрей

    Иван, спасибо. Вы верно заметили, что я везде указал фон для html. Продолжаю исследование, чтобы все встало на свои места и было всем совершенно понятно.

    Проверка возможных вариантов займет немного времени, поэтому аргументированный отчет напишу чуть позже. Готов согласиться, но хочу, чтобы это подтвердила практика. Кстати, еще появляется вопрос фонового изображения...

  41. mourner

    Я согласен, что многие преувеличивают необходимость использования XHTML в современной web-разработке.

    Но лично мне использовать гораздо удобнее. Во-первых, потому, что я люблю строгость в программировании. XHTML не дает сделать шага влева, шага вправо - только вперёд, по правильному пути. Во-вторых, потому что не вижу совершенно никаких недостатков такого решения. То, что использовать его труднее - абсурд. Это чисто дело привычки. В-третьих, говорить, что его использовать нехорошо из-за IE - неправильно. Если бы все так считали, web-технологии развивались бы намного медленнее. Все бы продолжали верить в авторитетное слово Microsoft и плевали бы на любые попытки стандартизировать соответствующие технологии.

  42. Александр Вольф

    Боюсь, что Вы, mourner, используете синтаксис XHTML, но странички при этом отдаются как HTML. Собственно говоря об этом в статье и говорится кроме всего прочего...

  43. mourner

    Александр, разве я говорил, что использую XHTML для того, чтобы странички отдавались всем браузерам как XML? Я перечислял совсем другие причины. :-)

    А как HTML они отдаются только IE, если вы не заметили. Firefox, Opera, Safari воспринимают их как полноценный XML-документ - это легко достигается с помощью htaccess или сервер-сайд-скрипта. Да дело не только в браузерах - если я в будущем захочу отпарсить и преобразовать страницы моего авторства, это будет делаться с помощью XML-парсеров/XSLT/etc., а не Internet Explorer. :-)

  44. [...] Да-да, я тоже хочу поучаствовать в этой holy war! Иван Сагалаев пытается убедить всех, что HTML лучше XHTML. Но я с ним категорически не согласен. [...]

  45. Anatoliy

    Вот не могу понять позицию автора...
    Так или иначе XHTML стандарт разработан и существует.
    Удобства с точки зрения парсинга большие. В мобильных устройствай все же первыми появились именно XHTML браузеры. "Весомый" аргумент и "смысл" статьи выше в красной рамочке гласит, что писать XHTML "трудно". Разве так трудно приучить себя к порядку и зактывать все теги, писать атрибуты в кавычках? К стати по поводу того, что закрывающий элемент списка сбивает и мешет читабельности сорса страницы - это вообще, по-моему, бред (резко, но что поделать..) Представить себе не могу, если бы в том же C или C# разрешали не закрывать фигурные скобки!!
    Те же кто далек от технологий и т.д., но хочет иметь свою страничку в сети пользуется либо WYSIWYG редакторами, либо готовыми движками. Причем ни первым, ни вторым ничто не мешает генерировать валидных XHTML на выходе.

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

  46. Иван Сагалаев

    Вот не могу понять позицию автора…

    Что ж, попробую объясниться еще :-). Тем более, что комментарий располагает к беседе.

    Так или иначе XHTML стандарт разработан и существует.

    И почти не используется.

    В мобильных устройствай все же первыми появились именно XHTML браузеры.

    Первичность ведь не означает превосходства. Важно, что они так и не стали чем-то юзабельным.

    “Весомый” аргумент и “смысл” статьи выше в красной рамочке гласит, что писать XHTML “трудно”. Разве так трудно приучить себя к порядку и зактывать все теги, писать атрибуты в кавычках?

    Нетрудно, действительно. Тим Брей (один из авторов XML) как-то сказал куда резче, что любой, кто неспособен создавать well-formed XML -- некомпетентный идиот :-).

    Но это все не отменяет того факта, что веб переполнен не well-formed и невалидным контентом. Причем, и в XHTML, и в HTML синтаксисах.

    К стати по поводу того, что закрывающий элемент списка сбивает и мешет читабельности сорса страницы - это вообще, по-моему, бред (резко, но что поделать..)

    Это не бред, это дело вкуса и привычки. И неужели эти самые незакрытые теги -- настолько важный момент, что о нем все высказываются? Статья-то не об этом :-)

    Представить себе не могу, если бы в том же C или C# разрешали не закрывать фигурные скобки!!

    В языке Питон блоки в операторах не закрываются ничем, кроме отступов. Смею уверить -- очень удобная штука.

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

    Вопрос не в том, мешает им что-то или нет. Есть факто, что они этого не делают. Большинство блогов на Blogger'е невалидны, и от этого ровно никому не становится плохо.

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

    Необходимость использования технологии не определяется новизной. Какие преимущества дает автору веб-сайта XHTML? Уверяю вас, подавляющее большинство владельцев сайтов не парсит их никакими XML-утилитами. Об этом я в следующей статье тоже писал.

    Просто какой смысл пропагандировать именно эту технологию - непонятно.

    Я не пропагандирую. Я призываю смотреть на вещи реально, а не через переключатель "HTML -- старый отстой, XHTML -- модный рулез". :-)

    Переход идет поэтапно, никто не отказывается резко от поддержки старого стандарта, но и развивать его нет смысла.

    Вот этого уже я никак не могу понять :-). Где идет переход? Нет на вебе XHTML-сайтов, кроме нескольких демонстрационных. Есть некоторое количество сайтов, которые могут валидироваться как XHTML, но поскольку этим их преимуществом никто не пользуется, его, по сути, и нет.

    Поймите, смена синаксиса -- это не равзитие веба. Идея XHTML просто опоздала к обеду, потому что проблему, которую он призван решить, браузеры уже давно решили. С потом, кровью и жертвами, но это уже произошло.

    Развитие же веба -- это решение проблем, которые существуют до сих пор: устаревшая архитектура форм и ограниченное число их элементов, несоответствующая реальности семантика и т.д. Вот этим сейчас занимаются производители браузеров. И этот новый HTML5 будет существовать и в XML'ном синтаксисе, и в HTML'ном. Потому что это не проблема.

    А какой смысл отговаривать от этого - я не знаю.

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

  47. Александр Вольф

    XHTML почти не используется в России, в странах, более продвинутых в вопросах веба XHTML практически стал стандартом де-факто для всех новых проектов и тех, что претерпели редизайн в недавнем прошлом.

    P.S. Я давний поклонний браузера Opera и с переходом на 9-ку свою рабочую лошадку обновляю еженедельно. На прошлой неделе просматривал changelog'и нескольких версий и с удивлением констатировал, что Opera паралельно развивает в "Мерлине" поддержку и XHTML, и HTML 5. И мне думается, что у них получится нормально развивать две ветки в одном стакане (научили же они свой браузер на 100% правильно понимать CSS 2.1).

  48. Иван Сагалаев

    Насколько я знаю, Опера (и остальные) не развивают официальный XHTML 2, который предлагает W3C. Они развивают HTML5, который по своей спецификации имеет два равноправных синтаксиса: XML'ный и HTML'ный.

    О чем я и твержу все время. Парсинг -- вопрос решенный, выбирайте удобный для себя вариант, не надо считать какой-то один религиозно правильным.

  49. Kompiuteriu servisas

    Спасибо. Узнал много нового.

    Значит, HTML 4.0 на пенсию не собирается?
    Пока браузер образца 2001 года, который является модификацией браузера образца 1998 года, доминирует.

    Можно пользоваться стандартным HTML с табличной версткой и спать спокойно - изучение XHTML откладывается. Где гарантии, что он вообще понадобится когда-нибудь?

  50. liven
        <p>Такс, попробуем разобраться...</p>
    

    <ol> <li> <p>«XHTML нигде не используется»<br /> Ну ведь это не означает что от него стоит сейчас же отказаться =) Плохо что не используется, а еще хуже что нет стремления к единой стандартизации Web. Но хорошо что не у всех =)</p> </li> <li> <p>Вот вы пишите, Иван, что как только IE обработал страницу как text/html так код сразу не XHTML. Бред какой-то...<br /> Вот скажите мне, IE при обработке XHTML кода как HTML ломает резку? А я знаю ответ. Нет. Не ломает. А значит стоит резать для браузеров по стандартам. А для IE пока и так сойдет, с выходом 7 ослика, думаю все станет на свои места.<br /> Если вы пишите на XHTML, и он плюс ко всему проходит валидацию, значит можете быть уверены: у вас нормальный, правильный код. А то что один браузер его обработал как html, это уже недостаток браузера, который никак не мешает делать Правильно.</p> </li> <li> <p>По поводу сложностей XHTML... не смешите, он ничуть не сложнее html =) Просто нужно немного опыта. В strict кстати резать гораздо проще и приятнее чем в transitional</p> </li> </ol> <p>P.S. Не сочтите за хамство. Почитал у вас в «об авторе» про майкрософт. Иван, вам туда дорога, я думаю майкрософт думала(ет) так же как и вы, когда выпускала IE6 =) Зачем нам стандарты, нам и так хорошо, проще и легче. Действительно, Иван, че нам париться? Кстати, мы с Вами тески.</p>

  51. Александр Вольф

    <blockquote cite="http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/#comment-1989"><p>Значит, HTML 4.0 на пенсию не собирается?</p></blockquote>

    Вообще-то IE по разному отображает одинаковый HTML-код при разном полном DOCTYPE'е (HTML 4.0 и HTML 4.01).

  52. Владимир

    Иван, глубоко Вам благодарен за статью. Взамен хочу заметить, что Вы не рассказали самую страшную пугалку - невалидный код генерируемый фаерволами.
    Посетить сайт w3c.org с FireFox + Outpost Вы не сможете :(
    Вы должны сначала внести этот супервалидный сайт в доверенные, и только потом фаервол перестанет гадить код.
    Представляю рядового пользователя офиса, объясняющего это сисадмину :).

    Так что я в свою CMF внес следующий код:

    if (DEVELOPMENT_SERVER AND (!isset($_SERVER['HTTP_USER_AGENT']) OR strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
    {
    header('Content-Type: text/html; charset=utf-8');
    }
    else
    {
    header('Content-Type: application/xhtml+xml; charset=utf-8');
    }

    И пусть теперь только какой-нибудь подчиненный мне верстальщий не закроет тег - получит сразу по самое не балуйся.

  53. ganges

    Иван, а как же "future proof"?
    Я скромно думаю, что не будет никакого "реального" HTML5, скорее будет XHTML2

    Я лично пишу (но никого не переубеждаю "переходить" или "не переходить") в XHTML 1.1 с верным MIME для всех агентов, которые его могут принять и text/html для MS IE. Наверное потому что "бикоз ай кэн". НО
    Вы забыли о таких flavors как XHTML MP, XHTML Basic
    Если перед Вами появится задача сделать ресурс одновременно доступный (1 сорс) для максимального количества UA, в том числе и мобильных девайсов - HTML4, уверяю Вас, не лучший выбор.

    К тому же (тут часто упоминался W3C) Вы, как и большинство сотоварищи, совершенно не упоминаете такие технологии как XSLT и XPath.

    К тому же, как Вы неоднократно замечали в этом и других постах, "парсить" XHTML намного легче. (Google sitemaps)

    Но, я признаю, что проблема современного Рунета отнюдь не в HTML/XHTML предпочтениях, а в отсутствии навыков CSS верстки. Именно CSS верстка открывает дорогу к структурированному HTML кодингу

  54. Zigzag

    Иван Сагалаев, убейте себя мой дорогой... Откажитесь от электричества, потому что это слишком сложно для вашего понимания и сидите по ночам при свечах... и пусть ваши сайты продолжают быть некорректными...

  55. Евгений Петров

    Не могу доверять человеку, использующему padding:none;.
    Если не изменяет память - натыкался и на другие опусы на этом сайте...
    Резюме: Вы - тот самый "гуру", о которых сами и писали в начале своей статьи.

  56. Виталий Шароватов

    Иван, Вы очень сильно ошибаетесь в своей пугалке. Прошу на сюда или сразу сюда.

  57. envek

    padding:none;
    о боже...

    Мне, например, удобнее писать XHTML — он более логичен. Мне удобнее читать код, где все теги на своих местах — у меня логическое мышление.

    В языке Питон блоки в операторах не закрываются ничем, кроме отступов. Смею уверить — очень удобная штука.

    Так то питон, а это хтмл — это разные вещи.

    XHTML'у жить, а проблемы IE — это проблемы IE, как нибудь и его заставим нормально всё делать.

  58. alex

    Интересно есть ли статистика - сколько сайтов делается любителями и сколько профессионалами ?

    Вот по ней уже и можно делать выводы о будущем XHTML и HTML,
    тк смысл и доступность инета именно в его массовости.

    Вероятно массовость подразумевает все таки любителей ...

    А попытка навязать любителям XHTML столь же безнадежна,
    как и попытка пересадить их с винды на линакс.

  59. aaa

    не вижу смысл брать на себя работу парсера
    - рутинная нетворческая работа

  60. Дмитрий

    Re: Alex
    А как вы собираетесь отбирать тех, кто профессионально верстает HTML или любительски?

    Возьмите сайты Лебедева - куча кода, который не соответсвует стандарту! Разных хаков и примочек для браузеров. Оно и понятно - им не важно как это внутри, им важнее, что бы это работало и работало на отлично во всех браузерах!

    Львиной доле пользователей интернета вообще не важно как сделан сайт, что у него внутри html или xhtml, div-ы или таблицы (если у пользователей широкий канал). Важно то, как преподносится информация, что это за информация, удобство её нахождения и получения!

    Будь сайт миллион раз валидный, но скучный и не интересный, то толку от этого что?

    Я согласен с тем, что сайт должен максимально быстро загружатся, быть максимально гибким при изменении контекта и выглядеть одинаково в большинстве популярных браузеров! А валидным может быть любой html с приставками (x) или без них.

  61. Paladin

    Да, автор, вы, как говорится, жжОте.

    Я бы прекрасно вас понял, если бы вы предложили не переделывать с маниакальной настойчивостью всех создателей HTML контента свои творения под XHTML. Но предлагать НОВЫЕ проекты писать на HTML 4, заместо того же XHTML 1.0 Strict - это тоже самое, что предлагать кататься на велосипеде с квадратными колесами, только потому, что "так привычнее", ибо горе-инженеры когда-то в спешке первым выпустили именно квадратное колесо.

    'Страшилку' вашу оставьте для малолетних детей. Быть может только они ее и испугаются. Да и то вряд ли.
    А говорить о том, что XHTML документ не является таковым только потому, что в заголовке Content-Type HTTP ответа стоит 'не та' строчка - это полная ерунда и здесь уже было написано решение - определяем по User-Agent клиента, и "тупому" ослу суем "text/html".

    XHTML разрабатывался как промежуточный язык между "слишком вольным, human-readable-ориентированным" HTML и "строгим, машинно-web-service ориентированным" XML - и эту цель его разработчиком достичь удалось, причем малой кровью.

    Кроме того многие браузеры мобильных устройств разрабатывались именно в расчете на XHTML, а не HTML, как уже было замечено.
    Используя XHTML, мы сразу убиваем друх зайцев :
    1. Делаем нашу вертску читабельной для браузеров пользователем
    2. Делаем ее читабельной для xml-парсеров и xslt-трансформеров
    А вы предлагаете по сути делать двойную работу -
    html для пользователей, и xml для машин. Конечно, быть может вам пока и не нужен этот второй заяц, потому что "итак работает, да и привычнее", но пройдет немного времени, web-сервисы и автогенерируемый ими контент и "обычные" страницы начнут постепенно сливаться ... и что тогда?

  62. Иван Сагалаев

    Но предлагать НОВЫЕ проекты писать на HTML 4, заместо того же XHTML 1.0 Strict - это тоже самое, что предлагать кататься на велосипеде с квадратными колесами, только потому, что “так привычнее”, ибо горе-инженеры когда-то в спешке первым выпустили именно квадратное колесо.

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

    Аналогия же с квадратным колесом только хорошо иллюстрирует Вашу позицию, но никак ее не обосновывает. Верстка HTML'ом не обязывает автора делать это "квадратно".

    А говорить о том, что XHTML документ не является таковым только потому, что в заголовке Content-Type HTTP ответа стоит ‘не та’ строчка - это полная ерунда и здесь уже было написано решение - определяем по User-Agent клиента, и “тупому” ослу суем “text/html”.

    Вопрос не в том, чем он "является". Синтаксисы пересекаются, и один и тот же документ действительно может являться и HTML'ом, и XHTML'ом. Вопрос в том, какая польза с того, что мы одним потребителям выдаем его "жестко", а другим "мягко". Я пользы никакой не вижу. Зато я вижу лишний уровень абстракции: автору, который хочет писать XHTML, все время придется думать о том, что он должен быть совместимым с HTML (то есть не использовать <script ... />, не использовать <?xml-stylesheet ... >, помнить, что <blockquote> внутри <p> браузер пропустит в XHTML, но не пропустит в HTML...) Отличия мелкие, но я не понимаю, зачем о них думать вообще.

    Кроме того многие браузеры мобильных устройств разрабатывались именно в расчете на XHTML

    Вы ими пользуетесь? Я думаю, вряд ли, потому что на вебе для них нет контента. Самый популярный мобильный браузер -- Опера -- это HTML-браузер. В одной из следующих статей я писал подробней об этом.

    Используя XHTML, мы сразу убиваем друх зайцев :
    1. Делаем нашу вертску читабельной для браузеров пользователем
    2. Делаем ее читабельной для xml-парсеров и xslt-трансформеров

    Видите ли, в чем дело. Машинная обработка не ограничивается XML и XSLT. Это работает и с HTML тоже. Проблему машинной обработки веба можно решать с двух сторон: упрощать контент или усложнять парсеры. Никто не спорит, что первый способ технологически чище. Но одних только рекомендаций W3C для этого оказалось мало. Это факт: продюсеры контента создают не well-formed и невалидный контент. Зато с другой стороны эту проблему решить неожиданно удалось: написаны (и пишутся) библиотеки, которые позволяют более чем приемлемо парсить реальный HTML: TagSoup и html5lib -- яркие представители.

    А вы предлагаете по сути делать двойную работу -
    html для пользователей, и xml для машин. Конечно, быть может вам пока и не нужен этот второй заяц, потому что “итак работает, да и привычнее”, но пройдет немного времени, web-сервисы и автогенерируемый ими контент и “обычные” страницы начнут постепенно сливаться …

    Мы ждем, когда оно начнет "постепенно сливаться" уже 7 (семь!) лет. За это время возникло и развилось уже столько идей, что говорить об XML-ном будущем веба просто нелепо. И к чему я призываю -- это перестать махать флагами несработавших на вебе технологий (XHTML, DTD) и работать с реальностью.

  63. Dark-Demon

    иногда лучше жевать, чем говорить...
    http://www.w3.org/MarkUp/2004/xhtml-faq

  64. dark-demon

    “надо верстать и таблицами, и div’ами”

    к сожалению это так. пример: для резинового дизайна нужно указать минимальную ширину (чтобы дизайн не поехал), но ИЕ не понимает min-width, поэтому приходится юзать распорки. проблема в том, что сам div распоркой замечательно распирается, а вот его контент почему-то упорно переносится по границе окна и дизайн благополучно едет. если вместо дива воспользоваться таблицей - проблема решается. да, я сам ненавижу горизонтальный скроллинг, но начальство даёт недвусмысленно понять, что дизайн превыше всего.

    “надо писать на XHTML, а не на HTML”

    да, надо. и знаешь почему? потому, что если ты допустишь ошибку в XHTML, то сразу об этом узнаешь, а вот если в HTML, то только когда (если) пройдёшься валидатором.

    Если IE скормить реальную XHTML-страницу, то он ее покажет как любой другой XML-документ — в виде дерева элементов.

    http://dark-demon.nm.ru/web/samples/z-forms/z-forms.xml
    ы? (к сожалению нет возможности проверить на доисторических браузерах, но вроде как и на ИЕ5.5 пахать должно)

    единственная программа, которая таки использует DTD — это сам валидатор

    не поверишь, но ИЕ умеет скачивать и парсить DTD
    например - к предложенной выше xml-ке пропиши DTD от xhtml1.1
    ИЕ сразу потребует интернета, а получив его ругнётся на ошибку в DTD. хотя ошибка скорее всего в самом ИЕ неправильно парсящем DTD.
    кроме того, судя по исходникам, мозилла тоже умеет парсить DTD, впрочем, скорее всего тоже не полностью.

    зачем именно они пишут в начале документа DOCTYPE разных вариантов XHTML. Никакого внятного ответа я на свой вопрос не получал.

    не поверишь, но валидатор - очень удобный инструмент для поиска ошибок (а чтобы валидатор не ругался слишком сильно или наоборот - прописывают разные DTD). а ошибки приводят к:
    а) необъяснимым косякам
    б) браузерозависимости (движки у браузеров разные и на ошибки они реагируют по разному)
    вот те яркий пример:
    http://dark-demon.nm.ru/web/samples/moz_margin_bug.htm
    открой эту страницу в мозилле и следуй инструкции. а в других браузерах всё нормально.

    Ни одному пользователю не интересно знать, как там где-то ошибся автор страницы или автор его CMS.

    когда автор страницы ошибается в XHTML он видит это сразу, а если в HTML - спустя неделю, когда он уже всё забыл и перешёл к следующему проекту, к нему могут начать поступать жалобы мол тут косяк, там разъехалось и тп.

    А в современном вебе, где документы составляются из кучи разных несвязанных кусочков информации, синатксические ошибки, к сожалению, слишком часты.

    только если руки у разработчика из одного места растут... XHTML как раз и приучает разработчиков контролировать что и куда вставляется, а не кидать всё в кучу мол, "авось не поедет".

    после перехода на XHTML мне стало проще делать кроссбраузерные страницы, я стал использовать меньше хаков.

    Достаточно, например, просто перенести copy-paste’ом URL’ку из браузера в блог и, если в URL’ке есть амперсанды (&), то вы получаете сломанный XHTML

    есть такая весч, как фильтрация поступющих извне данных. рекомендую её-таки производить, а то н в один прекрасный момент вы можете не обнаружить своего блога вообще ^_^

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

    ещё как можно

    <link href="z-forms.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="z-forms.js"></script>
    

    надеюсь не надо объяснять, чем такой способ лучше?

    В итоге, чтобы удовлетворить и XHTML, и HTML, вам придется либо использовать такую вот конструкцию, учитывающую все синтаксисы:

    <script>
    <!--//--><![CDATA[//><!--
      ...
    //--><!]]>
    </script>
    

    что-то ты тут перестарался, на мой взгляд достаточно такого:

    <script>
    /*<![CDATA[*/
      ...
    /*]]>*/
    </script>
    

    document.write в скриптах в XHTML просто не работает. Придется переписать с использованием DOM-функций

    не велика беда...

    В самих DOM-функциях нужно опустить все названия элементов в нижний регистр. То же для селекторов в стилях. В XHTML регистр букв имеет значение.

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

    Также не работают удобные вещи: document.body, document.forms, document.images… Придется рисовать длинные вызовы

    всегда можно сделать короткий алиас. например, стандарт де-факто:

    function $(id) {return document.getElementById(id);}
    

    Большинство того, что сейчас самими авторами считается XHTML’ом, им не является с того момента, как сурс отдается браузеру.

    то, что XHTML частично обратно совместим, вовсе не означает, что он является HTML-ем. вот подмножеством - да, является. (с учётом неиспользования несовместимых с HTML вещей.)

    Простота создания сайтов — это лучшее, что есть в интернете. Какими бы кривыми и косыми они ни были. Благодаря этой простоте и низкому порогу вхождения интернет существует в том виде, в котором мы его знаем.

    лет пять назад, когда ещё существовали статичные сайты, - да. но сейчас в моде различные CMS, а с ними вообще никаких языков знать не нужно - знай себе ставь темы/модули/плагины, да дрегендропь всё это между собой. а вот те, кто делает эти CMS должны быть хорошо подкованы и такая "простота", какую мы наблидаем в хтмл, только вредит, ибо подменяет собой "простоту понимания" "простотой создания".

    потому что обратная совместимость с HTML, который уже написан за эти 15 лет, игнорировать нельзя.

    какое отношение имеет уже написанный HTML к тому, который ты только собираешься написать? показ старых страниц - задача браузеров, а не разработчика новых страниц ^_^

    начинает отображать вместо сайта ошибку “non well-formed xml” и до вмешательства разработчика (а вы ещё достучитесь до него) сайт простаивает и владелец теряет деньги…

    вычитать у разработчика эти деньги. может хоть тогда он научится правильно фильтровать юзер-инпут...

    Если для человека, то читаемость управляется в основном отступами, а не закрывающими тегами.

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

    А вот зато Мозилла и Опера таки умудрились засунуть свои движки на мобильные устройства: Minimo и Opera Mobile.

    Первый - страшный тормаз.
    Второй - не страшный, но тормаз, да ещё и глюкалово.
    Ещё есть NetFront - теже тормаза и глюки, что и у оперы.
    Единственное, что можно юзать на КПК - это стандартный ИЕ. Да, плююсь, морщусь, но других альтернатив не видно.

    невалидный код генерируемый фаерволами.

    и что они с ним делают? вон, newmail тоже похабит HTML, добавляя баннеры, а вот XML или XHTML - не похабит ибо смысла нет - баннеры не покажутся вместе со всей страничкой.

    Оно и понятно - им не важно как это внутри, им важнее, что бы это работало и работало на отлично во всех браузерах!

    им важнее срубить побольше бабла. придёт к ним как нибудь клиент:
    - обновил браузер и весь ваш сайт поехал.
    - а, ну так этой версии небыло в тз! так что давайте, раскрывайте кошелёк, будем писать тз на редизайн кода.

  65. некто

    Нет на вебе XHTML-сайтов, кроме нескольких демонстрационных.

    Да ну?? Сайтов, написанных пусть не на "истинном", но XHTML'е, в Рунете огромное количество.

    Верстать нужно и таблицами, и div'ами - действительно бред.

    Но также некорректно говорить про то, что XHTML "неудобен".

    Присоединяюсь к liven и sas171. Доказывать бесполезно;)

  66. EVILdoer

    Автор рулит, а вот большинство комментариев, к сожалению, нет. Предлагается этому самому большинству ещё раз перечитать статью и подумать над тем, кто что знает.

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

    Желаю всем быть реалистами. :-)

  67. Leadaxe

    Автор написал гениальную фразу. С вашего разрешения я ее еще раз повторю.

    “Так привычнее” — это очень серьезная причина, на самом деле. Если разработчику привычно, он работает эффективней. Причина нужна обычно именно для смены технологии, а не для оставления работающей.

    Причина нужна обычно именно для смены технологии, а не для оставления работающей.
    Это очень глубокая мысль, а кро кодеров, которые так не считают хорошо посмотреть тут
    http://www.ashmanov.com/pap/ashrul.phtml
    http://www.ashmanov.com/pap/ashrul2/i.phtml

    Автору премного благодарен.

  68. AmdY

    Пользы от валидного html или xhtml мало, всёравно приходится расчитывать на особенности браузеров. xhtml не обеспечивает кроссбраузерную совместимость, как считают некоторые граждане.
    Сам закрываю одиночные теги, ставлю кавычки - это привычка, как отступы в коде.
    Насчёт незакрытых <li> и прочих тэгах - это всё делолось неспроста, времена были тяжёлые, каналы тонкие и постоянный дисконект. Люблю иногда использовать кнопку "остановить загрузку".
    Уже более полугода использую при написании сайтов движок, использующий xslt преобразование, при этом считаю, что на выходе html и прикрепляю заголовок "text/html" и плюю на валидность xhtml, потомучто юзвер при редактировании контента похерит валидацию, борусь лишь с лишними тегами.

  69. Яремчук Роман

    Браво!- за разоблачение XHTML. Давно пора.
    Молодец!

  70. Автор, выпей яду.

    Но такое поведение не подходит на вебе. Ни одному пользователю не интересно знать, как там где-то ошибся автор страницы или автор его CMS.

    Если CMS поддерживает XHTML, кто там будет позволять верстать страницы в raw html? Для этого есть textile, wikitext в конце концов.

    Содержимое элементов и нельзя оставлять в том же виде, что и в HTML. Потому что любой значок ">" тут же все сломает. Если его экранировать через ">" или заключать в блоки CDATA, то тогда сломаются HTML'ные браузеры, которые таких страстей не ведают и парсят текст, предполагая, что он не экранирован.

    Ничего не ломается. Выбросьте свой IE 4.0. И вообще скрипты должны быть исключительно в , а кто вставляет скрипты прямо в HTML, тот ССЗБ.

    document.write в скриптах в XHTML просто не работает.

    Это правильно. Это дисциплинирует жабаскриптеров.

    Также не работают удобные вещи: document.body, document.forms, document.images...

    Это не удобные вещи, а легаси. Все нормальные люди используют getElementById и getElementsByTagName. Длинно? Используйте Prototype, там специально для ленивых есть $ и $$.

    Если вы храните какой-нибудь текст внутри , то переводы строк внутри атрибута "value" в XHTML схлопнутся в пробелы. Чтобы этого не было придется их экранировать: " ".

    Кто мешает использовать ? Хиддены - это пережиток доCSSовых времён.

    Фоновый цвет body в XHTML не распространяется автоматически на все окно

    У меня в Firefox, IE, Opera и Arora всё распространяется. У меня какие-то неправильные браузеры?

  71. Собака

    Многие здесь подумают, что я объелся лебеды, и несу чушь, потому что вот же, например — известный сайт, у которого в сурсе сверху недвусмысленно написано, что это XHTML 1.0, и валидатор подтверждает, что так оно и есть. И IE его, разумеется, отображает.

    У меня на этом известном сайте IE6 отображает девственно чистый лист, а в сурсе недвусмысленно написано: meta name="description" content="О том, как правильно делать веб-сайты" :))

  72. Вася coyl

    А как же бедные поисковики? О них вы забыли? Как же они родненькие будут ломать зубы о некоректный хтмл? =)

  73. Вася coyl

    Кстати, не лебеды, а белены объелся.
    Белена - это, по сути, наркотик.
    Лебеда же - обычный сорняк.

  74. А как же бедные поисковики? О них вы забыли? Как же они родненькие будут ломать зубы о некоректный хтмл? =)

    Ну делают же они это сейчас. И неплохо делают.

  75. Ferroman

    Хе, особенно веселит в комментариях открытость критикующих.
    Анонимусы с лора попёрли?

  76. [...] Однако, как мы можем узнать из статьи Ивана Сагалаева «XHTML, говорите?», не все так просто, и многие разработчики не [...]

  77. HatoL

    Иван, посмотрел исходники ваших страниц и увидел < !DOCTYPE html>. До этого видел какую-то статью на английском, где говорилось о вредности DOCTYPE, но, как вы говорили, свободно на английском я разговариваю только в своем резюме ;) . Не могли бы вы написать свою статью про DOCTYPE и зачем он нужен, когда строчка < !DOCTYPE html> отображает документ так же, как и любой другой DOCTYPE ?

  78. HatoL

    Что самое странное, так это то, что очень многие тут написали, что XHTML позволяет легче делать страницу кроссбраузерной. Объясните мне, товарищи, ЧТО есть такого в XHTML, чего нет в HTML ? Строгость ? Браузеры плюют на вашу строгость, всяко пытаясь правильно отобразить документ. Вы думаете от того, что закрыты все теги, браузер "правильнее" отобразит вашу страницу ? Знаете, одиночные теги, они на то и одиночные, и браузеру абсолютно все равно как вы напишите: < br> или < br /> ? Всю "строгость" можно соблюдать и на обычном HTML 4.01 Strict.

  79. Алекс

    Думаю, что XHTML это переходной формат к XML, и наверное, предполагали, что будут такие несогласные. Тем не менее формат прекрасно существует.

    А тем, что вы несогласны с ним, и призываете отказаться от него.

    Предположим, ну помечтаем... Если бы сайты были на XML, то мороки с парсингом было бы меньше. Было бы больше толковых программистов, которые бы учились строгости, а среди нас не было быдлокодеров и блондинок. Да и сама профессия "верстальщик" страдает от этого, потому что любой, кто "выучил три тэга" может сверстать ужасненькую страничку.

    Конечно есть и другая сторона, которой придерживается автор: мы разрабатывали машины чтобы они нас понимали, а не мы их. Ну тоже правильная позиция.

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

    Лучше бы сделали статью о том, когда лучше применять HTML, а когда XHTML или на каком этапе стоит начать изучать XHTML. Здесь непонятный спор развели... Неучи поддерживают HTML, профи кричат, что XHTML лучше (отчасти потому, что им не лень соблюдать все правила хорошего программирования).

  80. Думаю, что XHTML это переходной формат к XML, и наверное, предполагали, что будут такие несогласные. Тем не менее формат прекрасно существует.

    Видите ли, это не вопрос личного мнения. Есть просто факты, про которые "думать" и "мечтать" можно сколько угодно, но они от этого не изменяются. Пожалуйста, перечитайте комментарии к этой статье, а также следующую статью из этого цикла и ее комментарии. Все это уже давно обсуждалось со всех сторон (это 2005 год, если что).

    Поверьте, заново для себя этот вопрос открываете вы, а не я :-).

  81. [...] мне так удобно по определённым соображениям (а вот Ване Сагалаеву такой вариант не нравится и он тоже совершенно прав). К сожалению, очень часто [...]

  82. AlexB

    А можно поподробнее про этот миф: "надо верстать и таблицами, и div'ами"
    Как совместное использование вполне полноправных и легальных HTML тегов может противоречить логике?

  83. Поподробней в рамках комментария трудно, а пост писать лень :-). Я постараюсь кратко...

    Тег <table> в HTML легален для создания таблиц с данными. Использование его для раскладки произвольных элементов по странице (aka "табличная верстка") -- нарушение его семантики. Поэтому табличная верстка не рекомендуется. Однако такой подход существует.

    Призывы верстать (то есть раскладывать блоки по странице) используя и CSS'ную верстку и табличную собирают все худшее из двух миров:

    • Использование <table> делает HTML не средством выражения структуры документа, а языком разметки -- теряется главное прреимущество CSS-верстки.
    • Мы получаем в одном документе два совершенно разных подхода произвольно смешанными -- это совершенно неподдерживаемо.

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

  84. Маниакальный веблог » XHTML, говорите?

Добавить комментарий

Format with markdown