• O validátoru
  • Novinky
  • Dokumentace
  • Integrace do prohlížečů
  • V čem se liší český validátor od oficiálního?

    Rozdíly ve vyhodnocení dokumentů

    Český validátor občas vyhodnotí stránku jinak než jeho oficiální předloha. V případě níže uvedených situací je tato neshoda záměrná, neboť jde o záplaty známých chyb a nedostatků.

    Volba parseru při MIME typu „text/html“

    Oficiální W3C Validátor rozebírá všechny HTML dokumenty s typem „text/html“ nejprve jako XML. Jakmile najde Doctype, mrkne se, jestli to není jeden ze známých XML Doctypů a podle toho znovu rozebírá dokument buď jako HTML, nebo jako XML. To je, slušně řečeno, prasárna. Žádný známý prohlížeč se takto naštěstí nechová, všechny v „text/html“ vidí jen a pouze HTML.

    Důsledkem poklesku validátoru je, že autorům procházejí syntaktické nesmysly, s nimiž se pak musí vypořádávat opravné mechanismy prohlížečů. Velice populární závadou je přebytečné lomítko v prázdných elementech. V kódu se to pak hemží značkami <img />, <hr />, <meta /> nebo <link /> — u oficiálního validátoru je zelená hláška jistá, u vyhovujícího rozhodně ne. Kromě lomítka si W3C Validátor neprávem vynucuje i některá další pravidla XML neplatící v HTML, čímž činí z procesu validace frašku. K čemu vám je taková validita, když se prohlížeče mají řídit jinými pravidly, než podle kterých validujete?

    V XML se oproti HTML změnila i syntaxe komentářů a instrukcí pro zpracování (známých též jako procesní instrukce), díky čemuž může tentýž kód při XML pohledu obsahovat naprosto jiná data než při HTML pohledu. Zdaleka nejde jen o to podivné lomítko. Vzniká obousměrně hluché místo. Tam, kde W3C Validátor uvidí validní XHTML 1.1, může prohlížeč vidět překřížené a nedefinované elementy. A naopak: tam, kde nástroj konsorcia křičí „not valid“, může být všechno v pořádku.

    V oficiálním validátoru je tato chyba nahlášena od 15. června 2005 jako Bug 1500, v českém je opravena od 15. března 2007.

    Typová kontrola atributů

    Validátor by se měl při svém rozhodování o zelené/červené hlášce řídit definicí typu dokumentu. Formát DTD je ovšem docela starý a není v něm možné plně popsat požadavky na atributy definované ve W3C doporučení, proto vám se zelenou hláškou může oprávněně projít i nesmysl jako <img src="" alt="" width="hodně široký">. V DTD nemůže být hodnota atributu width omezena.

    Český validátor od 10. ledna 2008 provádí na zdrojích s MIME typem „text/html“ tzv. „typovou kontrolu atributů“ — kontroluje řadu více či méně známých požadavků z HTML specifikace a v případě nesouladu hlásí varování. Na pochybení je tedy upozorněno (vlk se nažere), ale barva hlášky zůstává beze změny (koza zůstane celá).

    Konkrétní podrobnosti včetně ukázky najdete v článku Lukáše Havrlanta.

    Neplatné znaky v dokumentu

    W3C Validátor na neplatných znacích v daném kódování selže. Jeho výstup je pak informačně chudý. Na jednu stranu říká „Failed validation“, na stranu druhou „Sorry! This document can not be checked“ a postěžuje si na neplatné znaky na řádku tom a tom. Neříká, že dokument není validní, protože vůbec nehledá chyby parserem. Není to sice chyba, ale z uživatelského hlediska jde o jasný nedostatek.

    Český validátor nahlásí neplatné znaky jako chyby — včetně přesného určení pozice. Validační proces následně proběhne předpokládajíce místo neplatných znaků otazníky. Uživatel tak získá mnohem lepší představu o tom, jak vážné to s dokumentem je. Samozřejmě (jako vždy) může zafungovat kaskádový efekt: dříve nahlášené chyby mohou ovlivňovat ty později nahlášené. U HTML/XHTML dokumentů však žádné dramatické nepochopení struktury kvůli kódování nehrozí, neboť si veškerá klíčová slova vystačí se základní znakovou sadu.

    V českém validátoru je tento nedostatek opraven od 5. dubna 2007.

    Výchozí kódování pro MIME typ „text/html“

    HTTP protokol říká, že výchozí kódování je „iso-8859-1“. Specifikace MIME typu „text/html“ naopak explicitně tvrdí, že žádné výchozí kódování pro HTML neexistuje, a proto se musí respektovat buď charset v hlavičce Content-Type, nebo tentýž údaj vyčmuchaný ze samotného dokumentu.

    V praxi různé verze prohlížečů volí výchozí kódování pro HTML podle země původu nebo podle nastavení systému. České verze prohlížečů mívají přednastavena výchozí kódování „windows-1250“ nebo „iso-8859-2“. Není mi známo, že by některý prohlížeč považoval unicodovou sadu „utf-8“ za výchozí — s výjimkou W3C Validátoru, což v kombinaci s jeho chováním na neplatných znacích tvoří občas zbytečně smrtelnou kombinaci.

    Český validátor považuje za výchozí kódování „iso-8859-2“. Jelikož má toto kódování nevyužité znaky na stejných místech jako „iso-8859-1“, je výsledek validace v souladu s HTTP specifikací.

    V oficiálním validátoru je tato chyba nahlášena od 26. října 2002 jako Bug 40 a tentýž den zároveň prohlášena za neplatnou. V českém je opravena od 5. dubna 2007.

    Špatná hodnota atributů typu IDREF

    Hodnota atributů typu IDREF (typicky for u elementu <label>) musí být ID existujícího elementu. Pokud není, W3C Validátor ukazuje pouhé varování a dokumentu je dovoleno projít se zelenou hláškou.

    V českém validátoru je tato chyba opravena od 6. srpna 2007.

    Nedeklarované atributy xmlns:*

    Vývojáři obhospodařující W3C Validátor se rozhodli ignorovat část specifikace a odfiltrovat z výjezdu chyb hlášky týkající se nedeklarovaných atributů xmlns:*. Odvolávají se na jmenné prostory, při čemž zapomínají, že validita tak, jak je definovaná v XML 1.0, se jmennými prostory nepočítá. Záměrně propouštějí nevalidní dokumenty se zelenou hláškou.

    Doporučení XML 1.0 definuje atribut xml:lang, jemně se při tom odvolává na jmenné prostory, ale výslovně říká, že má-li být dokument s tímto atributem validní, musí být jako každý jiný deklarovaný v definici typu dokumentu. Validátor, který by ho nenahlásil, by byl chybný. W3C Validátor ho též hlásí, pokud je někdy použitý a není deklarovaný (v XHTML 1.0 a 1.1 všude je deklarovaný). Pro atributy xmlns:* platí pochopitelně totéž. Atribut nedeklarovaný v DTD musí být nahlášen, dokument není validní. Tečka. Žádné exkluzivní pravidlo pro validátory nikdo nedefinoval.

    V oficiálním validátoru je tato chyba od 25. července 2007, v českém nikdy nebyla.

    Missing xmlns attribute for element html. The value should be: http://www.w3.org/1999/xhtml

    Tuto chybovou chybnou hlášku na vás vyplivne nová verze W3C Validátoru, pokud při deklarovaném XHTML neuvedete atribut xmlns na elementu <html>. Sice W3C doporučení XHTML 1.0 a 1.1 říkají, že dokument není vyhovující, neobsahuje-li tento atribut, ovšem to neznamená, že není validní. Mezi vyhověním a validitou je rozdíl — validita je strojově ověřitelná pomocí normativního postupu a jasně definovaného formálního předpisu (DTD), kdežto vyhovění je popsáno slovně a zpravidla je k jeho posouzení potřeba myslící bytost (obvykle člověk). V DTD pro XHTML 1.0 i 1.1 je atribut xmlns deklarovaný jako fixní, tudíž jej validní dokument nemusí explicitně uvádět. V oficiálním validátoru je nyní našroubovaná nadstandardní podmínka mimo rámec validity, logicky by tedy neměla ovlivňovat výsledek „Valid“ / „Not Valid“. Přesto jej ovlivňuje.

    Pokud lidé z W3C touží změnit standardizovaná pravidla, nechť tak učiní obvyklou oficiální cestou — ať aktualizují specifikace a normativní DTD. V opačném případě se pouští do nesmyslné války mezi validátorem a specifikací, ze které místo řádu vzejde bordel.

    V oficiálním validátoru je tato chyba od 25. července 2007, v českém nikdy nebyla.

    Dokumenty s Doctype deklarací XHTML 1.1 jsou validované proti skutečné DTD XHTML 1.1

    Navzdory obecnému přesvědčení existují dvě různé definice typu dokumentu pro XHTML 1.1. Jedna je rozporcovaná do více jak dvaceti malých souborů (modulů), druhá je sloučená v jednom tlustém souboru. Obě měly vyjadřovat přesně tatáž pravidla, jejich různost vznikla vinou nepozornosti pracovní skupiny, která specifikaci utvářela.

    Dokumenty užívající XHTML 1.1 zpravidla mívají tento <!DOCTYPE>:

    <!DOCTYPE
     html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

    Podíváte-li se na adresu http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd, najdete tam onu modulovou verzi DTD. Oficiální validátor podle ní nevaliduje, řídí se vlastní kopií sloučené DTD (xhtml11-flat.dtd), čímž de facto ignoruje přání autora stránky. To je fuj. Prohlédněte si popis jednoho z rozdílů v DTD od kkl2401 a od Ondřeje Kučery.

    V českém validátoru je chyba opravena od 15. března 2007.

    MIME typ u souboru načítaného z disku

    Uploadujete-li soubor z Internet Exploreru 6 pod Windows XP se Service Packem 2 nebo z Internet Exploreru 6 či 7 pod Windows 2003 se Service Packem 1, pošle váš prohlížeč z nějakého prapodivného důvodu špatný MIME typ, konkrétně „text/plain“ (používaný jinak pro prostý text). Oficiální validátor odmítne soubor s tímto typem validovat (Bug 838). Sice tím žádnou specifikaci neporušuje, ale jelikož je tento problém dobře zdokumentovaný, je taková tvrdohlavost zbytečná.

    Český validátor vynaloží nadstandardní úsilí k rozeznání skutečného MIME typu dokumentu, pokud mu dorazí jako „text/plain“: tipne si podle přípony souboru. Odhadnutý MIME typ je pak brán jako uživatelem vyžádaný a výsledek validace je vždy pouze předběžný.

    Kromě popsaného problému s Explorerem bývá u W3C Validátoru ještě jeden problém s XML soubory načítanými z disku: řada prohlížečů posílá MIME typ „text/xml“, který má „od přírody“ kódování „us-ascii“ a to mu nevymluví ani XML deklarace. Uživatel prakticky nemá možnost tohle ovlivnit, takže ve W3C validátoru pak většinou vidí jen „Sorry, ale máš tam neplatné znaky“. Proto český validátor v zájmu získání smysluplných výsledků v tichosti přenastaví MIME typ na „application/xml“.

    V českém validátoru je tento nedostatek opraven od 10. dubna 2007.

    Uživatelsky žádaná výměna Doctype či kódování za sama sebe

    Nastavíte-li ve validačním formuláři typ dokumentu nebo kódování tak, že se shoduje s údajem zjištěným při autodetekci, prohlásí W3C Validátor kontrolovaný dokument za „tentatively valid“ (předběžně validní). Při tom doplní blábol: že dokument nebude validní, dokud neprovedete patřičné změny. Český validátor si předběžný výsledek s nepředběžným neplete.

    V oficiálním validátoru je tato chyba nahlášena od 27. října 2004 jako Bug 48, v českém je opravena od 5. dubna 2007.

    Uživatelsky žádaná výměna Doctype v dokumentu s XML deklarací

    Nemá-li XML dokument deklaraci typu dokumentu a má-li XML deklaraci, pak ve W3C validátoru při uživatelem žádaném doplnění Doctypu je tento vložen na úplný začátek dokumentu, tedy i před XML deklaraci. Český validátor vkládá Doctype vždy těsně před kořenový element.

    V oficiálním validátoru je tato chyba nahlášena od 1. září 2004 jako Bug 857, v českém je opravena od 10. dubna 2007.

    Ostatní změny a jiná komunikace

    Příjemné drobnosti

    • Téměř všechny chybové hlášky jsou přeloženy do češtiny.
    • Všechny chybové hlášky s bližšími popisy jsou kompletně přeložené do češtiny, popisy obsahují výhradně české odkazy napomáhající odstranit chybu.
    • Časté chyby jsou opatřené výstižnějšími popisy, které místo toho, aby zkusmo hádaly, co asi chybu způsobuje, poradí konkrétní a zpravidla přímočaré řešení. Názorná ukázka.
    • Přímý vstup má nastavitelný MIME typ zdroje — uživatel může zvolit, zda je kód HTML nebo XML.
    • V případě, že dokument validní není, je přidán na začátek titulku stránky počet chyb.
    • Při zaškrtnuté volbě zobrazení validovaného kódu jsou místa, k nímž se hlášky vztahují, barevně zvýrazněna. Názorná ukázka.
    • Kromě zobrazení zdrojového kódu umí validátor ukázat i HTTP hlavičky.
    • Validátor si všímá HTTP hlavičky Vary, která upozorňuje cílové zařízení, že se výstup může lišit v závislosti na HTTP hlavičkách dotazu.
    • Uživatel má možnost upravit HTTP hlavičky dotazu a může tedy důkladně proklepnout mnoho rozvětvených verzí dokumentu na zadané URL.
    • Není zde zaškrtávátko „validovat chybové stránky“. Český validátor na chybovém kódu nebrečí, validuje hlava nehlava — a pak chybový HTTP status ukáže v seznamu .
    • Zelené hlášky jsou tu trochu zelenější :-)

    Nepříjemné drobnosti

    • Chybí osnova. Nikdo ji nepoužíval.
    • Chybí HTML Tidy.
    • Chybové hlášky občas nectí stoprocentně terminologii SGML. Místo „chybí VI oddělovač“ užívám srozumitelnější „chybí rovnítko“, ačkoliv při speciální SGML deklaraci může být VI oddělovač i něco jiného než rovnítko.

    Chystané drobnosti

    • Přidělám (asi) validaci celého webu — pomocí průlezu odkazů.
    • Udělám anglickou verzi validátoru.
    • Vyrobím vlastní český CSS validátor.

    Rozdíly oproti starší verzi 0.74

    Následující popis rozdílů se vztahuje pouze ke starší verzi W3C Validátoru. V srpnu 2007 vydalo konsorcium novou verzi svého nástroje, která mírně snížila náskok české konkurence.

    Drobnosti

    • Při validaci přímého vstupu je ve výsledku textové pole s vyplněným validovaným dokumentem — lze opravit chyby a poslat kód k validaci znovu, bez vracení se na úvodní stránku.
    • Ikonka favicon obarvená podle výsledku — v moderních prohlížečích ihned vidíte na oušku tabu barvu hlášky.
    • Stránky se rychleji načítají (aspoň doufám), neboť neobsahují šílenou kombinaci šesti vnořených stylopisů. Viz článek Na co stránka čeká u Yuhůa.
    • Odkazy v obsahové části stránek jsou vždy podtržené.

    Sekvence znaků „--“ v komentáři v XML

    XML dokumenty obsahující „--“ v komentáři nejsou ani validní, ani správně sestavené (well-formed), takže je každý vyhovující XML nástroj odmítne. Oficiální validátor je ovšem prohlásí za validní. Ukáže zelenou hlášku a pod ní pouze nenápadné varování. Dotyčné „varování“ má být „chyba“ a hláška má být krvavě červená. V českém validátoru červená je.

    V oficiálním validátoru je tato chyba nahlášena od 17. května 2005 jako Bug 1453. V českém je opravena od 20. května 2007.

    Bílý znak mezi sekvencí znaků „--“ a „>“ na konci komentáře v XML

    Podobně jako u předchozí chyby — W3C validátor opět hlásí jen varování, přestože jde o hrubé porušení doporučení XML 1.0. Každý vyhovující XML nástroj na takovém dokumentu selže.

    V českém validátoru je chyba opravena od 20. května 2007.

    Oddělovače („&“, „<“) jako znaková data v XML

    Pokud v XML dokumentu za ampersandem či menšítkem neuvedete jméno entity či elementu, stihne vás krutý trest. Takový dokument totiž není ani validní, ani správně sestavený (well-formed). W3C Validátor ovšem ukáže zelenou hlášku s drobným varováním. Český nikoliv.

    V českém validátoru je chyba opravena od 20. května 2007.

    Bílé znaky před XML deklarací

    Před XML deklarací v XML dokumentu nesmí být vůbec nic. Ani bílé znaky, tj. ani mezery, konce řádků a tabulátory. Jde o velmi zákeřné pravidlo, neboť část XML nástrojů takovou (z definice fatální) chybu ignoruje a část na ní smrtelně selhává. Oficiální validátor si jí vůbec nevšimne, český ji poctivě nahlásí.

    V českém validátoru je chyba opravena od 20. května 2007.

    Chybějící středník u entity v XML

    Nekončí-li odvolání se na entitu středníkem, W3C validátor zahlásí varování a dokument pořád může úspěšně projít validací, přestože si na něm každý XML procesor vyláme zoubky.

    V českém validátoru je chyba opravena od 1. června 2007.

    Bílý znak v klíčovém slově vyznačené sekce v XML

    <![CDATA [[ ... ]]> — kdo najde chybu, má postřeh. Kdo najde jen varování, má chybu. Mezera zapříčiní nefunkčnost ve všech XML procesorech.

    V českém validátoru je chyba opravena od 1. června 2007.

    Vyznačená INCLUDE/IGNORE sekce v těle XML dokumentu

    Sekce <![IGNORE[[ ... ]]> nebo <![INCLUDE[[ ... ]]> se smí vyskytovat pouze v DTD. Jejich použití jinde je fatální chyba. W3C Validátor pouze varuje.

    V českém validátoru je chyba opravena od 1. června 2007.

    Deklarace Doctype psaná malými písmeny

    V HTML smí být klíčová slova DOCTYPE, PUBLIC nebo SYSTEM zapsána malými písmeny. W3C Validátor to trošku ví, ale jeho hláška může být matoucí: „This page is valid (no Doctype)“.

    V oficiálním validátoru je tato chyba nahlášena od 25. října 2002 jako Bug 24, v českém je opravena od 10. dubna 2007.

    Chyby v externí DTD

    Obsahuje-li odkázaná definice typu dokumentu chyby, W3C Validátor je sice zjistí, ale nenahlásí je. Důsledkem je vtipný výsledek „Failed validation, 0 errors“. Český validátor nahlásí pro každý poškozený soubor DTD jednu chybu, takže uživatel získá alespoň tušení, v čem je zádrhel.

    V oficiálním validátoru je tato chyba nahlášena od 27. srpna 2003 jako Bug 301, v českém je opravena od 5. dubna 2007.

    Validní HTML 4.01!

    2006–2008 © Chamurappi; tuto službu neprovozuje W3C.

    Nevíte-li si s něčím rady, doporučuji diskusi Jak psát web.