Pokud za ampersandem následuje název neznámé entity, je tento zápis chápán jako znaková data. To radí tahle křišťálová koule.
Pokud za ampersandem nenásleduje znak povolený v názvu entity, je ampersand obyčejným ampersandem a žádná chyba se nekoná. Takže v uvedeném příkladu zápis entitou nutný není.
„Vemte si takové zbastlené (třeba pře Flashované) stránky, jak asi budou fungovat za X let?“
Podobná slova jsem slýchával před X lety také. Přesto vše docela hezky funguje. Nakonec i ty přeflashované a nechutně zbastlené stránky můžou dodržovat specifikace.
„zaznělo i na Lupě, že HTML stránka nepotřebuje záhlaví HEAD a jiné tagy“
Ano, konsorcium říká, že nepotřebuje a v tomto se shoduje s prohlížeči. Značky jsou nepovinné, element nikoliv.
„Však to prohlížeč zobrazí, ano ale za jakou cenu a s jakým výsledkem.“
Výsledkem je údiv bastlířů neznajících půvaby HTML.
„Hodně stránek v minulosti nemělo definici kódování, [...] takže si moc nepočtu“
Protože W3C nedefinovalo výchozí kódování pro MIME typ „text/html“. Smůla.
„Bastlíří bastlí weby jak na běžícím pásu...“
Tak to má být.
„podle validatoru W3C je opravdu validní“
Protože onen „validátor“ rozebírá kód jako XML. Všichni ostatní jej ale berou jako HTML plné syntaktických chyb. Takováhle „validita“ je poněkud bezcenná, nemyslíte?
Viz můj článek.
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.
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?
„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?
Čtu a říkám si „déjà vu, tohle jsem již přeci někde citoval“. První a třetí odstavec je skoro doslovně vykradený ze staršího Snížkova článku na Intervalu.
Posuzujete validitu kódu oficiálním validátorem, který v části případů používá jiný parser, než mají užívat vyhovující prohlížeče (a užívají existující). Pozitivní výsledek vypovídá pouze o tom, že nestandardní nástroj přepínající parser podle <!doctype> deklarace zvládne stránku bez připomínek zpracovat. Nezaručuje ani funkčnost v prohlížečích, ani úspěch ve vyhledávačích. Oč horší je atribut autocomplete, který neznalé cílové zařízení ignoruje, než nadbytečné lomítko ve značce <meta />, které by podle specifikace mělo ukončit značku už těsně před většítkem?
Živě.cz je validní asi tak stejně jako tohle. Tedy není.
Při čtení takovéhoto článku je též vhodné si připomenout, že HTML 4 (potažmo XHTML 1) je deset let neaktualizovaný soubor elementů a atributů. Validitu považuji za přežitek.
„A co na tom, že základ je starý 10 let?“
Prohlížeče jsou dál. Mám se vyhýbat nadstandardnímu atributu jen proto, že před deseti lety neexistoval?
„A přežitek to rozhodně není“
Vyhodnocuje se současná stránka pomocí deset let starého předpisu psaného dvacet let starou syntaxí. Tohle pojetí validity už mělo dávno vychcípat. Budoucí specifikace již s DTD nepočítají.
„Alespoň se domluvíme standardními prvky.“
Domluvíme se díky de facto standardu.
„jsou chyby, které jsou jen varováním, nebo způsobené tím, že se musí obejít nějaká zhovadilost interpretace browserů, zvláště MSIE“
Prosil bych příklad HTML kódu, který musí porušovat specifikaci jen kvůli Exploreru.
„Na webu nelze do jisté míry nic předpokládat a už vůbec ne jaké zařízení, software bude použité k prohlížení stránek“
Mnoho webů (včetně w3.org) užívá XHTML při typu „text/html“. Předpokládají, že žádný prohlížeč nebude dodržovat specifikaci, de jure se spoléhají na chyby známých prohlížečů. A funguje to, že?