Не зная броду, не суйся в воду, или снова о деградации и валидации

Для начала стоит понять, как происходит валидация.

Во-первых, не бывает html-валидации. Бывает валидация SGML. SGML — это средство описания формального синтаксиса языков разметки. При валидации документ пытается соблюсти DTD, который представляет собой формализованное описание синтаксиса.

Во-вторых, валидатор всего лишь указывает вам на ошибки и несоответствия описанному формальному синтаксису. Это необходимо для того, чтобы документ был валидным — это даёт бОльшие шансы того, что данный документ будет корректно воспринят большинством браузеров нынешнего и будушего поколений.

Итак, валидация это лишь инструмент для отлова синтаксических ошибок и/или опечаток. Она может помочь лучше понять синтаксис. Валидатор можно обмануть — никто не запрещает вам, оставаясь в рамках валидности, написать какую-нибудь чушь в alt или href.

Произнесите вслух — «Валидатор — это инструмент». Произнесли? Теперь точно запомните.

Перейдём к деградации.

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

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

Но, если вы пихнёте браузеру последнего поколения нечто, что должно представлять собой xhtml2 исходя из DTD, а оно вовсе не представляет собой xhtml2 (да и вообще никакой DTD не подходит) — это вовсе не изящная деградация, а невалидный документ.


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

Добиться же того, чтобы ваш сайт стал удобнее и доступнее, с помощью валидации удастся вряд ли, впрочем как и с помощью написания своих DTD.

Написано под воздействием тяжёлого синтетического наркотика
+18
30 мая 2007, 18:47
7
jahson 31,9

комментарии (45)

–13
iPasha #
я первый :)
+1
PeterOdUa #
К сожалению имею дело с ИЕ и не уверен, что эта фраза верна:

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

Некоторые, абсолютно корректные консрукции языка, ИЕ воспринимает настолько по-своему, что приходится взамен использовать некорректные.
+1
Wild_Deer #
Если б все браузеры одинаково хорошо держали CSS, проблем бы не было. Стоит согласиться, что IE в этом плане особо отжигает.
+1
dimaniko #
Позволю себя процитировать по этому поводу. ;]

http://dimaniko.livejournal.com/55944.ht…
+1
dimaniko #
Чорт, картинка не вставилась. Только ссылка, сорри.
+2
pepelsbey #
Боже, ну причём тут валидность HTML? Вы же пишете для оформления страницы CSS, вот его IE и обрабатывает неправильно.
0
jahson #
Я написал «бОльшие шансы». То, что УЁ воспринимает конструкции языка по-своему, значит то, что он не поддерживает указанный тип документа в полном объёме. Это если мы говорим о html.
+1
Chupa #
"Изящная деградация" - ухо режет.
+1
tom #
Согласен. Не понятно, почему не использовать русское «отказоустойчивость».
+1
dimaniko #
Graceful degradation далеко не полностью пересекается с «отказоустойчивостью».
+1
Raesvelg #
Тут скорее forward compatibility через fault tolerance. В русском языке достаточно короткого определения не найти :(
+3
pietrovich #
имхо, уместнее было бы использовать "деликатная деградация"...
типа как аккратная ампутация - что спасти не сможем, то отрежем, но ни капельки лишнего! :)
+1
redcase #
деликатная ампутация
+1
Spunk #
Никогда не пользовался валидаторами.
Просто, во время верстки сайта, открываю макет в нескольких популярных браузерах, и слежу за тем, чтобы сайт одинаково хорошо смотрелся во всех них.
НЛО прилетело и опубликовало эту надпись здесь
+1
denver #
jahson, спасибо за эту статью, проголосовал за, потому что нет смысла спорить — валидация не мешает. И вы правильно заметили даже позволяет отловить всякие устаревшие методы верски и атавизмы.

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

Новичкам же, конечно, рекомендую пользоваться валидатором и стараться писать валидно. А на тот невалидный код, который вы сами придумали и сами сознательно внесли нужно просто не обращать внимания. Да, он НЕ будет поддерживаться новыми браузерами, ну и что? Ведь он и сегодняшними браузерами не поддерживается, ведь так и задумывалось. Вреда от него не будет по описанным мной причинам, а польза от него есть.
+1
cooper #
Скажите, а зачем тогда нужен стандарт и такая организация как W3C?
+2
denver #
Хороший вопрос. Я полагаю что W3C нужен прежде всего тем кто создает движок рендеринга, т.е. создателям браузеров. Верстальщикам во вторую очередь. Объясняется просто - с одной стороны, если W3C не может диктовать монополисту то кому нужны его стандарты, а с другой стороны если бы мог диктовать, то скажем устаревшие и невалидные <font> уже давно бы не стали поддерживаться ВСЕМИ браузерами, а раз так то и верстальщики их не использовали бы.
0
cooper #
Надо рассуждать не с позиции кто виноват, а с позиции что делать чтобы ситуация нормализировалась и все стороны пошли по пути соблюдения стандартов. Понятно что такая ситуация довольно утопична, но в наших силах этому способствовать. Просто соблюдая стандарты и верстая валидный код. Когда этот тренд будет подхвачен большинством из тех кто делает контент, тогда и разработчики начнут двигаться в сторону соблюдения стандартов и массового derecated всего старого и ненужного. К чему сейчас всё и идёт.
0
GremniX #
Стандарт, это прежде всего эталон
+1
jahson #
Спасибо и вам за саттью и за спасбо ;)
Я против кода, который не будет поддерживаться браузерами вообще. По-моему, required присутствует в какой-то спецификации (xforms что-ли), поэтому его использование вполне допустимо и укладывается в изящную деградацию. А многие, прочитав вашу статью, начнут лепить что попало, думая что это вполне нормально. Но мы-то знаем, что деградация в этом случае не причём, это скорее использование устойчивости к ошибкам.
0
yakovis #
Очень верная реплика.
0
Mourner #
Но когда стоит вопрос о том добавлять ли свои (заметьте, свои) аттрибуты в код некоторые ответят катекорически "нет". Вот это слепое поклонение валидатору и следование тотальной "кошерности"


В этом вы глубоко заблуждаетесь. Многие серьёзные разработчики против использования собственных атрибутов вовсе не по причине невалидности и следования каким-либо трендам. Настоящие причины я уже затронул в соседней записи.
0
Zigzag #
в той самой статье, на которую вы сослались в комментах есть сообщение о том, что юзайте name spaces и вводите свои атрибуты и все будет валидно и в шоколаде.
+6
cooper #
Что вы так к валидатору пристали? Есть чёткий набор стандартов, есть инструмент — валидатор — для проверки соответствия определенному стандарту. Невалидный код, это не соответствие стандарту. Какие ещё могут быть рассуждения?

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

Мне жаль, что многие так наплевательски относятся к одной из самых главных вещей — стандартам. Всем хочется простоты и быстроты, при минимальном использовании серого вещества. Давайте так-же будем относится к RFC: «Ай, работает, да и хрен с ним» и посмотрим что станет с индустрией.
+3
kvas #
Уверен, что можно и по ГОСТам и по СНиПам построить дом, который развалится :)

В остальном согласен, печально что все забивают на стандарты, но ситуация улучшается, пожалуй можно надеятся, что когда-нибудь будут всё-таки у нас сайты и браузеры, сделанные согласно стандартам.
+1
cooper #
Конечно можно, никто и не спорит :)

Странно что на стандарты забивают очень избирательно. Я тоже надеюсь что в скором инерция мышления иссякнет и все встанет на свои места.
+1
pietrovich #
ГОСТы и СНиПы не регулируют вопрос о том, куда именно нужно вбить гвоздь, и какого он должен быть размера, чтобы повесить на него картину ;)
подумайте над этим...
0
cooper #
Зря вы так — регламентируют. Например что нельзя вбивать гвозди рядом с проводкой, что нельзя вбивать гвозди без деревянных дюпелей в определенные виды бетона и т.д.
0
pietrovich #
серьезно? я всю жизнь считал что это нам диктует здравый смысл :)
ну да бог с ними с ГОСТами и СНиПами, алегория вроде ясна, а то что она оказалось не совсем корректной спишем на мою необразованность - ну не стоитель я, не стоитель... :)
0
cooper #
Да не надо ничего списывать: солнце светит, жизнь прекрасна, пиво производят, холодильники пока работают, стандарты пишут! :) Что ещё для счастья надо? :)
+2
rossomachin #
Я вам, как инженер-конструктор, скажу так: в технике регламентируется всё. Абсолютно всё. Если не ГОСТом, то ОСТом, либо другим руководящим документом. Сделано это всё не просто так, и именно так со временем должно быть и в веб-индустрии.
+1
jahson #
Я пристал к валидатору по причине того, что в последнее время его возводят в ранг фетиша, зелёненькой кнопочки «валидно!», хотя на самом деле он - всего лишь инструмент для проверки вашего кода.
0
cooper #
Т.е. по сути вы против технологических стандартов в области языков разметки? Вы же не «возводите в ранг фетиша» синтаксический анализатор вашего любимого языка программирования, а просто делаете так, чтобы он давал компилятору собрать код, следую стандарту языка программирования? Вот и валидатор делает тоже самое.

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

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

Я надеюсь что скоро придумают режим «Complete Strict», который будет подразумевать запрет отображения содержимого до того момента, пока он не будет полностью соответствовать стандарту.
+1
jahson #
Т.е. по сути вы против технологических стандартов в области языков разметки

Вы это откуда взяли? По-моему такого я говорить не мог.
0
cooper #
Я предположил, если это не так, то я очень рад :)
–3
kiev #
Сайты надо делать на Drupal
0
huh #
DTD описывает не формальный синтаксис, а структуру. Документ, соответствующий синтаксису - well formed. Документ, соответствующий DTD (схеме) - valid. Документ, содержащий элемент, не описанный в DTD будет well formed, но не будет valid.

Да о чем вообще говорить: rss только начал вылезать из утробы из-за того, что огромное количество вебмастеров до сих пор не умеют генерировать хотя бы well formed XML, из-за чего авторам ридеров приходится изголяться.
0
jahson #
Чем ваша структура отличается от синтаксиса?

Про well-formed я вообще молчу. Это для устойчивости к ошибкам.
0
huh #
Это не "моя" структура, я озвучил принятые термины, которые в этом назидательном топике смешаны в одну кучу.

http://en.wikipedia.org/wiki/XML#Well-fo…
http://en.wikipedia.org/wiki/XML#Valid_d…
0
jahson #
Так и знал. Задам вопрос по-другому: чем эта структура отличается от синтаксиса (в случае SGML)?

Плюс, вам стоит заметить, что я не затрагивал темы XML, а разговаривал о SGML.
И ссылок тоже дам:
http://xml.coverpages.org/chahuneauXML.h…
http://en.wikipedia.org/wiki/Document_Ty…
0
huh #
Упс. Я не прав. Глаз замылен XMLем.
–1
MaGIc2laNTern #
Я все свои проекты делаю валидно. Я уважаю Консорциум.
НЛО прилетело и опубликовало эту надпись здесь
0
jahson #
Представьте себе, слышал и ещё когда. Но думаю, что эта затея с переключением в quirks режим - просто ужасна. Это создаёт проблемы начинающим разработчикам и излишне усложняет сам процесс. Плюс, это заставляет людей думать, что doctype - это переключатель режимов, что ошибочно.

Лично я давно думать забыл о quirks режиме.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.