Hlavní navigace

Akta X: Validace stokrát jinak

4. 6. 2007
Doba čtení: 3 minuty

Sdílet

Pojem validace dokumentu XML je sice přesně definován ve specifikaci XML 1.0, ale jeho význam se časem stále posouvá a rozšiřuje. S přibývajícími nástroji se proměňuje vztah dokumentu a schématu, postvalidační informace přibývají nebo jsou zcela odmítány. Objevil se návrh na nový validační jazyk.

Ke dnešnímu tématu mě inspirovaly dva články z blogu Jamese Clarka. Tento blog je relativně nový, funguje teprve od letošního března. Clark nemá potřebu dávat světu vědět o každém hnutí své mysli; za necelé tři měsíce vyprodukoval jen tři články. Kvalita ale v jeho případě výrazně převyšuje kvantitu.

Za přečtení stojí zatím poslední článek nazvaný Validation not necessarily harmful, což je reakce na starší post Validation considered harmful Marka Bakera. Baker píše o tom, že striktní validace může nadělat víc škody než užitku, protože nepředpokládá vývoj dokumentů a schémat. S tímto názorem by se dalo úspěšně polemizovat – odstraněním validačního kroku se může problém se změnou dokumentu „vyřešit“, ale také se může v procesu zpracování jen posunout o krok dál, kde už se případná chyba daleko hůře rozpoznává.

James Clark se ale zaměřuje na jiný aspekt a mimo jiné přichází s tvrzením, že validita není vlastností dokumentu, ale vztahem mezi dokumentem a schématem. Tato teze dobře vystihuje jeden důležitý, třebaže na první pohled možná ne docela nápadný rozdíl mezi přístupem jazyků W3C XML Schema a RelaxNG (jehož je Clark spoluautorem). XML Schema propojuje schéma se jmenným prostorem, čímž připisuje jmenným prostorům další význam. Totiž že elementy z jednoho jmenného prostoru patří k sobě a všechny se skládají do jednoho dokumentu popsaného jedním schématem. RelaxNG nic takového neříká a s názvy jmenných prostorů zachází jako s pouhými textovými řetězci sloužícími k odlišení lokálních jmen, přesně v intencích specifikaceNa­mespaces in XML 1.0. Tato vlastnost RNG, společně s opačným názorem na přidávání postvalidačních informací (RNG nic takového nezná), přestavuje mnohem hlubší rozdíl mezi oběma jazyky než více či méně elegantní syntaxe jednoho nebo druhého.

V dobách, kdy k validování dokumentů XML bylo k dispozici jen DTD, vše bylo jednodušší. Definice uvedená přímo ve specifikaci XML 1.0 říká, že dokument je validní, pokud je mu přiřazena deklarace DTD a pokud splňuje všechna její omezení. Validita je atributem dokumentu, každý dokument má nejvýše jedno své schéma. Ale už v dobách DTD bylo toto přímočaré pojetí validity narušeno existencí postvalidační informace (PSVI) – defaultními atributy. Možná se autoři XML 1.0 nechali inspirovat kvantovou fyzikou. Dokument, jehož validitu „změříme“, už není stejný, jako před měřením.

Jazyk XML Schema pozdvihl PSVI na vyšší úroveň. K defaultům přibyly datové typy. Dokument je validací natolik proměněn, že Eric van der Vlist neváhal prohlásit, že validace je transformací dokumentu. Zjištění validity je pak pouhým bočním efektem této transformace.

Jak vidno, chápání validace a validity se proměňuje a přibývajícím počtem validačních jazyků také fragmentuje. Validaci podle Schematronu nejlépe vyhovuje Clarkovo pojetí validity jako binární relace. V případě Schematronu je to dokonce ještě zřejmější. Dokument vyhovuje určitému schématu (splňuje jeho pravidla), může být tedy použít pro jisté účely. Pro jiné účely můžu mít úplně jinou sadu pravidel.

Ještě jeden článek z Clarkova blogu se zabývá validací a schématy. Název Do we need a new kind of schema language? je dostatečně výmluvný. Tento dlouhý a zajímavý článek popisuje, proč současné jazyky pro popis schématu příliš nepomáhají s mapováním z XML na datové struktury běžných programovacích jazyků a zpět. Jazyk XML Schema se o to částečně pokouší, ale trochu neobratně a navíc způsobem vhodným jen pro staticky typované jazyky. Clark navrhuje vytvoření úplně nového jazyka, který by integroval validaci a data binding, s přihlédnutím k potřebám dynamických jazyků, jako je Perl, Python, Ruby, apod.

root_podpora

Pracovní název možného nového validačního jazyka je TEDI (Type Expressions for Data Interchange). Základní schéma TEDI by mohlo být doplněno anotacemi pro jednotlivé programovací jazyky na jedné straně, a anotacemi pro XML, ale také třeba JASON na straně druhé. Jazyk jako TEDI by posunul smysl validace a PSVI zase o kus dál.

James Clark slibuje, že se bude vývojem jazyka TEDI dál zabývat. Tomu bychom vzhledem k faktu, že tento výjimečný vizionář už má za sebou milníky jako XSLT 1.0 nebo Relax NG, měli věnovat pozornost.

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