260 likes | 401 Views
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.
E N D
Stylový jazyk XSL2. čá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 obsahua případných atributů
Pojmenované šablony • pojmenované šablony plní podobnou funkci jakofunkce 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"/> </fo:block> </xsl:template> </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) • FOPnepodporuje české kódování, což lze však vyřešit úpravou konfiguračního souboruuserconfig.xml (bližší popis je obsaženv dokumentaci programu) • příklad transformace pomocí procesoru FOP fop –c c:fop\conf\userconfig.xml -fo kurz.fo -pdf kurz.pdf fop –c c:fop\conf\userconfig.xml -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 Soubor obsahující FO (kurz.fo) XML dokument (kurz.xml) 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 ;)