Mnoho nevalidních konstrukcí má již přímo ve specifikaci definované chování.
Řekl bych, že vykuchat z kódu <script> je v HTML (bez X) práce pro jeden regulární výraz a vyřadit atributy událostí na elementech rovněž. Nevím, oč jednodušší by takový úkon byl, kdyby prohlížeče netolerovaly nevalidní zápis. Spíš by byl složitější, protože kultivovaně odmazat nevhodný atribut dá více práce než jej porouchat.
„nikdy nemate jistotu, ze ho budete interpretovat stejne jako oni“
Jak kdy. Jak kdo.
„Existuje spousta nevalidnich zapisu, ktere prohlizece "nejak" opravuji“
V praxi se „používá“ necelá třicítka chyb. Až na překřížení elementů bývají opravy docela jednoznačné.
„typu neuzavrene uvozovky u atributu“
K takové chybě může dojít jen na konci dokumentu, jinak ouvozovkovaná hodnota atributu vždy končí uvozovkami. V tom mají všichni jasno. Potom je otázka, co se smetím, které je uvnitř značky a neodpovídá zápisu atributu, ale i na ni je docela jednoduchá odpověď: neznámé ignoruj.
„neuzavrene zacatky tagu "<abc <b>text</b>"“
To je validní. (Pominu-li, že element abc neexistuje.)
Velkým problémem vyznavačů validity je, že svoji modlu příliš dobře neznají a nevalidní kód démonizují tak vytrvale, až se ho sami bojí. Pak tu v diskusi padají silná slova o anarchii, o šroubkách a o matičkách. Že je Procházkův článek napůl vykradený je každému ukradené, ale odpůrce validity byste kamenovali.
Ironií je, že za poslední tři roky jsem napsal jen jeden validní web.
„A jinak kultivovane odmazat atribut neni vubec problem...“
Není, pokud víte, kde končí počáteční značka. Jste si jist, že to víte?
„"se v praxi pouzivaji" (to zni, jako ze dokonce prasite zamerne?!)“
Některé chyby dělám záměrně, za jiné bych zabíjel. Mám svůj osobní „standard kvality“, který má s validitou pár společných rysů.
„ale vsechny, ktere se mohou vyskytnout.“
Ostatní prohřešky proti validitě vznikají jen v prostředí vyhovujícího parseru. Takový naštěstí žádný prohlížeč nemá.
„Neuzavrene uvozovky: Hm, jeste to tak vysvetlit vyrobcum prohlizecu“
Platí přesně, co jsem řekl. Vyrobil jste si malý pokusný dokument s neuzavřenou uvozovkou na konci dokumentu a ano, na tuhle velice vzácnou chybu reagují prohlížeče různě.
„Neuzavrene zacatku tagu: Dtto:“
Opakuji: neuzavřené počáteční značky jsou validní. Za nekompatibilitu nemůže „error recovery“, ale „error“.
„Firefox ukaze text, IE to ukaze plain: text“
Vím, nicméně chování je ve specifikaci jasně dané — Firefox se tím řídí, Explorer ne. To by měl Explorer říct „tipuji, že tenhle kód je špatně, tak ho odmítnu“, i přesto, že špatně není?
„bezte do libovolneho portalu a reknete, ze jim vyresite to co neumely vyresit jejich tymy inzenyru - 100% odstranovani skriptu. Urcite budou skakat nadsenim do stropu :-)“
Inženýři neschopní stoprocentně odstranit skripty si nemohou dovolit takový luxus, jako je strop.
Proceduru na vyřazení skriptů vám rád vyrobím, pokud mi slíbíte, že v ní zkusíte najít slabé místo — tedy něco, s čím nepočítám. OK?
„t.j. aby byl dokument naparsovatelny na tagy / atributy / text bez nutnosti hadat, co tim asi uzivatel myslel“
Též hlasuji pro jednoznačnost. Validní kód v kombinaci s nevyhovujícími prohlížeči ji ovšem nezaručuje.
„ja ukazal priklad, kdy mame velmi dobry duvod parser HTML psat“
Ukázal jste příklad, kdy potřebujete zkrotit dokument před jeho předhozením parseru prohlížeče. Kdybyste si napsal celý vlastní HTML parser (ne filtr) a prohnal skrze něj nebezpečný obsah, tak se z chyb v kódu zotavíte podle sebe a k návštěvníkovi pošlete zpětně poskládanou syntakticky čistou podobu, nad níž máte stoprocentní kontrolu.
„A pokud jde o neznalosti, zda se mi, ze je zatim prokazuji spis zastanci nevalidity“
V tomhle nemám pravdu?
„Odmazat: A potrebuji to vedet?“
Vy umíte mazat atributy z počáteční značky, aniž byste věděl, kde ta značka (ne element) končí?
Podle specifikace může taková značka končit většítkem, lomítkem nebo znakem před menšítkem. Podle Mozilly může končit většítkem nebo znakem před menšítkem. Podle Exploreru může končit většítkem. Představte si tento validní kód:
<p onmouseover="zničit(počítač)" / onmouseout="vytrhat(zuby)" < onclick="vykrást(účet)">Ahoj
Které nebezpečné části smažete, aniž byste poškodil obsah odstavce?
Kdybych psal XML parser, tak bych se na DTD vybodl. Vyhovující XML procesor sice musí umět interní podsadu DTD rozebrat, ale tu skoro nikdo nepoužívá, takže bych půlku specifikace obětoval, aniž by si toho běžný smrtelník všiml.
„Není jednoduchý, že? A teď dodělejte zotavení z chyby!“
Nevalidní XML dokument funguje úplně normálně, dokud je správně sestavený (well-formed), z prohřešků proti validitě se parser nepotřebuje zotavovat.
Co se týče správného sestavení, tak tam by šla tolerance dodělat snadno:
Na každé místo, které vyvolává chybovou hlášku, jde dosadit docela primitivní korekci. Ano, parser pak bude složitější, ale docela zanedbatelně. Běžné XML nástroje se ze syntaktických chyb nezotavují nikoliv proto, že by to bylo obtížné nebo nemožné, ale proto, že to zakazuje specifikace.
Jak souvisí XML s validitou webových stránek? Myslíš, že třeba zrovna na tvém webu se prohlížeče nemusí zotavovat ze syntaktických chyb v kódu?