Ústav informatiky PEF MZLU v Brně Stylový jazyk XSL 2. část Magdalena Raszková Ústav informatiky PEF MZLU v Brně xraszkov@pef.mendelu.cz
Testík Co znamená zkratka XSL? Extra Strong Language Extensible Stylesheet Language Extra Simple Language Která část jazyka se v současnosti nejvíce používá, např. pro převod XML na HTML? XSLT XSLFO XSL-FO Který prvek je kořenovým elementem dokumentu XSLT? xsl:stylesheet xsl:transform lze použít obě varianty Šablony jsou základem XSLT stylu. Který element se používá pro jejich tvorbu xsl:template xsl:templates xsl:apply-templates
Testík Jaký je jmenný prostor elementů XSLT podle doporučení konsorcia W3C? http://www.w3.org/1999/XSL/Transformation http://www.w3.org/1999/XSL/Transform http://www.w3c.org/1999/XSL/Transform http://www.w3.org/1999/XSLT Co umožňuje XSLT element xsl:value-of? aplikovat určitou šablonu vypsat přímo textový obsah elementu vypsat textový obsah prvku, ať už se v jeho struktuře vyskytuje na libovolném místě Jaký povinný atribut musíme uvést u elementu for-each? name select test Zdroj: Lucie Grusová – XML pro úplné začátečníky ISBN 80-7226-697-7
Instrukce <xsl:if> slouží k jednoduchým testům (podmínkám) neexistuje žádná část else, proto je v případě více variant nutno použít <xsl:choose> <xsl:template match="cislo"> <div> <xsl:value-of select="."/> <xsl:if test="number(.) mod 2=0"> je sudé </xsl:if> </div> </xsl:template>
Instrukce <xsl:choose> slouží pro testování více možných podmínek může obsahovat více instrukcí <xsl:when> nepovinně element <xsl:otherwise> <xsl:template match="//kniha"> <xsl:choose> <xsl:when test="popis"> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <b>Tato kniha nemá popis.</b> </xsl:otherwise> </xsl:choose> </xsl:template>
Číslování <xsl:number> slouží k přiřazení posloupnosti čísel jednotlivým uzlům ve výsledném dokumentu atributy count – určuje, jaké uzly budou číslovány (pokud atribut nepoužijeme, budou číslovány jen uzly stejného jména a typu jako aktuální uzel) format – určuje výstupní formát číslování (1, 01, a, A, i, I) a další <xsl:template match="/"> <xsl:for-each select="kniha"> <xsl:number format="1. "/> <xsl:value-of select="nazev"/> <xsl:value-of select="cena"/> </xsl:for-each> </xsl:template>
Třídění <xsl:sort> 1/2 určuje pořadí zpracování uzlů uvnitř instrukcí <xsl:apply-templates> a <xsl:for-each> atributy (všechny nepovinné) select – výraz jazyka XPath, který vrací sadu uzlů k setřídění order – pořadí řazení (ascending nebo descending), defaultně ascending (vzestupné třídění) data-type – podle jakého typu dat budou informace tříděny (number nebo text), defaultně text case-order – zda budou mít při třídění přednost malá (lower-first) či velká (upper-first) písmena pokud žádný atribut neuvedeme, jako klíč k setřídění bude sloužit aktuální prvek a řazení podle abecedy lze řadit i podle více kritérii (vícero sort za sebou)
Třídění <xsl:sort> 2/2 <xsl:template match="knihovna"> <table border="1"> <xsl:for-each select="kniha"> <xsl:sort select="nazev"/> <tr> <td><xsl:value-of select="isbn"/></td> <td><xsl:value-of select="nazev"/></td> </tr> </xsl:for-each> </table> </xsl:template>
Proměnné <xsl:variable> 1/2 proměnné slouží v XSLT k zapamatování údajů, které opakovaně používáme obsah již definované proměnné nelze měnit (je to tedy spíše konstanta) proměnnou lze nastavit buď globální pro celý styl, nebo jen pro určitou šablonu či její část proměnná je platná pro všechny své následující sourozence a jejich potomky proměnná může obsahovat libovolný XPath typ (seznam uzlů, řetězec, číslo, boolean)
Proměnné <xsl:variable> 2/2 proměnnou můžeme definovat jedním z následujících tří způsobů: Přiřazení výsledku libovolného výrazu do proměnné <xsl:variable name="jmeno" select="výraz"/> Přiřazení prázdného řetězce do proměnné <xsl:variable name="jmeno"/> Přiřazení fragmentu výstupního dokumentu do proměnné <xsl:variable name="jmeno"> elementy, atributy apod. </xsl:variable> na obsah proměnné se ve výrazech můžeme odvolávat pomocí zápisu $jmeno vložení hodnoty proměnné do výstupního dokumentu <xsl:value-of select="$jmeno"/> Zdroj: http://www.kosek.cz/xml/xslt/parametry.html
Parametry <xsl:param> parametry mají stejné použití jako proměnné, pouze jim lze při volání stylu nebo šablony změnit hodnotu šabloně, která má uvnitř sebe definované nějaké parametry, můžeme předat hodnotu těchto parametrů pomocí instrukce <xsl:with-param> Více se dozvíte zde: http://www.kosek.cz/xml/xslt/parametry.html
Instrukce <xsl:attribute> občas potřebujeme strukturu stávajícího XML dokumentu přeskupit či pozměnit lze využít instrukce <xsl:attribute>, <xsl:copy>, <xsl:copy-of> instrukce <xsl:attribute> vytvoří na výstupu nový atribut atributy name – jméno nového atributu (povinný) obsahem elementu <xsl:attribute> je hodnota nového atributu na výstupu
Instrukce <xsl:copy> a <xsl:copy-of> instrukce <xsl:copy> vytvoří na výstupu kopii aktuálního elementu, ale bez jeho případného obsahu a atributů instrukce <xsl:copy-of> vytvoří na výstupu přesnou kopii elementu určeného pomocí povinného atributu select, včetně jeho obsahu a případných atributů
Pojmenované šablony pojmenované šablony plní podobnou funkci jako funkce a procedury v klasických jazycích často se opakující XSL instrukce můžeme uložit do zvláštní šablony, která se volá svým jménem pojmenovaná šablona má atribut name, kterým určujeme název šablony k vyvolání šablony slouží instrukce <xsl:call-template> <xsl:template name="pokus"> tělo šablony </xsl:template> … <xsl:call-template name="pokus"/>
Transformace XML do PDF TeX definujeme vlastní transformace na TeXovské příkazy v XSL stylu PassiveTeX (procesor FO postavený nad TeXem) TeXML xmltex (parser XML v TeXu ) Základní přehled zde XSL-FO Formátovací objekty
XSL (eXtensible Stylesheet Language) stylový jazyk speciálně vyvinutý pro XML specifikace XSL je dílem konsorcia W3C původně jedna specifikace, která zajišťovala jak transformaci dokumentů, tak i jejich formátování později vymezeny 2 samostatné části, které spolu ale úzce souvisí: transformační část: XSLT (Transformation) formátovací část: XSL-FO (Formatting Objects) definuje vizuální vlastnosti objektů a dokumentu – formátování výstupu transformace do formátu PDF, PS tyto dvě části doplněny ještě o jazyk XPath – dohromady označováno jako XSL Family
Formátovací část XSL-FO eXtensible Stylesheet Language – Formatting Objects část jazyka XSL, která se zabývá formátováním výstupu a přesným umístěním prvků na stránce aplikace jazyka XML nejčastěji se používá k transformaci XML dokumentů na dokumenty ve formátu PDF či PostScript jazyk XSL-FO je mnohem obsáhlejší než jazyk XSLT aktuální verze: součást doporučení XSL verze 1.0 pracovní návrh verze 1.1
Formátovací objekty (FO) jazyk je založen na speciálních formátovacích objektech (Formatting Objects – FO) formátovací objekty definují vzhled vysázeného dokumentu podobně jako HTML popisuje zobrazení stránky v prohlížeči elementy XSL-FO představují stránky, bloky či nejrůznější objekty (obrázek, tabulka, ...) formátovací objekty se používají k určení toho, jak mají být data z dokumentů XML formátována a zobrazena (šířka okrajů, styly písma, zarovnání…)
Formátovací objekty (FO) dokumenty obsahující pouze formátovací objekty jsou poměrně málo používané (jen pro krátké dokumenty), spíše se kombinují s XSLT můžeme tedy nejprve vytvořit styl XSLT, který použijeme k transformaci XML dokumentu tak, aby výsledný dokument obsahoval formátovací objekty <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version='1.0'> ... <xsl:template match="knihovna"> <fo:block> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="kniha"> <fo:block space-before="3pt" text-align="center" start-indent="10mm"> <xsl:value-of select="nazev"/> </xsl:stylesheet>
Realizace transformací FO v současné době XSL-FO nepodporuje žádný běžně dostupný prohlížeč, jejich využití je vázáno na procesory jazyka XSL-FO open-source/free implementace FOP (převod na PDF, PCL, PS, SVG, Print, AWT, MIF, TXT) PassiveTeX TeXML (převod na TeX) UFO, jfor komerční implementace XEP Epic XSL Formatter žádná z implementací zatím nepokrývá úplný standard, ale zvláště komerční implementace jsou pro většinu aplikací zcela dostačující
FOP (Formatting Object Processor) nejrozšířenější procesor XSL-FO založený na jazyku Java, spouští se z příkazové řádky vyvinut Jamesem Tauberem v nadaci Apache Software Foundation výstup do PDF je u FOPu velmi dobře propracovaný a umožňuje mimo jiné vkládání odkazů, bookmarků, grafiky a vlastních fontů do vytvářených dokumentů
FOP (Formatting Object Processor) FOP nepodporuje české kódování, což lze však vyřešit úpravou konfiguračního souboru userconfig.xml (bližší popis je obsažen v dokumentaci programu) příklad transformace pomocí procesoru FOP fop –c c:fop\conf\userconfig.xml -fo kurz.fo -pdf kurz.pdf -xsl kurz.xsl -xml kurz.xml –pdf kurz.pdf dokument s formátovacími objekty název cílového dokumentu nebo XSL-FO styl zdrojový XML dokument název cílového dokumentu
Proces transformace XML dokument Soubor obsahující FO (kurz.fo) (kurz.xml) Soubor obsahující FO (kurz.fo) XSLT procesor (XT, Saxon, Xalan, ...) XSL-FO procesor (FOP, XEP, ...) výsledný dokument ve formátu PDF, PS, ... (kurz.pdf, kurz.ps, ...) XSL-FO styl (kurz.xsl)
Proces transformace (zjednodušený – procesor FOP, XEP, ...) XML dokument (kurz.xml) XSL-FO procesor (FOP, XEP, ...) výsledný dokument ve formátu PDF, PS, ... (kurz.pdf, kurz.ps, ...) XSL-FO styl (kurz.xsl)
Zdroje Stránky konsorcia W3C (specifikace XSL, XSLT, XSL-FO, XPath) http://www.w3.org/Style/XSL/ Specifikace XSL verze 1.0 (součástí je specifikace XSL-FO 1.0) http://www.w3.org/TR/2001/REC-xsl-20011015/ Jiří Kosek – XSLT v příkladech http://www.kosek.cz/xml/xslt/index.html Procesor XT oficiální stránky: http://www.blnz.com/xt rozšířený o podporu českého kódování (autor Jiří Kosek): http://www.kosek.cz/xml/xt/ Procesor FOP http://xmlgraphics.apache.org/fop/ Cooktop – freeware XML editor http://www.xmlcooktop.com/
Dotazy? Děkuji za pozornost ;)