Hernyák Zoltán XSLT transzformációk
XML - XSLT Extensible Style Sheet Language Transformation XSLT Ez egy ”programozási nyelv” XML-ben van a forráskód feldolgoz egy XML filet eredménye egy újabb HTML, CSS, XLS, XML file
XML - XSLT Kell egy „futtató” program hozzá (xslt feldolgozó) - Xalan (Java alapú) - Saxon (C# alapú) transform.exe -xsl:person_templ.xls -s:person.xml -s: az adatokat tartalmató xml file -xsl: az xslt transzformációs program A program ”outputja” a transzformáció eredménye
XML névterek Az XML elemeket névterekbe lehet rakni Több XML esetén az azonos nevű elemeket így lehet egymástól elkülöníteni Egy XML-en belül is hasznos, ha azonos nevű elemeknek más-más lehetséges tartalmi leírást adunk Első lépés: definiálni kell a névteret Második lépés: használni kell a névteret <java xmlns:java=” xmlns:delphi=” …. <java xmlns:java=” xmlns:delphi=” ….
XML - XSLT Jane Doe Fluffy Jane Doe Fluffy I found a person element! I found a person element! Az XSLT processor az xls névtér elemeit dolgozza fel
XML - XSLT …. …. Az XSLT file ezzel kezdődik Innen ismeri majd fel a feldolgozó program mire számítson
XML - XSLT Egy vagy több template van benne Egy ilyen template tartalma kiíródik, ha az XML file beolvasása közben egyezést talál a feldolgozó Template-k nem egymásba ágyazhatóak! I found a person element! I found a person element!
XML - XSLT Jane Doe Fluffy Jane Doe Fluffy ---- person person Ebben a formában az apply- templates kiírja a tag-ekhez tartozó értékeket
XML - XSLT -- A Person -- Name: Pet: -- A Person -- Name: Pet:
XML - XSLT … … Output-method = text -> nem írja ki az xml fejlécet Output-method = html ->html kimenetet produkál Output-method = xml -> XML kimenetet produkál strip-space: a felsorolt elemek között eltávolítja a white-space-eket preserve-space: … megtartja a white space-eket (def.)
XML - XSLT Készítsünk ilyet!
XML - XSLT
Meg kell írni a template-t az elemekre
XML - XSLT Az apply-templates feldolgozza a közbeeső elemeket … -t ki lehet írni XHTML kötelező (a tag-eket le is kell zárni!)
XML - XSLT HTML tagokat tudunk beépíteni az outputba a megfelelő helyre
XML - XPATH Leíró technika, elemeket azonosít egy XML-en belül A gyökér elemet / jel szimbolizálja /people/person/name - minden „name” elemet kiválaszt a /people/person-n belül
XML – XPATH szabályok nodename - minden elem kiválasztása, akinek a szülője az adott nevű node / - kiindulás a gyökérelemből // - kiválasztja az aktuális elemből kiinduló minden elemet, bármely mélységbe. aktuális elem kiválasztása.. szülő elem attribútum-kiválasztás
XML - XPATH person - minden elem kiválasztása, akinek a szülője „person” /people/person/name - minden „name” elemet kiválaszt a /people/person-n belül person//name - minden name kiválasztása, akinek a szülője „person” //name - minden „name” elemet kiválaszt az XML-en belül - a pet elemek breed attribútumai - minden attribútumot kiválaszt - minden species attribútumot kiválaszt
XML - XPATH Mivel gyakori, hogy egy Xpath útvonal több elemet is kiválaszt, de ezekből csak egy kell – prédikátumok kellenek a további azonosításhoz… //person[1] - az első találat //person[last()] - utolsó találat //person[last()-1] - utolsó előtti találat //pet[.=‘Fluffy’]. szimbolizálja az aktuális elemet kiválasztja azokat az elemeket, amelyeknek az értéke ‘Fluffy’ //pet[.=‘Fluffy’]/.. kiválasztja a szülő elemét, a ‘Fluffy’ értékű node-nak //name[contains(.,’Jane’)] minden „name” elemet, amelyben szerepel „Jane”
XML - XPATH - az összes pet elem, amelynek van breed attr-a - az összes pet elem, amelynek van breed-ke amelynek értéke „collie” a szülő elemek, amelyeknek van collie breed-jük | az elemek melyek vagy cat-ok vagy dog-ok
XML - XSLT --- PEOPLE – --- PEOPLE – A match is egy XPATH leírás Ezen találat csak a fenti útvonalon talált person-okra illeszkedik rá Gyökér elemre illeszkedő template
XML - XSLT Name: (with address) Name: Name: (with address) Name: Ha van neki „address” property-je, akkor felső szabály szerint íródik ki, Ha nincs neki, akkor az alsó A sorrend nem számít az xsl-en belül
XML - XSLT Name: (with address) Name: Name: (with address) Name: Ha van neki „address” property-je, akkor felső szabály szerint íródik ki, Ha nincs neki, akkor az alsó A sorrend nem számít az xsl-en belül
XML – XSLT tengelyek ancestor minden ős (felfelé rekúrzívan) ancestor-or-self saját maga és minden őse attribute az aktuális node összes attribútuma child az aktuális node összes gyerek node-ja descendant minden gyerek node (lefelé rekúrzívan)
XML – XSLT tengelyek following az aktuális node bezáró tagja után _minden_ following-sibling az akt.node után következő minden testvér namespace az akt.node minden névtér node -ja parent az őse az akt.node-nak preceding a megelőző tartalom (akt.node előtti tartalom) preceding-sibling node előtti összes testvér self saját maga
XML – XSLT tengelyek child::book minden „book” ami gyerekeleme az akt.node-nak child::* az akt.node minden gyerekeleme descendant::book az akt.node alatt bárhol szereplő „book”-k ancestor::book felettünk bárhol szereplő „book”-k child::*/child::price 2 szinttel alattunk lévő „price” elemek minden pet element, amelynek van „breed” attribútuma, amely „calico” értékű
XML - XSLT Elem értékének lekérése: value-of Az aktuális node alatti gyerek elemek közül a name értéke Az aktuális node „breed” attribútumának értéke
XML - XSLT XSLT transzformációban alkalmazni a value-of -t Pet: Species: Breed: Pet: Species: Breed:
XML - attribútum kiválasztása name() megadja az attribútum nevét : :
XML - XSLT … szöveg kiiírás … … szöveg kiiírás … Feltételes output készítése
XML - XSLT Feltételes output készítése
XML - XSLT Készítsünk el egy DVD nyilvántartó XML filet. Egy DVD-t jellemez a címe, kiadás éve, ára. A DVD kategóriáját adjuk meg attribútum formájában (akció|zene|rajzfilm). Ezen XML file alapján készítsünk el egy HTML outputot, ahol a DVD címe legyen pirossal írva, ha az akciófilm, egy DVD film információi egy sorba kerüljenek. Készítsünk el egy CSV kimenetet is, vesszővel tagolt text file, melyet Excelben be lehet olvasni.