• O validátoru
  • Novinky
  • Dokumentace
  • Integrace do prohlížečů
  • Jak se rozeznává značkovací jazyk dokumentu?

    Z dávných dob vývoje HTML pochází poučka, že deklarace <!DOCTYPE> určuje verzi HTML. Jelikož většina odborných zdrojů považovala XHTML za další verzi HTML, poučka zázračně přežila, přestože už v tomto případě není tak úplně pravdivá.

    Protože se mezi HTML a XHTML mění základní syntaxe a oba jazyky jsou si přesto velmi podobné, musí o tom, jak se s dokumentem bude pracovat, rozhodnout informace umístěná mimo samotný dokument. Většinou HTTP hlavička Content-Type, ta udává tzv. „MIME typ“. Online nástrojem Web-Sniffer se můžete podívat, jakou hlavičku uvádějí vaše stránky. Servery zpravidla bývají nastavené tak, že Content-Type automaticky nastavují podle přípony souboru. Podobný mechanismus implementují i prohlížeče, když si necháte zobrazit dokument z disku vlastního počítače.

    Prohlížeče analyzují zdroj na uživatelem zadané adrese takto:

    Toto chování je v naprostém souladu se specifikacemi. Než se podíváme, jak postupuje oficiální validátor, pojďme si ověřit, že prohlížeče podle výše uvedené kuchařky doopravdy fungují.

    Ukázka 1

    Do obou <iframů> je načtený stejný zdrojový kód. V levém má hlavičku „text/html“, v pravém „application/xml“. Vynechal jsem uvozovky kolem jednoho atributu, což se v XHTML nesmí. Funguje-li váš prohlížeč správně, vidíte vlevo funkční dokument a vpravo pouze chybovou hlášku. To není proto, že by si prohlížeč řekl „dobře, tak mu to jednou prominu, ale příště už ne!“. V prvním případě čte dokument jako HTML a tam nejsou uvozovky povinné, z jeho pohledu je tedy všechno v pořádku. V druhém případě vidí XML a tam je každý prohřešek nekompromisně trestán chybovou hláškou — to je ta striktnost a přísnost, o které v souvislosti s XHTML všichni mluví.

    Ukázka 2

    Opět je v obou <iframech> načtený stejný kód, opět má v levém hlavičku „text/html“, v pravém „application/xml“. Obsahuje interní stylopis, který obarvuje odstavec do zelené barvy. Tenhle stylopis je zapsaný uvnitř tzv. CDATA sekce, což je v XHTML povolený postup. V HTML ovšem ne, proto odstavec vlevo není zelený.

    Pokud se na tuto stránku koukáte v Internet Exploreru, nevidíte zeleně ani dokument vpravo, protože tento prohlížeč sice zná XML, ale nerozezná správně jmenný prostor XHTML.

    Ukázka 3

    I tentokrát je v obou <iframech> načtený stejný kód, liší se jen MIME typ. Všimněte si, že vlevo jsou úplně jiná zvířátka než vpravo. Rozdíly v syntaxi HTML a XML umožňují zařídit, aby HTML prohlížeč viděl jiný kus kódu než XHTML prohlížeč.

    Jak rozeznává značkovací jazyk dokumentu W3C Validátor?

    Oficiální W3C Validátor kouká na dokumenty jinak, než prohlížeč. Ovšem trochu víc jinak, než by správně měl.

    Ten úkon, co provádí se zdrojem typu „text/html“, jde jen těžko obhájit specifikacemi. Kvůli němu často kouká na data úplně jinak než prohlížeče. Neodhalí chybu, která v HTML vadí, ale v XML je povolená, a naopak vytýká i věci, které v HTML vadit nesmí. To, že validuje cosi úplně jiného, než vnímají prohlížeče, názorně předvádí pátá ukázka.

    Ukázka 5

    Překrásný příklad, že ano? Používá nevalidní HTML kód, který je dodávaný jako „text/html“. Jenže to W3C Validátor nezajímá, dokument prohlásí za validní XHTML 1.1, protože XML procesor tam žádné problémy nevidí.

    Ukázka 6

    Tato ukázka Vám funguje? Nemusela by. Není validní, porušuje HTML syntaxi — je v ní <meta> značka ukončená „/>“, tedy XML způsobem. Deklarace <!DOCTYPE> se odvolává na definici typu dokumentu XHTML, jenže ta syntaxi neurčuje. Jelikož je toto odvolání méně nápadné, W3C Validátor předpokládá, že odkázaná DTD je HTML DTD (když má MIME typ „text/html“). Dokument prohlásí za nevalidní, což je správně.

    Jak rozeznává značkovací jazyk dokumentu tento validátor?

    Tento validátor se snaží napravit ono podivné chování oficiálního validátoru. Postupuje přímočaře:

    Znamená to, že „text/html“ dokument, který má <!DOCTYPE> deklaraci třeba XHTML 1.0 Strict, zvaliduje podle syntaktických pravidel HTML a prohlásí jej korektně za nevalidní. V podstatě lze říci, že takovéto XHTML je nevalidní verzí HTML. W3C doporučení XHTML 1.0 sice říká, že typ „text/html“ užívat smíte, o validitě takového dokumentu však nemluví.

    Jak se té červené hlášky zbavit?

    Máte asi tak dvě možnosti:

    Podotýkám, že HTML 4.01 obsahuje přesně stejný sortiment elementů jako XHTML 1.0, takže vyjadřovací prostředky máte na chlup stejné. Nutí-li vás někdo produkovat validní XHTML 1.0 kód při typu „text/html“, ukažte mu, že to nejde — ani oficiální validátor není validní.

    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.