PB138cv/Cv7

Z FI WIKI
Přejít na: navigace, hledání

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í.


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 elementy apply-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)
  • š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]"

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 name
  • xsl: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 poduzly
  • xsl: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 podelementu xsl:when. Druhá větev v podelementu xsl:otherwise.
  • xsl:number - umožňuje odkazovat se na pořadové číslo zpracování aktuálního elementu
  • xsl: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
java -jar saxon8.jar -t samples\data\books.xml samples\styles\books.xsl >c:\temp.html
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>