• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • X(HT)ML
  • Špička ledovce

    25. května 2006

    Pohleďte na ta tři písmena: X, M, L. Uvažte, co všechno se lidem vybaví, když je vidí pohromadě. Nepochybně široká škála možností. Zamyslete se, prosím, co z té představy je skutečně neodlučitelně spjato s jazykem XML.

    Většinu lidí, kteří se motají kolem X, můžete rozdělit podle stupně znalostí do dvou skupin.

    Řadový programátor

    Programátor vidí datovou strukturu. Většinou krásný strom zvaný DOM, z něhož vyzobává data pomocí XPathu. Nezajímá ho příliš, jak je dokument reprezentován ve své textové podobě. To je věcí standardního XML procesoru, do něj vidět nepotřebuje.

    Také ho málokdy zajímá definice typu dokumentu a validita. Pokud jsou ve zpracovávaném dokumentu nějaké znakové entity, jsou spíše na obtíž, nevyužívá jich. Rovněž o jmenné prostory projeví zájem jen z donucení. Plně se spokojí s primitivní stromovou strukturou elementů, atributů a textových uzlů. Říká sice, že zbožňuje XML, jeho srdce však patří až té struktuře, kterou vyrábí XML procesor.

    Co myslíte, že by se změnilo, kdybyste mu místo XML procesoru podstrčili SGML parser tvořící naprosto stejný DOM? Dokument v SGML přeci může vyjadřovat totožnou strukturu, takže vyprodukovat totožný DOM není problém. Vsaďte špičák, že by rozdíl nepostřehl.

    On totiž samotný XML formát vůbec nepotřebuje. Stačí mu ta omáčka kolem, co se spolu s XML proslavila.

    Expert přes data

    Lidé, kteří vidí hlouběji do světa XML, vidí strukturované informace. Znají jmenné prostory, píší si validační schémata v RELAXu NG, transformují psí kusy v celé psy a naopak a spokojeně vrní, jak ta aplikační standardizovaná vrstva dobře funguje.

    Co myslíte, že by se změnilo, kdyby místo formátu XML použili úplně nový formát? Někdo by ho musel jasně zadefinovat. Vtisknout význam jeho prvkům a specifikovat základní rysy rozebírání, aby mu mohl kdokoliv napsat parser. Vznikl by další jazyk, na XML formátu v podstatě nezávislý.

    Jelikož by však tento nový formát těžil ze všech těch oblíbených technologií, které jsou z definice spjaté se světem XML (jmenné prostory, transformace, XPath), byl by autorem vhozen do onoho velkého pytle XML aplikací. Řeklo by se, že to je „XML aplikace s alternativní syntaxí“. Jak prosté.

    Taková aplikace by vůbec nemusela trpět nešvary XML formátu, kterým se věnují jiné zdejší články. Mohla by mít ošetřené chybové stavy nebo stručnější zápis, ale stále vyjadřovat stejnou strukturu informací. Či z pohledu programátora: stejnou datovou strukturu.

    Vhodné brýle

    Nyní se vraťte ve svých myšlenkách k World Wide Webu. Vidíte, že drtivá většina stránek používá HTML, že? Zároveň ale nemůžete přehlédnout ty kladné rysy světa XML. Co s tím? Nešlo by to zkombinovat?

    Mám nápad! Vyrobíme XHTML, což bude HTML s XML syntaxí.

    — Někdo v konsorciu, někdy dávno, volně domyšleno

    Cesta, kterou zvolilo W3C, je velmi konfliktní. Zbytečně mění formát z jednoho hotového značkovacího metajazyka na druhý.

    Mám nápad! Vyrobíme XHTML, což bude XML s HTML syntaxí.

    — Nikdo, bohužel

    Na současné HTML 4 můžete pohlížet jako na XML aplikaci s alternativní syntaxí. Nepotřebujete na ni speciální specifikaci, speciální MIME typ a speciální webové prohlížeče. Programátorům postačí speciální parser v programech, které těží z DOMu. Říkáte si teď: „Brzdi, Chamurappi, podle tebe bychom museli šít parser na míru téhle jedné aplikaci — to je přeci nesmysl, to se nedělá“?

    Nesmysl to není, uvědomíte-li si, že tahle jedna aplikace je nejrozšířenějším značkovacím jazykem v této sluneční soustavě. A že se to nedělá?

    Nebylo by to poprvé

    Pohleďte na následující kód:

    default namespace rng = "http://relaxng.org/ns/structure/1.0" namespace local = "" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" start = pattern pattern = element element { (nameQName | nameClass), (common & pattern+) } | element attribute { (nameQName | nameClass), (common & pattern?) } | element group|interleave|choice|optional |zeroOrMore|oneOrMore|list|mixed { common & pattern+ } | element ref|parentRef { nameNCName, common } | element empty|notAllowed|text { common } | element data { type, param*, (common & exceptPattern?) } | element value { commonAttributes, type?, xsd:string } | element externalRef { href, common } | element grammar { common & grammarContent* } [...]

    Nebo si prohlédněte tento:

    @prefix earl: <http://www.w3.org/2001/03/earl/1.0-test#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <http://validator.w3.org/> a earl:Assertor; earl:name "W3 Validator"; earl:asserts [ earl:testMode earl:Auto; rdf:predicate earl:passes; rdf:subject [earl:testSubject <http://www.w3.org/>]; rdf:object [ earl:id <http://www.w3.org/HTML/>; earl:note "Valid" ] ] .

    Vězte, že o obou předvedených kouscích se hovoří jako o aplikacích XML. S alternativní syntaxí, samozřejmě. První kód je psán kompaktním zápisem RELAXu NG, druhý je Notation3 zápis RDF.

    Při tom nejde o prehistorické zavrhované formáty: RELAX NG je ISO standardem a na specifikaci Notation3 syntaxe se poslední dobou aktivně podílí sám šéf konsorcia.

    Kdyby...

    ... bylo XHTML syntakticky plně kompatibilní s HTML, webdesignérské řemeslo by bylo nyní chudší o jeden nesmrtelný konflikt a o desetitisíce smrtelných fanatiků.