Hlavní navigace

Akta X: Jazyk XML Pipeline

Petr Cimprich

XML Pipeline bude nový standard pro popis postupu zpracování dokumentů XML. Nyní je konečně k dispozici první pracovní verze jeho specifikace. Co je z ní možné vyčíst? K čemu se XML Pipeline vlastně hodí? Jak vypadá návrh jeho syntaxe? Jedná se o úplnou novinku, nebo už něco podobného známe?

V květnu letošního roku jsem se krátce zmínil o nově vznikajícím jazyku XML Pipeline s tím, že se k tématu určitě brzy vrátím. Teď je vhodná příležitost, protože pracovní skupina W3C XML Processing Model koncem září konečně zveřejnila první pracovní verzi.

XML Pipeline (kratší název je trochu nekonzistentně XProc) je jazyk popisující operace s dokumenty XML. Popisuje posloupnost operací prováděných na vstupní kolekci dokumentů XML. Výsledkem je výstupní kolekce dokumentů XML. Tedy přesněji, na vstupu i výstupu může být i jiný formát než XML, ale to není podstatné. Celá posloupnost se skládá z komponent, které také na vstupu přijímají a na výstupu produkují kolekci dokumentů. Komponenty mohou být dvojího druhu: krok nebo konstrukt. Krok představuje atomickou operaci, například expanzi referencí XInclude, transformaci XSLT nebo validaci proti schématu. Konstrukt je složitější entita, která může obsahovat jiné komponenty a také logiku řídící tok dokumentů komponentou. Konstrukty jazyka XProc umožňují například podmínečné zpracování, iteraci přes kolekce dokumentů a zachycení výjimek.

Každá komponenta definuje své vstupní a výstupní porty, každá může mít libovolný počet parametrů. Proud operací popsaný jazykem XProc je pak necyklický orientovaný graf komponent spojených svými výstupními a vstupními porty.

Dokument může být vstupnímu portu přiřazen jedním ze tří způsobů. Pomocí URL, určením výstupního portu jiné komponenty nebo přímým vložením dokumentu. Jednoduchý krok generuje svůj výstupní dokument na implicitní výstupní port result, u složitějších konstruktů je nutné deklarovat výstupní port či porty.

Uveďme si příklad nepříliš složitého proudu operací o dvou krocích, s jedním vstupním a jedním výstupním portem. První krok čte dokument ze vstupního portu proudu a expanduje v něm vsuvky XInclude. Výsledný dokument je pak transformován pomocí XSLT na dokument XHTML, jenž je odeslán na výstupní port. Šablona pro XSLT je odkazována pomocí URL. Takto vypadá schéma procesu:

Xproc

A takto zápis v syntaxi XML Pipeline. Syntaxi prosím berte s rezervou. Zatím je známa jen první pracovní verze, specifikace není úplná a pravděpodobně se ještě bude měnit. URI jmenného prostoru XProc zatím nebylo stanoveno.

<p:pipeline name="expand-and-transform" xmlns:p="...">

  <p:declare-input port="document"/>

  <p:declare-output port="result" step="docbook-to-xhtml" source="result"/>

  <p:step name="expand" type="p:xinclude">
    <p:input name="document" step="expand-and-transform" source="document"/>
  </p:step>

  <p:step name="docbook-to-xhtml" type="p:xslt">
    <p:input name="document" step="expand" source="result"/>

    <p:input name="stylesheet" href="xhtml/docbook.xsl"/>
  </p:step>

</p:pipeline>

Implementace jazyka XML Pipeline musí kromě všech konstruktů znát také sadu standardních typů atomických kroků. To jsou v naší ukázce typy p:xinclude a p:xslt. Procesor musí vědět, jaké vstupní porty a parametry má pro jednotlivé kroky očekávat a jakým způsobem vygenerovat výstup. Knihovna standardních komponent zatím v první verzi specifikace není definována. Mimo standardní komponety bude možné definovat také vlastní rozšíření a knihovny komponent pro opakované použití.

XML Pipeline najde uplatnění v první řadě při popisu komplexních publikačních procesů. Není náhodou, že se editace ujal Norman Walsh, jehož hlavním polem působnosti je DocBook. Využití při generování obsahu on-demand typickém pro webové aplikace bude limitováno požadavky na rychlost zpracování, ale i tady by jazyk XML Pipeline mohl najit své místo. Některé frameworky, jako například Cocoon, úspěšně používají velmi podobné principy jako jazyk XML Pipeline už dnes.

Našli jste v článku chybu?
16. 10. 2006 15:38
Jakub Hozak (neregistrovaný)
Vzhledem ke svate valce je to sice off-topic, nicmene koho zajima XML Pipline zkuste se podivat na Orbeon. Lidi okolo nej spolupracovali na ty specifikaci. Je to aplikacni server na XML bazi postaveny nad J2EE. Mimochodem podporuje i server-side implementaci XForms, kvuli cemuz sem do neho treba ja naboural.
14. 10. 2006 3:24
Palo (neregistrovaný)
Ale ja som robil s LISPom a nerozumiem preco by prave LISP malo byt to prave programovanie. Existuju aj ine prinicipy nez ktore ma LISP. Vacsina dnesnych jazykov ma vsetky tie ktore ma aj LISP. Maju ale aj ine ktore v LISPe nemate alebo ich komplikovane obchadzate. OOP a AOP nech nam sluzia ako priklad.