Hlavní navigace

Příliš obtížné XML?

Petr Cimprich

V minulém týdnu upoutal pozornost uživatelů XML esej, ve kterém se tvrdí, že práce s tímto formátem je pro programátory příliš složitá a neefektivní. Na tom by nebylo nic tak zvláštního, kdyby autorem nebyl Tim Bray, jeden z tvůrců formátu XML, těšící se mezi příznivci špičatých závorek nemalé autoritě.

Bray píše (XML Is Too Hard For Programmers), že jeho současné programátorské zkušenosti s XML jsou značně neuspokojivé. Zpracování libovolného dokumentu je podle něho frustrující, časově náročné a náchylné ke vzniku chyb. Procesory XML je prý jednodušší napsat než používat k denní práci. (Tady by autoři procesorů s Timem asi nesouhlasili, a to zejména kvůli DTD a systému entit, které Tim s kolegy převzali ze SGML, ale můžeme to asi chápat jako uměleckou nadsázku.) Načítání celého dokumenu do paměti kvůli použití několika málo údajů je nepraktické, ne-li hloupé, zatímco práce se zpětně volanými funkcemi je rovnou nemotorná. Aby se vyhnul těmto ošklivostem, řeší Bray, podle vlatních slov, načítání údajů z dokumentů často pomocí regulárních výrazů.

Článek vyvolal celou řadu reakcí, souhlasných i nesouhlasných. Diskusi vedenou v hlavním komunikačním kanálu vývojářů XML, diskusní skupině XML-DEV, shrnuje ve svém sloupku na XML.com Kendall Grant Clark (An XML Hero Reconsiders?). Další reakce jsou k vidění například v archivech skupinXML-DEV a PERL-XML.

Tim Bray má bohužel ke svým stížnostem dobré důvody. Nejznámější a nejpoužívanější rozhraní pro práci s XML, tedy DOM a SAX, příliš programátorského komfortu neposkytují. Elementární úloha, jakou je načtení údajů ze souboru, je pro programátora zhýčkaného současnými objektovými nebo skriptovacími jazyky automatickou trivialitou. Přinejmenším pokud svá data uloží jako řádkově orientovaný soubor s oddělovači. Pokud se programátor rozhodne jít s dobou a vsadí na XML, bude ho načtení stát trochu víc úsilí. Kdyby měl kvůli načtení každého souboru opravdu napsat a odladit aplikaci komunikující důsledně přes DOM nebo SAX, klesne produktivita jeho práce na úroveň západoevropského zemědělce (ovšem bez dotací). Naštěstí tady ale není jen DOM a SAX.

Mnohem přívětivější tvář uživatelům ukazuje XPath A XSLT. Ne vždy se zpracování dokumentu dá zařídit transformací, ale navigace pomocí výrazů XPath je k dispozici také u všech lepších procesorů DOM. Načtení sady uzlů způsobem

$xml = $parser->parse(URI);
$nodeset = $xml->get_nodes(XPath);

už vypadá celkem elegantně. XML je hierarchicky strukturovaný formát, proto nikdo nemůže očekávat, že jej načte stejně snadno jako formát předjímající tabulkovou strukturu. Výhodou XML je, že dokáže pojmout i nepravidelná a částečně strukturovaná data. Pro pravidelná, relační data nemusí být XML za každou cenu ta nejlepší volba. Pokud jsou taková data ještě navíc hodně rozsáhlá, určitě jim bude lépe v obyčejné relační databázi.

Ale zpět k datům, která už máme v XML. Slabinou přístupu DOM+XPath je stále ještě nutnost načtení celého dokumentu do paměti. Analogický přístup, který by ale byl založen na proudovém zpracování, jež může být hned po nalezení požadovaných uzlů ukončeno, by asi byl tím, co potřebujeme. Co tomu brání? Nic zásadního. Pokusy v tomto směru existují, ale zatím se žádný z nich neposadil v širším měřítku. Chybí obecně akceptované proudové rozhraní typu „pull“ (které by umožnilo po nalezení uzlu ukončit činnost parseru), stejně jako standardní jednoprůchodový výrazový jazyk (pro lokalizaci uzlů). XML je v pěti letech přece jen ještě mladá technologie a spoustu věcí má před sebou.

Tim Bray má moje sympatie, že neváhá vyslovit kritický názor v době, kdy „vizionáři“ z velkých firem hlásají světlé zítřky webových služeb a XML v každé lednici. Plně s ním souhlasím, pokud jde o neohrabanost pilotních API pro XML. Troufám si ale říct, že nebere do úvahy moderní trendy ve zpracování XML (proudové „pull“ parsery, transformace, navigační jazyky), které jsou určitě perspektivnější než procvičování regulárních výrazů. Přesto jeho kacířský postoj může být impulzem pro rychlejší rozvoj právě takovýchto technologií.

Našli jste v článku chybu?