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

Mix posvátné validity a X

Vytváříte stránky v XHTML? W3C vám již sedm let záměrně lže. Pokusím se vyvrátit mýtus, bez jehož existence by se dnes o XHTML zřejmě nikdo nezajímal. Výsledkem bude soulad teorie a praxe, který spoustě webmasterů nebude vonět.

V tomto článku se zaměřím na XHTML dokumenty posílané s MIME typem text/html. Posíláte-li své stránky všem návštěvníkům s XML MIME typem, berte následující text jako historickou povídku a přečtěte si raději sci-fi z minulého týdne.

Mýtus č. 5: XHTML je zpětně kompatibilní s HTML

Každá zpětná kompatibilita vyžaduje alespoň drobné společné rysy mezi něčím novým a něčím překonaným. Novinka nemusí nutně dodržovat všechna pravidla svého předchůdce, stačí, když staví na jeho stabilním základu. Vývoj HTML probíhal plynule, jeho očíslované verze můžeme považovat za dostatečně zpětně kompatibilní i přesto, že dokument psaný v HTML 4.01 většinou nevyhovuje všem požadavkům v doporučení HTML 3.2. Ačkoliv se k tomu HTML nikdy normativně nedoznalo, stojí na podobných zákonitostech jako XHTML modularizace (= „neznámé ignoruj“). Jeho stavební kameny (syntaxe, parsovací gramatika) zůstávají neměnné, mění se pouze sortiment elementů a atributů.

Jazyk XHTML se, jakožto deklarovaný následník trůnu majoritního hypertextového značkovacího jazyka, snaží nahradit jen ty základní stavební kameny. Proto by také měl mít jiný MIME typ. V dobách, kdy se začínalo o XHTML mluvit, tuhle drobnost všichni přehlíželi. Panovalo přesvědčení, že se v dokumentu jenom upraví <!DOCTYPE> + pár dalších drobností a že se časem objeví prohlížeče méně tolerantní k nově vymyšleným prohřeškům. Dodnes takto mnoho lidí uvažuje. Možná i vy. Zkusím malý test. Pohleďte na následující zdrojový kód:

<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title></title>
</head>
<body>
<p>Takhle budete vypadat, až článek dočtete:
<img src="bez-oka.gif" alt="Zelený obličej"></p>
</body>
</html>

Představte si, že takovou stránku posílám s MIME typem text/html. A že se při tom chválím, jakou jsem odvedl dobrou práci. Vy snad nesouhlasíte? Říkáte cosi o chybějících lomítkách v elementech <meta> a <img>? Nechápu vás. Mně tam přece žádná lomítka nechybí. Fakt.

Můžete mi snad nastínit nějaký scénář, kdy se mi vynechání lomítek vymstí? Jsem si vědom toho, že to není správně sestavený XML dokument, takže nelze použít XML nástroje. Stejně tak to není platný PNG obrázek, takže na něj nelze použít „požírače“ obrázků. To je mi jedno, návštěvník na tu stránku neleze se speciálním programem. Užívá webový prohlížeč, který má MIME typy respektovat. Žádný prohlížeč nesmí při MIME typu text/html lomítka vyžadovat. Porušil by HTML specifikaci. Má stránka se nespoléhá na blbuvzdornost prohlížečů, ale na zcela korektní interpretaci základů HTML. Tak co, pořád na ní vidíte mouchy?

Zakleté lomítko

XML syntaxe samozřejmě není plně kompatibilní s HTML syntaxí. Konsorcium tvrdí, že existuje průnik, který musí fungovat shodně při HTML i XML MIME typech:

„XHTML dokumenty mohou být zapsány tak, aby běžely stejně či lépe než dříve v existujících vyhovujících HTML 4 prohlížečích stejně jako v nových vyhovujících XHTML 1.0 prohlížečích.“

Zdroj: Doporučení XHTML 1.0

.

Onomu průniku se blíže věnuje nenormativní Dodatek C v doporučení XHTML 1.0. Dodatkem C se nyní řídí cca 8 procent ze všech webových stránek. V praxi kompatibilita netrpí, těch osm procent si „trénuje“ na potenciální budoucnost (ač si mnozí myslí, že už v té budoucnosti jsou). I teorie by byla v pořádku, v souladu s praxí. Kdyby vám ovšem konsorcium nelhalo.

Vyhovující HTML 4 prohlížeč nesmí lomítko v prázdných elementech přehlížet. Ono totiž má svoji funkci. Ukončuje počáteční značku. Jde o takzvaný NET zápis. Jakýkoliv HTML element můžete podle specifikace zapsat buď jako <značka>Obsah</značka>, nebo jako <značka/Obsah/. U prázdných elementů pak buď jako <značka>, nebo jako <značka/. Z čehož plyne, že <hr/> je horizontální čára následovaná většítkem. Tak praví IETF standard HTML 2.0, tak praví W3C doporučení HTML 3.2, tak praví obě W3C doporučení HTML 4.0, tak praví W3C doporučení HTML 4.01.

Ačkoliv tomuto druhu zápisu běžné prohlížeče neholdují, stále je normativně platný. Žádný prohlížeč není oficiálně oproštěn od požadavku podporovat jej. To, že existuje nějaké další doporučení, které by rádo přidělilo lomítku při úplně jiném značkovacím jazyku jiný význam, absolutně nic neznamená. HTML prohlížeč – nový, starý, tlustý, tenký, chytrý, hloupý, s kometou i bez – by měl následovat HTML doporučení.

Je přinejmenším zvláštní, že XHTML 1.0 — specifikace připravovaná souběžně s HTML 4.01 stejnou pracovní skupinou — říká uklidňující nesmysly o vyhovujících HTML 4 prohlížečích a pak vyloženě nabádá webmastery ke zneužívání nedostatečné podpory HTML v těch nevyhovujících.

Zmíněných osm procent stránek, co je psáno XML syntaxí při MIME typu text/html, se nespoléhá na blbuvzdornost prohlížečů, ale na jejich chyby. Užitá lomítka v zápisech <img/>, <hr/>, <link/>, <meta/> mají jiný význam, než autoři předpokládají. Můžu vám nastínit triviální scénář, kdy se mrzačení syntaxe vymstí: stačí, když libovolný výrobce prohlížeče svoji chybu napraví. Chcete přece, aby prohlížeče dodržovaly webové standardy, ne?

Nyní na mě asi část z vás kouká jako na zfanatizovaného standardizačního blázna, který vidí velký teoretický výkal tam, kde v praxi kvetou pampelišky. Vězte, že moc dobře vím — stejně jako vy — že si žádný rozumný výrobce prohlížeče netroufne dodržet ony „nevhodné“ pasáže HTML 4. Přesto se domnívám, že se na tu hromádku, co se schovává pod pampeliškami, brzy mnoho lidí zblízka podívá.

Pravidla HTML nejsou směrodatná výhradně pro známé desktopové prohlížeče. NET zápis by měly pochopitelně správně podporovat i hlasové čtečky a jiné alternativní nástroje, s nimiž sjíždějí hypertextové vody minority. Stejně tak roboti. Nejen ti vyhledávací.

Existuje jeden robot, který má stoprocentní dodržování syntaxe ve své pracovní smlouvě. Jeho posláním je upozorňovat webmastery na chyby. Během posledních let si získal vynikající renomé nejen u dodavatelů kódu stránek, ale i u objednavatelů. Stal se metlou pro začátečníky a vizitkou pro profesionály. Ano, je to on! Na scénu přichází slavný W3C Validátor!

W3C Validátor lže

Navzdory občasnému skeptickému reptání známých osobností je W3C Validátor dost kvalitní kousek softwaru. Většina nedostatků, které jsou mu vytýkány, pochází z omezení architektury či z neinformovanosti těch, kdo vytýkají.

Ačkoliv se mu běžně říká (X)HTML Validátor, pod jeho kapotou vrčí robustní SGML/XML validující parser. Nestará se o to, co validuje. Čapne do jedné ruky odkázanou definici typu dokumentu (DTD), do druhé dokument a tou třetí vám čmáře na obrazovku vše, co se mu na kombinaci DTD a dokumentu nezdá.

Formát DTD pochází ze SGML a jeho základy jsou v XML podobné. Popisuje elementy, jejich povolené obsahy, atributy, (omezeně) i typy atributů a entity. Nepopisuje ovšem syntaxi, tedy ty základní stavební kameny jazyka. Nenajdete v něm žádný příkaz, který by řekl „hodnoty atributů musí být vždy v uvozovkách“ nebo „na velikosti písmen záleží“. Zrovna tak DTD neříká, že lomítko značí samouzavírací značku nebo NET zápis. Syntaxe je určená vyšším protokolem. Zpravidla MIME typem.

Přiložíte-li k HTML dokumentu DTD XHTML 1.0 Strict, validátor by ji správně měl pochopit jako DTD pro HTML dokument. To jsem udělal já ve své ukázce kódu na začátku článku. Co na ni říká nástroj konsorcia?

validita 1

Ano, dokument není validní. Ale ten důvod? Chybí lomítka?! Hloupost. Lomítka tam být nemají — přece nebudu spoléhat na vadné prohlížeče jako těch trénujících osm procent.

V březnu roku 1999 byl W3C Validátor úmyslně pokažen. Přestal ctít MIME typ text/html, volí při něm parser podle toho, jestli najde ve veřejném identifikátoru <!DOCTYPE> deklarace řetězec „XHTML“. Obskurní chování. Paradoxně i sama pracovní skupina zodpovědná za XHTML něco takového odsuzuje. Ptáte se, proč takto nejde XHTML rozeznat?

K tomu, abyste vůbec našli <!DOCTYPE>, musíte kus dokumentu rozebrat. Před deklarací mohou být umístěné komentáře a procesní instrukce, jejichž syntaxe se rovněž mezi HTML a XML změnila. Lze tedy vytvořit dokument, v němž HTML parser uvidí jinou deklaraci než XML procesor. Validátor by měl — stejně jako vyhovující prohlížeč — vnímat syntaxi podle MIME typu, jinak je jeho vyhodnocení zavádějící. V případě W3C Validátoru skutečně zavádějící je a lidé kvůli němu neoprávněně upozorňují na chyby v HTML parserech prohlížečů.

Jak chybu obejít?

Změním v kódu své bezchybné stránky deklaraci z této:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

… na tuto:

<!DOCTYPE html SYSTEM
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Jelikož je odkázaná DTD stále stejná, měl by bezchybný validátor ukázat totožný výsledek. Robot od konsorcia náhle změnil názor:

validita 2

Tak se mi to líbí, nula chyb. Červené hlášky se bohužel nikdy zbavit nemůžu, neb je odkázaná DTD vadná: postrádá informaci o volitelnosti značek, která je v HTML DTD povinná. I těch osm trénujících procent při správném validování obdrží jiné vysvědčení, než na jaké jsou zvyklá:

validita 3

Styď se, zasněná menšino. Nejenže se spoléháš na chyby klasických prohlížečů, ty se opíráš i o chyby validátoru. Za nadbytečná lomítka skončíš v pekle, kde si můžeš s nevrlými nealtoidy, arogantními antiampersandéry a chlípnými bezdoktajpníky popovídat o smyslu validity. Neznalost specifikací neomlouvá.

Zauvažujte, jak by asi dnes vypadal obor webdesignu, kdyby konsorcium neklamalo Dodatkem C a validátorem. Nástroj ověřující dodržování specifikací se stal pro webmastery mnohem mocnější než specifikace samotné. Když vám kodér užívající text/html řekne, že ho XHTML nutí vždy psát koncové značky, představí si červenou hlášku validátoru, nikoliv fatální chybu prohlížeče. Trénujících osm procent totiž rádo validuje. Když se chce začátečník učit XHTML, validuje. Když chce zadavatel prověřit dodané dílo, validuje.

Opraví-li nyní někdo klasický prohlížeč, poškodí spolupráceschopnost a udělá z návštěvníků rukojmí. Opraví-li nyní někdo validátor, uvede praxi a teorii do souladu, což je určitě chvályhodný krok, který z definice musí každého zastánce validity potěšit. Nebo ne? Uvidíme.

Blogujte na Lupě

Chcete mít vlastní blog o tématu kolem světa IT a internetu? Blogujte na Lupě a buďte na titulní stránce Lupy. Registrujte se na blog.lupa.cz.

       

Šachmat

Ať už je budoucnost černá nebo růžová, XHTML dodávané jako text/html je zavrženíhodný švindl bez perspektivy.

Český validátor opravím tento čtvrtek.

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ů

Budoucnost cerna nebo ruzova
Martin Hassman 13. 3. 2007 07:51
Nový
└ 
Re: Budoucnost cerna nebo ruzova
Rdm 13. 3. 2007 08:09
Nový
 
└ 
Re: Budoucnost cerna nebo ruzova
AlešD 13. 3. 2007 08:20
Nový
dík za článek
Noname 13. 3. 2007 10:34
Nový
Kritici, ukazte sa!
Tomas 13. 3. 2007 10:44
Nový
└ 
Re: Kritici, ukazte sa!
Flasi 13. 3. 2007 10:53
Nový
 
└ 
Re: Kritici, ukazte sa!
Jindrich Ptacnik 13. 3. 2007 17:59
Nový
 
 
├ 
Re: Kritici, ukazte sa!
Flasi 13. 3. 2007 20:00
Nový
 
 
└ 
Re: Kritici, ukazte sa!
Jozef Benko 13. 3. 2007 20:06
Nový
 
 
 
└ 
Re: Kritici, ukazte sa!
uzivatel 16. 3. 2007 06:43
Nový
 
 
 
 
└ 
Re: Kritici, ukazte sa!
anonymní uživatel 18. 3. 2007 18:37
Nový
 
 
 
 
 
└ 
Re: Kritici, ukazte sa!
HK Maly 19. 3. 2007 08:18
Nový
Chybí obrázek 3
xyz 13. 3. 2007 11:07
Nový
└ 
Re: Chybí obrázek 3
Aleš Miklík 13. 3. 2007 16:33
Nový
HTML je překonané
Ritchie 13. 3. 2007 12:51
Nový
├ 
Re: HTML je překonané
ufik 13. 3. 2007 13:12
Nový
│
├ 
Re: HTML je překonané
Ritchie 13. 3. 2007 14:46
Nový
│
│
└ 
Re: HTML je překonané
anonymní uživatel 13. 3. 2007 16:03
Nový
│
└ 
Re: HTML je překonané
Ritchie 13. 3. 2007 14:52
Nový
│
 
└ 
Re: HTML je překonané
Martin Mareš 13. 3. 2007 16:22
Nový
│
 
 
└ 
Re: HTML je překonané
Jirka Kosek 13. 3. 2007 16:38
Nový
│
 
 
 
└ 
Re: HTML je překonané
Martin Mareš 13. 3. 2007 17:02
Nový
│
 
 
 
 
├ 
Re: HTML je překonané
so 14. 3. 2007 00:27
Nový
│
 
 
 
 
└ 
Re: HTML je překonané
ufik 14. 3. 2007 12:46
Nový
│
 
 
 
 
 
└ 
Re: HTML je překonané
Martin Mareš 16. 3. 2007 12:04
Nový
│
 
 
 
 
 
 
├ 
Re: HTML je překonané
ee 17. 3. 2007 11:54
Nový
│
 
 
 
 
 
 
│
├ 
Re: HTML je překonané
Dero 17. 3. 2007 14:56
Nový
│
 
 
 
 
 
 
│
│
└ 
Re: HTML je překonané
ee 18. 3. 2007 10:08
Nový
│
 
 
 
 
 
 
│
└ 
Re: HTML je překonané
HK Maly 19. 3. 2007 08:25
Nový
│
 
 
 
 
 
 
│
 
└ 
Re: HTML je překonané
ee 27. 3. 2007 18:23
Nový
│
 
 
 
 
 
 
│
 
 
└ 
Re: HTML je překonané
HK Maly 27. 3. 2007 19:35
Nový
│
 
 
 
 
 
 
└ 
Re: HTML je překonané
HK Maly 19. 3. 2007 08:24
Nový
├ 
Re: HTML je překonané
Petr 13. 3. 2007 14:11
Nový
│
├ 
Re: HTML je překonané
Ritchie 13. 3. 2007 15:02
Nový
│
│
├ 
Re: HTML je překonané
Petr 13. 3. 2007 15:53
Nový
│
│
│
└ 
Re: HTML je překonané
uzivatel 16. 3. 2007 06:49
Nový
│
│
│
 
└ 
Re: HTML je překonané
Jozef Benko 17. 3. 2007 11:09
Nový
│
│
│
 
 
└ 
Re: HTML je překonané
uzivatel 17. 3. 2007 17:03
Nový
│
│
│
 
 
 
└ 
Re: HTML je překonané
LukeeLukee 17. 3. 2007 18:51
Nový
│
│
│
 
 
 
 
└ 
Re: HTML je překonané
uzivatel 18. 3. 2007 02:30
Nový
│
│
│
 
 
 
 
 
└ 
Re: HTML je překonané
Jozef Benko 18. 3. 2007 09:40
Nový
│
│
└ 
Re: HTML je překonané
Papouch 13. 3. 2007 17:42
Nový
│
│
 
└ 
Re: HTML je překonané
ee 17. 3. 2007 12:10
Nový
│
└ 
Re: HTML je překonané
BoodOk 13. 3. 2007 15:42
Nový
│
 
└ 
Re: HTML je překonané
anonymní uživatel 13. 3. 2007 15:59
Nový
│
 
 
├ 
Re: HTML je překonané
J 14. 3. 2007 17:05
Nový
│
 
 
│
└ 
Re: HTML je překonané
anonymní uživatel 18. 3. 2007 18:43
Nový
│
 
 
└ 
Re: HTML je překonané
HK Maly 19. 3. 2007 08:34
Nový
└ 
Re: HTML je překonané
Martin Mareš 13. 3. 2007 16:18
Nový
 
└ 
Re: HTML je překonané
ee 17. 3. 2007 12:21
Nový
 
 
├ 
Re: HTML je překonané
anonymní uživatel 18. 3. 2007 18:48
Nový
 
 
└ 
Re: HTML je překonané
gofry 29. 6. 2007 20:20
Nový
NET notace SGML
Huba buba 13. 3. 2007 14:40
Nový
├ 
Re: NET notace SGML
dgx 13. 3. 2007 14:49
Nový
├ 
Re: NET notace SGML
Michal Kubeček 13. 3. 2007 15:14
Nový
│
└ 
Re: NET notace SGML
Filip Jirsák 13. 3. 2007 18:25
Nový
│
 
└ 
Re: NET notace SGML
Michal Wiglasz 13. 3. 2007 19:40
Nový
│
 
 
├ 
Re: NET notace SGML
Noname 13. 3. 2007 21:07
Nový
│
 
 
└ 
Re: NET notace SGML
Filip Jirsák 14. 3. 2007 21:07
Nový
│
 
 
 
└ 
Re: NET notace SGML
Michal Kubeček 14. 3. 2007 22:47
Nový
│
 
 
 
 
└ 
Re: NET notace SGML
Filip Jirsák 15. 3. 2007 09:53
Nový
│
 
 
 
 
 
└ 
Re: NET notace SGML
Chamurappi 15. 3. 2007 16:15
Nový
│
 
 
 
 
 
 
└ 
Re: NET notace SGML
Filip Jirsák 15. 3. 2007 19:06
Nový
└ 
Re: NET notace SGML
Jirka Kosek 13. 3. 2007 16:34
Nový
Rozpor norem
Jakub Vrána 13. 3. 2007 15:07
Nový
├ 
Re: Rozpor norem
Martin Mareš 13. 3. 2007 16:23
Nový
│
└ 
Re: Rozpor norem
Jakub Vrána 13. 3. 2007 17:05
Nový
│
 
└ 
Re: Rozpor norem
Martin Mareš 13. 3. 2007 17:15
Nový
└ 
Re: Rozpor norem
Michal Kubeček 13. 3. 2007 16:52
Nový
 
└ 
Re: Rozpor norem
Jakub Vrána 13. 3. 2007 17:02
Nový
google statistika
jx0 13. 3. 2007 16:54
Nový
Prolhaní imperialisté!
Vladimír Saur 13. 3. 2007 17:27
Nový
├ 
Re: Prolhaní imperialisté!
anonymní uživatel 13. 3. 2007 20:03
Nový
└ 
Re: Prolhaní imperialisté!
Chamurappi 14. 3. 2007 05:40
Nový
 
└ 
Re: Prolhaní imperialisté!
Vladimír Saur 14. 3. 2007 10:55
Nový
 
 
├ 
Re: Prolhaní imperialisté!Re: Prolhaní imperialisté!
dgx 14. 3. 2007 14:18
Nový
 
 
│
├ 
Re: Prolhaní imperialisté!Re: Prolhaní imperialisté!
... 14. 3. 2007 19:52
Nový
 
 
│
└ 
Re: Prolhaní imperialisté!Re: Prolhaní imperialisté!
ee 17. 3. 2007 12:42
Nový
 
 
│
 
└ 
Re: Prolhaní imperialisté!Re: Prolhaní imperialisté!
anonymní uživatel 18. 3. 2007 18:53
Nový
 
 
└ 
Re: Prolhaní imperialisté!
Chamurappi 15. 3. 2007 04:44
Nový
 
 
 
└ 
Re: Prolhaní imperialisté!
OB 18. 3. 2007 00:52
Nový
 
 
 
 
├ 
Re: Prolhaní imperialisté!
OB 18. 3. 2007 00:55
Nový
 
 
 
 
├ 
Re: Prolhaní imperialisté!
OB 18. 3. 2007 01:22
Nový
 
 
 
 
└ 
Re: Prolhaní imperialisté!
HK Maly 22. 3. 2007 09:01
Nový
Žabomyší válka
Filosof 17. 3. 2007 19:07
Nový
└ 
Re: Žabomyší válka
Lukee 17. 3. 2007 22:31
Nový
 
└ 
Re: Žabomyší válka
anonymní uživatel 18. 3. 2007 22:17
Nový
validator.w3.cz nepracuje správně
Jirka Kosek 18. 3. 2007 22:26
Nový
└ 
Re: validator.w3.cz nepracuje správně
Chamurappi 19. 3. 2007 00:32
Nový
 
├ 
Re: validator.w3.cz nepracuje správně
Jirka Kosek 19. 3. 2007 11:36
Nový
 
└ 
Re: validator.w3.cz nepracuje správně
Pavel Tyl 22. 3. 2007 10:27
Nový
Klobouk dolů odvaze šéfredaktora Lupy
Martin Kozák 19. 4. 2007 00:45
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