Hlavní navigace

Akta X 0401

Petr Cimprich 2. 2. 2004

Jak se parsery XML chovají a jak by se měly chovat, narazí-li v dokumentu na chybu syntaxe? Spor mezi příznivci liberálního a striktního parsování je stejně starý jako XML samo. Obstojí sedm let staré argumenty ve světle dnešních zkušeností?

Zpracování chyb v XML

Dnešní hlavní téma není příliš akuální. Přivedla mě k němu nedávná diskuse mezi XML-DEVianty. Tématem bylo, zda můžeme od SAXového parseru očekávat, že pokud narazí na chybu, odešle aplikaci kromě chybového upozornění také ohlášení konce dokumentu. Pokud by parser po chybě spolehlivě volal funkci endDocument(), usnadnilo by to programátorům v určitých situacích život. Definice rozhraní SAX2 praví: Parser zavolá tuto metodu pouze jednou a bude to poslední metoda volaná během parsování. Metoda nebude parserem volána, dokud tento buď neukončí parsování (kvůli chybě), nebo nenarazí na konec vstupních dat. Je tam možná drobná logická nejednoznačnost, ale odpověď by měla znít ano, funkce endDocument() se po chybě volá.

Specifikace XML 1.0 říká o fatální chybě mj. toto: Jakmile je detekována fatální chyba, procesor nesmí pokračovat v normálním zpracování (tj. nesmí dále běžným způsobem předávat text a informace o logické struktuře dokumentu). Nebudeme-li úzkoprse považovat endDocument() za informaci o struktuře dokumentu, SAX2 není s XML 1.0 v rozporu a vše je i formálně v pořádku.

A jak dopadá parsování chybného dokumentu v praxi? Různě. Některé parsery (např. AELfred2, XP, Expat) stihnou ohlásit konec dokumentu, jiné (např. Xerces-J či Crimson) nikoli. Slepě spoléhat na volání funkce endDocument() po chybě by tedy bylo příliš odvážné, je třeba otestovat konkrétně použitý parser (a interoperabilita tiše naříká v koutě).

Výše uvedená citace ilustruje, že XML 1.0 se k chybám syntaxe staví velmi nesmlouvavě. Konformní procesor musí při prvním porušení pravidel správného zformování (well-formedness) ohlásit chybu a skončit. V polovině ledna se shodou okolností na webu objevil zajímavý článek Marka Pilgrima o historii zpracování chyb v XML. Převážnou část článku tvoří citace z mailů pracovní skupiny pro XML z roku 1997. Autoři se přou právě o tom, jak mají procesory XML zacházet se syntaktickými chybami. Jedna skupina diskutérů (z Pilgrimova článku vyplývá, že ji tvořil právě jeden člověk, a to Tim Bray, nicméně sám Bray tuto interpretaci popírá) prosazuje dnešní striktní přístup. Jiní zúčastnění argumentují ve prospěch tolerannější varianty, jež by umožnila zotavení z chyby a pokračování v načítání dat. Obě strany mají přesvědčivé a smysluplné argumenty. Jejich stručný přehled stojí za shlédnutí. Nejprve argumenty příznivců tolerance.

  • Dokument XML obsahuje množství redundantních informací, které často dovolují bezpečné a úplné zotavení ze syntaktických chyb.
  • I kdyby byl dokument zrekonstruovaný jen z části, stále může poskytnout cenné informace.
  • Povinností procesoru je upozornit na chybu. Rozhodnutí, jak chybu zpracovat, by mělo náležet aplikaci. Není důvod upírat aplikaci možnost volby.
  • Procesor XML by, podle osvědčené programátorské zásady, měl být co nejtolerantnější ke vstupním datům a co nejstriktnější na výstupu.
  • I kdyby to specifikace vyžadovala, výrobci softwaru stejně nebudou zásadu „konec při první chybě“ respektovat. Konkurenční boj povede k sofistikovaným mechanismům zotavení.

Zastánci nekompromisního přístupu k chybám argumentují zhruba takto:

  • Správné zformování je zcela minimální požadavek, mnohem snažší než napsání korektního HTML. Kdo si s ním neporadí, ať se radši do tvorby XML nepouští.
  • Ústupek za hranici správného zformování by vedl k postupné HTMLizaci XML a k postupné degeneraci kultury publikování XML na webu.
  • Většinu dokumentů XML budou stejně generovat programy.

Zajímavé je také rozuzlení tohoto sporu. Diskutující se shodli na tom, že se navzájem nepřesvědčí a neshodnou. V hlasování zvítězil 7:4 striktní přístup, který potom celá pracovní skupina jednotně prosazovala navenek.

S odstupem téměř sedmi let je zajímavé vrátit se některým argumentům a prognózám z diskuse. Většina tehdejších názorů byla silně ovlivněna analogií XML vs. HTML, procesor XML vs. prohlížeč HTML. Uplatnění XML však šlo převážně jinou cestou, takže většina předpokladů inspirovaných tímto srovnáním nebyla naplněna. Ke konkurenčnímu boji výrobců parserů, ve smyslu tehdejší války prohlížečů, vůbec nedošlo. Svou roli v tom sehrál i nástup otevřeného softwaru, který v oblasti základních nástrojů pro XML nechal jen málo prostoru pro komerční uplatnění.

Názory na zpracování syntaktických chyb asi nebudou jednotné ani dnes, ale těžko můžeme rozhodnutí z roku 1997 považovat za velký omyl. Požadavek správného zformování nikoho příliš neomezuje, každý si může správnost svého dokumentu snadno a rychle ověřit. Zásada správného zformování není vnuceným a omezujícím pravidlem, ale spíše pravidlem tvořícím hru. Nikdo vám nemůže zakázat táhnout na šachovnici věží po diagonále, ale pak nemůžete říkat, že hrajete šachy. Dokument nevyhovující minimálním nárokům na syntaxi zase nepatří do hry zvané XML.

Specifikace

Nenápadná specifikace XHTML-Print se v lednu stala už kandidátem na doporučení W3C. XHTML-Print je modul XHTML navržený pro potřeby základního, nenáročného tisku zejména z mobilních zařízení. Cílem je tisknout bez vyrovnávací paměti pro celé stránky a bez ovladačů specifických pro konkrétní tiskárny. Mobilní tisk snadno, rychle a kdekoli, bez nároků na přesné formátování.

Pracovní skupina W3C pro webovou ontologii (což je krycí název pro sémantický web) zveřejnila jako svou poznámku dokument Parsing OWL in RDF/XML. OWL je jazyk sloužící k zápisu a sdílení sad logických výroků zvaných ontologie, podporujích správu znalostí a odvozování dalších informací. Zveřejněný dokument popisuje doporučenou strategii, kterou by mohl parser souboru RDF/XML použít k sestavení ontologie OWL.

Našli jste v článku chybu?

4. 2. 2004 16:44

Yeti (neregistrovaný)

OK, díky za vysvětlení (všem).

3. 2. 2004 11:39

met (neregistrovaný)

Pokud mas na mysli http://trific.ath.cx/ tak ackoliv kodu deklarujes XHTML1.1, tak se dle W3C o dokument XHTML1.1 nejedna - viz MIME typy http://www.w3.org/TR/xhtml-media-types/#summary

Nevim, jak v jinych prohlizecich, ale v Mozille to treba znamena, ze dokument nebude parsovan XML parserem (coz by XHTML1.1 jako pravy XML dokument byt mel), ale obycejnym HTML parserem. Otazkou pak je, proc XHTML1.1 dnes pouzivat. Tedy co nam prinasi dobreho? Me zatim pripada, ze sebou nese spise problemy (ve…

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET