Extensible Stylesheet Language Transformations

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 HTML5. Jako procesor je užit interní procesor XSLT v PHP5 nebo PHP7. 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&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 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 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)
[editovat | editovat zdroj]Transformace v jazyce XSL, soubor XML (menu.xsl):