V poslední době se často mezi špičkovými webdesignéry přetřásá otázka používání dokumentů v jazyce XHTML. Některé názory jsou spíše jen provokativní, jiné se snaží řešit skutečně praktickou stránku věci. Hlavním argumentem je ale nemožnost používat XHTML korektně.

Protože ale jen hrstka zasvěcených ví, o čem je vlastně řeč, nejprve bych se rád zastavil u toho, kde je vlastně onen tak často diskutovaný pes zakopaný. Potíž je především v tom, že XHTML je vlastně odvozenina syntakticky striktního jazyka XML, na nějž je naroubován starší, naopak velmi volný jazyk HTML. Zásadní rozdíl mezi oběma platformami (XML a HTML) je tedy v tom, jak se s jejich dokumenty nakládá. Dokumenty XML zpracovává XML-parser, který velmi přísně kontroluje syntaxi a na jakékoli chybě skončí, zobrazí chybové hlášení a dokument nezobrazí. Zatímco dokumenty HTML zpracovává HTML-parser, jemuž je už historicky dána nadmíra tolerance, jakoukoli chybu se snaží opravit, chybějící značky domyslet, přebývající přehlédnout.

A jazyk XHTML, který stojí oběma nohama současně na obou těchto březích, tak má velké dilema. Na straně jedné nevázané, tolerantní HTML, na straně druhé striktní a přísné XML. V praxi je to ovšem zařízeno tak, že nepracují oba parsery současně, ne že by si dokument nějak bratsky rozdělily a kousek udělá ten a kousek onen. V žádném případě. To, jak se dokument zpracuje, říká jeho MIME-typ.

MIME-typ je přiřazen každému bloku dat, který se posílá po webu. Posílá se v hlavičce HTTP a podle něj se prohlížeč rozhoduje, jak s těmi nulami a jedničkami, které dostává na vstupu, má naložit. Hlavičky HTTP obvykle odesílá webový server, který nejčastěji vychází z přípony souboru – někde v předvolbách má zapsána pravidla, která říkají: je-li přípona souboru .jpg, odešli hlavičku image/jpeg, je-li to .htm nebo .html, MIME typ bude text/html atd. Dokumenty XML mají několik možných MIME typů – především text/xml nebo application/xml. Pro „hybrid“ XHTML pak byl definován další typ application/xhtml+xml.

A teď k tomu hlavnímu. Pokud stránku v jazyce XHTML pošlete s korektním MIME typem (tedy jedním z těch typů odpovídajících jazyku XML), prohlížeč „na něj pustí“ parser XML. Zpracuje jej striktně, bez tolerance chyb. Jenže nejpoužívanější prohlížeč světa, MSIE, obsahuje několik závažných chyb. Především typy začínající „application“ (tedy např. application/xhtml+xml) nezpracuje vůbec a nanejvýš vám nabídne, že si stahovaný soubor můžete uložit na disk (podobně, jako když na webu kliknete třeba na soubor .zip). A u typu text/xml kvůli chybám zkolabuje hned na začátku. Takže jako XML se dokumenty XHTML (zatím) zobrazovat nedají. Aspoň v MSIE ne.

Zbývá druhá možnost, použít typ text/html, a tedy parser HTML. Ty ale mají moderní prohlížeče v zásadě dva – či přesněji řečeno jeden, ale se dvěma odlišnými režimy práce. Z důvodů zpětné kompatibility se starými stránkami jsou jednak schopné pracovat tak, jak stránky zpracovávaly staré prohlížeče (MSIE5 či NN4) – a s novými (striktními) dokumenty pak pracují v tzv. standardním režimu, který chyby bývalých prohlížečů už nemá a více či méně dodržuje platné standardy. Nu, a problém je v tom, že každý XHTML dokument (stejně jako každé jiné XML) by měl začínat XML prologem, neboli značkou ve tvaru:

<?xml version=“_verze_“ encoding=“_kódování_“?>

Jenže závažná chyba v HTML parseru MSIE 6 způsobí, že pokud na tento prolog narazí, bez diskuse se přepne do onoho starého, historického režimu a stránky zpracuje stejně jako MSIE 5. Tedy chybně a nestandardně, bez ohledu na to, zda je dokument HTML či XHTML, Transitional nebo Strict. Pokud ale na začátku kódu XML prolog není, MSIE 6 už pracuje korektně a striktní dokumenty zpracuje v režimu standardním. Bohužel ale specifikace jazyka XHTML říká, že tento prolog se může vynechat jenom tehdy, když je použito kódování UTF-8. V opačném případě (tedy u nás tak častých kódování windows-1250 a iso-8859-2) prolog být uveden musí.

Máme tudíž dvě možnosti. Buďto mít korektní striktní dokument, ale vědět, že nejpoužívanější prohlížeč jej zpracuje stejně jako prohlížeče osm let staré, tedy špatně, nestandardně a zobrazí ho nejspíš chybně – anebo vytvořit XHTML s úmyslnou chybou, vynechat povinný XML-prolog (pokud ovšem použijeme kódování UTF-8, chyba to nebude), a pak se stránky zpracují správně.

Proč tedy (i přes to všechno) preferuji XHTML?

Narozdíl od zastánců striktního dodržování standardů jsem přesvědčen, že v tomto případě je menším zlem porušit normu jazyka XHTML a používat novější, modernější jazyk i za cenu toho, že jeho dokumenty vytvářím úmyslně a vědomě s chybou (neuvádím onen XML prolog, i když použiji kódování jiné než UTF-8). A pochopitelně jen proto, že mám ověřeno, že i s touto chybou stránka ve všech prohlížečích funguje.

Je těžké (téměř nemožné) polemizovat, zda používání XHTML přináší nějaké objektivní výhody. Osobně jsem přesvědčen, že všechna tvrzení o tom, že dokumenty XHTML jsou menší nebo rychlejší nebo že se snáze zpracovávají, jsou jen akademická a v praxi mají téměř nulový efekt. Moje důvody jsou jiné, čistě subjektivní – a tedy nepřenosné a nemůžu je nikomu nutit. Přesto jsou (pro mě) pádné, neoddiskutovatelné a jednoznačné ve prospěch XHTML.

Možná skoro dvouleté a téměř výhradní používání jazyka XHTML mi totiž přineslo mnoho dobrého. V prvé řadě jsem se naučil, a to už úplně automaticky, vytvářet syntakticky zcela korektní stránky. Z jediného prostého důvodu: XHTML mě k tomu, narozdíl od HTML, nutí.

Nejspíš to bude i povahou. Nejsem totiž konzervativní a mám-li na vybranou mezi dvěma technologiemi, jednou spolehlivou a zavedenou a druhou novou, progresivní, tak si – ovšem za předpokladu, že jsem si jist, že jí patří budoucnost a tu starší jednou nahradí – vyberu tu druhou. Když si budu jistý, že digitální televizní vysílání v brzké době nahradí to stávající analogové, při koupi televize nebudu váhat a koupím si digitální – i když to bude třeba znamenat, že se stávajícím analogovým vysíláním to budu mít možná složitější, méně komfortu a ne-digitální televizi bych koupil za babku. Ale přesto to udělám. A až začne digitální vysílání, budu na ten přístroj zvyklý, budu s ním umět pracovat, nebudu se muset převratně učit něco nového, protože jsem si na to vyhradil dostatečně dlouhý čas v předstihu.

To samé platí pro XHTML. Jsem hluboce přesvědčen, že budoucnost nepatří HTML, ale XML a předpokládám, že jednou s ním budu denně pracovat. Budu se muset odpoutat od (zlo)zvyků, které si zakořenilo HTML, naučit se dělat kód bez jediné chybičky, naučit se rozlišovat <p> a <P> a mnoho dalších věcí. Díky XHTML jsem se to naučil už teď. Zopakuji ten hlavní důvod: XHTML mě k tomu nutí.

V HTML můžu psát všechny značky a atributy malými písmeny, v XHTML musím. V HTML můžu všechny značky uzavírat, ale když v HTML neuzavřu odstavec, nic se nestane – v XHTML musím. Když se rozhodnu, můžu v HTML zásadně uzavírat všechny hodnoty atributů do uvozovek, ale bez nich to taky projde – v XHTML prostě musím. A díky tomu můžu k svému prospěchu taky používat validátor. Zatímco v případě HTML vše, co nemusím, validátorem projde bez připomínek, u striktního XHTML se dozvím všechny detaily – že jsem zapomněl uzavřít položku seznamu, že v atributu chybí uvozovka atd. Zatímco v případě HTML se dozvím jen to, že stránku prohlížeč nejspíš „nějak zpracuje“, u XHTML jsem si jistý, že je syntakticky správně a je-li se stránkou nějaký problém, mám hledat chybu jinde, ale syntaxí už se zdržovat nemusím.

Chápu, že pro leckoho to nemusí být vůbec pádný argument pro používání XHTML, pro mě ale je – a velmi důležitý. Používáním XHTML se mi výrazně změnil styl práce. Častěji se můžu spolehnout na svůj editor, který mi umí označit bloky kódu (protože v XHTML jsou všechny značky párové a vždy uzavřené). Často používám validátor a když se ujistím, že kód je syntakticky bez chyby, hledám chyby jinde. Je to podstatně efektivnější. Musím-li někdy pracovat s XML, není ve stylu mé práce žádný výrazný rozdíl (což dřív, když jsem častěji tvořil v HTML, byl celkem zásadní).

A konečně – mám lepší pocit. Vědět, že pracuji s technologií, jejíž vývoj byl oficiálně ukončen a která nemá další budoucnost, je pro mě docela deprimující.

Ovšem jak jsem psal výše, všechny tyto důvody jsou velmi subjektivní a najít nějaký objektivní, všeobecně platný je obtížné, ne-li nemožné. Mně to však za to stojí, a to i když jsem nucen občas dělat stránky obsahující chybu oproti standardu. Poslední dobou však už čím dál víc stránek dělám v UTF-8, takže i tento bod se postupně redukuje. Časem zmizí úplně a budu mít náskok před všemi, kteří se budou XHTML teprve učit. Pro mě je to důležité, pro jiného nemusí.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět