• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • Evangelizace, Validita
  • Nevyhovující pojem

    2. června 2006

    Představte si jeden universální metr na všechno. Máte? Ne? Pro lidský mozek je to patrně příliš nesmyslné zadání. Webmasterův mozek má však jasno. Ten metr má podobu validátoru.

    Pojem validity si mnoho nadšenců pro „webové standardy“ ohnulo takovým způsobem, že by se nad jejich výkladem pozastavilo i samotné konsorcium. Kdyby již nebylo pozastavené několik let.

    Validita je shoda dokumentu s normou.

    — Vilém Málek, všude možně, 2005 až 2006

    Validita není shoda dokumentu s normou. A nikdy jí býti neměla.

    Co to tedy je?

    V souladu se standardem SGML a doporučením XML je validita pouhopouhé dodržení pravidel v definici typu dokumentu. Nic víc. Světe, div se, definice typu dokumentu není norma, definice typu dokumentu je jen definice typu dokumentu.

    Validátoru je šumák, jestli DTD psalo konsorcium nebo jestli si ji postavil sám webmaster. Neřídí se doporučeními HTML a XHTML, ale standardem SGML a doporučením XML. Na tom není nic zvláštního. Je jasné, že na nedostatky, které jsou mimo rozlišovací schopnost DTD, validátor neupozorní.

    Je dokument validní, obsahuje-li takové nedostatky? Jistě, že je. A co třeba následující dokument:

    <!doctype #implied> <html> <body> <marquee>Bacha, já jedu.</marquee> <beruška teček="7"> Ani nevíš, jak to šimrá, když ti lezu po dlani. </beruška> </body> </html>

    Podle ISO SGML se při typu dokumentu #implied kontroluje jen správné zanořování elementů. Zbytek pravidel, která se běžně vyskytují v DTD, se automaticky „domyslí“ podle dokumentu. A ten je pak pochopitelně dodržuje, je validní.

    Lze najít i mnohem pochopitelnější úkaz: Může být dokument validním HTML 4.01, vynechám-li element <title>? Může. Nepotřebujete k tomu dokonce ani upravovat oficiální DTD:

    <!doctype body public "-//W3C//DTD HTML 4.01//EN"> <body> <h1>Stránka beztitulkatá (folium non titulus)</h1> <p>Tento druh stránky žije zpravidla na hůře udržovaných místech webu, kde ji nemůže najít žádný přirozený nepřítel, ani přirozený přítel, prostě nikdo. </body>

    Samotné pozitivní vyhodnocení validity nic neznamená. Je to podobná situace, jako když zatoužíte dostat lednici pod koberec: vezmete kus koberce, dáte ho na lednici, fajn, hotovo. Skvělý pocit, že?

    Správný kamarád „webových standardů“ ctí W3C doporučení, ne pružnou modlu validity. Všimněte si, že v případě HTML 4 se dokonce vyhovující a validní dokument mohou míjet: Validní nemusí vyhovovat a vyhovující nemusí být validní.

    Většina dnešních validních stránek nevyhovuje „webovým standardům“. Kvůli drobnostem a prkotinám. Teoretické důsledky ignorování W3C jsou dobře známé. „Že to funguje tobě a teď, to nestačí!“ Paradoxně ti největší křiklouni prosazující dodržování specifikací je většinou bezostyšně porušují. Z přesně stejného důvodu, jako ti, které kritizují: nečetli je.

    Podtržítkové klišé

    V případě CSS je situace podobná jako u HTML. Tentokrát se ale nemusíte nořit do hlubin SGML a XML, jelikož zdejší validita je specifická vlastnost spjatá pouze se stylopisy. Neodráží soulad s doporučením, ověřuje pouze dodržení pravidel nutných k dosažení validity. To jsou opět dvě různé věci.

    Návrh CSS 2.1 dovoluje, aby vlastnosti ve specifikaci nedefinované začínaly podtržítkem. Zároveň praví, že validní stylopis obsahuje pouze konsorciem definované vlastnosti. Vidíte nějaký nesoulad? Já vůbec.

    Tudíž definice CSS, např. _color:red, je korektní, protože specifikace CSS 2.1 ji povoluje (ať si softwarové validátory, které znají jen starší verzi CSS 2.0, říkají, co chtějí — v tom, že je to chyba, se mýlí).

    — Pixy, Podtržítkový hack, 21. listopadu 2003

    Přimhouříme-li všechna oka, vyhovuje slavný „podtržítkový hack“ současnému návrhu CSS 2.1. Ale validní není, v tom se validátory nemýlí.

    O tom, že CSS může obsahovat nedefinované vlastnosti, jsem se s Honzou Bienem (a jinými) hádal mockrát – jsem přesvědčen, že může.

    — Pixy, komentář pod článkem Konec W3C prostřednictvím psa II., La Trine, 22. března 2005

    Doporučení CSS definuje z důvodů dopředné kompatibility ještě jedno měřítko: dodržení gramatiky. Nedefinovaná vlastnost není validní a za vyhovující ji podle CSS 2.1 můžete označit jen tehdy, začíná-li podtržítkem či pomlčkou. Dodržuje-li jen gramatiku (třeba jako vlastnost filter), neznamená to, že vyhovuje. Sám fakt, že dodržuje gramatiku, by měl zajistit bezchybné rozebrání.

    Jaký to má smysl?

    Každé měřítko by mělo mít svůj účel. Svůj jasný smysl. Jasnou implikaci: dodržíte tohle pravidlo => můžete počítat s tímhle výsledkem. V případě starších doporučení W3C tyto implikace často jasné nejsou a tam, kde jasné jsou, bývají špatně vykládány. Zrovna v případě XHTML je validita zbytečně přeceňována.

    Kvůli tomu, že se veškeré evangelizační úsilí dogmaticky upnulo především na validátor, se z propagace „webových standardů“ stala fraška plná polopravd, legend a mýtů. Přitom je to všechno tak krásně jasné.