Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Život s krvelačným X

Užívání skutečného XHTML patří mezi moderní adrenalinové sporty. Máte na něj skutečné nervy? Víte, kdy dokument přežije a kdy zemře? Jak moc vám zúží cestu rozšiřitelnost? Kolik návštěvníků položíte na oltář "moderních" technologií?

V tomto článku se zaměřím na praktické problémy, které by přineslo XHTML, kdyby se bylo bývalo prosadilo. Pojmem „XHTML“ myslím normální XHTML, zvané též někdy „skutečné XHTML“ nebo „opravdové XHTML“. Stránky posílané s MIME typem text/html jsou imunní, takže patříte-li k těm „zpátečníkům“, co na XHTML nepřešli, berte následující text jako sci-fi povídku.

Křeč robustnosti

Před dávnými a dávnými časy trpěl jazyk HTML, jeden z hlavních pilířů World Wide Webu, vážnou chorobou. Infekce vzešla z neúcty k Postelovu zákonu (zvanému též „princip robustnosti“):

„Buď konzervativní v tom, co nabízíš, a liberální k tomu, co přijímáš.“

Jeho aplikace v praxi fungovala jen napůl. Prohlížeče bývaly liberální k tomu, co přijímaly, ale autoři dokumentů se nedrželi při zemi a na toleranci prohlížečů často spoléhali. Tato nerovnováha v době velkého rozmachu webdesignu nahrávala velkým rybám, podle jejich parserů se utvářel de facto standard. Nezodpovědnost webmasterů týrala malé ryby.

Dnes již po této době zůstala jen jizva. Svět se změnil:

  • Autoři dokumentů se naučili sebekázni, již chápou, že konzervativnost je v jejich zájmu.
  • De facto standard má už díky myriádám stránek stálou podobu, se kterou nehne ani velryba. Dnešní prohlížeče se v dostatečné míře shodují, co se špatným HTML kódem dělat.

Na existující odolnost prohlížečů proti chybám sice někteří webmasteři nadávají, ale na druhou stranu na ni bezmála všichni spoléhají a World Wide Web spolehlivě funguje.

Při vývoji XML v letech 1996 až 1998 ještě byly ony dávné a dávné časy. Lidé z konsorcia si moc dobře uvědomovali, jaké škody na interoperabilitě způsobuje nedefinovaný stav ve spojení s neukázněným dokumentem. Věci, které jednoznačně nerozhodne specifikace, rozhodnou (chtě nechtě) velké ryby. Proto v doporučení XML 1.0 najdete jen velice málo nedefinovaných stavů. Nepochybně dobrý záměr.

Konkrétní realizace onoho záměru je ovšem nezvykle krutá. Celý princip robustnosti surově zavrhuje. XML procesor nesmí být liberální k tomu, co přijímá. Chybové stavy má trestat smrtí.

"Smrtelná chyba (fatální error)
Chyba, kterou vyhovující XML procesor musí odhalit a nahlásit aplikaci. Po setkání s fatální chybou smí procesor pokračovat ve zpracování za účelem nalezení dalších chyb a smí tyto chyby nahlásit aplikaci. Kvůli podpoře opravení chyb smí procesor nezpracovaná data zpřístupnit aplikaci. Nicméně jakmile je odhalena fatální chyba, procesor nesmí pokračovat v normálním zpracování."

Zdroj: Doporučení XML 1.0

Logika stojící za touto černobílou definicí byla prostá: kdyby měl chybný dokument z definice nějakou užitkovou hodnotu, nebyl by jeho autor (= ten nezodpovědný neřád z roku 1996) dostatečně motivován k nápravě. To je fakt. Proč by opravoval něco, co stejně musí všude fungovat? V mysli autora činí chybu chybou zjevný a nevyhnutelný trest, v tomto případě znehodnocení. Tak praví písmo svaté.

Podotýkám, že není rozhodující validita proti DTD. Nevalidní správně sestavený XML dokument musí být dobře rozebrán, význam validity je v XML oproti SGML/HTML záměrně degradován.

Stinná stránka drakonismu

Jazyk XHTML je aplikací XML. Lépe řečeno, je to jmenný prostor užívaný ve stromové struktuře XML dokumentu. Drakonická pravidla XML specifikace se proto vztahují i na něj. Zpracuje-li prohlížeč normálním způsobem XHTML dokument, který není správně sestavený (mluvou specifikace well-formed), dopustí se vážné chyby. Musí selhat. Musí webmastera potrestat. Dnešní prohlížeče skutečně na vadném dokumentu selhávají:

zobrazení v IE 7 zobrazení ve Firefoxu zobrazení v Opeře

Takže pozor. Vše, co jde do prohlížeče, musíte mít neprůstřelně ošetřené. Spojujete-li dokument z více souborů, stačí jedna vadná součástka a vše je v tahu. Píšete-li kód ručně, stačí překlep. A nezapomeňte návštěvníka poučit, aby nikdy nemačkal v prohlížeči tlačítko Stop – nedotažený dokument také skončí v nenávratnu, obsahuje-li neuzavřené elementy.

Jak poznáte, že je z vaší strany vše v pořádku? Bafnete libovolný XHTML prohlížeč, nalistujete v něm svoji stránku a uvidíte, jestli vás nechá žít, či popraví. Jak prosté, jak průzračné. Žádné složité validování, žádné ověřování v osmi prohlížečích jako za dávných a dávných časů. Požehnáno buď písmo svaté.

Ále. Neříkejte, že jste tak naivní, abyste téhle utopii věřili. Bezchybné prohlížeče neexistují a XML z nich andílky neudělá. Nevyhnutelně vzniknou dva typy problematických situací:

  • Váš testovací prohlížeč neselže na vadném dokumentu. Předpokládáte, že je vše v pořádku, a nevědomky si odfiltrujete nevinnou část cílové skupiny.
  • Prohlížeč návštěvníka selže i na bezchybném dokumentu. Opět odfiltrujete část cílové skupiny.

V obou případech máte problém. Chcete, aby vaše stránka alespoň nějak fungovala všude, ne? Pak je pro vás každá nekompatibilita prohlížečů na úrovni XML procesoru extrémně nebezpečná.

Podívejte na následující zdroják „nachcípaného“ dokumentu:

ďťż <?xml version="1.0"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Nemocen :-(</title>
</head>
<body>
&amplamp;
</body>
</html>

Trpí mnoha nešvary. Můžeme mu rovnou vystavit parte. Jaké jsou možné příčiny úmrtí?

  • BOM – písmenka ďťż (či  ve windows-1250) oznamují XML procesoru užití UTF-8. Selhat na něm nikdy nesmí, neboť minimálně UTF-8 a UTF-16 musí vyhovující prohlížeč podporovat. Všechny slušné editory BOM nezobrazují, část z nich ho automaticky vkládá, proto je tato pseudochyba tak populární. W3C validátor kvůli BOMu zobrazuje varování, že špatně napsané XML procesory mohou selhat, a CSS validátor na něm při rozebírání XHTML selže.
  • Bílý znak před XML deklarací – mezera či prázdný řádek před XML deklarací je smrtelná chyba, prohlížeč musí selhat vždy. Internet Explorer neselže, starší Opera neselže, W3C validátor neselže, Amaya neselže.
  • Neplatná adresa DTD – prohlížeč nečtoucí DTD na ní nesmí selhat, prohlížeč čtoucí DTD na ní může selhat. DTD čtou Internet Explorer a W3C validátor, první zmíněný selže (= v pořádku), druhý ne (= v pořádku), Mozilla a Opera neselžou (= v pořádku). Uvedený <!DOCTYPE> s relativní adresou je vykopírovaný z prvního vydání XHTML 1.0, takže ho obsahují tisíce webů.
  • Nedefinovaná obecná entita – překlep &amplamp; nesmí dokument zabít. Zabije ho ve starší Mozille, v Opeře i Internet Exploreru.

Doporučení XML 1.0 obsahuje řadu pikantních pravidel, která může špatně vstřebat nejen autor dokumentu, ale i autor prohlížeče. Vyjmenované drobnosti jsou jen zlomek. Při využití reálných možností modularizace a jmenných prostorů třecích ploch neubývá, naopak. Nespolehlivé je pojetí parametrických entit, externích rozebíraných entit, selhávání na sekvenci znaků ]]> (někde je povinné, někde zakázané), užívání dvojtečky v procesních instrukcích a tak dále. Dva nejznámější XHTML prohlížeče také projevují mimořádnou toleranci k obecným entitám: překládají &nbsp;, &copy; a další na znaky, aniž by četly odkázanou DTD.

Při každém pokusu o využití schopností XML, které HTML 4 postrádá, se dokument vystavuje reálnému riziku, že mu některý z prohlížečů zlomí vaz. Nezbývá, než vzít osm nejpoužívanějších kousků a ladit, ladit, ladit. Pochopit a dodržet specifikaci nestačí.

V XHTML se prohlížeč stává soudcem i katem a trestán je především jeho uživatel (což nemusí být webmaster). Cena za justiční omyl je značná. Můžete si být jisti funkčností dokumentu, když se ve svých rozsudcích neshodnou ani tři nejznámější prohlížeče?

Ukrajování z rozšiřitelnosti

S rozšiřitelností XHTML souvisí dva pojmy: modularizace a jmenné prostory. První z nich je skvělý bubák na začátečníky, proto je často užíván i v souvislostech, v nichž nedává smysl.

„XML dokument můžete transformovat (XSLT), modularizovat anebo jej jednoduše přetvořit pro WAP (angl. Wireless Aplication Protocol).“

Zdroj: Vít Dlouhý, Bezproblémový přechod na XHTML.

Fakt je, že kolem XHTML Modularizace 1.0 panuje trochu zmatek. Ta specifikace touží řešit dvě věci současně: chtěla by plně objímat sortiment elementů a atributů jmenného prostoru „ http://www.w3.org/1999/xhtml“ a zároveň umožnit komukoliv, kdo si chce vyrobit vlastní jazyk příslušející do rodiny XHTML, aby si utvořil formální předpis (DTD, XML Schéma), proti němuž může být dokument validován. Plní roli jakési líhně.

Supermazaný supertvůrce superchytrého digitálního nočníčku si tedy může snadno utvořit DTD ze všech modulů vyjma target modulu. Vy jako autoři stránek na jeho DTD vůbec nemusíte brát ohledy. Váš <!DOCTYPE> ho nezajímá. On si dokument stáhne, zvaliduje jej proti své představě o ideálním dokumentu a nějak s ním naloží. Za chyby proti té své představě vás ale nemůže nijak trestat, porušil by příslušnou kapitolku specifikace. Nočníček bude atribut target jen ignorovat, tentokrát žádné zabíjení :-(.

V reálu se oproti HTML 4 téměř nic nezměnilo, jen se ta již dávno provozovaná praxe hodila na papír a co nejobecněji (rozuměj co nejnesrozumitel­něji) popsala. HTML prohlížeče odjakživa vnímaly vždy jen jednu verzi HTML a neznámé věci ignorovaly. Modularizace rozšiřitelného HTML nakonec slouží hlavně jako omluvenka pro jeho zužování. Díky ní si může i velmi „blbý“ prohlížeč vlepit na hřbet razítko Conforming W3C® XHTML™ Family User Agent.

Má to však mouchy. Konsorcium vzkřísilo dávný problém: prohlížeč, který neimplementuje skriptovací modul, musí obsah elementu <script> sdělit uživateli. Pak také v klikacích mapách je jedna otravná nekompatibilita mezi XHTML 1.0 a modularizací (z níž vzešlo XHTML 1.1), kterou konsorcium vytrvale odmítá řešit, takže si prohlížeč musí vybírat, kterou ze specifikací poruší, a webmaster musí hádat, jak si asi prohlížeč vybere.

Bezohlednost ve jménu jmenných prostorů

Skutečnou rozšiřitelnost přináší až jmenné prostory. Jdou mimo modularizaci, mimo DTD, mimo normativní definici validity v XML. Samozřejmě si můžete z modulů poskládat DTD pro libovolný dokument užívající mnoho jmenných prostorů, ale byla by to samoúčelná práce nenavyšující kvalitu či spolehlivost výsledku. Celé to snažení o zelenou hlášku validátoru ztrácí smysl, když většinu úsilí věnujete ladění DTD.

V následujícím dokumentu jsem smísil XHTML a MathML:

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Kvadratická rovnice</title>
</head>
<body>
<p>
Za jedenaosmdesáti horami žila byla jedna kvadratická
rovnice a ta měla dva překrásné kořeny:
</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply>
<eq/>
<ci>x</ci>
<apply>
<divide/>
<apply>
<csymbol>±</csymbol>
<apply>
<minus/>
<ci>b</ci>
</apply>
<apply>
<root/>
<degree><cn>2</cn></degree>
<apply>
<minus/>
<apply>
<power/>
<ci>b</ci>
<cn>2</cn>
</apply>
<apply>
<times/>
<cn>4</cn>
<ci>a</ci>
<ci>c</ci>
</apply>
</apply>
</apply>
</apply>
<apply>
<times/>
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</apply>
</math>
</body> </html>

Vzorec by šel zapsat i trochu jednodušeji. MathML disponuje širokou škálou elementů, které vyznačují spíše vizáž zápisu než jeho význam. I zde s sebou nese sémanticky čistší zápis nezávislost na způsobu prezentace, navíc jej mohou pochopit i všelijaké matematické programy.

Co se asi stane, nezná-li prohlížeč jmenný prostor http://www.w3.org/1998/Math/MathML? Dodrží W3C doporučení a obsahy neznámých elementů zobrazí. Pochopí návštěvník, jak pomocí „x ± b 2 b 2 4 a c 2 a“ určí kořeny kvadratické rovnice? Asi ne. Můžeme mu nabídnout nějakou alternativu? Třeba obrázek? Bohužel nemůžeme. MathML nijak nezohledňuje XHTML prohlížeče, které jej neznají.

Totožný problém trápí většinu jazyků, které je možné zapustit do XHTML:

  • XForms: Milý návštěvníku, vyplň prosím všechny kolonky s atributem required, které tu možná nejsou, a pak klikni na tlačítko Odeslat, které možná nekliká.
  • XLink: Jen si na mě klikni, neboj se, možná se někam dostaneš, možná ne.
  • SVG: Níže uvedený obrázek můžeš libovolně zvětšovat, pokud vůbec nějaký vidíš.

Zatímco se celý svět svědomitě piplá s maximálně přístupnými všude-funkčními HTML dokumenty, které jsou slušně použitelné nezávisle na podpoře obrázků, stylopisů a JavaScriptů, konsorcium chrlí jazyky, jejichž použití uvnitř XHTML dokumentu bezohledně omezuje univerzální přístup. Je sice osvěžující, že máme rozšiřitelnost (konečně) standardizovanou, ale reálná využitelnost v praxi je v důsledku absence alternativ minimální.

Zřejmě jedinou výjimkou je XInclude 1.0. Ten pro případ problému s vkládáním externího zdroje definuje element <fallback>, jehož obsah je jinak ignorován. Škoda, že má mezi prohlížeči tak slabou podporu.

Technologie SVG a spol. přesto na široširém webu použitelné jsou — načítané z externího zdroje pomocí elementu <object>. Přesně stejně jako v HTML 4.

Budoucí vývoj?

Každá správná učebnice XHTML 1 říká, že vývoj HTML byl již ukončen, že nikdy žádná další verze nebude a že se vyvíjí už jen XHTML. Žádná už neupozorňuje, že sama reformulace nesymbolizuje elixír života a že smysluplný vývoj XHTML 1 rovněž skončil v roce 1999. Vše od té doby už je jen jiný pohled na totéž. Už sedm let sdílí HTML 4 a XHTML 1 společnou rakev.

Jednou ročně sice vyjde nový pracovní návrh XHTML 2, ten však nikoho „nevzrušuje“, neboť to je úplně jiný jazyk. Konsorcium veřejně přiznává, že není zpětně kompatibilní s prvním XHTML. Umíte si tu nekompatibilitu představit? Lidé neznalí jmenných prostorů často doufají, že když vhodně užijí podmnožinu XHTML 2, že si výsledek prohlédnou i starší prohlížeče. Omyl. Musíte opět připravit velký oltář a nelítostně obětovat vše, co XHTML 2 nezná. Ámen.

Kontakty? Setkání? Předplaťte si celoroční členství v NetClubu

Chcete být v centru dění, v internetové komunitě? Setkávat se s těmi, jejichž názory hýbou českým internetem? Předplaťte si členství na každoměsíčním setkání NetClubu a potkávejte se s zajímavými lidmi. Bližší informace zde

Letošní druhý NetClub proběhne v únoru s Erikem Taberym, šéfredaktorem časopisu Respekt, který lidé buďto milují, nebo nenávidí. 

       

Spousta lidí si již všimla, že takto narýsovaná budoucnost je poněkud ponurá. Od roku 2004 jsou čím dál více slyšet skeptické hlasy výrobců prohlížečů. Nadace Mozilla, Opera Software a Apple stvořili uskupení WHAT WG, jehož posláním měl být kontinuální vývoj zatuchlých značkovacích jazyků. Skutečně plodí pracovní návrhy. Specifikace „Web Applications 1.0“ bývá často přezdívána (X)HTML 5 a definuje rozšíření objektového modelu dokumentu, HTML 4 a XHTML 1 (čímž bezostyšně porušuje XHTML modularizaci).

I konsorcium v listopadu 2006 nečekaně couvlo. Byl to krok zajisté bolestivý, ale odvážný: vznikla nová HTML Working Group. Jazyk, který byl sedm let „mrtvý“, opět oficiálně žije. Lépe řečeno: oba „mrtvé“ jazyky žijí. Uvidíme, co z toho všeho vzejde.

Anketa

Stává se vám často, že se ve vašem prohlížeči stránka nezobrazí, zatímco v jiném ano?

       

Chamurappi

Autor je nezávislý publicista zaměřený na historii. Webdesignu, značkovací jazyky, JavaScript a W3C specifikace. Na svém webu Webylon.

Kurz SEO - Praha, Brno

DW - Školení SEO
  • Jak fungují vyhledávače a co od nich můžete očekávat.
  • Analýza klíčových slov - kde hledat, jak slova vybrat, jak optimalizovat.
  • Metody linkbuildingu - jak získat zpětné odkazy aniž byste za ně museli platit.
  • Vyhodnocování SEO - nesledujte jen pozice.

Další informace o kurzu SEO »

Akce: Využijte last minute slevu na školení v Brně!

Přehled názorů

Autor se nestydi za porusovani standardu ...
Zdenek 6. 3. 2007 08:11
Nový
├ 
Re: Autor se nestydi za porusovani standardu ...
M jako Molitan 7. 3. 2007 01:14
Nový
├ 
Re: Autor se nestydi za porusovani standardu ...
Chamurappi 7. 3. 2007 11:38
Nový
└ 
Re: Autor se nestydi za porusovani standardu ...
zden 7. 3. 2007 18:15
Nový
Fatalni chyba
ccc 6. 3. 2007 09:51
Nový
hádky zcela o ničem
Martin Hruška 6. 3. 2007 10:27
Nový
├ 
Re: hádky zcela o ničem
Tomáš Znamenáček 6. 3. 2007 10:58
Nový
└ 
Re: hádky zcela o ničem
spacák 6. 3. 2007 13:19
Nový
 
└ 
Re: hádky zcela o ničem
zvo 6. 3. 2007 18:03
Nový
Striktnost
Petr Staníček 6. 3. 2007 10:37
Nový
├ 
Re: Striktnost
benzin 6. 3. 2007 10:54
Nový
│
├ 
Re: Striktnost
Tomáš Znamenáček 6. 3. 2007 11:01
Nový
│
│
└ 
Re: Striktnost
benzin 6. 3. 2007 19:03
Nový
│
│
 
└ 
Re: Striktnost
uzivatel 7. 3. 2007 17:24
Nový
│
│
 
 
└ 
Re: Striktnost
... 7. 3. 2007 18:54
Nový
│
└ 
Re: Striktnost
Petr Staníček 6. 3. 2007 15:14
Nový
├ 
Re: Striktnost
anonymní uživatel 6. 3. 2007 17:42
Nový
├ 
Re: Striktnost
HeWeR 6. 3. 2007 18:27
Nový
│
└ 
Re: Striktnost
pepa 7. 3. 2007 09:55
Nový
├ 
Re: Striktnost
Petr 7. 3. 2007 09:33
Nový
└ 
Re: Striktnost
Chamurappi 7. 3. 2007 13:22
Nový
 
├ 
Re: Striktnost
Flasi__ 7. 3. 2007 16:59
Nový
 
└ 
Re: Striktnost
Bredy 8. 3. 2007 02:25
Nový
 
 
└ 
Re: Striktnost
Tomáš Znamenáček 8. 3. 2007 07:12
Nový
dobré náměty
Filip Jirsák 6. 3. 2007 12:05
Nový
SVG a MathML v HTML
Ritchie 6. 3. 2007 15:08
Nový
└ 
Re: SVG a MathML v HTML
Lukee 6. 3. 2007 15:42
Nový
BOM a UTF-8
Michal Kubeček 6. 3. 2007 19:46
Nový
├ 
Re: BOM a UTF-8
Jirka Kosek 6. 3. 2007 20:17
Nový
│
└ 
Re: BOM a UTF-8
Bredy 8. 3. 2007 02:29
Nový
└ 
Re: BOM a UTF-8
... 6. 3. 2007 20:20
Nový
 
└ 
Re: BOM a UTF-8
Michal Kubeček 7. 3. 2007 21:15
Nový
 
 
└ 
Re: BOM a UTF-8
Dan Ohnesorg 8. 3. 2007 13:20
Nový
 
 
 
└ 
Re: BOM a UTF-8
Michal Kubeček 8. 3. 2007 13:50
Nový
Zajimavy pohled
pepak 6. 3. 2007 20:07
Nový
└ 
Re: Zajimavy pohled
anonymní uživatel 7. 3. 2007 09:24
Nový
Nebezpečí ignorovaných chyb
Radek Burget 6. 3. 2007 20:43
Nový
├ 
Re: Nebezpečí ignorovaných chyb
Petr Staníček 6. 3. 2007 22:03
Nový
├ 
Re: Nebezpečí ignorovaných chyb
Jirka Kosek 6. 3. 2007 22:30
Nový
│
├ 
Re: Nebezpečí ignorovaných chyb
Petr Staníček 6. 3. 2007 23:34
Nový
│
│
└ 
Re: Nebezpečí ignorovaných chyb
Jozef Benko 7. 3. 2007 16:45
Nový
│
│
 
└ 
Re: Nebezpečí ignorovaných chyb
uzivatel 7. 3. 2007 17:44
Nový
│
│
 
 
├ 
Re: Nebezpečí ignorovaných chyb
Jozef Benko 7. 3. 2007 18:51
Nový
│
│
 
 
└ 
Re: Nebezpečí ignorovaných chybRe: Nebezpečí ignorovaných chybRe: Nebezpečí…
dgx 8. 3. 2007 08:08
Nový
│
│
 
 
 
└ 
Re: Nebezpečí ignorovaných chybRe: Nebezpečí ignorovaných chybRe: Nebezpečí…
uzivatel 8. 3. 2007 19:10
Nový
│
└ 
Re: Nebezpečí ignorovaných chyb
tiso 7. 3. 2007 00:22
Nový
└ 
Re: Nebezpečí ignorovaných chyb
Petr 7. 3. 2007 09:39
Nový
Lupa unbook
anonymní uživatel 7. 3. 2007 03:00
Nový
Takýto pohľad na problematiku tu dávno chýbal.
pa3k 15. 3. 2007 20:50
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem