Hlavní navigace

Úskalí XML (5)

7. 2. 2003
Doba čtení: 4 minuty

Sdílet

Během naší malé exkurze úskalími, na která lze narazit při práci s XML, se stále opakovaly stejné okolnosti: jmenné prostory, kvalifikovaná jména, implicitní hodnoty. V závěrečné části se namísto popisu dalších symptomů pokusíme najít jejich hlavní příčiny.

Kořeny problémů

Extensible Markup Language bychom asi přeložili jako „rozšiřitelný značkovací jazyk“. Pokud se ale důsledně přidržíme strohé specifikace, není složité ukázat, že XML není ani rozšiřitelné, ani se nejedná o značkovací jazyk. XML 1.0 definuje formát pro serializaci dat hiearchického, stromového charakteru. Syntaxe je pevně daná a nelze ji žádným způsobem rozšiřovat. Uživatel nemá možnost doplnit špičaté závorky, lomítka, uvozovky a další primitiva jazyka XML o nová podle potřeby. Stejně tak se nejedná o značkovací jazyk, ale o metajazyk pro vytváření těchto jazyků. Nepřesný název byl nejspíše zvolen, aby zdůraznil paralelu s populárním jazykem HTML, který měl být právě aplikacemi XML nahrazen. Koneckonců, zamlžování rozdílu mezi metajazykem a jeho aplikacemi je pěknou tradicí už od dob SGML.

XML je pouze syntaktický formát, sémantiku přinášejí až jednotlivé aplikace. Skutečnost, že je určitá entita elementem nebo atributem, o významu této entity vůbec nic neříká. Svůj význam mohou mít až elementy a atributy konkrétních aplikací XML, jako je například DocBook, SVG nebo XSLT. Bezvýznamovost definice XML je ve skutečnosti významnou charakteristikou. Kdo nic nedělá, ten nic nezkazí. Nebo, chcete-li, kdo si nic nemyslí, ten se nemýlí. Tím, že jádro XML neobsahuje žádnou „zabudovanou“ sémantiku, zůstává dokonale univerzální a použitelné prakticky pro cokoliv. Jen díky tomu může být vhodným východiskem jazyků pro tak rozdílné účely, jako je popis knih, vektorové grafiky nebo transformací.

Pro přesnost je třeba zmínit, že malou špetku sémantiky v XML 1.0 přece jen najdeme. Představují ji dva speciální atributy xml:space axml:lang. Jejich význam je však okrajový a na sémantické neutralitě XML nic nemění.

Základní specifikaci XML 1.0 doplňuje definice jmenných prostorů. Jmenné prostory samotné nepředstavují zásadní změnu. Můžeme možná polemizovat s příliš benevolentním použitím URI jako jedinečných identifikátorů jmenných prostoru – běžná praxe používání URL typu „http//“ je poněkud matoucí. Osobně bych preferoval například vyhrazené schéma URN, ale budiž. Pokud by se jména elementů a atributů psala jako expandovaná jména, například v Clarkově notaci (tj. {namespace-uri}local-name), máme jen o trochu delší jména.

Změnu přinášejí až kvalifikovaná jména. Dlouhá jména by, pravda, byla nepraktická, ale daň, kterou platíme za zavedení prefixů a kvalifikovaných jmen, není malá. Uzly už neexistují samy o sobě, ale v kontextu platných deklarací prefixů a jmenných prostorů. Pokud kdykoli budeme chtít uzel například zkopírovat, přemístit nebo jen referovat, musíme myslet také na tento kontext. Má se kontext deklarací přesunout s uzlem, nebo má být uzel brutálně vložen do cizího kontextu? Jakým způsobem dodáme kontext při pohledu zvenku? Tyto a další podobné otázky vyvstávají ve všech technologiích, které si za základ zvolily XML. Z jiného pohledu jmenné prostory do XML vnášejí další „zabudovanou“ sémantiku v podobě vyhrazených atributů začínajících na xmlns.

Problému kvalifikovaných by bylo možné se vyhnout, kdybychom důsledně trvali na tom, že kvalifikovaná jména představují pouze serializační zkratku a nemají žádný reálný význam. Veškeré modely zpracování by musely kvalifikovaná jména hned na začátku expandovat a pracovat výhradně s expandovanými jmény. Většina technologií XML se o podobný přístup samozřejmě snaží, ale bohužel ne vždy a ne zcela důsledně.

Jazyk XML jako serializační formát je sice užitečný pro přenos a výměnu dokumentů, ale to je přece jen trochu málo. Abychom mohli dokument XML načíst a zpracovat, potřebujeme k tomu určitý datový model. A protože žádný standardní model nebyl k dispozici, jednotlivé technologie jako DOM, XPath nebo SAX přišly s vlastními modely vhodnými pro jejich účely. Tyto datové modely jsou bohužel částečně neslučitelné, což komplikuje spolupráci zmíněných technologií. Příkladem je DOM a XPath; téměř všechny implementace DOM nabízejí svá vlastní rozšíření pro navigaci pomocí výrazů XPath, ale vyhodnocení některých výrazů (např. text()) může být kvůli nekompatibilitě datových modelů nejednoznačné. O překlenutí rozdílů se snaží DOM Level3, a to způsobem ne úplně jednoduchým.

Snaha o definování jednotného datového modelu, o který by se jednotlivé standardy mohly opřít, byla završena až tři a půl roku po zveřejnění specifikace XML 1.0. Model zvaný Infoset (XML Information Set) konečně závazně říká, jaké informace jsou vlastně v serializovaném dokumentu obsaženy a co jsou pouze nuance konkrétní serializace. Infoset bohužel přišel příliš pozdě na to, aby jej mohly vzít do úvahy současné klíčové standardy XML. Příští verze standardů se sice mohou snažit o konvergenci svých datových modelů k Infosetu, ale tato snaha bude bržděna ohledy na zpětnou kompatibilitu. Škoda, že si význam jednotného modelu autoři specifikací neuvědomili dříve, všechno mohlo být o trochu jednodušší.

root_podpora

Infoset specifikuje, jakou sadu informací obsahuje dokument XML. Tuto sadu však lze podstatně rozšířit, pokud si k dokumentu opatříme definici typu dokumentu, čili schématu. Schéma umožňuje jednak rozhodnout o platnosti dokumentu a jednak k němu doplnit takzvané postvalidační informace (PSVI: implicitní hodnoty, typy). Rozdělení informace mezi definici schématu a samotné instance dokumentů může být v řadě případů výhodné a v mnoha jiných případech zase nebezpečné. Dokument spoléhající na schéma může být v případě nedostupnosti schématu neúplný nebo dokonce chybný.

Na závěr malé shrnutí. Velká část potíží uživatelů XML pramení ze zavedení kvalifikovaných jmen, neslučitelnosti datových modelů jednotlivých standardů a existence postvalidačních informací. Snad jen podcenění jednotného datového modelu lze považovat za chybu, ale po bitvě je každý generál. Bez prefixů a PSVI by XML bylo bezpečnější, ale také chudší a méně uživatelsky přívětivé. Významově neutrální jádro XML zůstává vhodným formátem pro práci se strukturovaný­mi daty.

Byl pro vás článek přínosný?