Добре оформен, валиден, стандартен

Струва ми се, че далеч не всички уеб администратори, които поставят значки на сайта си за валидния код на страниците си, ясно знаят какво означава това и защо е необходимо (е, освен за показност, разбира се :-)).

добре оформени

„Добре оформено“ е доста трудно за кратък превод на български. Може би фразата "синтактично правилно" предава смисъла най-точно. Но тъй като няма общ термин, ще продължа да пиша английското име (което между другото се чете нещо като "vel-formd").

На първо място, ще кажа, че общоприетите документи с тагове в ъглови скоби ( >) са описани от стандарта SGML. Езикът HTML просто е изграден на негова основа. Правилата на SGML са доста богато украсени и дават много свободи, които правят писането на код на ръка много по-лесно. Но наличието на свободи увеличава вероятността от грешки и също така значително усложнява машинния анализ: има много опции за обработка.

За да решат тези проблеми, те излязоха с концепцията за добре оформени: набор от по-ясни и по-строги правила за компилиране на документи с етикети. Тези правила са същността на това, което се нарича "XML". С други думи, XML е документ с етикети, форматиран според строги правила за синтактична коректност. Формално има много от тези правила - цяла спецификация, но на практика за човек, запознат например с HTML, това се свежда до такива прости неща:

Ако се вгледате внимателно в правилата за правилно оформяне, те не казват нищо за наличието или отсъствието на някакви специфични елементи. Тоест, добре оформеността е свойство на всеки XML документ и може да се провери, без да се знае нищо за това какъв документ е.

Валидност

XML и SGML не са, най-общо казано, езици. Те не дефинират никакви конкретни етикети със специфично значение, целта им е да дадат общосинтаксис за други езици (по-твърд в случая на XML и по-свободен в случая на SGML). И вече тези езици, които дефинират специфични тагове, добавят свои собствени специфични правила за своите специфични тагове към общия синтаксис на основния си език.

Между другото, HTML и XHTML са по същество два варианта на един и същи език, но първият използва SGML синтаксис, а вторият използва по-твърд XML.

Така че валидността е синтактичните правила за коректността на конкретни XML и SGML езици.

Всъщност не само XML и SGML. Всеки език има концепцията за валидност - съответствие с правилата на синтаксиса.

В маркираните езици правилата за валидност дефинират неща като:

  • Име на коренния елемент
  • Елементи, разрешени в рамките на елемент
  • Валидност на текст в елемент
  • Задължително наличие на елемент
  • Задължително наличие на специфични атрибути на елемента
  • Декриптиране на низови обекти (тип → е Unicode символ с код 8594 - стрелка надясно). Като напомняне, основният XML синтаксис дефинира само < , > , & И " .

Например езикът XHTML определя, че коренният му елемент трябва да бъде елемент (както се изписва). И вътре в него може да има още два елемента: и (и само те). Е, и така нататък.

Правилата за валидност могат да бъдат написани формално. За това се използва DTD - Определение на типа документ. Това описание е приложено към документа под формата на дълъг ред-заклинание, което обикновено идва в самото начало и започва с . Уебсайтът на W3C има списък с DTD за повечето от маркирани езици, използвани в мрежата.

И така, според тези DTD се извършва автоматична валидация (проверка на валидност) на документите. Валидаторът разглежда DOCTYPE в началотодокумент и го проверява спрямо правилата на този език.

Съответствие

Валидността на кода обаче все още не означава пълно съответствие на кода с езиковата спецификация. Правилата за валидност дори не съставляват по-голямата част от него. Много повече правила са формулирани в спецификацията под формата на прост човешки език (макар и не толкова прост, честно казано).

Така че документът може да бъде признат за съответстващ на стандарта само ако отговаря на всички изисквания на спецификацията, включително тези, изразени на естествен език. Това свойство се нарича "съответствие" - което се превежда като "съответствие".

С други думи, един документ може да е напълно валиден, но може изобщо да не отговаря на стандарта.

За да не изсмуквам пример от пръста си, ще се позова на Hixie, който специално предложи тест по тази тема, в който даде валиден документ, в който обаче имаше 4 ясни грешки за несъответствие с HTML спецификацията.

За тези, които се интересуват, отделете няколко минути, за да видите дали намирате тези 4 грешки. Включих отговорите в края на статията.

Най-големият проблем с това "съответствие" е, че очевидно е напълно нереалистично да се провери машинно. Така че не търсете официални "съвместими XHTML" бутони на W3C. Това е самопроверка.

Валидност в съвременната мрежа

Първо, обикновено не може да се разчита на валидирането на конкретна страница. Ако е бил валиден вчера, днес лесно може да спре да е валиден.

С други думи, валидирането не е състояние, а процес, който изисква внимание. Честно казано, трябва да се каже, че има сайтове, където софтуерът е разработен доста добре и се справя с всички подобни ситуации (например блогът на Саймън Уилисън -винаги валиден, добре оформен XHTML). Но има малко от тях.

Въпреки това, това състояние на нещата с валидирането, очевидно, не ни пречи да се разхождаме из Интернет. Факт е, че всички потребителски браузъри просто плюят на валидирането :-). Освен това го правят напълно "законно":

Второ, както казах по-горе, валидността не означава съответствие със спецификацията. Това е само част от него. Ето защо е невъзможно да се правят някакви далечни заключения за един документ въз основа на факта, че той е валиден.

Така че, когато добавяте бутона „валидно нещо“ към страничната си лента, не забравяйте, че вашият документ трябва не само да е валиден, но и „съответстващ“ – да отговаря на спецификацията.

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

Бонус: CSS валидиране

В допълнение към валидните (X)HTML бутони има и валидни CSS бутони. И ако HTML валидирането, както казах по-горе, не е най-важното нещо, но поне е разбираемо, то CSS валидирането е странен звяр.

Но CSS има различна идеология, като цяло в него няма концепция за "версии" на езика. Идеологията е, че езикът непрекъснато се усъвършенства и не непременно изцяло, а на блокове. Например CSS Level 2 сега е в процес на замяна с CSS2.1, което елиминира много неща, които не са били внедрени или са били лошо внедрени. CSS ниво 3 е колекция от модули, някои от които са почти официални насоки, а други са мъртви чернови.

Но валидаторът на W3C проверява за нещо повече от основен синтаксис. Той ругае думи, които не са в CSS2, въпреки че езикът е специално проектиран да позволява непознати думи и неправилнипредлага.

Това означава, че ако искате да използвате свойството opacity от CSS3, тогава валидаторът ще се закълне, въпреки че не сте направили нищо ужасно и не сте счупили нищо. Дори потенциално.

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

Отговори на теста

Коментари: 13

Отново примерът е напълно валиден. Всичко, което е пропуснато там, са само онези свободи, които SGML позволява, за които писах в параграфа за добре оформеността.

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

Твърдение: XHTML дефинира два режима за анализатора: валидиращ и невалидиращ. Всички браузъри действат като невалидиращи парсери, така че XHTML изобщо не проверява за валидност. не точно. Напълно вярно е само за IE. Но други съвременни браузъри (Firefox, Opera и т.н.) избират типа на анализиране в съответствие с MIME типа на документа, деклариран от уеб сървъра (Content-Type). Всички документи (HTML и XHTML), обслужвани катотекст/html, наистина подлежат само на „либерален“ анализ. Но всички документи, декларирани от сървъра (http://www.rfc-editor.org/rfc/rfc2616.txt) катоapplication/xhtml+xml ще бъдат обработени съгласно всички XML правила без никакви отстъпки. Обслужване на XHTML 1.0 XHTML медийни типове Проверка на HTTP заглавки

Не, ти говориш за нещо друго малко. Тук не говоря за text/html, нопо-специално за реалния XHTML, по-специално за случая, когато се изпраща с правилния MIME тип. В този случай това наистина е XML и се анализира в по-новите браузъри от XML анализатора. И сега в самия XML има тези два режима на анализиране - валидиращ и невалидиращ.

И този невалидиращ е същият официален, а не либералния, който анализира text/html. Той проверява за добре формиран XML, но не проверява за съответствие с DTD.

Нищо не разбрах.

Благодаря за статиите, чета ги с удоволствие!

Страхотни статии! Не съм виждал по-добър урок за правилното оформление.

Иване, ще публикувате ли статиите си в печатен вид?

Едва ли. Не намирам време. Да, и тук също се четат добре :-)

колко трудно се оказва, добре че не съм програмист. Така че току-що се запознах с HTML, но нещо остана в статията ви (не ровя, за живота си).

Но работата е солидна и коректна. Надявам се, че експертите ще го оценят. Но сега повече или по-малко разбирам какво е валидност.

Успех и творчески успех!

наистина е много готино всичко е написано тук, и човешки разбираемо.

Благодаря ти. изглежда е абониран за RSS, аз съм статиите в този блог. но беше препоръчана връзка от xpoint.ru към статията.

Всичко е много близко по дух.

Като цяло е разумно и адекватно. Ако е възможно, ще дам препратка към паралелен изглед.