| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Загадочный XHTML-режим |
| Автор: SelenIT 1.11.2007, 01:15 |
| Продолжаю свой крестовый поход против веб-мракобесия, интернет-суеверий и воинствующего ламерства очередной PR-акцией. В вебмастерских дискуссиях очень часто доводиться слышать упоминания о сабже (в т.ч. от весьма знающих людей), но ход дискуссий нередко демонстрирует, что иные из участников весьма слабо представляют себе, что это такое, либо вкладывают в это понятие абсолютно разный смысл. Для опроса я выбрал, на мой субъективный взгляд, наиболее часто встречающиеся трактовки. Интересно узнать, какая из них преобладает и какие еще существуют мнения Не исключаю, что я сам в чем-то заблуждаюсь, так что смелее аргументируйте ответы;). |
| Автор: Ch0bits 1.11.2007, 08:23 |
| Где вариант "Я в танке"? |
| Автор: SelenIT 1.11.2007, 15:18 |
| Ch0bits, его нет специально;). Голосуйте, плиз, активнее! "Я не вижу ваших рук!" © Смелее высказывайтесь, ну и аргументируйте при желании... |
| Автор: smartov 1.11.2007, 16:20 |
| Неужели мы живем в эпоху, когда нету интернета?.... К чему гадать. http://ru.wikipedia.org/wiki/XHTML Добавлено через 1 минуту и 5 секунд Посему проголосовал за более абстрактный вариант Добавлено через 1 минуту и 37 секунд То бишь "Алгоритм парсинга XHTML-страниц браузером" Он верен в любом случае Добавлено через 2 минуты и 29 секунд Хотя и написал бы "Реализация алгоритма парсинга XHTML-страниц браузером" |
| Автор: SelenIT 1.11.2007, 16:54 |
| smartov, правильный подход, но... разве по ссылке написано, что браузеры парсят XHTML по особому алгоритму? То, что разбор XHTML проще, т.к. основан на XML, а не SGML - не в счет, это самоочевидная теория, а вопрос про практику;) |
| Автор: SelenIT 2.11.2007, 05:04 |
| Я проголосовал за то, что "XHTML-режим" - расхожий миф. И могу это аргументировать. А кто может аргументировать, скажем, вариант №2? Точка в теме не поставлена! |
| Автор: SelenIT 2.11.2007, 21:45 |
| smartov, это правила синтаксиса языка, которые лишь позволяют парсить его XML-парсером. Но на практике алгоритм парсинга страницы браузером зависит от Content-type, и специфического "XHTML-ного режима парсинга" не существует, есть только HTML- и XML-режимы. Поскольку большинство XHTML-страниц отдается как text/html, то парсятся они обычным SGML-парсером, специфика синтаксиса (слеши в одиночных тегах и т.п.) отбрасывается как мусор, а на выходе получается добрый старый HTML DOM. С "продвинутыми" Content-type используется XML-парсер (если он есть;) и http://www.w3.org/TR/xhtml1/#C_11. Если я заблуждаюсь - прошу доказательств. |
| Автор: smartov 3.11.2007, 11:48 | ||||||||||
| SelenIT, Но отличия все же есть, и если присмотреться - довольно ощутимые: XHTML предполагает N-ое кол-во заранее определенных элементов (<img>, <div>...ж точнее не совсем элементов - правил, но об этом далее) тогда как сам по себе XML не предполагает никакого заранее предопределённого набора элементов или правил составления элементов (кроме синтаксических). (XHTML ялвяется более строгим - требует валидного XML для облегчения его парсинга) Это все между прочим описано в статье
Таким образом XHTML это нечно среднее между XML и HTML, что в принципе и так ясно из его названия. XML сам по себе - просто структурное ограничение, XHTML же (как и HTML) дополнительно накладывает еще и ограничительные рамки на набор элементов и правила их составления. Ограничения эты описаны, собственно, в файлах dtd, которые можно составить и самому и сделать какой-то еще XHTML-Selenitial например.
Таким образом xml парсеру подобное будет нормально
А XHTML парсер пошлет за такое лесом. А теперь встречный вопрос: а шо ви таки хотели узнать то? Добавлено через 4 минуты и 27 секунд
Конечно, но правила парсинга HTML уже написаны и ты не можешь их варьировать, а для того, чтобы это стало возможно и придуман XHTML. DOM он изначально XML-ный а не HTML-ный. Бразуер занимается тем что постоянно из HTML пытается построить XML-DOM Добавлено через 6 минут
Ну так ты перечисляешь механизмы работы XHTML. Какая разница, как их называть? Для того, чтобы не говорить "эта страница использует такой-то XML паресер" и говорят что "тут XHML-strict" например. |
| Автор: SelenIT 4.11.2007, 03:38 | ||||||||||||
| smartov, Как раз вот это:
Просто есть распространенный миф о том, что буква X в доктайпе - волшебная и сама собой включает строгий режим рендеринга или еще какую-то "секретную фичу" браузеров (и, как, по-моему, показывает и данный опрос, этот миф довольно живуч). А вот насчет режима парсинга я не столь уверен, но полагаю, что XHTML-страницы, отданые как "text/xml" и как "application/xhtml+xml" парсятся браузером одинаково.
Бросьте в меня камень, если они поддерживаются в http://www.w3.org/TR/html401/index/attributes.html. Или если они не поддерживаются в XHTML 1.0 Transitional. XHTML 1.0 - не более чем
О как... вот этого я не знал, спасибо! Но все равно, имхо, такие "мелочи", как автодостройка "воображаемых" тегов (типа <tbody>) и автоперевод в верхний регистр - существенная HTML-ная специфика. Речь шла о том, будет ли эта специфика применяться для XHTML-страниц, и от чего это зависит.
P.S. надеюсь, что хоть существование "XHTML-режима рендеринга" уже никто отстаивать не будет? ;) |
| Автор: smartov 4.11.2007, 15:31 | ||||||
SelenIT,
Если мои представления о том, как делаются механизмы в этом мире верны - то да.
Я думаю пример - любой DTD - читай его, читай маны по нему. Составь свой - подключи к HTML - поимеешь кастомные ограничения/расширения для парсера.
А чем тебя так эта фраза коробит? То что у самолета движок один и меняется только скорость совсем не значит что так уж неверно будет сказать "режим форсажа". Хотя казалось бы - все ж то же самое. Это просто условное обозначение. ИМХО нравится народу так говорить - пусть говорят. |
| Автор: SelenIT 4.11.2007, 16:32 | ||
Вот-вот. К HTML DTD подключается, по-моему, точно так же, как к XHTML. И менять позволяет, на мой взгляд, ровно то же самое. Тогда что меняет волшебная буква X?
Если б, продолжая эту метафору, "скорость" действительно менялась - я бы не спорил. Но в том-то и дело, что в этом "самолете" скорость от волшебной кнопки X не меняется. И вообще ничего не меняется, кроме состояния самой этой кнопки В конце концов, если я действительно настолько заблуждаюсь (что вполне может быть) - почему никто из всех проголосовавших за 3-й вариант до сих пор не выдвинул ни одного аргумента? |
| Автор: nickless 4.11.2007, 19:09 |
| Браузеры по разному парсят HTML и XHTML/XML, и показывают их по-разному, в зависимости от типа (Doctype). Соответственно XHTML документы с корректным doctype-ом парсятся и рендерятся по другому чем скажем HTML без doctype-а. http://en.wikipedia.org/wiki/Quirks_mode http://www.mozilla.org/docs/web-developer/faq.html#layoutmode http://www.mozilla.org/docs/web-developer/faq.html#xhtmldiff |
| Автор: SelenIT 4.11.2007, 22:33 | ||||||
nickless, можно уточнить (а то неоднозначная фраза получилась): парсят по-разному в зависимости от "X/не-X", а показывают по-разному в зависимости от доктайпа? Или от доктайпа зависит как тип парсинга, так и тип рендеринга?
Могу ли я тогда сказать, по этой логике, что HTML 4.01 Strict с корректным доктайпом http://hsivonen.iki.fi/doctype/ в XHTML-режиме? Если да, то в чем его "X"-особенность?
Ну и причем тут тип документа, когда явно написано про MIME-тип контента? Опять же, возьмем конкретный пример: вот эта страница форума (с вполне корректным XHTML-доктайпом) в каком режиме парсится/рендерится? |
| Автор: smartov 4.11.2007, 23:15 | ||||||||||
SelenIT,
X means XML
Ну здрасте. Именно для снижения нагрузки на парсер изначально XHTML и использовали.
Нет не можешь сказать. Потому что при парсинге XHTML парсер хочет (по крайней мере согласно задумке) корректный XML, только без xml декрарации (<?xml...?>) , а при парсинге HTML, даже самого стрикт - не требуется корректный XML. Например: <BODY> - для HTML это нормально, а для XHTML - только <body> Добавлено @ 23:16
XHTML Добавлено @ 23:17 Кстати аж приятно в сырцы глянуть Добавлено @ 23:22
Перечитал тему. Если не ошибаюсь нашел суть обсуждаемого Конечно никакого волшебства не происходит. Это примерно как включить орфографию в ворде - можно будет все равно написать ПРЭВЕД! но он подчеркнет. XHTML отличается и от XML и от HTML, поэтому так иназывается. Он объединяет в себе фичи обеих технологий. От XML - синтаксис, от HTML - технологию предопределенного набора элементов и порядка элементов. DTD - собственно и задает набор и порядок использования элементов. Я думаю, по умолчанию в каждый браузер зашит стандартный DTD для HTML, и когда DTD не обозначается - используется именно стандартный (который в каздом браузере свой ;) ) - это и так называемый Quirks mode. И я думаю что при прописывании DTD кодер (как это выглядит для браузера) просто оверрайдит тот DTD прописанным. Вот и вся магия. Ты открой и посмотри DTD для HTML...strict и для xhtml-1.0 - вот и увидишь разницу. И конечно само подключение доктайпа волшебным образом или не волшебным неважно но меняет механизм парсинга и рендеринга. Не знаю как на счет секретности сей фичи, но мне кажется ее секретность сродни Неуловимому Джо. p.s. если хочешь совсем конкретного ответа "В чем для браузера разниза между HTML 4.01 strict и XHTML 1.0 Strict, то ответ - при рендеринге браузеру ..о..уй, при парсинге во втором случае требуется XML. Всё. Кстати в табличке, на http://hsivonen.iki.fi/doctype/, куда ты кинул ссылу, все это отображено. При рендеринге в обоих этих режимах бразуер пытается включить standards mode. |
| Автор: SelenIT 4.11.2007, 23:42 | ||||||||
smartov, задумывали - может быть, и для этого. Но браузерам на это, как бы сказать помягче... наплевать. По третьей ссылке nicklessа написано, от чего зависит режим парсинга в Мозилле, и это явно не doctype
Я спрашивал о режиме рендеринга уже отпарсенной страницы. Причем тут парсинг?
Вот именно, что "согласно задумке". А я говорю о суровой действительности... И парсится, и рендерится? Увы - парсится она как HTML. И будь там <BODY> браузер это съел бы. А рендерится - так же, как HTML 4.01 Transitional, можно ли это назвать "XHTML-режимом рендеринга" - по прежнему вопрос терминологической дискуссии Валидатор от W3C, увы, http://validator.w3.org/check?uri=http%3A%2F%2Fforum.vingrad.ru%2Fforum%2Ftopic-179771.html&charset=%28detect+automatically%29&doctype=Inline&group=0. Так что, если бы эта страница парсилась в XHTML-, точнее, XML-режиме, то мы ее бы просто не увидели - ее бы "послали лесом"... |
| Автор: smartov 4.11.2007, 23:48 |
| p.s. Начал ты конечно с этим XHTML,... я как начинаешь опять читать доп информацию, и как всегда с открытми технологиями находишь себя через пол часа читающим про что-то что явно предшествовало или опередляло то, о чем хотел почитать, но уже так далеко по смыслу что капец просто |
| Автор: SelenIT 4.11.2007, 23:49 | ||||
Рендеринга - да, но это справедливо как для корректного HTML 4.01, так и для корректного XHTML - правда, при условии что парсятся они в HTML-режиме (под разными режимами парсинга я понимаю то, что описано по http://www.mozilla.org/docs/web-developer/faq.html#xhtmldiff nicklessа). Парсинга - очевидно, нет.
Получается, что эта страница - HTML, раз браузеру по... это самое на 188 ошибок валидации? |
| Автор: smartov 4.11.2007, 23:58 | ||||||
2SelenIT:
Случайно. Рендеринг, как я уже заметил выше, один и тот же.
Ну для начала ты посмотри на те ошибки. Там не синтаксическия XML ошибка, а ошибка именно доктайпа, типа "Ой этот элемент стоит не там где надо". XML-ю на самом деле пофиг как там они стоят, XML валиден при валидном синтаксисе (который уже в этой теме перечислили сто раз, и я снова не буду). Ну а дальше - w3c элемент не зачло как валидный - и понеслась душа в рай - ничего не разберешь где ошибки, а где нет. А вот то, что ошибки могут все равно быть не взирая доктайп стоит и при этом браузер не закричит страшным голосом "что ж ты такое пишешь - иди ка маны читай" - это уже вопрос совершенно другой. Вопрос того, как режим реализован на деле. Я тоже до конца не знаю как браузеры реагируют на эти ошибки, особенно если доктайп предполагает XHTML. Думаю они пытаются их "интеллектуально" исправлять исходя из текущего доктайпа, а потом уже рендерят получившийся документ. Добавлено @ 00:01
[тут был текст] Да Добавлено @ 00:06 (!) Прочитал нафига придумали XHTML! Прошу сюда: http://webmascon.com/topics/technologies/11a.asp Исходя из этого: для современного браузера XHTML и HTML _ничем не отличаются_ Фанфары. Гимн. Занавес. Уфф.... |
| Автор: smartov 5.11.2007, 00:13 | ||||
Конец статьи
Напомнил анек:
|
| Автор: SelenIT 5.11.2007, 00:54 | ||||||
Ошибки синтаксиса XML там тоже есть - из-за "<" в яваскриптах. По стандарту, скрипты должны быть CDATA-блоками. При попытке угодить всем получается http://xpoint.ru/forums/internet/standards/thread/25797.xhtml...
Насколько мне известно, все проще. Если документ отдан как text/html, то браузер парсит его как HTML (автоматом достраивает пропущенные TBODY в table, переводит все в верхний регистр, закрывает незакрытые теги, отбрасывает концевые слеши в <br/> и т.п.), вообще не глядя в DTD. На доктайп он тогда смотрит с единственной целью - выбрать режим рендеринга (Strict или Quirks). А вот если страница отдана как application/xhtml+xml или text/xml, то она парсится как XML, DTD используется по прямому назначению, и в случае ошибки до рендеринга дело просто не доходит, а если ошибок нет - используется Strict mode. Вот только IE до сих пор application/xhtml+xml вообще не понимает... Нет, со стандартами все более-менее ясно, путаница именно с исполнением, и вопрос был именно про него (сабж в реальных браузерах).
При отдаче как text/html (т.е., наверное, в 99% случаев;) - получается, что так... :) |
| Автор: smartov 5.11.2007, 12:17 |
О мой МОСК!!! Добавлено через 21 секунду Да уж. Пока что только HTML ибо нуегонах |
| Автор: SelenIT 5.11.2007, 14:43 |
| Однако ж. Уже после фанфар и занавеса, когда, казалось бы, миф об "особом XHTML-режим рендеринга" должен был быть окончательно повержен, аж трое человек проголосовали за варианты "про рендеринг". Причем, как раньше - без единого аргумента... "Куда катится мир?" © |
| Автор: smartov 5.11.2007, 15:19 |
| SelenIT, а может они именно юзают связку mozilla + application/xml+xhtml Добавлено через 4 минуты и 12 секунд Ну и плюс народ обычно дискуссий (ибо много букаф) не читает - а посему голосует за ответ исходя из того "как оно должно было бы быть, если бы все браузеры такое поддерживали". |
| Автор: SelenIT 5.11.2007, 15:38 |
smartov, этой связкой (да и не только Мозиллой, Опера 7.5 и выше тоже нормально обрабатывает application/xml+xhtml) можно еще кое-как аргументировать четвертый либо пятый вариант, но никак не первых три. Рендерится-то application/xml+xhtml все равно точно так же, как соответствующий HTML c корректным доктайпом. И это, имхо, именно так и должно быть, поскольку функционально XHTML1 эквивалентен HTML4.01 (чьей "reformulation" он является). Вот DOM - таки да, слегонца отличается... |
| Автор: SelenIT 7.11.2007, 04:45 |
Справедливости ради, все-таки нашел я пару-тройку ситуаций, когда один и тот же XHTML-код рендерится по-разному в зависимости от типа парсинга - text/html либо что-то/(xhtml+)xml:
Итого, в сухом остатке, грубо (но жизненно;):
Впрочем, десяти моим оппонентам, проголосовавшим за второй и третий пункт, рано отчаиваться - с точки зрения "как должно быть" у них есть шансы найти на W3C еще подтверждения вроде вышеупомянутого http://www.w3.org/TR/CSS21/colors.html#background... Upd.: похоже, что в Мозилле сабж все-таки существует, и соответствует пятому варианту в моем опросе. "Аштээмэльно-иксэмэльный дуализм" сабжа проявляется там именно в аспекте JS (http://nix.vlz.ru/test/?type=3?)... |
| Автор: SelenIT 13.12.2007, 14:32 |
| Тема неожиданно снова апнула меня по башке Вот http://cssing.org.ua/2005/09/02/min-width-for-ie/ весьма уважаемый CSS-гуру всерьез меня озадачил свидетельством о различии в рендернинге/интерпретации страницы именно от одной лишь замены доктайпа с "иксатого" на "безыксовый". Причем там, где я бы меньше всего этого ждал - в IE (конкретнее, каком-то из ранних билдов 6-й версии), казалось бы, не знакомым с сабжем по определению. Мои настойчивые просьбы вида Прошу всех, кому небезразлична истина, помочь мне ее найти. Нужны примеры вышеприведенных различий - желательно с фрагментами кода и указанием версии ОС и браузера с точностью до билда. Похоже, картина куда запутанней, чем я до сих пор был уверен... если меня не разыгрывают, что маловероятно;). |
| Автор: SelenIT 3.3.2008, 22:38 |
Читал последнюю (январскую) редакцию статьи Henry Sivonen'а про режимы, сопутствующие материалы, много думал... часть своих слов беру обратно. По моему последнему обдуманному мнению,
|
| Автор: smartov 4.3.2008, 10:35 |
| SelenIT, эммм. так как все таки отличить сабж от не сабжа? |
| Автор: SelenIT 4.3.2008, 14:33 |
| smartov, мда, не так-то просто сформулировать... Чувствую, придется про это дело небольшую статейку написать Upd: со статейкой пока застопорился, но попытался переформулировать прошлый пост |