Jazyk XSL

aneb jak snadno a rychle transformovat XML dokumenty

Jiří Kosek


Obsah

Struktura stylu
XPath
Šablony
Další možnosti XSLT
Bez zbytečného sentimentu
Zajímavé odkazy

V předchozím díle našeho seriálu jsme si ukázali, jak lze kaskádové styly použít při zobrazování XML dokumentů. V mnoha případech nám možnosti kaskádových stylů nestačí, a pak sáhneme po jazyku XSL (eXtensible Stylesheet Language).

Když vznikal jazyk XSL, měl to být skutečně jen starší bratříček kaskádových stylů (CSS). Umožňoval samozřejmě definovat vzhled jednotlivých elementů – způsob jejich zarovnání, velikost a styl písma, barvy apod. Kromě toho jej šlo použít i k takovým věcem, jako je automatické generování obsahu, číslování obrázků, kapitol apod. Postupně se ukázalo, že XSL má sloužit ke dvěma poměrně odlišným věcem – ke transformaci XML dokumentů a k definici vzhledu jejich formátování.

Během příprav standardu XSL z něj proto byla vyřazena jeho část sloužící k transformaci dokumentů, pro kterou se používá název XSLT (XSL Transformations). Pomocí XSLT lze vytvářet styly, které definují, jak se XML dokumenty mají převádět do formátu HTML, do XML dokumentů s jinou strukturou nebo do obyčejných textových souborů. Zejména možnost konverze do HTML je dnes hojně využívána, protože většina prohlížečů si zatím se samotnými XML dokumenty neporadí.

Druhé části XSL, která slouží k přesnému popisu vzhledu dokumentu, se často říká XSL FO (formátovací objekty), někdy jen zkráceně XSL. K dispozici máme vše, co známe z CSS, navíc lze přesně určit layout stránky – včetně sazby do více sloupců, hlaviček, patiček apod.

Standard XSLT byl přijat jako standard konsorcia W3C na konci minulého roku. K dispozici je dnes celá řada softwarových procesorů, které umožňují zpracování XML dokumentů na základě XSLT stylu. Většina z nich je přitom napsaná v Javě, některé jsou k dispozici i v C++. Mezi volně šířené procesory patří XT, Saxon a Xalan. Vlastním XSLT procesorem se může pochlubit i Microsoft, Oracle, IBM a některé další firmy. Je tedy z čeho vybírat.

Obrázek 1. Samotný princip zpracování XML dokumentů pomocí stylů je velice jednoduchý

Pokud se XSLT používá pro převod XML dokumentů do HTML nebo WML v reálném čase (např. na hodně zatížených webových serverech), naráží se na výkonnostní problémy dnešních XSLT procesorů. Postupně se však objevují techniky, které proces několikanásobně zrychlují. Velké úsilí je dnes věnováno kompilátorům XSLT stylů, které ze stylu vygenerují přímo zdrojový kód jednoúčelového transformačního programu. Běh tohoto programu je pak mnohem rychlejší, protože není potřeba pořád dokola načítat a vyhodnocovat styl. Firma Sun už vymyslela i pěkný název pro zkompilované styly – v jejím podání jsou to translety a jsou samozřejmě zapsány v Javě.

Na poli programů, které podporují formátovací objekty XSL je už situace mnohem horší. Je to dáno také tím, že tato část XSL dosud nebyla standardizována. Z open-source implementací můžeme sáhnout po Passive TeXu nebo po FOPu. Firma RenderX před nedávnem uvolnila zkušební verzi formátovače XEP. Podporu XSL nalezneme i v poslední verzi WYSIWYG editoru Epic.

Pokud chceme použít formátovací objekty pro zformátování našeho dokumentu, musíme si vytvořit odpovídající styl. Ten se pomocí XSLT aplikuje na zdrojový XML dokument – dostaneme tedy XML dokument, který se bude skládat z jednotlivých formátovacích objektů. Tento dokument pak umí interpretovat XSL FO procesor, který z něj vytvoří třeba PDF soubor nebo výsledek zobrazí na obrazovce. Některé programy oba dva kroky provádí automaticky najednou a celý proces pak může uživateli připadat jednodušší.

Obrázek 2. Formátování dokumentu pomocí XSL FO

Většinu procesorů lze využít buď jako samostatné programy, nebo jako knihovnu vhodnou pro začlenění do vlastních programů. Při prvních pokusech je asi nejlepší používání samostatných procesorů, abychom si mohli prohlédnout výsledek transformace. Procesor se obvykle volá se třemi parametry, například:

xt dokument.xml styl.xsl vystup.html

Návod na instalaci procesoru XT naleznete na přiloženém cédečku.

Pokud chceme použít XSLT pro převod XML dokumentů do formátů používaných na Webu, může procesor běžet buď přímo v prohlížeči, nebo se konverze do HTML provede přímo na serveru. Dnes se používá především druhý přístup, protože podpora XSLT v prohlížečích není moc dobrá. Jediný prohlížeč, který XSLT podporuje, je Internet Explorer 5.0. Ten navíc podporuje starší verzi návrhu standardu, která není kompatibilní s finální verzi standardu. Ze stránek Microsoftu si naštěstí lze stáhnout program, který provede aktualizaci prohlížeče.

Vzhledem k tomu, že podpora formátovacích objektů ze strany aplikací není nikterak slavná, podíváme se nyní detailněji jen na XSLT.

Struktura stylu

Soubor s XSLT stylem je sám o sobě XML dokument, protože používá syntaxi XML. Pro jeho editování proto můžeme využít běžné XML editory. V dokumentu se přitom míchají dva druhy značek – řídící příkazy pro procesor a značky výsledného dokumentu (např. HTML tagy). Aby šlo v jednom dokumentu kombinovat dvě sady značek, používají se jmenné prostory. To znamená, že před jména všech elementů, které má XSLT procesor zpracovávat, se píše speciální prefix xsl:. Celý styl přitom musí být uzavřen v elementu stylesheet.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		version="1.0">
	
	definice stylu

</xsl:stylesheet>

URL adresa http://www.w3.org/1999/XSL/Transform, která identifikuje jmenný prostor, je přitom velmi důležitá. XSLT procesor podle ní pozná, že dokument opravdu obsahuje styl. Pokud toto URL zapomene uvést nebo v něm uděláme překlep, procesor nebude instrukce ve stylu vůbec zpracovávat.

Samotný styl se skládá především z šablon, které definují, jak se jednotlivé části XML dokumentu budou převádět do tvaru výstupního dokumentu. Při výběru částí dokumentu se používá jednoduchý dotazovací jazyk XPath.

© Jiří Kosek 2000-2001