XHTML MIME

Vždy, když vidím nadpis, který se skládá pouze z akronymů a zkratek, pomyslím si něco velmi nelichotivého o autorovi článku, jenž se za ním skrývá. Velmi pravděpodobně je to egocentrický podivín, který píše pro hrstku vyvolených, nemá rád roztomilá žlutá kuřátka a také lidi, nehledě na fakt, jestli i oni jsou roztomilí a žlutí.

Podotýkám, že k porozumění následujícího textu potřebujete vědět, co je to XHTML a k čemu se v současné době používá. Něco si k tématu můžete přečíst v tomto pěkném článku o XHTML od Marka Prokopa. Sic je staršího data, přesto je psán přehledně a k základní orientaci zcela jistě postačí.

Takže MIME typ, jo?

Ano, MIME typ. Ono majestátné MIME znamená Multipurpose Internet Mail Extensions, ve strojovém překladu Mnohoúčelová Rozšíření Elektronické Pošty (MREP). Tento otrocký překlad také poskytuje klíč k historii a původnímu využití MIME typů. K pochopení jejich účelu musím zabrousit trochu hlouběji do dob dřívějších.

V dávné minulosti, kdy se přístup na internet poskytoval pouze osobám s mnoha dioptriemi a tlustými bifokálními brýlemi, se zprávy psaly v čistém textu. To bylo prima. Zpráva měla pár bajtů, a protože linky tehdy byly hubené, bylo tomu tak dobře. Linky však tloustly a vývoj se utrhl z opratí. Přiřítil se rok 1992 a stalo se několik zdánlivě nesouvisejících věcí: Byla podepsána Maastrichtská smlouva, což položilo základy moderní Evropské unii, byla vydána MS Windows 3.1, NSF prodává licence na šíření připojení k Internetu různým komerčním subjektům a také je uvedena v život směrnice pod kódovým označením RFC 1341.

Na tomto místě je možná dobré trochu zvolnit a zamyslet se, proč jsem k roku 1992 zmínil podpis Maastrichtské smlouvy. Netušíte? Zamyslete se… Stále nic? Nevadí, popojedem. Jo, mimochodem, ohledně uživatelů Win 3.1, to byla fabulace.

MIME typ je tedy informace, která předchází datům a která říká, co data vlastně představují. V e-mailu najdete MIME typ v hlavičce zprávy. MIME typ je textová informace, skládající se ze dvou částí. Samotného označení typu dat a jejich konkretizace. Příkladem je například mnou oblíbený text/plain. Text je typ dat, plain (angl. prostý) říká, že tento text není protkán žádnými dalšími daty, která by řídila jeho zobrazování. Z jiného soudku uvedu audio/x-midi. Toto označení říká, že obsahem je zvukový soubor, konkrétně pak ve formátu MIDI.

Toto označování se ujalo a velice brzy se rozšířilo za pole působnosti e-mailů. V dnešní době hrají MIME typy důležitou úlohu při předávání dat mezi serverem a klientem (= vaším prohlížečem). Ten se na základě přijatého MIME typu rozhodne, co s dokumentem provede. A tady teprve začíná nefalšovaná zábava.

HTML není XHTML

Kterýžto fakt je patrný již z názvu. Málo lidí si však navíc uvědomuje, že XHTML není ani novou verzí HTML. Teď to bude trochu komplikované. Na začátku bylo SGML, jeho aplikací je HTML. W3C vymyslelo podmnožinu SGML s poněkud přísnějšími pravidly a nazvalo ji XML. XHTML je aplikací XML.

Chápu, předchozí odstavec postrádá náboj, vtip i lehkost, nicméně pro naši věc je zcela nezbytný. Od této chvíle budu pracovat se třemi myšlenými dokumenty, jeden je psán v HTML (je jedno, které verze), druhý v XHTML 1.0 a poslední v XHTML 1.1. Budu se snažit dokázat, jaký MIME typ se posílá s kterým dokumentem. Úkol zdánlivě jednoduchý.

HTML

U HTML dokumentu je situace nejjednodušší. Vždy se používal mime type text/html a jen málokdo může pochybovat o tom, že je to takto správně. V tomto světle je možná trochu matoucí výrok, že HTML je aplikací SGML. Také se vedly žabomyší války o to, že MIME type application/html by mnohem lépe popisoval obsah HTML dokumentu, avšak nakonec zvítězili příznivci text/html.

Nešlo ani tak o jejich argument, že HTML dokument je čitelný i bez prohlížeče, šlo jednoduše o to, že výrobci prohlížečů prostě dokumenty s MIME typem application/html ignorovali, protože to není registrovaný typ. Prohlížeče pak takový dokument nabídly ke stažení, čímž byl spor na dlouhá léta vyřešen. Jediným možným MIME typem pro HTML zůstal text/html.

XHTML 1.0

V prosinci roku 1999 konsorcium W3 vydalo specifikaci HTML 4.01, což je do dnešní doby poslední vydaná a používaná verze HTML. Měsíc na to byla s velkou pompou vydána specifikace XHTML 1.0 jakožto reformulace HTML 4 do podoby XML aplikace. Pokud vám předchozí věta nepřijde zcela jasná (tak jako dlouho nebyla jasná mně), doporučuji článek Marka Prokopa, na který jsem odkazoval v úvodu.

XHTML 1.0 mělo být báječné, štíhlé, přesně definované, prostě perspektivní. Stalo se během dvou let moderním značkovacím jazykem a v očích mnoha webdesignerů i širší veřejnosti odsunulo HTML někam ke smetišti dějin. Nevidělo se to, že XHTML 1.0 se dočkalo významných změn ještě rok poté, co bylo vydáno XHTML 1.1. Na vině byly hrubé nedostatky v původní specifikaci. Jen málo lidí si tehdy uvědomovalo, že žádné XHTML se vlastně nekoná.

Na vině je právě MIME typ, se kterým se XHTML 1.0 dokumenty posílaly prohlížečům. W3C totiž, vědomo si toho, že tehdejší prohlížeče nejsou připravené na nový formát, sepsalo pravidla kompatibility s HTML.

Správně by se každý dokument, který se řadí do rodiny XHTML, měl posílat s MIME typem application/xhtml+xml. Tato informace jasně stojí v dokumentu, který vymezuje možné MIME typy pro XHTML. V tomto dokumentu však také stojí, že jsou-li dodržena zmíněná pravidla pro kompatibilitu s HTML, může být XHTML 1.0 dokument poslán jako text/html.

Kromě toho se v textu také dočtete, že dalšími možnými MIME typy pro XHTML jsou application/xml a text/xml. Tvůrce takového dokumentu však musí počítat s možnými omezeními na straně koncového zařízení (takovým významným omezením může například být nefunkčnost hypertextových odkazů, pokud se koncové zařízení [= prohlížeč] rozhodne zpracovávat dokument jako čisté XML).

Aby toho nebylo málo, Timy (webdesigner a blogger, o [X]HTML se zajímá do hloubky) sepsal článek, v němž pochybuje o tom, zdali mohou být vůbec HTML a XHTML dokument vzájemně kompatibilní. Jako příklad uvádí nutnost v XHTML uzavřít každý nepárový tag zpětným lomítkem. To se samozřejmě týká i tagů <meta> v hlavičce dokumentu. Když k tomu připočteme možnost v SGML libovolný tag uzavřít zkrácenou formou (NET shorttag) za pomoci lomítka (např. <em/obsah elementu/ nebo <br/), znamenalo by to, že pokud takový XHTML dokument předáte HTML parseru, tento by měl každý <meta… /> tag ukončit na místě lomítka a následující pravou špičatici by měl považovat za textová data (CDATA).

V reálu se tak však neděje a právě tento fakt poskytl možnost sepsání těchto pravidel vzájemné kompatibility. HTML a XHTML dokumenty tedy kompatibilní nejsou, avšak vzhledem ke specifickému chování HTML parserů v současných prohlížečích bylo možné dosáhnout bezchybného zobrazení. Tak také jsou pravidla koncipována, neboť se v nich dočteme, že: „This appendix summarizes design guidelines for authors who wish their XHTML documents to render on existing HTML user agents.“

XHTML 1.1

XHTML 1.1 je považováno za nejnovější specifikaci XHTML pro „stolní počítače“. Tato domněnka je chybná, protože ještě o rok později byla vydána revize XHTML 1.0, která měnila dosti zásadním způsobem původní znění. Což je hezky vidět na tomto rozdílovém dokumentu. Tento článek bohužel neposkytuje dostatek prostoru k rozebrání pohnutek a důvodů, které k tak radikální změně vedly.

Zaměřme se na XHTML 1.1. Tato verze se již měla definitivně odpoutat od HTML, nevztahují se na ni žádná pravidla kompatibility – je to čisté XML. Tento fakt domyšlen do důsledků znamená dvě věci:

  1. MIME typ musí vyjádřit základ XHTML. Tímto základem je XML
  2. Internet Explorer XHTML posílané s XML MIME typem buď zpracovat vůbec neumí, nebo to dokáže jen s obtížemi. Problémy v nejpoužívanějším světovém prohlížeči v případě formátu, který má být masivně nasazován na celém webu, vedou fakticky k mizivé či chybné penetraci mezi tvůrci webu

Co teď? Představte si, že jste v roce 2001, máte v rukou specifikaci XHTML 1.1 a máte také nulovou naději, že by Explorer v nejbližších pěti letech nějak překotně opouštěl bitevní pole. Jste pravděpodobně zmatení a smutní. Věřte mi, že autoři této specifikace byli ještě mnohem smutnější a hlavně zmatenější.

Zmatení se naplno projevilo v roce 2003, kdy se organizace WaSP přímo W3C zeptala, jak to vlastně s těmi MIME typy a XHTML je. Dostalo se jí poměrně jednoznačně vypadající odpovědi. XHTML 1.1 nemůže být v žádném případě předáváno prohlížeči jako text/html. V takovém případě by IE ostrouhal a XHTML 1.1 by se tím pádem stalo balvanem, se kterým by se žádnému webdesignerovi nechtělo tahat.

Je tu však ale. K uvedenému oficiálnímu článku existuje na samotném webu W3C alternativní verze, respektive návrh, který byl do podoby výsledného článku později reformulován a který také obsahuje jednu výraznou změnu. V tomto návrhu totiž W3C připouští možnost posílání XHTML 1.1 dokumentů jako text/html prohlížeči Internet Exploreru. Čemu pak má člověk věřit?

Realita je taková, že pánové standardizátoři si uvědomili, že pokud chtějí, aby XHTML 1.1 vůbec přežilo, musí tento formát být přístupný všem prohlížečům. Naneštěstí pro ně se sami zapletli do takového mlžení a protikladných tvrzení, že nyní nikdo neví, jak to W3C vlastně s těmi MIME typy myslí. Ono je to všem vlastně poměrně putna.

Co z toho vlastně plyne? XHTML 1.1 nenechává prostor pro použití MIME typu text/html, avšak praxe webdesignery nutí tento MIME type posílat Internet Exploreru, chtějí-li mermomocí používat „moderní“ XHTML 1.1. A toho jsou si vědomi i pánové ve W3C.

Výborným vtipem je pak tato stránka. Kdo první přijde na to, co je na ní tak humorného, má červený puntík.

Jaký je závěr?

Jediné, co se ví, je to, že HTML se posílá s MIME typem text/html. Když se podíváme na XHTML, nikdo nic neví. Uživatelé nevědí, a to je dobře. Webdesigneři si myslí, že vědí, ale nevědí. A nejhorší je, že standardizátoři také nevědí a těžko říct, jestli si myslí, že vědí. Jedinou radou, která je v takové situaci na místě, je: „Buďte praktičtí.“

Protože se zdá, že to je jen praktičnost, která rozhoduje o tom, co je vlastně správně a co není. Přečetl jsem opravdu mnoho dokumentů, které sepsalo W3C, a nejsem z toho příliš moudrý. Vím, co říkají specifikace a znám i oficiální a neoficiální postoj W3C k tomuto problému – a nic se tím neřeší.

Nejproblematičtější je v tomto směru XHTML 1.1, o kterém se na závěr tohoto článku nebojím prohlásit, že je v současné době nepoužitelné (už 5 let!) vzhledem k technické nezpůsobilosti cílových zařízení takový dokument zobrazit v souladu s jeho definicí (= dokument XHTML 1.1 musíte posílat jako application/xhtml+xml, případně pod obecnou hlavičkou text/xml nebo application/xml, což však zase přináší problémy v praxi).

Přikládám tabulku MIME typů a typů dokumentů, se kterými lze tyto MIME typy použít. Poslední sloupec říká, jak to vypadá v každodenní praxi.

MIME typ Dokument Praxe
text/html HTML, XHTML 1.0 při dodržení pravidel kompatibility, ostatní XHTML pro IE V praxi se text/html posílá vždy Internet Exploreru, nezávisle na typu dokumentu. Text/html se také posílá vždy s HTML dokumentem a v drtivé většině případů s dokumentem v XHTML 1.0
application/xhtml+xml veškeré XHTML Zřídka se posílá při práci s XHTML 1.0 dokumenty, častěji pak při práci s XHTML 1.1. Kromě IE jej správně zpracují všechny moderní prohlížeče
text/xml veškeré XHTML Nepoužívá se
application/xml veškeré XHTML Nepoužívá se

Můj přístup

Co se mě týče, XHTML 1.1 neuznávám a ignoruji. Je evidentní, že sami tvůrci si s ním nevědí rady. Pracuji v XHTML 1.0 Strict a dodržuji pravidla kompatibility. Uvědomuji si, že tím pádem pracuji jen v jinak označeném HTML 4.01 Strict a respektuji určitá striktnější pravidla. Líbí se mi totiž ono „X“ v názvu. XHTML tak, jak bylo zamýšleno, na webu živoří mezi skupinkou nadšenců, kteří chtějí okolí či jen sebe přesvědčit o tom, že se umějí postavit výzvě. Není na tom vůbec nic špatného, je to dokonce sympatické – v současné době má však striktní držení se litery W3C jen minimální výhody. A nemyslím si, že se to v budoucnu jen tak lehce změní.

K tématu

Seznam dokumentů, které byste určitě neměli minout, pokud se o problematiku hlouběji zajímáte:

Pokud se cítíte jistí v kramflecích, mohli byste i opatrně nakouknout na Webylon.

Konec

Na závěr se můžete ptát na dvě věci:

Inu, co na to říct? :o) Přeji hezký den.

26. 1. 2006, 17.33 | (X)HTML, CSS.


Zanechte komentář





Můžete použít Texy! formátování.
Pokud se obsah boxů níže mění, zatímco píšete, potom žádné číslice nevyplňujte. V takovém případě antispam funguje, pouze se prohlížeči nepovedlo skrýt tento box.