Kompletní průvodce XSLT – úvod do problematiky
XML jako značkovací jazyk je již poměrně dobře zažitým pojmem a není třeba jej nijak představovat. S tímto značkovacím jazykem úzce souvisí transformační jazyk XSLT (eXtensible Stylesheet Language Transformations), který byl bohužel dosud poněkud opomíjen. Pojďme se mu tedy podívat na zoubek!
Základy XML již má za sebou snad každý čtenář Interval.cz, a pokud ne, měl by to rychle dohnat. Bez jeho znalosti se zde totiž neobejdeme. XSLT nám umožní teoretické přednosti formátu XML přenést trochu více do praxe. Na následujících řádcích se dozvíte, jak to myslím. Tento úvodní článek ovšem bude pouze rozehřívací, XSLT si představíme jako celek a ukážeme si jednoduchý příklad využití. Samotná výuka jazyka začne až v následujících článcích.
K čemu je XSLT?
Začneme tedy trochu zeširoka. Popisný značkovací jazyk XML má řadu vlastností, díky kterým se mohl uchytit. Je snadno zapisovatelný i čitelný, a to jak pro člověka tak i pro stroj, hlavně díky existenci nástrojů a knihoven snad na všech existujících platformách. Přesto je to jen formát pro zabalení nějakých (převážně textových) dat. S těmito daty je ale třeba dále nějak pracovat. XML parser nám umožní data z tohoto formátu vydolovat, ale další zpracování (například vygenerování HTML výstupu) je pro programátora poněkud nezáživné. Znamená totiž obvykle iterovat jednotlivými položkami a získaná data opět balit do jiných značek. Nebylo by lepší vymyslet nějaký efektivnější a flexibilnější přístup k tomuto problému?
Jádro problému spočívá vlastně v transformaci dat z XML dokumentu do podoby, kterou vyžadujeme. Běžné programovací jazyky jsou sice poměrně silné, avšak jednodušší by bylo využití jazyka určeného přímo na takovéto XML transformace. Ano, tušíte správně, tímto jazykem je právě XSLT. Princip využití XSLT lze velmi jednoduše vyjádřit následujícím diagramem:
Takže jak zpracování XML dat probíhá? Programátor ve svém kódu zavolá XSLT procesor a předá mu vstupní XML data a XSLT styl, což je vlastně předpis, podle kterého se XML data budou zpracovávat. XSLT procesor pak vygeneruje výstupní data. Jak takový procesor funguje uvnitř, to nás vůbec nemusí zajímat.
Tento postup je pro programátora mnohem jednodušší a přímočařejší, než „ruční“ zpracování. Pokud by musel řešit transformaci algoritmicky, bylo by to něco na způsob „najdi element A, vlož jej do elementu B, přidej element C, a takhle pokračuj dokola, dokud jsou nějaké elementy A k dispozici“. XSLT ale umožňuje zapsat „elementy A nahraď elementy B s doplněním C“. Je to sice řečeno velice volně, ale dáte mi za pravdu, až uvidíte příklady.
A na jakém základě postavit jazyk pro zpracování XML dat? Samozřejmě opět na XML. Dostáváme se tak do stavu, kdy lze v aplikaci snadno vytvářet různé kombinace toku dat, například transformací vstupních dat vytvořit styl, podle kterého se bude provádět transformace dalších XML dokumentů. Jestli něco takového využijete, záleží pouze na vás. Až do zpracování XML proniknete, jistě naleznete celou řadu možností, jak si XML a XSLT ochočit a dobře je zužitkovat.
Jednoduchý příklad
Abychom dlouho neteoretizovali, ukážeme si rovnou v úvodu nějakou jednoduchou ukázku. Je to zřejmě moje první (nebo jedno z mých prvních) využití XSLT v praxi. Měl jsem v databázi XHTML kód, který jsem potřeboval dostat do textového emailu. Zbavit se tagů zvládne každý XML parser, ovšem mně šlo o URL v odkazech, které jsem zahodit nechtěl. Jak je nejlépe zapsat do textu? Nejvhodnější mi připadlo transformovat odkaz do tvaru „popisek (odkaz)“, tedy přenést URL za popisek odkazu do závorky. (Cesty všech odkazů byly absolutní.) Přiznám se, že vymýšlet algoritmus na tohle by se mi opravdu nechtělo. Ovšem s XSLT je to hračka. Podívejme se tedy na XSLT styl, který řeší můj požadavek:
<?xml version=’1.0′?>
<xsl:stylesheet
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform‘
version=’1.0′>
<xsl:template match=’a‘>
<xsl:value-of select=‘.’/> (<xsl:value-of
select=’@href’/>) </xsl:template>
</xsl:stylesheet>
Všimněte si, že většinu kódu tvoří XML hlavičky a jádro stylu je vlastně popsáno v pouhých třech řádcích, ve třech XSLT elementech. Element xsl:template
vymezuje šablonu, která bude nahrazovat element a
ze vstupního dokumentu, a element xsl:value-of
vytahuje ze vstupu požadované data, v prvním případě textový obsah zpracovávaného elementu, v druhém případě je to hodnota atributu href
, tedy URL odkazu. Případné další atributy zůstanou nedotčeny.
Teď by to chtělo ukázku aplikace tohoto stylu na nějaké XML data. Takže zkusme něco opravdu jednoduchého:
<?xml version=“1.0″?>
<text>
Toto je
<a href=“http://interval.cz“>pokusny odkaz</a>
na Interval.cz.
</text>
A výsledek:
Toto je
pokusny odkaz (http://interval.cz)
na Interval.cz.
Jak vidíte, je to velice jednoduché a funguje to. Nedovedu si představit jednodušší způsob řešení mého problému. Nyní snad máte alespoň hrubou představu o principu a využití technologie XSLT. Podrobněji ji budu rozebírat v následujících článcích, zde si ještě ukážeme, jak volat XML procesor v různých serverových prostředích, abychom si mohli příklady ihned vyzkoušet a experimentovat s nimi.
XSLT na vlastní kůži!
Pro jednoduché experimentování si vytvoříme jednoduchou stránečku, která si převezme data i transformační styl ze souborů umístěných ve stejném adresáři. Soubory se budou jmenovat data.xml
a styl.xsl
. Můžete si ihned zkusit do těchto souborů uložit výše uvedené ukázky.
XSLT v ASP
K veškerému zpracování XML na platformě Windows pro nás Microsoft připravil MS XML Parser. Je to velice mocná komponenta a lze ji snadno používat i v prostředí ASP (Active Server Pages). Následující kód provede XML transformaci v souboru data.xml podle stylu v souboru styl.xsl a výsledek přímo vypíše na výstup bez jakýchkoli úprav.
<%
dim xsl, xml
set xsl = createobject(„Msxml2.DOMDocument“)
xsl.load(server.MapPath(„styl.xsl“))
set xml = createobject(„Msxml2.DOMDocument“)
xml.load(server.MapPath(„data.xml“))
response.write xml.transformNode(xsl)
%>
Je třeba si dávat pozor na chyták – v případě chyby totiž MS XML Parser nevyvolá výjimku, ale prostě vrátí prázdný řetězec. Pak se ovšem chyba hledá velice těžko. Údaje o chybě jsou uchovány ve vlastnosti parseError
XML dokumentu, zde tedy například xml.parseError
a xsl.parseError
. Tato vlastnost je objektem třídy IXMLDOMParseError a vás budou asi nejvíce zajímat vlastnosti line
, linepos
, reason
a srcText
.
XSLT v ASP.NET
V tomto prostředí je nativní podpora XML včetně XSLT zabudovaná přímo v knihovně FCL (Framework Class Library), konkrétně ve jmenných prostorech začínajících System.Xml.
Využití příslušných tříd je opět velice snadné:
<%@Import NameSpace=“System.Xml“ %>
<%@Import NameSpace=“System.Xml.Xsl“ %>
<script language=“C#“ runat=“server“>
void Page_Load (object sender, System.EventArgs e) {
XmlDocument xml = new XmlDocument();
xml.Load(MapPath(„data.xml“));
XslTransform xsl = new XslTransform();
xsl.Load(MapPath(„styl.xsl“));
xsl.Transform(xml,null,Response.OutputStream);
}
</script>
XSLT v PHP
V PHP je XSLT podporováno díky české knihovně Sablotron. K provedení naší transformace by měl stačit následující kód:
<?php
$xh = xslt_create();
$result = xslt_process($xh, ‚data.xml‘, ‚styl.xsl‘);
echo $result;
xslt_free($xh);
?>
Protože použití XSLT v PHP není tak úplně triviální, doporučuji vám prostudovat doplňkové zdroje, které uvádím v seznamu na konci článku.
XSLT přímo v prohlížeči
Pokud chcete s XSLT experimentovat, a nemůžete nebo nechcete použít server-site prostředí, pomůže vám přímo prohlížeč. Stačí totiž k XML dokumentu přidat element indikující, že má být na dokument před zobrazením aplikována transformace podle daného stylu, a prohlížeč se o tento proces postará sám. V našem příkladě upravíme soubor data.xml takto:
<?xml version=“1.0″ ?>
<?xml-stylesheet type=“text/xsl“
href=“styl.xsl“
media=“screen“?>
<text>
Toto je
<a href=“http://interval.cz“>pokusny odkaz</a>
na Interval.cz.
</text>
Pokud tento soubor zobrazíme v Microsoft Internet Exploreru nebo v Mozille, prohlížeč provede XSL transformaci podle daného stylu a zobrazí kýžený výsledek.
Odkazy, zdroje
- PHP 4.3.0 a XSLT – Petr Cimprich (ROOT.cz, 6. 1. 2003)
- The Extensible Stylesheet Language Family (XSL) (W3C)
- XSLT Functions (PHP manual)
- XSLT v příkladech – Jiří Kosek
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
4 tipy, jak na efektivní úsporu při rozjezdu podnikání
3. ledna 2023 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024 -
Nejlevnější VPS: To je nový Cloud Server Mini od ZonerCloud
4. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024