PB138cv/Cv7
Z FI WIKI
Obsah
XSLT
- pro úpravu, transformace dokumentu
- exportování dat do různých formátů (HTML, deriváty XML) z vnitřní XML reprezentace
- Proto byl vytvořen (nejprve v rámci XSL - stylovacího jazyka pro XML v XML) návrh popisu těchto transformací.
- Podrobněji popsáno v přednáškových skriptech na IS
- Popis standardu 1.0 na W3C.
- Tutoriál na W3Schools.
- Tutoriál na kosek.cz.
- Tutoriál na zvon.org.
- Článek What kind of language is XSLT.
- Použití XSLT např. v projektu Mozilla zde.
Stylesheet
- Soubor s popisem transformačních pravidel - stylesheet.
- Transformace popisují šablony (template).
- definováno vstupní pravidlo
- při procházení - narazí-li XSLT-procesor na šablonu, kterou je možno použít, provede definovanou transformaci.
- funkcionální princip jako např CSS
- Nelze skládat šablony!
- víc použitelných šablon = chyba
Struktura
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template pravidlo> samotná transformace </xsl:template> </xsl:stylesheet>
- Většinou definujeme hlavní šablonu (tj. pravidlo
match="/"
) a v té pak elementyapply-templates
definujeme, které podelementy se budou transformovat a jakým způsobem. - Pokud není definován, počítá se implicitně s tím, že se má projít "všechny děti včetně textových uzlů".
Výběr použité šablony
- Pokud ve stylesheetu nedefinujeme žádnou šablonu, ze souboru se jen odstraní značkování.
- V šabloně může mít výběrové pravidlo
match="retezec"
pro uzly dokumentu různou strukturu:- samotný textový řetězec - vybere takový element, jehož název je retezec.
- cesta XPath.
-
*
, což značí, že tomuto pravidlu vyhovuje jakýkoli uzel. -
/
, definující kořen dokumentu. - tvar
hodnota1|hodnota2
- pak tomu vyhovují uzly hodnota1 i hodnota2.
- šablony mohou mít mód -
mode="retezec"
- tak se definuje víc šablon pro uzel
- kterou přesně použijeme se nadefinuje v nadřazených šablonách (při volání této)
- tak se definuje víc šablon pro uzel
- šablony mohou mít prioritu -
priority="retezec"
- když mohou i tak být víc šablon, určí priorita, která se použije
- šablona lze použít i na základě adresace atributu -
match="@atribut"
.- tedy například:
match="element[@atribut]"
- tedy například:
Transformace
Obsah elementu template tvoří strom, kterým nahradíme element šablonou vybraný.
- text nebo značkování - původní uzel zcela nahradíme novým podstromem.
xsl:value-of
- vypíše obsah elementu daného obsahem atributu select. V atributu select může bý také name() - odkaz na jméno elementu vybraného šablonou, nebo @atribut - obsah atributu vybraného šablonou.xsl:text
- tento element využijeme, pokud chceme mít zabezpečeno, že zůstanou zachovány všechny bílé znaky v textu (uvnitř elementu).xsl:apply-templates
můžeme explicitně určit, které šablony se mají aplikovat jako část aktuální šablony. Jejich označení určujeme v atributu select, můžeme určit mód šablony .xsl:for-each
- definuje vlastně cyklus - projde všechny uzly vybrané atributem select - tam můžeme použít mimo nejednoznačných cest i osy cvičení 6.xsl:call-template
- explicitní zavolání šablony jménem namexsl:element
- vytvoří element zadaného jména name(to může být např. z nějakého textu získaného, nemusíme explicitně vypisovat). Hodnotu atributu zdrojového uzlu můžeme zadat např. name="{@atribut}"xsl:attribute
- zadává atribut. Jméno - atribut name. Obsah - děti tohoto elementu.xsl:copy-of
- zkopíruje do výstupu aktuální uzel a poduzlyxsl:copy
- zkopíruje do výstupu aktuální uzel (ale ne poduzly)xsl:if test="podminka"
- podobsah se provede jen když je splněna podmínka - boolean hodnota...xsl:choose
- větvení podle atributu test v podelementuxsl:when
. Druhá větev v podelementuxsl:otherwise
.xsl:number
- umožňuje odkazovat se na pořadové číslo zpracování aktuálního elementuxsl:variable
- umožňuje definovat proměnné (jméno name). Hodnotu lze získat více způsoby (podelement xsl:value-of, atribut select, textový obsah...) - ve zbytku souboru se na hodnotu odkazujeme jako $jmeno- atd - viz tutoriály
Příklad
Mějme tento zkušební XML soubor - ant1.xml. Vytvořte k němu stylesheet, který:
- Vypíše do html jméno a popis (name, description) targetů.
- Vypíše do html jméno a popis targetů tak, že informace k targetu compile budou tučně.
- Vypíše do html jméno a popis targetů tak, že se před tím jménem a popisem vypíše pořadové číslo elementu.
- Vypíše jméno a popis targetů do html-tabulky. Třetí target bude vypsán červeně.
Užití v Javě
Pro použití v Javě (nebo jiném programovacím jazyce) potřebujeme XSLT-procesor, který umožní spojení hlavního dokumentu se stylesheetem a vytvoření výsledného dokumentu.
- XSlt transformátor
- využívá JAXP core API
- Triviální, platformově nezávislý spouštěč XSLT procesoru vybudovaný POUZE na Java 5 Core API. Lze použít pro testování XSLT stylů apod. Při spouštění NEMÍT v CLASSPATH žádný jiný XSLT procesor (zejména ne Saxon).
xslt.bat src_file style_file dest_file
- Nejznámější saxon (podporuje XSLT 1, XSLT2, XPath 2, XQuery).
- JAXP, JDOM nebo XOM.
- info: starší verze, novější verze, nebo zde
- Vaše pokusy lze kontrolovat:
java -jar saxon8.jar -t samples\data\books.xml samples\styles\books.xsl >c:\temp.html
- Xalan.
- Příklady použití jednotlivých metod pro práci s XSLT.
java org.apache.xalan.xslt.Process -in xmlSource -xsl stylesheet -out outputfile
Příklad
Otestujte si vytvořené styly pomocí řádkových aplikací nebo jiné aplikace umožňující aplikaci stylu.--></xml>