XSLT
Z Multimediaexpo.cz
Transformace XSLT (eXtensible Stylesheet Language Transformations) slouží k převodům zdrojových dat ve formátu XML do libovolného jiného požadovaného formátu, nejčastěji HTML, jiného XML nebo libovolných jiných datových struktur.
Obsah |
Obecný úvod
XSLT je transformace, která se provádí pomocí procesoru XSLT. Procesorem je míněn program podporující tuto transformaci. Procesor XSLT může být napsán v libovolném programovacím jazyce nebo využít knihovny XSLT daného programovacího jazyka.
K provedení transformace jsou potřeba dva soubory:
- První soubor obsahuje zdrojová data, která budou transformována. Struktura tohoto souboru vyjma obecných vlastností XML není blíže specifikována.
- Druhý soubor obsahuje vzorec pro transformaci a musí být napsán v jazyce XSL.
Vlastnosti XSLT
Standardní způsob transformování dat
Transformace se provádí pouze na známých datových strukturách. Tyto datové struktury, které a pomocí kterých se bude transformovat, jsou definovány mezinárodním konzorciem W3C. Správnost implementace a podpora všech standardem definovaných vlastností je v kompetenci a na zodpovědnosti autorů konkrétního procesoru XSLT.
Mezinárodní podpora
Zdrojová data pro transformaci mohou obsahovat libovolné znakové sady, nejen angličtinu, ale též např. znaky s diakritikou nebo znaky asijských písem, popřípadě jejich kombinace. V zdrojovém dokumentu však musí být v záhlaví označeno kódování znaků. V poslední době se často užívá a je doporučeno užívat kódování UTF-8 pro správnou funkci jiných znaků než ASCII. Většina operačních systémů, programovacích jazyků a editorů je již podporou kódování UTF-8 vybavena.
Vysoká přístupnost k datům
Soubory pro XSLT jsou v textovém formátu, který je čitelný bez žádného zvláštního editoru. Díky tomuto principu je i možné tyto soubory snadno generovat pomocí počítačových programů. Příkladem může být získání dat z databáze či jiných datových struktur, jejich konverze do XML, která je velmi snadná, a následovná aplikace XSLT například pro převod do HTML.
Nezávislost na platformě
Procesory nebo též programy pro provedení vlastní transformace existují pro všechny známé platformy používané na PC nebo na serverech. V mnoha programovacích jazycích jsou dnes již implementovány knihovny pro XSLT.
Jednoznačnost a symetričnost
Z matematického hlediska XSLT není jednoznačná, ani není symetrickou funkcí. Pro některé procesory však existuje alespoň jeden případ T(x,y) = x, kde x je zdroj a y je vzorec transformace. Neexistuje však případ T(x,y) = y.
Cíle XSLT
Smyslem XSLT je na základě zdrojového souboru a šablony vygenerovat jiný, třetí dokument nebo obecně soubor. Struktura tohoto výstupu XSLT není definována přímo standardem a je závislá na procesoru XSLT. Nejčastěji se používá výstup do HTML nebo XML, případně prostý textový formát, označovaný též TXT. Dalšími velmi známými výstupy jsou formáty PDF a RTF. Zcela pochopitelně to však mohou být i libovolné jiné soubory nebo formáty dat.
Procesory XSLT
Procesory XSLT se obvykle nachází jako součást programovacích jazyků nebo jako knihovny, které lze dodatečné získat z internetu. Příkladem jsou knihovny Xalan, Saxon, Apache FOP, přímou implementaci lze nalézt např. v jazycích PHP, Java, C#. Více aktuálních informací na stránkách konzorcia W3C XSL a XSLT.
Příklad užití XSLT
V následujícím příkladu je reálná ukázka z WWW stránek. Zdrojem dat je diskový soubory XML a transformační soubor, který je též diskový. Výstupem je HTML, přesněji řečeno dle standardu XHTML 1.0 Strict. Jako procesor je užit interní procesor XSLT v PHP5. Pozn. autora: „Bez bližšího vysvětlení principu uvedu příklad reálného využití XSLT na www stránkách. Nerad bych, aby toto někdo vnímal jako skrytou reklamu.“
Ukázka zdrojového souboru (XML)
Zdrojový soubor XML (menu.xml):
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data SYSTEM "./data/menu.dtd"> <?xml-stylesheet type="text/xsl" href="menu.xsl"?> <data> <rootmenu> <menu name="Osobní vozy" ref="./?cat=cars" target="" description=""> <item name="C1" ref="./?cat=car&model=c1" target="" description="" /> <item name="C2" ref="./?cat=car&model=c2" target="" description="" /> <item name="C3" ref="./?cat=car&model=c3" target="" description="" /> <item name="C4" ref="./?cat=car&model=c4" target="" description="" /> <item name="C4 Picasso" ref="./?cat=car&model=c4picasso" target="" description="" /> <item name="Xsara Picasso" ref="./?cat=car&model=xsarapi" target="" description="" /> <item name="Berlingo" ref="./?cat=car&model=berlingo" target="" description="" /> <item name="Leasing" ref="./?cat=leasing" target="" description="" /> <item name="Vozy na prodejně" ref="./?cat=shopcars" target="" description="" /> </menu> <item name="Předváděcí vozy" ref="./?cat=showcars" target="" description="" /> <item name="Autobazar" ref="./?cat=oldcars" target="" description="" /> <menu name="Další informace" ref="./?cat=other" target="" description=""> <item name="Co je to Acroabt Reader?" ref="./?cat=acrobat" target="" description="" /> <item name="Prodej odtahové služby" ref="./?cat=towsale" target="" description="" /> <item name="Akce zimní pnmeu 2006" ref="./redir.php?uri=./info/wpneu2006-2.pdf" target="_blank" description="" /> <item name="Akce a novinky!" ref="./?cat=news" target="" description="" /> </menu> </rootmenu> </data>
Ukázka definičního souboru (DTD) - není třeba pro XSLT
Následující soubor není nezbytný, je přiložen pro úplnost (menu.dtd):
<!ENTITY lt '<'> <!ENTITY gt '>'> <!ENTITY amp '&'> <!ENTITY apos '''> <!ENTITY quot '"'> <!ENTITY nbsp ' '> <!ENTITY mdash '—'> <!ENTITY ldquo '“'> <!ENTITY rdquo '”'> <!ENTITY % DataContent "(rootmenu)"> <!ENTITY % MenuContent "(menu | item)*"> <!ENTITY % DataAttrs "ref CDATA #REQUIRED name CDATA #REQUIRED target CDATA '' target2 CDATA #IMPLIED description CDATA #REQUIRED" > <!ELEMENT data %DataContent;> <!ELEMENT rootmenu %MenuContent;> <!ELEMENT menu %MenuContent;> <!ELEMENT item EMPTY> <!ATTLIST data > <!ATTLIST rootmenu> <!ATTLIST menu %DataAttrs; > <!ATTLIST item %DataAttrs; >
Ukázka transformačního souboru (XSL)
Transformace v jazyce XSL, soubor XML (menu.xsl):
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates select="*" /> </xsl:template> <xsl:template match="rootmenu"> <xsl:call-template name="menu" /> </xsl:template> <xsl:template match="rootmenu | menu" name="menu" mode="root"> <xsl:for-each select="*"> <li> <xsl:if test="position()=last()"> <xsl:attribute name="class">last</xsl:attribute> </xsl:if> <a> <xsl:attribute name="href"> <xsl:value-of select="@ref" /> </xsl:attribute> <xsl:if test="not(@target='')"> <xsl:attribute name="onclick">window.open(this.href,'<xsl:value-of select="@target" />');return(false);</xsl:attribute> </xsl:if> <xsl:value-of select="@name" /> </a> <xsl:if test="name(.)='menu'"> <ul> <xsl:call-template name="menu" /> </ul> </xsl:if> </li> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Ukázka aplikace XSLT v jazyce PHP
Vlastní transformační proces v jazyce PHP (index.php):
<?php header('Content-Type: text/html; charset=utf-8'); echo("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r"); echo("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r"); ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs" dir="ltr"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-language" content="cs" /> <meta http-equiv="content-style-type" content="text/css" /> <title id="Header_Title">ABC</title> <link rel="StyleSheet" href="./menu.css" type="text/css" media="all" /> </head> <body> <div id="global"> <h1>Napis</h1> <?php echo(" <div id=\"menu-div\">\r"); $xmldom = new DomDocument(); $xmldom->load("./menu.xml"); $xmldom->validate(); $xsldom = new DomDocument(); $xsldom->load("./menu.xsl"); $xsltproc = new XsltProcessor(); $xsldom = $xsltproc->importStylesheet($xsldom); $outdom = $xsltproc->transformToDoc($xmldom); echo(" <ul id=\"myTree\">\r"); print $outdom->saveHTML(); echo(" </ul>\r"); echo(" </div>\r"); ?> </div> </body> </html>
Ukázka výstupu
Výstup zmíněné transformace - v tomto případě data ve formátu HTML:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs" dir="ltr"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-language" content="cs" /> <meta http-equiv="content-style-type" content="text/css" /> <title id="Header_Title">ABC</title> <link rel="StyleSheet" href="./menu.css" type="text/css" media="all" /> </head> <body> <div id="global"> <h1>Nadpis</h1> <div id="menu-div"> <ul id="myTree"> <li><a href="./?cat=cars">Osobní vozy</a> <ul> <li><a href="./?cat=car&model=c1">C1</a></li> <li><a href="./?cat=car&model=c2">C2</a></li> <li><a href="./?cat=car&model=c3">C3</a></li> <li><a href="./?cat=car&model=c4">C4</a></li> <li><a href="./?cat=car&model=c4picasso">C4 Picasso</a></li> <li><a href="./?cat=car&model=xsarapi">Xsara Picasso</a></li> <li><a href="./?cat=car&model=berlingo">Berlingo</a></li> <li><a href="./?cat=leasing">Leasing</a></li> <li class="last"><a href="./?cat=shopcars">Vozy na prodejně</a></li> </ul> </li> <li><a href="./?cat=showcars">Předváděcí vozy</a></li> <li><a href="./?cat=oldcars">Autobazar</a></li> <li class="last"><a href="./?cat=other">Další informace</a> <ul> <li><a href="./?cat=acrobat">Co je to Acroabt Reader?</a></li> <li><a href="./?cat=towsale">Prodej odtahové služby</a></li> <li><a href="./redir.php?uri=./info/wpneu2006-2.pdf" onclick="window.open(this.href,'_blank');return(false);" >Akce zimní pnmeu 2006</a></li> <li class="last"><a href="./?cat=news">Akce a novinky!</a></li> </ul> </li> </ul> </div> </div> </body> </html>
Literatura
- Steven Holzner: XSLT Příručka internetového vývojáře, http://knihy.cpress.cz/pocitac/Book.asp?ID=454
Podívejte se také na
- XML – značkovací jazyk
- XSL – jazyk pro transformace
- PHP – programovací jazyk, hypertextový preprocesor
Externí odkazy
- W3C – mezinárodní konzorcium vydávající standardy
- W3C - XML – standardy XML
- W3C - XSL – standardy XSL a XSLT
- Škola XSL – užití XSLT
- Škola XSL-FO – užití formátovacích objektů XSL-FO
- XSLT od J. Koska – XSLT v příkladech
- XSLT - užití XSLT, příklady
- ZVON XSLT reference
- ZVON XSLT 1.0 tutorial
- ZVON XSLT 2.0 tutorial
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |