XSLT ( XSL Transformations)



Hasonló dokumentumok
Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

XML (DTD) (XSD) DOM SAX XSL. XML feldolgozás

V. gyakorlat: XML alapú adatkezelés

V. gyakorat: XML technikák MS SQL 2008-ban

Az XSLT elemei. Az XSLT áttekintése

Webshop készítése ASP.NET 3.5 ben I.

ASP.NET 2.0 (Whidbey) Mi várható a 2005-ös ASP.NET-ben?

Dokumentumformátumok Jelölő nyelvek XML XML. Sass Bálint Bevezetés a nyelvtechnológiába 2. gyakorlat szeptember 20.

XML technikák II Kovács, László

CSS3 alapismeretek. Bevezetés a CSS-be. Mi is az a CSS? Alkalmazási formái, szintaxisa

XPath 1.0. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar Utolsó módosítás: szeptember 5.

1. Alapok. #!/bin/bash

SZAKDOLGOZAT. Bak Dániel Krisztián

Az XML Bevezetés. Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Utolsó módosítás:

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Excel Hivatkozások, függvények használata

BASH script programozás II. Vezérlési szerkezetek

Az MS Excel táblázatkezelés modul részletes tematika listája

XmlGessünk 15: XSLT. Az egyik legellentmondásosabb és mégis nagyon srn használt xml technológia az XSLT. Barátkozzunk meg vele! NetAcademia-tudástár

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

A C# programozási nyelv alapjai

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Adatbázismodellek. 1. ábra Hierarchikus modell

8. Mezőutasítások. Schulcz Róbert 8. Mezőutasítások. v

Az XML kidolgozásakor a fejlesztés szempontjait tíz pontban foglalták össze:

Excel Hivatkozások, függvények használata

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

XPath. dr. Paller Gábor. XML technológiák

AWK programozás, minták, vezérlési szerkezetek

Hogyan fogalmazzuk meg egyszerűen, egyértelműen a programozóknak, hogy milyen lekérdezésre, kimutatásra, jelentésre van szükségünk?

XML és XSLT (a színfalak mögül)

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

INFORMATIKAI ALAPISMERETEK

Programozási segédlet

KÖNYVTÁRI KATALÓGUS HASZNÁLATI ÚTMUTATÓ

Multimédia 2017/2018 II.

Haladó irodai számítógépes képzés tematika

Operációs rendszerek. 10. gyakorlat. AWK - bevezetés UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Lekérdezések I. Egyszerű választó lekérdezések

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

Cikktípusok készítése a Xarayában

8. gyakorlat Pointerek, dinamikus memóriakezelés

Akadálymentes weboldalkészítés dióhéjban

BASH SCRIPT SHELL JEGYZETEK

1. Az XML és XHTML nyelvek. Az XML leíró nyelv Szabályok XHTML írásra. Tartalom Az XML leíró nyelv

XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

Kézikönyv. Szelekciós operátorok használata

Webprogramozás szakkör

PHP-MySQL. Adatbázisok gyakorlat

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

3. modul - Szövegszerkesztés

Információs technológiák 2. Gy: CSS, JS alapok

AWK programozás Bevezetés

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Informatika 1. Informatika el adás. Kovács Kristóf, Pálovics Róbert. Budapesti M szaki Egyetem november 13.

Operációs rendszerek gyak.

Algoritmizálás és adatmodellezés tanítása 1. előadás

C programozási nyelv

PHP. Adatbázisok gyakorlat

Javacript alapismeretek

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Webszerkesztés stílusosan. Készítette: Csécsy László Virgina DeBolt hasonló c. könyve alapján

ECDL Táblázatkezelés A táblázatkezelés első lépései Beállítások elvégzése

Ügyviteli rendszerek hatékony fejlesztése Magic Xpa-val mobilos funkciókkal kiegészítve. Oktatók: Fülöp József, Smohai Ferenc, Nagy Csaba

C++ programozási nyelv

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Tartalomjegyzék BEVEZETÉS... IX WEBSZERKESZTÉSI ALAPISMERETEK HTML. 1. II. Háttér beállítása I. Elsõ weblapunk III. Karakterformázás...

XML / CSV specifikáció

Szkriptnyelvek. 1. UNIX shell

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

HASZNÁLATI ÚTMUTATÓ DOLGOZÓK IMPORTÁLÁSA KULCS BÉR PROGRAMBA AZ ONLINE MUNKAIDŐ NYILVÁNTARTÓ RENDSZERBŐL. Budapest, november 08.

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Vezérlési szerkezetek

MATLAB alapismeretek I.

Adatbázisok II. rész

4. modul - Táblázatkezelés

HVK Adminisztrátori használati útmutató

Tájékoztató. Használható segédeszköz: -

7. fejezet: Mutatók és tömbök

HTML kódok. A www jelentése World Wide Web.

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

AWK programozás, minták, vezérlési szerkezetek

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Responsive Web Design. Dr. Nyéki Lajos 2019

A webprogramozás alapjai. Óbudai Egyetem Neumann János Informatikai Kar 2018/19/1 szemeszter

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

EGYSZERŰ SZÁMÍTÁSOK TÁBLÁZATKEZELÉS ELINDULÁS SZE INFORMATIKAI KÉPZÉS 1

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Szoftvertechnolo gia gyakorlat

4. Javítás és jegyzetek

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

C programozási nyelv Pointerek, tömbök, pointer aritmetika

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Táblázatkezelés Syllabus 5.0 A syllabus célja 2014 ECDL Alapítvány Jogi nyilatkozat A modul célja

Táblázatok kezelése. 1. ábra Táblázat kezelése menüből

Adatbázis használat I. 2. gyakorlat

SZÁMÍTÁSOK A TÁBLÁZATBAN

Java és web programozás

Átírás:

XSLT ( XSL Transformations)

Tartalomjegyzék: 1. Az XSLT helye... 3 2. Az XSLT feldolgozás... 3 3. Az XSLT stíluslapok felépítése... 4 3.1. Sablonok... 4 3.2. Minták és kifejezések... 4 3.3. Az XSLT stíluslap hozzáadása XML dokumentumhoz... 5 4. Az XSLT stíluslapok utasításai... 5 4.1. Sablon alkalmazása... 5 4.2. Elemek és attribútumok értékének lekérése... 5 4.3. Ciklus XSLT-ben... 6 4.4. Elágazások XSLT-ben... 6 4.5. Rendezés XSLT-ben... 7 4.6. Egyéb hasznos XSLT elemek... 7 4.6.1. Az xsl:output elem... 7 4.6.2. Az xsl:attribute elem... 8 4.6.3. Az xsl:call-template elem... 8 4.6.4. Az xsl:comment elem... 8 4.6.5. Az xsl:copy-of elem... 8 4.6.6. Az xsl:key elem... 9 4.6.7. Az xsl:variable elem... 9 5. XSLT-ben használható operátorok és függvények... 9 6. Az XPath-ról röviden... 11 7. Egy példa XSLT-re... 11 8. Felhasznált irodalom... 12 2

1. Az XSLT helye Az XSLT az XSL Transformations rövidítése. Ezek alapján viszont rögtön azt kérdezhetjük, hogy mi az az XSL? Az XSL az extensible Style Language rövidítése. Az XSL tehát egy formázó nyelv, amely XML dokumentumok formázására szolgál. Az XML dokumentumok formázásához (formázott megjelenítéséhez) kétféle formázási technológia használható, az egyik a CSS, a másik az előbb említett XSL. Ez az elgondolás már az XML kialakulásától kezdve létezik, hiszen az XML dokumentumok a tartalom leírását, nem a megjelenítést célozták meg. Míg a CSS elsősorban weblapok formázására szolgál (bár XML dokumentumokhoz is alkalmazható), addig az XSL kifejezetten az XML dokumentumok formázására. Azonban ez a két technológia nem nevezhető egymás vetélytársának, a gyakorlatban inkább egymást kiegészítve szokták alkalmazni őket. Az XSL nyelvnek két része létezik, egyik az XSL-FO (XSL Formatting Object), amely lehetővé teszi, hogy az XML dokumentumokat szépen formázott PDF dokumentumokká alakítsák. A másik az XSLT, amely segítségével lehetővé válik az XML tartalmak feldolgozása, valamilyen szempont szerinti szűrése, rendezése, átalakítása. Az XSL mindkét változata XML alapú nyelvnek tekinthető, lényegében ezek is XML dokumentumok, az XML dokumentumok szabályai érvényesek ezekre is. Azért is fontos a CSS és XSLT technológia ismerete, mert egy-egy feladat megoldása során tudnunk kell, hogy mit lehet az egyik, mit a másik segítségével megvalósítani. Nézzünk egy pár olyan dolgot, amit az XSLT tud, a CSS nem: A dokumentum részeinek újrahasznosítása Feltételvizsgálat, a dokumentum egyes részeinek kiválasztása Matematikai műveletek elvégzése, változóhasználat Dinamikus szövegelőállítás A gyakorlatban a két technológiát úgy szokták alkalmazni, hogy az XML dokumentumot XSLT segítségével HTML oldallá alakítják, majd ezt a kimenetet formázzák CSS segítségével. Az XSLT stíluslapok kiterjesztése.xsl, az XSL-FO-é pedig.fo. 2. Az XSLT feldolgozás Hogy megértsük az XSLT működését, fontos hogy bepillantást nyerjünk a háttérben működő folyamtokba. A feldolgozás első lépése az XML feldolgozás (XML processing), amelynek során az XML dokumentumban szereplő összes elemből és attribútumból egy fastruktúra épül fel. Az elemek és attribútumok a faszerkezet egy-egy csomópontját fogják alkotni. Miután az XML feldolgozó (XML processor) előállította ezt a faszerkezetet, az XSL feldolgozó végigmegy ezen a szerkezeten, és az egyes csomópontokra végrehajtja a stílusban található szabályokat. Az XSL feldolgozó mintaillesztéssel végzi a feldolgozást, amely során kikeresi, hogy az egyes csomópontokra a stíluslapban szereplő minták (pattern) alapján milyen feldolgozást kell alkalmazni. A mintaillesztés során használt technológia az XPath. Az XPath nem XML alapú nyelv. Az XPath lényegében arra szolgál, hogy az XML dokumentumok egyes részeit megcímezzük (kijelöljük) vele. Az XPath kifejezések segítségével az XML fastruktúrában egy-egy útvonalat adhatunk meg. Ezáltal egyetlen csomópontot vagy csomópontok halmazát tudunk azonosítani. 3

Az XPath-tal terjedelmessége miatt csak annyit foglalkozunk, amennyi az XSLT megértéséhez szükséges. 3. Az XSLT stíluslapok felépítése Az XSLT stíluslapok tartalmazzák az illesztendő mintákat és az illeszkedés esetén a feldolgozás lépéseit. Ezeket összefoglalva sablonnak (template) nevezzük. Egy XSLT stíluslap több sablont is tartalmazhat. Tehát egy XSLT stíluslap háromféle elemből áll: Sablonok (template) Minták (patterns) Kifejezések Az XSLT dokumentumok első sorában az XML deklaráció szerepel. Például: <?xml version="1.0" encoding="utf-8"?> Előbbiben megadjuk a használt XML verziót és a dokumentumban alkalmazott karakterkódolást. Ezt követi az xsl:stylesheet elem, amely az XSLT dokumentumok gyökéreleme (az xsl:stylesheet helyett használható még az xsl:transform elnevezés is). Ebben az elemben szerepel az úgynevezett XSLT névtér deklaráció. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> Az előbbi példa a W3C ajánlása az XSLT dokumentumok megfelelő deklarációjára. Ha az előbbi példában szereplő névteret használjuk, akkor ki kell rakni az XSLT verziót leíró version attribútumot is. A version attribútum értéke 1.0 vagy 2.0 lehet. A két verzió között az a különbség, hogy a 2.0 sokkal több lehetőséget kínál, például az alkalmazható függvények terén. 3.1. Sablonok A sablon olyan XSLT eszköz, amely mintailleszkedési szabályok alapján előírja, hogy egy csomópontra (vagy csomópontok halmazára) milyen formázást kell végrehajtani. A gyakorlati megvalósításban általában egy stíluslap több sablont is tartalmaz. Sablont az xsl:template elem segítségével tudunk létrehozni. Ehhez az elemhez tartozik egy match nevű attribútum is, amelyben az illeszkedő mintát kell megadni. A match értéke tulajdonképpen egy XPath kifejezés. Ez alapján dől el, hogy a sablonban leírt formázást mely csomópontokra kell végrehajtani. A teljes dokumentumfát (vagyis a gyökércsomópontot) a következőképpen tudjuk kijelölni: <xsl:template match= / > </xsl:template> Ezzel megegyező hatást érhetünk el, ha a / jel helyére az XML dokumentum gyökérelemét írjuk. Ezt a sablont gyökérsablonnak (root template) szokták nevezni, a rendszer ezt alkalmazza először a dokumentumra. Egy stíluslap végigolvasásakor az XSL feldolgozó a match attribútumok alapján eldönti, hogy melyik sablont melyik elemre kell alkalmazni. 3.2. Minták és kifejezések Az XSLT sablonokban a minták és a kifejezések feladata, hogy meghatározzák az XML dokumentumfa azon részét, amelyre az adott formázást végre kell hajtani. A mintákat viszonylag egyszerű felírni, csak tudni kell az XML dokumentum szerkezetét. Például ha szeretnénk kiválasztani az autókereskedés autóinak árát, akkor a match attribútumba a shop/car/properties/cost mintát kell megadni. 4

A kifejezések is a dokumentum egyes részeinek kijelölésére szolgálnak, de emellett még alkalmasak bizonyos műveletek elvégzésére is. Ilyen művelet lehet például egy matematikai művelet vagy valamilyen szövegfeldolgozás. Például ha szeretnénk meghatározni az autókereskedés autóinak összértéket, akkor azt így tehetjük meg: <xsl:value-of select="sum(shop/car/properties/cost)" /> Ebben a példában a sum() függvénynek egy csomóponthalmazt adtunk meg, amelyet összegzett. 3.3. Az XSLT stíluslap hozzáadása XML dokumentumhoz Amennyiben szeretnénk látni, hogy az elkészített XSLT stíluslapunk hatására hogyan jelenik meg az XML fájlunk, azt az XML fájlhoz kell csatolni. A csatolást vagy hozzárendelést a következő sorral tehetjük meg, amit az XML dokumentum elején, az XML deklaráció és a gyökérelem között kell elhelyezni: <?xml-stylesheet type="text/xsl" href= xsl fájl"?> Ebből a type jelzi, hogy milyen stíluslapot kívánunk csatolni az XML-hez, a href attribútumban pedig leírjuk, hogy hol helyezkedik el az XSLT stíluslapunk. Miután ezt megtettük, az XML fájlt egy böngészőben megnyitva láthatjuk azt az eredményt, amit a stíluslap segítségével elértünk. 4. Az XSLT stíluslapok utasításai 4.1. Sablon alkalmazása A sablonokat nem elég megírni, azokat alkalmazni is kell. Sablon alkalmazását az xsl:applytemplates elemmel tehetjük meg. Ennek van egy select attribútuma, itt kell megadni, hogy a sablont mely elemekre szeretnénk alkalmazni. A select attribútum értéke egy minta vagy kifejezés. Az xsl:apply-templates használatát a gyökérelem esetén elkerülhetjük, ilyenkor ezt nem kötelező kirakni, hiszen a gyökérsablon mindig automatikusan végrehajtódik. Amennyiben szeretnénk alkalmazni az XSLT dokumentumban szereplő összes sablont, akkor azt a következőképpen tehetjük meg: <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> Ebben az esetben a feldolgozó automatikusan végrehajtja a gyökérelemre illeszkedő sablont, majd érzékeli, hogy az apply-templates select attribútuma üres, ami azt jelenti, hogy hajtsa végre az adott elem (jelen esetben a gyökérelem) minden gyermekelemére az illeszkedő sablonokat. 4.2. Elemek és attribútumok értékének lekérése Az XSLT leglényegesebb utasítása az xsl:value-of, amivel egy elem vagy attribútum értékét tudjuk lekérni. Van egy kötelező select attribútuma, ebben kell megadni, hogy mely elem vagy attribútum értékére vagyunk kíváncsiak. Itt állhat egy minta vagy valamilyen kifejezés. A select értékeként a pontot fogjuk talán legtöbbször használni, ez jelenti az aktuális csomópont értékét: <xsl:template match="/"> <xsl:value-of select="."/> </xsl:template> Az attribútumok értékére a @ jel után az attribútum nevét írva hivatkozhatunk: 5

<xsl:template match="/"> <xsl:value-of select="//car/@id"/> </xsl:template> Ezzel kijelöltük a gyökérelem car gyermekelemének (ezt jelöli a //car) id nevű attribútumát. 4.3. Ciklus XSLT-ben Ciklus megvalósítására XSLT-ben az xsl:for-each elem szolgál. A ciklusok segítségével lehetőség van arra, hogy bizonyos csomópontokon egyenként hajtsunk végre műveleteket. Az elemnek van egy select attribútuma, ami egy XPath kifejezés. A for-each akkor hasznos, ha egy XML dokumentum tartalmát akarunk táblázatos formában megjeleníteni. Példa: <xsl:for-each select="shop/car"> <xsl:value-of select="make"/> <xsl:value-of select="model"/><br/> Az előbbi példában végigmegyünk minden shop/car elemen, és kiírjuk az autó márkáját (make) és típusát (model). 4.4. Elágazások XSLT-ben Az XSLT-ben lehetőség van arra, hogy feltételes elágazásokat valósítsunk meg. Erre szolgál az xsl:if elem, aminek van egy test attribútuma, ide kell írni a feltételes kifejezést. Amennyiben ez a feltételes kifejezés igaz, csak akkor hajtódnak végre az xsl:if elemen belüli utasítások. Az xsl:if elemnek nincs hamis ága, ezért a kifejezés nem teljesülése esetén nincs lehetőség utasítás végrehajtására. Példa: <xsl:for-each select="shop/car/make"> <xsl:if test=". = 'Ford'"><xsl:value-of select="../model"/></xsl:if> Az előbbi példában kizárólag a Ford márkájú autók típusait írjuk ki. Abban az esetben, ha több feltételünk is van, használhatjuk az xsl:choose elemet. Ez az elem szolgál a többirányú elágazás megvalósítására, működését tekintve megegyezik a programozási nyelvekben használt switch utasítással. Általános alakja: <xsl:choose> <xsl:when test="kifejezés1">utasítás1</xsl:when> <xsl:when test="kifejezés2">utasítás2</xsl:when> <xsl:otherwise>utasítás minden más esetben</xsl:otherwise> </xsl:choose> Az xsl:when ágakban a test attribútumba kell írni a feltételes kifejezést, amelynek teljesülése esetén hajtódik végre az utasítás. Az xsl:otherwise akkor hajtódik végre, ha egyik xsl:when ág sem teljesül. Az xsl:otherwise használata nem kötelező. A későbbiek során még foglalkozunk a kifejezésekben használható operátorokkal. Példa: <xsl:for-each select="shop/car"> <xsl:choose> <xsl:when test="properties/power < 80">gyenge <xsl:value-of select="make"/><xsl:value-of select="model"/></xsl:when> <xsl:when test="properties/power > 80">erős <xsl:value-of select="make"/><xsl:value-of 6

select="model"/></xsl:when> <xsl:otherwise>80 lóerős <xsl:value-of select="make"/> <xsl:value-of select="model"/></xsl:otherwise> </xsl:choose> <br/> Az előző példában azoknál az autóknál, amelyek 80 lóerőnél kisebb teljesítményűek, kiírjuk, hogy gyenge és az autó nevét, 80 lóerőnél nagyobb teljesítményűnél kiírjuk, hogy erős és az autó nevét, minden egyéb esetben (ha az autó 80 lóerős), akkor kiírjuk, hogy 80 lóerős és az autót. 4.5. Rendezés XSLT-ben XSLT-ben a csomópontok rendezésére az xsl:sort elem szolgál. Ez az elem mindig egy xsl:for-each vagy xsl:apply-templates elemen belül helyezkedik el. A rendezési szempontok megadására a select, az order, a data-type és a case-order attribútumok szolgálnak. select : egy XPath kifejezést kell megadni, a kifejezés által szolgáltatott csomóponthalmazt fogja rendezni order : értéke ascending (növekvő) vagy descending (csökkenő) lehet, az ascending az alapértelmezett data-type : értéke lehet text vagy number, a rendezendő adatok típusát jelenti case-order : azt határozza meg, hogy szöveg rendezésénél a nagy vagy a kisbetűk élvezzenek elsőbbséget, értékei: upper-first, lower-first Példa: <xsl:for-each select="shop/car"> <xsl:sort select="properties/cost" data-type="number"/> <xsl:value-of select="properties/cost"/> - <xsl:value-of select="make"/> <xsl:value-of select="model"/> <br/> Az előbbi példában a car elemeket ár (properties/cost) szerint rendezzük. 4.6. Egyéb hasznos XSLT elemek Az XSLT-ben még számos alkalmazható elem van, ezek között vannak még olyanok, amelyek némely esetben rendkívül hasznosak lehetnek. 4.6.1. Az xsl:output elem Ennek az elemnek a segítségével állíthatjuk be az XSLT segítségével előállított eredménydokumentum pár paraméterét. Ilyenek például a kimeneti fájl formátuma, a verziója, kódolása, stb. Az xsl:output elem úgynevezett elsőszintű elem (top level element), ami azt jelenti, hogy közvetlenül az xsl stíluslap (xsl:stylesheet) deklarációban kell elhelyezni. Az xsl:output elem legfontosabb attribútumai: method : a kimeneti fájl formátuma, értékei: xml, html vagy text version : a kimeneti fájl verziója encoding : a kimeneti fájl karakterkódolása Példa: <xsl:output method="html" version="4.0" encoding="utf-8"/> 7

4.6.2. Az xsl:attribute elem Némely esetben szükség lehet arra, hogy a kimenetként előállított fájlban egy elemhez attribútumot hozzunk létre. Például ha egy html dokumentumot hozunk létre, akkor az img elemnek így adhatjuk meg az src, width, height attribútum értékét. Az xsl:attribute elemnek van egy name attribútuma, amely az xsl:attribute elemek között szereplő értéket fogja felvenni. Példa: <img> <xsl:attribute name="src"><xsl:value-of select="image"/></xsl:attribute> <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute> <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute> </img> 4.6.3. Az xsl:call-template elem Az xsl:call-template elem segítségével lehetőség van arra, hogy egy sablont (template) meghívjunk. Ebben az esetben a sablonnál használni kell a name attribútumot, mert ezzel a névvel tudnuk hivatkozni rá. Példa <xsl:template match="/"> <xsl:for-each select="shop/car"> <xsl:call-template name="kocsi"/> </xsl:template> <xsl:template name="kocsi"> <xsl:value-of select="properties/cost"/> - <xsl:value-of select="make"/><xsl:value-of select="model"/><br/> </xsl:template> 4.6.4. Az xsl:comment elem Amennyiben szeretnénk megjegyzést elhelyezni az eredményben, azt ezzel az elemmel tehetjük meg. Példa: <xsl:comment> ez komment </xsl:comment> 4.6.5. Az xsl:copy-of elem Az xsl:copy-of elem működése hasonló az xsl:value-of elemhez. Ennek is van egy select attribútuma. Amennyiben a select-ben megadott kifejezés szöveg, szám vagy logikai érték, az eredmény megegyezik az xsl:value-of-val. Akkor szokták alkalmazni, ha az érték egy csomóponthalmaz vagy egy részfa. Példa: <xsl:variable name="header"> <tr><th>make</th><th>model</th></tr> </xsl:variable> <table border="1"> <xsl:copy-of select="$header"/> <xsl:for-each select="//car"> <tr> <td><xsl:value-of select="make"/></td> <td><xsl:value-of select="model"/></td> 8

</tr> </table> Az előbbi példában a táblázat fejlécét a header változóban tároltuk, amit a megfelelő helyen írattunk ki. Ha ugyanitt xsl:value-of-ot használnánk, az nem adná vissza a tr és th elemeket, csak azok szöveges tartalmát. 4.6.6. Az xsl:key elem Ezen elem segítségével létrehozhatunk egy kulcsot, amely segítségével a dokumentum csomópontjait azonosíthatjuk. Az xsl:key a következő attribútumokat tartalmazza: name : ez a kulcs neve, ezzel hivatkozhatunk rá a későbbiekben match : ez egy minta, itt adjuk meg, hogy mely csomópontokra alkalmazzuk a kulcsot use : az az érték, amely alapján majd keresünk a csomópontok között Az xsl:key elem hasonlóan az xsl:output elemhez szintén top level elem, elhelyezése a dokumentumban ennek megfelelően történik. Az xsl:key létrehozása után erre a kulcsra a key( kulcsnév, érték ) segítségével lehet hivatkozni, ahol az értéknél a keresett értéket kell megadni. Nézzünk egy példát: <xsl:key name="marka" match="//car" use="make"/> <xsl:for-each select="key('marka','ford')"> <xsl:value-of select="make"/><xsl:text> </xsl:text><xsl:value-of select="model"/> Az előbbi példában a for-each-nek csak azok a car csomópontok adódnak át, amelyek make elemének értéke Ford. 4.6.7. Az xsl:variable elem Lehetőség van az XSLT-ben változók használatára is. Amennyiben a változót elsőszinten deklaráltuk (top level), akkor globális lesz, ha valamelyik sablonban, akkor lokális. A változónak a name attribútumban kell megadni a nevét, és a select attribútumban kell megadni az értékét. Egy létrehozott változóra a későbbiek során a $változónév segítségével hivatkozhatunk, azokat bármilyen kifejezésben használhatjuk. Példa: <xsl:variable name="maxcubic" select="1500"/> <xsl:for-each select="//car"> <xsl:if test="properties/cubic < $maxcubic"> <xsl:value-of select="make"/><xsl:value-of select="model"/><br/> </xsl:if> Az előbbi példában csak azokat az autókat listázzuk ki, melyek lökettérfogata 1500-tól kisebb. 5. XSLT-ben használható operátorok és függvények Az előzőekben már láttuk, hogy XSLT-ben lehetőség van feltételes elágazások létrehozására az xsl:if és az xsl:choose-ban az xsl:when elemekkel. Ezeknek a test attribútumába egy 9

logikai kifejezést adhatunk meg, ami igaz vagy hamis értéket fog adni. Most azokat az operátorokat és függvényeket nézzük át, amelyeket ezekben a kifejezésekben használhatunk. Operátorok: = - egyenlőségvizsgálat!= - nemegyenlőség vizsgálata > - a > operátor (utánaírva az = jelet kapjuk a >= oprátort) < - a < operátor (utánaírva az = jelet kapjuk a <= oprátort) and - ÉS kapcsolat a feltételek között or - VAGY kapcsolat a feltételek között * - a szorzás operátora +, - - számok összeadása, kivonása div - egész osztás operátora mod egész osztásnál a maradék meghatározása Példa: Írjuk ki azon autók típusát, futott kilométerét és árát, amelyeknél a futott kilométerek száma kisebb 80000-től és az áruk is kevesebb 2000000 forinttól. <xsl:for-each select="//car"> <xsl:if test="properties/kmage < 80000 and properties/cost < 2000000"> <xsl:value-of select="make"/> - <xsl:value-of select="model"/> - Km: <xsl:value-of select="properties/kmage"/> - Ár: <xsl:value-of select="properties/cost"/> <br/> </xsl:if> Rengeteg olyan függvény van, amit használhatunk XSLT-ben. Ezeket csoportokra lehet osztani, vannak numerikus függvények, sztringekre vonatkozó függvények, logikai függvények, dátum és idő függvények, stb. Mi most csak a legfontosabbakat nézzük meg. Függvények: abs(szam) - abszolútérték meghatározása ceiling(szam) - felfelé kerekítés floor(szam) - lefelé kerekítés round(szam) - kerekítés compare(sztring1,sztring2) - összehasonlítás, -1-et ad vissza, ha a sztring1 kisebb mint a sztring2, 0-t, ha megegyeznek, és 1-et egyébként concat(sztring1,sztring2, ) - sztringeknél az összefűzést valósítja meg string-join((sztring1,sztring2, )[,szep]) - a megadott sztringeket összefűzi a szeparátorral elválasztva substring(sztring, start[,len]) - résszsztringet ad vissza string-length(sztring) - a sztring hossza upper-case(sztring) - nagybetűssé alakítás lower-case(sztrig) - kisbetűssé alakítás contains(sztring,keresett) - igazzal tér vissza, ha a sztring tartalmazza a keresett sztringet replace(sztring,mit,mire) - a sztringben kicseréli a mit-et mire count(csomópontok) - visszatér a csomópontok számával sum(csomópontok) - visszatér a csomópontokban lévő értékek összegével avg(csomópontok) - visszatér a csomópontokban lévő értékek átlagával 10

position() - megadja az aktuális csomópont indexét last() - megadja az aktuális (éppen feldolgozás alatt álló) csomóponthalmaz elemeinek számát Példa: Az autók átlagára: <xsl:value-of select="avg(//car/properties/cost)"/> 6. Az XPath-ról röviden Az XML dokumentumok részeit az XPath segítségével tudjuk megcímezni. Ez jelenthet egyetlen csomópontot vagy csomópontok egy halmazát. Az XPath nem XML alapú technológia. Rendkívül tömör nyelv, számos lehetőséggel rendelkezik, mi most csak a legfontosabbakat nézzük meg, melyek az XSLT stíluslapok írásához szükségesek. Lehetőségek: csomópontnév : csomópontra való hivatkozást jelent / : a gyökérelem kiválasztása // : az adott csomópont összes gyermekének kiválasztása. : az aktuális csomópontra való hivatkozás.. : a szülő csomópontra való hivatkozás @attribútum : az adott attribútum A csomópontokra használt leggyakoribb függvények: position() : a csomópont pozícióját határozza meg last() : egy csomóponthalmaz utolsó elemét határozza meg count() : a csomóponthalmaz csomópontjainak száma Nézzünk előbbiek alkalmazására néhány példát: //car - az aktuális csomópont összes car csomópontja //car/make - az aktuális csomópont minden car csomópontjának make eleme //@id - az aktuális csomópont összes id attribútuma //car/@id - az aktuális csomópont minden car csomópontjának id attribútuma shop/car[2] - a második car csomópont kiválasztása //car[properties/cost < 1000000] - azok az autók, amelyek ára egy millió forintnál kevesebb //car[salesman/field[@name='mobile']] - azok az autók, ahol az autó eladójának van mobiltelefonja shop/car[last()] - az utolsó car elemet adja vissza shop/car[position()<4] - az első három car elemet adja vissza count(shop/car) - visszadja a car elemek számát. Ezt szokták alkalmazni akkor, ha az találatok számát akarják megjeleníteni, pl: <xsl:value-of select="count(shop/car)"/> 7. Egy példa XSLT-re Az XSLT-nek egy lehetséges felhasználási módja például egy online autókereskedés megvalósítása során kerülhet elő. Képzeljünk egy autókereskedést, amelynél a felhasználók feltölthetik az eladó autóikat adatait és fényképét egy adatbázisba. Ebből az adatbázisből az egyes lekérdezések eredményét XML-ben állíthatjuk elő. Ennek az eredmény XML fájlnak a 11

formázásához használjunk XSLT-t, hiszen az XSLT stíluslapot megírva és alkalmazva az XML-re, egy formázott kimenetet tudunk előállítani. Mivel az eredmény XML fájl szerkezete az egyes lekérdezéseknél nem fog változni, az XSLT-t minden esetben használhatjuk. Egy XSLT-vel formázott lehetséges megvalósítást láthatunk a következő oldalon: http://talicska.ektf.hu/~andro/xslt/kereskedes.xml Az XSLT stíluslap: http://talicska.ektf.hu/~andro/xslt/kereskedes.xsl 8. Felhasznált irodalom 1. XSL Transformations W3C - http://www.w3.org/tr/xslt 2. XSLT Tutorial - http://www.w3schools.com/xsl/ 12