Extensible Stylesheet Language Transformations

Z Wikipedie, otevřené encyklopedie
(Přesměrováno z XSLT)
Skočit na: Navigace, Hledání
Příklad XSL transformace v editoru jEdit

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.

Obecný úvod[editovat | editovat zdroj]

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[editovat | editovat zdroj]

Standardní způsob transformování dat[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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ě[editovat | editovat zdroj]

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.

Cíle XSLT[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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, libxslt, 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[editovat | editovat zdroj]

V následujícím příkladu je reálná ukázka z WWW stránek. Zdrojem dat je diskový soubor 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)[editovat | editovat zdroj]

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&amp;model=c1" target="" description="" />
                    <item name="C2" ref="./?cat=car&amp;model=c2" target="" description="" />
                    <item name="C3" ref="./?cat=car&amp;model=c3" target="" description="" />
                    <item name="C4" ref="./?cat=car&amp;model=c4" target="" description="" />
                    <item name="C4 Picasso" ref="./?cat=car&amp;model=c4picasso" target="" description="" />
                    <item name="Xsara Picasso" ref="./?cat=car&amp;model=xsarapi" target="" description="" />
                    <item name="Berlingo" ref="./?cat=car&amp;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 Acrobat Reader?" ref="./?cat=acrobat" target="" description="" />
              <item name="Prodej odtahové služby" ref="./?cat=towsale" target="" description="" />
              <item name="Akce zimní pneu 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[editovat | editovat zdroj]

Následující soubor není nezbytný, je přiložen pro úplnost (menu.dtd):

<!ENTITY lt     '&#60;'>
<!ENTITY gt     '>'>
<!ENTITY amp    '&'>
<!ENTITY apos   '''>
<!ENTITY quot   '"'>
<!ENTITY nbsp   ' '>
<!ENTITY mdash  '&#x2014;'>
<!ENTITY ldquo  '&#x201C;'>
<!ENTITY rdquo  '&#x201D;'>
<!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)[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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&amp;model=c1">C1</a></li>
			<li><a href="./?cat=car&amp;model=c2">C2</a></li>
			<li><a href="./?cat=car&amp;model=c3">C3</a></li>
			<li><a href="./?cat=car&amp;model=c4">C4</a></li>
			<li><a href="./?cat=car&amp;model=c4picasso">C4 Picasso</a></li>
			<li><a href="./?cat=car&amp;model=xsarapi">Xsara Picasso</a></li>
			<li><a href="./?cat=car&amp;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í pneu 2006</a></li>
				<li class="last"><a href="./?cat=news">Akce a novinky!</a></li>
			</ul>
		</li>
	 </ul>
    	</div>
  	</div>
  </body>
</html>

Odkazy a literatura[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

Literatura[editovat | editovat zdroj]