Formát XML se dnes pro ukládání a přenos dat používá stále častěji. V XML na svém počítači naleznete dokumentaci (DocBook), konfigurační soubory (např. skripty ant, projekty novějších vývojových prostředí) a dost možná i obrázky (SVG). Ve většině případů však dokument XML popisuje pouze význam uložených dat, ale nedefinuje, jak se mají zobrazit. Potřebujeme-li si tedy dokument prohlédnout jinak než jako zdrojový kód v XML, musíme mít možnost popsat konverzi XML do vizuální podoby. K tomuto účelu se používají stylové jazyky, které umožňují popsat, jak se mají jednotlivé elementy XML dokumentu zobrazovat – jakým písmem, jakou velikostí, jak zarovnané apod. Stylových jazyků, které můžeme použít, existuje hned několik – FOSI, DSSSL, CSS a XSL. Právě poslední z nich byl vytvořen speciálně pro potřeby XML.
Na jazyku pro formátování XML dokumentů se začalo pracovat v podstatě ve stejné době jako na samotném jazyce XML. Poměrně brzy se přišlo na to, že pořádný stylový jazyk se skládá ze dvou částí. Stylový jazyk musí umět jednotlivým částem dokumentu přiřadit jejich formátovací vlastnosti. Před tímto přiřazením je však v mnoha případech potřeba provést ještě transformaci vstupního dokumentu. Transformace se použije pro takové operace jako vygenerování obsahu či rejstříku, očíslování kapitol a obrázků nebo pro sečtení položek na faktuře – záleží na našich potřebách a na vstupním dokumentu.
Tento přístup reflektuje i samotný jazyk XSL. Skládá se ze dvou samostatných částí – transformačního jazyka XSLT a tzv. formátovacích objektů (FO). Podobně jako XML i XSL je standardizováno v rámci W3C. XSLT bylo jako doporučení přijato v roce 1999 a formátovací objekty až o dva roky později (2001).
XSLT styl umožňuje popsat transformaci XML dokumentu do HTML, XML s jinou strukturou, případně do obyčejného textového souboru. Transformace je přitom popsána sadou šablon, které definují převod jednotlivých částí XML dokumentu, jež jsou identifikovány pomocí XPath výrazu. Pokud chceme nějaký XML dokument transformovat pomocí XSLT, musíme mít k dispozici tzv. XSLT procesor. Mezi nejpoužívanější dnes patří například Saxon, xsltproc, MSXML a Xalan.
XSLT transformaci si příblížeme na jednoduchém příkladě. Předpokládejme, že máme následující XML dokument:
<odstavec>K tomuto účelu se používají <pojem>stylové jazyky</pojem>, které umožňují popsat, jak se mají jednotlivé elementy XML dokumentu zobrazovat.</odstavec>
A my jej chceme pomocí XSLT převést do HTML. Dejme tomu, že
chceme, aby se obsah elementu odstavec
zobrazil
jako samostatný odstavec. Označené pojmy chceme zvýraznit. Do XSLT
stylu proto přidáme dvě jednoduché šablony, které XML převedou na
odpovídající elementy HTML:
<xsl:template match="odstavec"> <p> <xsl:apply-templates/> </p> </xsl:template> <xsl:template match="pojem"> <em> <xsl:apply-templates/> </em> </xsl:template>
Po zpracování dokumentu a stylu XSLT procesorem dostaneme stránku v HTML:
<p>K tomuto účelu se používají <em>stylové jazyky</em>, které umožňují popsat, jak se mají jednotlivé elementy XML dokumentu zobrazovat.</p>
Formátovací objekty – druhá část XSL – jsou jen jakýsi abstraktní slovník (podobně jako HTML), který umí velmi dobře definovat vizuální vzhled dokumentu. FO umožňují definovat layout stránek a pak popsat formátování textu a dalších objektů, které se mají do těchto stránek naformátovat. Obsah stránek je přitom definován právě pomocí formátovacích objektů, které zastupují bloky textu, buňky tabulky nebo třeba obrázek. Každý objekt může mít několik desítek vlastností, které definují použité písmo, velikost okrajů okolo objektu, barvu textu i pozadí, vzhled rámečku, zakazují nebo povolují zlom stránky atd.
A jak formátovací objekty souvisí s formátováním XML? Celý trik spočívá v tom, že formátovací objekty se zapisují jako XML dokument, kde jednotlivým objektům odpovídají elementy a vlastnostem atributy. Díky tomu můžeme pro převedení XML do formátovacích objektů použít XSLT. Transformace převede sémantické značkování na formátovací objekty definující vzhled. Kromě toho se v tomto okamžiku může například vygenerovat obsah apod. Výsledný soubor FO se pak předá tzv. procesoru formátovacích objektů, který se postará o konečné zalomení formátovacích objektů do definovaných rozměrů stránky a výsledek zobrazí nebo uloží do nějaké vhodného formátu, jako je PDF nebo PostScript.
Opět si na příkladě ukážeme princip převodu našeho ukázkového
dokumentu XML do tištěné podoby pomocí XSL. Nejprve si musíme vytvořit
XSLT styl, který bude generovat formátovací objekty. Dejme tomu, že
chceme, aby se obsah elementu odstavec
zobrazil
jako samostatný odstavec, písmem o velikosti 12 bodů, zarovnaný
do bloku, s odstavcovou zarážkou 18 bodů. Označené pojmy chceme
zobrazit kurzívou. Do XSLT stylu proto přidáme dvě jednoduché šablony,
které XML převedou na elementy odpovídající formátovacím
objektům.
<xsl:template match="odstavec"> <fo:block font-size="12pt" text-indent="18pt" text-align="justify"> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="pojem"> <fo:inline font-style="italic"> <xsl:apply-templates/> </fo:inline> </xsl:template>
Po zpracování dokumentu a stylu XSLT procesorem dostaneme dokument obsahující formátovací objekty:
<fo:block font-size="12pt" text-indent="18pt" text-align="justify">K tomuto účelu se používají <fo:inline font-style="italic">stylové jazyky</fo:inline>, které umožňují popsat, jak se mají jednotlivé elementy XML dokumentu zobrazovat.</fo:block>
Vidíme, že během transformace se z XML dokumentu nesoucího nějakou sémantickou informaci stal jiný dokument, který již obsahuje jen informace o formátování. Procesor FO z něj dokáže vytvořit formátovaný dokument. Nejprve z něj načte elementy jako formátovací objekty, pak u všech formátovacích objektů doplní nespecifikované vlastnosti hodnotou zděděnou od rodičovského formátovacího objektu nebo implicitní hodnotou, vyhodnotí hodnoty výrazů apod. Výsledek se pak zalomí do oblastí vyhovujících všem omezením a práce je hotova.