Hlavní navigace

Akta X 0401

2. 2. 2004
Doba čtení: 4 minuty

Sdílet

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.