Karl Dubost napsal na W3C blog příspěvek Why HTML 5 Specification Matters?
This is a simple story. The story of an HTML bug. Like every stories, it could start with… Once upon a time, there was a bug.
Karl píše o problému s webem www.bmw.com v prohlížeči Safari. Skutečně, když se na web ze Safari podíváte, moc z něj neuvidíte. Významné weby nemohou prohlížeče jen tak ignorovat, a proto byl problém byl do bugzilly WebKitu nahlášen. Z Firefoxu a Internet Exploreru vypadá web v pořádku, problém se objeví ještě v Opeře.
Celý nefunkční web je způsoben tímto kusem kódu:
<div style="display:none"> <table> <div> <table> </table> </div> </div>
Ach ty tabulko jedna neuzavřená, kdepak nám v tom kódu vlastně končíš?
Protože HTML specifikace přesně neříká, jak se má prohlížeč zachovat v případě neukončené tabulky, chovají se prohlížeče různě. Každý umístí konec tabulky trochu jinde, což v některých případech znefunkční třeba celý web BMW.
Navíc žádná z variant nelze označit za lepší než ostatní, může to být ta, kterou používá Safari a stejně tak ta u Firefoxu.
Tvorbu DOM stromu můžete prozkoumat v nástroji Live DOM Viewer – ukázka. Pokud si zobrazíte ukázku v několika prohlížečích, můžete porovnat odlišně vytvořenou domovou strukturu.
S řešením přichází až připravovaná specifikace HTML5, kterou tvoří W3C ve spolupráci s WHATWG (rozepsanou specifikaci najdete na adrese www.w3.org/html/wg/html5). O ní Karl píše:
HTML 5.0 Editor's draft defines a very precise mechanism for recovering invalid markup. As we can see in the comment about the bug, Dave Hyatt says: „Easy, the html5 spec covers this.“
HTML 5 Specification matters because it creates more interoperability when recovering from errors.
V Safari byl tedy problém vyřešen, upravilo své chování podle HTML5 (oprava je v tuto chvíli dostupná jen v nočních buildech WebKitu).
HTML5 specifikuje chování HTML prohlížečů i v krajních případech, jako jsou nevalidní dokumenty a tag soup. Jakmile prohlížeče HTML5 implementují (a někteří s tím pomalu začali již dnes), podobných problémů by mělo ubývat.
Tahle myšlenka (HTML as she are spoke) napadla nezávisle dva lidi Iana Hicksona z WHATWG a Dan Connollyho z W3C. Není divu, že oba dva mají s HTML5 hodně společného.
Jak by se výše zmíněný dokument parsoval v HTML5 parseru se můžete podívat na experimentální verzi html5lib. Vidíte v něm vytvořený stromeček (nejvíce se asi podobá tomu, co vytváří Firefox) včetně chyb hlášených parserem (dole na stránce).
Zajímavé jsou i komentáře pod Karlovým příspevkem. Asi nejvážnější je připomínka: Invalid HTML markup is still online and not fixed.
Tady je pak otázkou, co je důležitější. Za tu dobu strávenou na Technické evangelizaci jsem pochopil, že se jedná o činnost, která nikdy neskončí, a proto čerstvý vítr HTML5, který by mohl řadu z těchto problémů vyřešit, vítám. Aneb dost již bylo nekonečných problémů se zobrazováním stránek v prohlížečích. HTML5 přijde za 3 roky, doufejme, že řadu ze stávajících problémů vyřeší.
[1] Přínosem by to bylo tak maximálně pro pár technologických onanistů. V reálu by takový požadavek znamenal daleko více problémů než užitku. Příkladem problematických oblastí mohou být WYSIWYG editory, vstupy uživatelů "amatérů" v redakčních systémech, exporty dat z různých aplikací apod. Tam k chybám na vstupu dochází velmi často a představa, že mi sebemenší chyba "zruší" celý web se mi nelíbí a určitě by se nelíbil ani uživatelům, kteří jsou z mého pohledu na prvním místě.
"Ale zesložitění vytváření nových prohlížečů je cesta do pekel. Zlaté XHTML2"
Tím bych si nebyl tak jist. Zatímco HTML5 staví nad něčím, co již dnes webové prohlížeče implementují, XHTML 2.0 se snaží stavět na nové louce. Dokonce se ani moc nesnaží hlásit k XHTML 1.x. Pokud bych měl tedy oba pracovní návrhy (XHTML 2.0 a HTML 5) porovnat z hlediska složitosti implementace, pak by to bylo právě XHTML 2.0, které by vedlo k zesložitění. HTML 5 z 80% lépe popisuje existující HTML 4.0 a z 20% přidává některé změny a některé nové věci. XHTML 2.0 přináší jen sémantické hrátky, reálné potřeby dneška neřeší.
[4] Nechce se mi zabředávat do věcí, co už byly 100x probrány jinde, ale: Jediný rozumný důvod pro nutnost parsovat tag soup je podle mě kompatibilita s existujícím webem a prohlížeči.
Když programuju, taky musím přesně dodržovat syntaxi jazyka, jinak si ani neškrtnu. Když zapisuju PNG, taky to musí být na bit přesně, jinak každý program vyhodí chybu. Všechny nástroje se s formátem musí vyrovnat a problém s tím nikdo zdá se nemá (neslyšel jsem žádné stížnosti).
HTML mohlo být zrovna tak striktiní. Bohužel, od začátku kvůli benevolentním implementacím nebylo, a tak jsme dnes tam, kde jsme. Cesta zpět není, a tak je v tuto chvíli nejlepší řešení standardizace chybového zpracování. Vydávat to ale za správný návrh mi přijde zcestné.
[6] Obávám se, že si nerozumíme. Hovořím v kontextu dneška tj. dnešní situace webu. Nehovořím v kontextu "jak bych si to představoval kdybych začínal od nuly". Jinak řečeno, hovořím o tom, co je dobré vzhledem k existující situaci webu, existujícím implementacím prohlížečů a existujícím dokumentům na webu.
[6] Možná budu za kacíře, ale kdyby HTML bylo striktní v podobě XML well-formedness, možná by neexistoval Web v dnešní podobě, nepsali bychom si blogy a neživili se technologiemi okolo něj. Místo toho by striktní HTML přetrvávalo v některé ze svých raných verzí v akademickém prostředí a my bychom možná četli PDFka na "dokumentových" serverech.
Striktní HTML, tj. nezpracovávané v případě chyby, by nemělo šanci se rozšířit způsobem, jakým se stalo populární to naše neúplné HTML. Vždyť u toho dnešního stačilo vzít notepad, napsat v něm větu, přidat několik značek vytažených z nějaké stránky, uložit a zobrazit v prohlížeči. "Jé, ono to něco dělá, to je super," řeklo si tenkrát hodně lidí a byli nadšení z toho, že vidí výsledek. Okamžitě!
Kolik procent populace tvoří programátoři schopní zapisovat algoritmy v libovolném programovacím jazyce? Kolik lidí v ČR je schopno zapsat bitmapu do PNG? Odpovědi jsou velmi málo a téměř nikdo. Pokud by HTML bylo striktní ("ha, chyba, skončili jsme"), bylo by omezené na podobně malou skupinu technicky znalých lidí. V té naší realitě jej "umí" celá řada lidí, byť se ruční psaní HTML s plynoucím časem stává vzácnější a naopak nastupují WYSIWYG systémy a syntaxe do HTML překládané.
HTML mělo popsat ošetření chybného vstupu, tj. kdy např. značku ignorovat, což se nestalo. HTML5 jen doplňuje tuto kapitolu do stávajícího HTML, protože už tam měla cca 15 let být.
[9] Kdyby bylo HTML striktní, pak by se zapisování HTML kódu nechalo na profících a zbytek by si holt vystačil s WYSIWIG a Wiki. Nástup webu rozhodně nesouvisel s tím, že HTML není striktní. První uživatelé webu byly programátoři, inženýři, vědci, kteří s požadavkem striktnosti žádný problém nemají. HTML5 je jen prodlužování agónie. Bug ala site BMW by neexistoval, pokud by HTML bylo striktní, protože by ta chyba nikdy neopustila webmasterův počítač.
[11] HTML nebylo striktni zejmena proto, ze to nebyl programovaci jazyk pro komunikaci se strojem, ale slouzilo k vyznacovani formatovani (nikoliv semantiky!!!) dokumentu tj. pro komunikaci s lidmi. Navic ti vedci nebyli zdaleka jen programatori.
Navic krizeni ciste formatovacich tagu neni az tak nesmyslne. Logicky muze davat smysl ze text je od druheho do osmeho slova tucne a od tretiho do desateho cervene.
HTML hlavne uskodila nesmyslna slepa ulicka XHTML2
po XHTML1 ktere bylo vcelku logickym krokem k syntaxi xml se msto pridani tolik potrebnych veci pro prakticke vyuziti hlavne jako nove formulare pripadne interaktivni prvky (to, co se ted resi oklikou pres souhrn hacku pod nazvem ajax) nebo treba nativnejsi podpora dalsich dynamickych struktur ala canvas...
ne misto toho se soudruzi rozhodli, ze postupne podle aktualnich potreb budovane a rozvijene html vezmou a zahodi a postavi si neco noveho krasneho a semantickeho (co je semantickeho na div a span??)
pritom naprosto ignorovali vyvoj webu v poslednich letech
[13] Já pořád říkám, že vykročení směr XHTML2 byl pro web dobou temna. Nijak neberu ušlechtilost té myšlenky, kterou v sobě XHTML2 mělo, ale to kdy přišla a jakým způsobem přišla zabrzdilo vývoj webu na několik let. A to ušlechtilost neušlechtilost historie neodpouští .
Věřte, že neuplyne ani deset let, a v naprosté většině textů zabývajících se historií Webu a Internetu se bude těch pár promarněních let mezi strávených v očekávání všespásného XHTML2 označovat za to nejhorší období, kterým kdy web prošel.
A budou mít pravdu.
Myslím že se mýlíte, pane Hauere, zrovna principy "nekřížení závorek" a "uzavírání závorek" by myslím průkopníci webu pochopili bez problémů... web by na tom mohl být daleko lépe kdyby se za odbornost nepovažovala znalost obskurních parsovacích pravidel pro případ neuzavřených a překřížených tagů v tom či onom browseru.
Takhle html směle následuje php kde je za ceněnou mistrovskou znalostí vědomost že když nastavím proměnnou DO_NO_USE_DECIMAL_DOT_BUT_RATHER_COMMA_IF_LOCALE_IS_SOMETHING_STRANGE=1 tak funkce sqrt nevrací odmocninu ale hodnotu násobenou pi^4/e^2...
[9] Adame, nevěřím že překřížené tagy a pár dalších jednoduchých pravidel podobných XML-well-formdness by nějak významně rozšíření webu zabránily. Mám pocit, že většina lidí, co píše stránky ručně, by byla schopna se s prskajícím prohlížečem vypořádat. A zbytek tvůrců používá nástroje typu FrontPage, takže by na tyto problémy nenarazili (pokud by nástroje generovaly striktní kód, což by dělaly, když by musely). Ale nevím, možná na tvém pohledu něco je.
Osobně se na to koukám radši spíš ekonomicky: Kdyby se web vyvíjel striktně, vzrostly by mírně náklady na tvorbu stránek, protože by byla nutná pečlivější práce s HTML. Také by bylo mírně složitější vyvinout nástroje produkující čistý kód místo tag soup. Vyšší náklady = méně stránek, méně nástrojů.
Na druhou stranu by ubylo problémů s kompatibilitou prohlížečů a tedy s laděním stránek. Také by to pomohlo tvůrcům všech nástrojů, které mají HTML jako vstup. Náklady na obojí by tedy mírně klesly. Menší náklady = více stránek, více nástrojů.
Velká otázka je, která z těchto dvou položek je větší, a jak by se pohnuly náklady (a tedy počty stránek, nástrojů a tím i celý vývoj webu) v celkovém součtu.
"Možná budu za kacíře, ale kdyby HTML bylo striktní v podobě XML well-formedness, možná by neexistoval Web v dnešní podobě, nepsali bychom si blogy a neživili se technologiemi okolo něj."
Tak to je/byl IMHO bohuzel obrovsky omyl, ktery ve skutecnosti zpusobil pouze problemy. Prece pozadavek na onu well-formedness je neco tak primitivniho, ze by to s urcitosti mel zvladnout uplne kazdy, vcetne laiku a vylozenych technickych antitalentu. To proste nedava smysl takhle argumentovat!
Otazkou tedy je, proc autori puvodni specifikace HTML zvolili takovou benevolenci. Presnou odpoved neznam, ale mam tuseni, ze duvody one benevolence byly mimo oblast IT.
Myslim si, ze naprava soucasneho tristniho stavu spociva v __postupnem__ odstranovani one prvotni priciny, tzn. zbytecne, az hloupe benevolence. Standardizovani zpusobu, jak osetrovat chybove stavy IMHO nestaci.
[9] A ještě poznámka k tvému předposladnímu odstavci: To, co způsobuje, že programovat umí jen malá část populace není to, že programovací jazyky mají striktní syntaxi, ale to, že se v nich pracuje s abstraktními koncepty. Proměnné, cykly, ify, funcke, třídy, a další věci. Nic z toho v HTML není, proto HTML umí (nebo "umí") víc lidí.
[18] Sjednoceni osetreni chybovych stavu z dlouhodobeho hlediska pravdepodobne stacit nebude, ale v tuhle chvili to je asi nejlepsi krok, kterym zacit (ostatne, uz tu mel byt davno). Uvidi se, kolik problemu to skutecne vyres i a bude se pokracovat dat. HTML5 nebude posledni, prijde HTML6, HTML7...
jenom male dopneni k hezke ekonomicke uvaze:)
"Mám pocit, že většina lidí, co píše stránky ručně, by byla schopna se s prskajícím prohlížečem vypořádat."
Rekl bych, ze prave proto, ze pisou stranky rucne , by byli schopni se s tim prskajicim prohlizecem vyporadat.
Jinak chapu, ze v dobe vzniku prvnich specifikaci HTML, kdy jeste nebyly k dispozici editory automaticky vkladajici/dokoncujici tagy + dalsi 'intellisense' features , mnoha autorum webu prislo pohodlne, kdyz napriklad nemuseli uzavirat <p> tagy. Ale nechapu, ze tvurci specifikaci si neuvedomili, kam ta nekonzistentnost muze vest
[22] Tvurci webu nemeli ani poneti, kam web muze vest 8-)
Pro ty, kdo necetli dnesni http://html456.blogspot.com/2007/07/budoucnost-webu-ocima-jeho-tvurce.html prikladam odkaz na prvni navrh webu. TAKHLE mel vypadat web http://info.cern.ch/Proposal.html
A ještě přidám odkaz na archiv prvních mailinglistů, kde probíhaly diskuse o vývoji TOHO ZAJÍMAVÉHO WEBU http://1997.webhistory.org/www.lists/ www-talk od roku 1991.
Můžete tam najít zprávy typu:
"WWW is an interesting hypertext system from CERN. You can try it out
by telnetting to info.cern.ch (login: www) or by ftp'ing the clients
or servers from that site."
Nebo i zjistit, kdo je zopovědný za porno na webu http://html456.blogspot.com/2007/04/od-obrazku-k-textovemu-pornu.html
Ono neuzavírání tagů může být také z naprosto jednoduché příčiny - tehdy se šetřilo každým bajtem. Linky byly velmi velmi pomalé a stáhnutí každého KB navíc bylo velmi znát.
Druhým důvodem je to, že HTML vychází ze SGML, nikoli z XML, a tam neuzavírání tagů je možné.
Nemůžete ohledně HTML požadovat pravidla XML, protože HTML je postaveno na SGML - předchodci XML, který byl mnohem složitější a mnohem benevolentnější, než je XML.
Důvodem, proč je takový bordel v HTML včetně benevolence chyb je neschopnost W3C řídit standard HTML v minulosti. HTML vznikalo prakticky divoce přidáváním tagů nejprve firmou Netscape, později Microsoft a W3C nebyla schopna vydat žádný promyšlený standard HTML, v podstatě jen shrnula co do HTML nandaly komrční firmy.
Jinak XHTML2 považuji také za největší chybu a za dobu temna, za něco naprosto nepromyšleného, co se doufám nikdy neujme.
[25] S tím SGML je to ještě složitější. Původně z něj HTML nevycházelo (nikde jsem nenašel, zda TBL SGML v tu dobu znal nebo ne), to bylo dodefinováno až později, tak někde v HTML2 nebo HTML3.
HTML5 se dědictví SGML opět vzdává, přesně nevím proč, ale někde snad psali, jaké SGML způsobovalo problémy navíc.
[26] Nikoli, HTML od samého počátku vycházelo ze SGML a jeho autor Tim Berners-Lee sám ze SGML vycházel.
HTML5 se nemůže nikdy úplně dědictví SGML vzdát, protože to by pak nebylo HTML. To je prostě protimluv.
SGML samozřejmě určité problémy způsobuje, protože je to velmi složitý standard.
Stejně tak se nepodařilo ani XML zbavit se úplně tohoto starého dědictví, např. to je důvod, proč DTD není XML dokument, apod..
Jinak hlavním problémem vždycky byla nekompetentnost W3C, jeho standardy ohledně HTML byly zhusta velmi nedostatečné a přímo nutily k rozšiřování. Ono se prakticky nic jiného dělat nedalo, než HTML proprietárně rozšiřovat a prznit. Tato nepraktičnost W3C se projevuje zase v podobě XHTML2, zkrátka pokud bude W3C pracovat na HTML a spol. jako dosud, tak to budou mít implementátoři browserů velmi složité.
HTML5 je krokem vpřed ohledně toho, že definuje, jak se má browser zachovat při chybách, ale to je jen jedna strana mince. Kromě toho je HTML5 ale naprosto rozsáhle obludný standard, který přidává obrovská kvanta dalších věcí do HTML, tak jsem zvědav jak to dopadne v praxi. Podle mě nejbližších mnoho let nebude nikdy existovat browser, který by uměl HTML5 v celé šíři a zase se projeví to co je nemocí snad většiny HTML specifikací - nikdo nebude standard dodržovat na 100%.
[28] O těch začátcích nejsem teď schopen nic rozumného dohledat, pokud máte nějaký odkaz, sem s ním.
Každopádně HTML5 již poslalo směrem k SGML svůj loučící se pohled s tichým přáním "již nikdy více" http://www.whatwg.org/specs/web-apps/current-work/multipage/section-parsing.html#parsing
dokud vsechny prohlizece neimplementuji nejaky parser, ktery rekne bud OK, je to podle (naprosto presne definovaneho) standardu nebo naopak Sorry, error occured on line ... a nedovoli zobrazeni, jako je tomu ted s XML atd., tak se ten zacarovany kruh nikdy nepodari rozetnout.
v reakci na [27] - to ja bych zase zavedl, aby uz od utleho veku bylo kazdemu povinne vstepovano, ze delat z nouze cnost se neslusi...
[29] Co zkusit zadat do google třeba history HTML? A nebo přímo jméno tvůrce?
HTML5 mohlo vydal svůj loučící pohled k SGML jak chce, ale to nic nemění na tom, že HTML je a stále bude na věky věků SGML dokumentem, a nikoli XML dokumentem. Jediné, co může HTML5 udělat je, že nebude parsovat podle SGML pravidel, neboť jsou zbytečně složitá z důvodů toho, že HTML je jen podmnožinou SGML a vymyslet jednodušší parsování. Přeloženo do češtiny, HTML5 mohlo změnit parser dokumentu, ale ne fakt, že HTML je prostě SGML dokument.
Koneckonců je celkem logické, že pokud chtějí důsledně řešit chování při chybových situacích, musí předělat parser a přesně definovat jeho chování. Nicméně parser stále bude obsahovat mnoho pravidel ze SGML chca necha, protože prostě HTML je SGML dokument. Z krávy prase neuděláte.
[30] Takový parser nikdy existovat pro HTML nebude, protože by byl neživotaschopný a prohlížeč, který by jej použil by lidé nepoužívali.
[31] Takže TBL SGML znal, děkuji. Nedokážu teď najít, kdy přesně došlo k definování celého HTML podle SGML, pamatuji si, že na začátku to ještě nebylo.
Neznám SGML, abych popsal detaily, ale z některých diskusí vím, že tohle byl právě problém, zda HTML5 bude správným SGML dokumentem nebo nikoliv. Myslím, že to nakonec skončilo, že již nebude, resp. že již není celý onou podmnožinou SGML, ale tohle nedokážu pořádně rozebrat.
[32] HTML5 bude správným SGML dokumentem, pokud je bez chyby přesně podle specifikace. Pokud dodržíte specifikaci, je každé HTML správným SGML dokumentem a jako se SGML se s ním dá pracovat.
Pokud ovšem HTML5 bude muset opravovat chyby v dokumentu (což je ta vlastnost, kterou o sobě řve nejvíc do světa), pak se již nejedná o platný SGML dokument. Pokud se tedy HTML5 rozhodlo pracovat i s chybným dokumentem, logicky nemůže parsovat podle SGML parseru, ale musí vymyslet parser vlastní.
Tady není co rozhodovat, ani komise to nemusí rozebírat ani rozhodovat, to je prostě tak z podstaty (to už bychom mohli mít komise na to, která rozhoduje, jestli má ráno vycházet slunce, nebo jinou samozřejmou věc).
[33] no jelikoz prohlizece nepouzivaji ani obecny SGML parser (mimochdem je vubec neco takoveho?) ani XML parser, tak je to celkem jedno
argument o vlastnim prohlizeci prilis neobstoji, protoze i ten dnes musi (pokud chce byt pouzivany) resit nejak 'chyby'
a na argument o tom, ze to je prilis sozite na implementaci odpovidam protiargumentem - ano a jeste slozitejsi je implementovat kaskadove styly a javaskript pripadne lahudky jako canvas...
tvorba prohlizece uz zkratka neni sranda z dob html 3, kdy se prakticky jenom prevadel laintext se znackami na rtf
hlavne odlisujme nekolik vlastnosti HTML5:
1) nova funkcionalita pro rozhrani aplikaci - velmi velmi potrebna
2) zpetna kompatibilita - velmi velmi uzitecna
3) non-xml pripadne non-xml syntaxe (resp. ruzne urovne) - tak trochu stouchanec do zad od praktiku teoretickym puristum, kteri by si pro zpetne lomitko u neparoveho tagu nechali vrtat koleno a kteri z velke casti pohrbili vyvoj html v poslednich par letech
[31] omlouvam se za nepresnost, ktera mozna zpusobuje nedorozumeni. S parserem samozrejme mysleno ve vztahu k budoucim prohlizecum (a v nejakem 'develpopment / normal modu', pricemz defaultni nastaveni prohlizece by mohlo byt neco jako 'compatible'). Ze je treba zachovat zpetnou kompatibilitu je v teto diskusi urcite jasne uplne kazdemu. Chtel jsem jenom poukazat na onen zacarovany kruh, ktery je snad take jasny kazdemu v teto diskusi.
[34] Ono ani není důležité, že prohlížeče nepoužívají obecný SGML parser, jako fakt, že pomocí SGML nástrojů lze s HTML pracovat. Prostě validní HTML je platným SGML dokumentem.
Dnešní prohlížeče jsou velmi složité taky kvůli přehršli technologií, které musejí podporovat. Souhlasím, že tvorba prohlížeče není sranda. Ale právě proto se také tvůrci prohlížeče velmi rozmýšlejí, než implementují jakoukoli další, nepoužívanou technologii, protože by si tak komplikovali život. Tenhle fakt podle mě zláme nakonec vaz XHTML2, které nikdy a nikde nebude implementováno.
[35]
ad 1) akorát je jí velmi mnoho - takže pochybuji, že s tím nebudou problémy v praxi
ad 2) souhlas
ad 3) prakticky také souhlas, dodnes mě vlastně názory dnešních puristických webdesignérů docela štvou, neboť většina jejich názorů jsou spíš ničím nepodložená dogmata
[2] zajímavé, že jste si tak jist. Můj prohlížeč, který budu teprve psát, už něco obsahuje? Já nepovažuji stávající cca čtyřku hlavních browserů za konečný stav. A naopak si umím představit že nový prohlížeč
bude na staré stránky kašlat a zaměří se jen na některý zúžený segment xhtml2
Martin Hassman ex-biochemik, umělecký programátor a publicista. Spoluzakladatel CZilly, zakladatel Zdrojáku, správce HTML5.cz, organizátor hackathonů, čekovacích muzejních nocí aj. akcí.
Přečteno 23 944×
Přečteno 23 424×
Přečteno 20 399×
Přečteno 19 616×
Přečteno 19 478×