Internet Info, s.r.o. Lupa Root Měšec Podnikatel DigiZone Slunečnice Vitalia new Bomba Navrcholu Weblogy Jagg Woko Dobrý web Computer.cz SK: MojeLinky


Lupa.cz » Rubriky » Webdesign » Mix posvátné validity a X

Mix posvátné validity a X

Chamurappi – 13. 3. 2007 6:25

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."

.

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.

Š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.info kritizuje a zároveň nehorázně porušuje webové standardy, za což se ani trochu nestydí.

Workshop uživatelského testování použitelnosti

DW - Školení použitelnosti
  • Dokonalý web sám od sebe nikdo nevymyslí.
  • Otestujte své řešení se skutečnými uživateli.
  • Naučíme vás, jak testovat rychle, levně a efektivně.
  • Během testování může moderátor udělat desítky chyb - vyvarujte se jich

Detailní informace o kurzu »

Názory

Sledování názorů

Registrovaným uživatelům nabízíme upozornění na nové názory e-mailem. Prosím, přihlaste se nebo se zaregistrujte.

Přehled názorů

Nastavení kvality: Vlastní Vše 2 3 4 5 6 7 8 9
Budoucnost cerna nebo ruzova Martin Hassman 13. 3. 2007 7:51 Nový
   Re: Budoucnost cerna nebo ruzova Rdm 13. 3. 2007 8:09 Nový
   Re: Budoucnost cerna nebo ruzova AlešD 13. 3. 2007 8: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 6:43 Nový
   Re: Kritici, ukazte sa! anonymní uživatel 18. 3. 2007 18:37 Nový
   Re: Kritici, ukazte sa! HK Maly 19. 3. 2007 8: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 0: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 8: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 8: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 6: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 2:30 Nový
   Re: HTML je překonané Jozef Benko 18. 3. 2007 9: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 8: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 9: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 5: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 4:44 Nový
   Re: Prolhaní imperialisté! OB 18. 3. 2007 0:52 Nový
   Re: Prolhaní imperialisté! OB 18. 3. 2007 0:55 Nový
   Re: Prolhaní imperialisté! OB 18. 3. 2007 1:22 Nový
   Re: Prolhaní imperialisté! HK Maly 22. 3. 2007 9: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 0: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 0:45 Nový
Zobrazit kvalitníZobrazit všePřidat

Další články v rubrice Webdesign

Vodafone_CZ na Twitter

Vodafone_CZ: @adamkopp MMS nabízíme momentálně za nějvýhodnější cenu na trhu - 1 Kč v balíčku 77 MMS za 77 Kč měsíčně. Bohužel se neodečítají z kreditu.
Dnes 11:47

Vodafone_CZ: @AdamVyborny Ano, internet tetherign u nás funguje. Windows mobile určitě, iPhone s největší pravděpodobností taktéž.
Dnes 11:45

Vodafone_CZ: @aldapo Dobrý den, bližší informace k franšízovému prodeji Vodafonu naleznete zde http://bit.ly/bKoPhM
Dnes 11:42