Ladda ner presentationen
Presentation laddar. Vänta.
1
david.gunnarsson@hb.se XSLT – en introduktion Elektronisk publicering
2
Idag Vad är XSLT? Hur fungerar XSLT? XPath och noder XSLT:s notation Templates, repetitioner och villkor TEI
3
XSL-språk XSLT –Ett språk för att transformera XML- dokument X-PATH –Ett språk för att navigera i XML-dokument XSL-FO –Ett språk för att formatera XML-dokument
4
Vad är XSLT? Står för eXtensible Stylesheet Language for Transformation Ett programmeringsspråk för att transformera XML-dokument En W3C-standard XSLT transforms an XML source- tree into an XML result-tree
5
Den röda tråden… DATALOGIKGRÄNSSNITT XMLXSLTXHTML(+CSS)
6
XML, XSLT, XHTML och CSS XML XSLT CSS XHTML Omvandling
7
Hur fungerar XSLT?
8
En post i XML-filen Sue Grafton L som i laglös Deckare 20
9
XSLT-kod <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> Författare: Titel: Kategori:
10
XPath Ett språk för att navigera i XML- dokument En syntax för att definiera delar av ett XML-dokument En W3C-standard XSLT använder XPath för att navigera i XML-dokument
11
XPath - noder XML-dokument behandlas som träd bestående av noder Typer av noder –Element –Attributes –Text –Namespaces –Processing instruction –Comment –Document node (dokumentets rotelement)
12
XPath - noder Sue Grafton L som i laglös Deckare 20 Dokumentnod (rotelement) Textnod Attributnod Elementnod
13
XPath – Relationer mellan noder Varje element och attribut har en och endast en förälder Elementnoder har noll till många barn Noder med samma förälder kallas syskon –Det första syskonet är äldst, det näst första är näst äldst och så vidare… En förfader är en förälders förälder En ättling är ett barns barn
14
XPath – Peka ut noder Nodnamn – Pekar ut samtliga barn till noden / - Pekar ut från rotelementet // - Pekar ut noder i dokumentet från den aktuella nod som matchar utpekningen. – Pekar ut aktuell nod.. – Pekar ut föräldern till aktuell nod @ - Pekar ut attribut
15
XPath – Peka ut noder boksamling – Pekar ut samtliga barn till noden boksamling /boksamling – Pekar ut rotelementet boksamling boksamling/bok – Pekar ut alla bok-element som är barn till boksamling //bok – pekar ut samtliga bok-element, oavsett var de befinner sig i hierarkin boksamling//titel – Pekar ut samtliga titel-element som är ättlingar till boksamling, oavsett var de befinner sig i hierarkin //@currency – Pekar ut samtliga attributnoder med namnet currency
16
Ser något bekant ut? Jämför med relativa url:er i HTML: –../start.htm –img/bild.gif –etc…../ motsvarar ett steg upp i trädet nodnamn1/nodnamn2/ motsvarar två steg ner i trädet
17
Exempel: template-anrop Gör att vi är säkra på att rätt eNamn hämtas, dvs det som är barn till forfattare som i sin tur är barn till bok
18
En annan variant Gör att vi är säkra på att rätt eNamn hämtas, dvs det som är ättling till bok
19
En tredje variant Gör att vi är säkra på att rätt eNamn hämtas, dvs det som är barn till forfattare
20
En fjärde variant Fungerar om eNamn finns på endast en nivå i trädet Skulle eNamn finnas på flera nivåer förväxlar tolken noderna med varandra I receptexemplet tidigare har vi ju noden namn på flera nivåer
21
Notera skillnaden: Exempel
22
Exempel: anropat template Pekar ut aktuell nod (eNamn) Pekar ut eNamns förälders (forfattare) barn (fNamn) (enkelt uttryckt: eNamns syskon) Pekar ut eNamns förfäders barn
23
Operatorer A=A (A är ekvivalent med A) A!=B (A är inte ekvivalent med B) A>B (A är större än B) A<C (A är mindre än C) A>=D (A är större än eller lika med D) A<=E (A är mindre än eller lika med E) Ett uttryck av detta slaget är antingen sant (true) eller falskt (false)
24
Operatorer A=A and B!=C –Sant om och endast om A är ekvivalent med A och B inte är ekvivalent med C A=A or B=C –Sant om A är ekvivalent med A eller om B är ekvivalent med C –Om första påståendet är sant kollas inte fler påståenden not (A=B) –Sant om och endast om A inte är ekvivalent med B
25
Aritmetiska operatorer + addition5+2 - subtraktion7-2 * multiplikation8*3 div division6 div 3 mod modulus9 mod 2
26
XSLT Förändra en icke presentabel fil till en webbsida Formatera ett dokument till PDF eller liknande Förändra en XML-vokabulär till en annan Extrahera specifik information från ett dokument och formatera på ett annat sätt
27
XSLT Det vi ska beskriva (receptsamlingen) kan ses som en linjär sekvens Det XML-kodade innehållet är mer likt en databas Flera olika outputs är möjliga
28
Rendering av XML-innehåll Kopiera element Utesluta element Flytta element bland annat…
29
En receptsamling XML-filen
30
Kopiera element Navigationssystem Till exempel kan alla namn-element som är barn till recept kopieras och placeras i en lista i början av texten Listans element kan sedan länkas till respektive namn-element För kopiering kan for-each användas med fördel
31
Exempel: kopiera element
32
Matchande template Länkar varje namn-element tillbaka till index Exempel
33
Utesluta element Vi kanske inte vill visa all info om ett recept? Eller vi kanske inte vill visa alla recept? Om vi utesluter ett element utesluter vi också dess barn och ättlingar Vi skulle t ex kunna utesluta ett element vars id är lika med carb
34
Utesluta element, exempel
35
Utesluta element, exempel Vitlök Grönsak 1-2 klyftor Exempel
36
Flytta element Template-anrop utförs i den ordning de är skrivna i: Här kommer attributet enhet skrivas ut först, sedan mangd och sist namn, t ex: 400 gram köttfärs
37
Sammanfattning: XSLT:s notation Alla element i XSLT innehåller prefixet xsl:
38
Operatorer i XSLT skiljer sig något från X-PATH A=AA är ekvivalent med A A!=BA är inte ekvivalent med B 8 > 68 är större än 6 6 < 86 är mindre än 8 A >= BA är större än eller lika med B B <= AB är mindre än eller lika med A
39
Operatorer i XSLT AND, OR och AND…! –pris < 10 and kategori = 'Deckare’ –pris < 10 or kategori = 'Deckare’ –pris < 10 and kategori != 'Deckare’
40
Templates? Innehåller regler som appliceras vid matchning av en specificerad nod Syntax: … Samtliga attribut är valfria, men minst ett av attributen name och match måste återfinnas
41
Exempel, templates
42
Exempel, templates med villkor
43
Repetitioner i XSLT: for-each …kod som utförs på varje nod som överensstämmer med X-PATH- uttrycket
44
Exempel: for-each
45
Exempel: for-each med villkor
46
Styrstrukturer i XSLT om (villkor a) utför a annars om (villkor b) utför b annars utför c
47
Med if …kod som utförs om villkor a är sant …kod som utförs om villkor b är sant …kod som utförs om villkor c är sant
48
Exempel: if :
49
Med choose...kod som utförs om villkor a är sant...kod som utförs om villkor b är sant …kod som utförs om varken villkor a eller b är sant
50
Exempel: choose, är en deckare, är inte en deckare
51
Transformera XML-filen Receptsamling
52
Ett första steg…
53
Kunde se bättre ut… Vi behöver fler templates!
54
Liten förbättring… …men bra nog är det minsann inte! Fler templates! ( )
55
Relevanta frågor för samlingen Ta fram alla recept som innehåller en viss ingrediens Sortera alla recept i bokstavsordning Visa enbart receptet som heter… Lista alla rotfrukter i samlingen (ok, den sista var kanske inte så himla relevant)
56
Algoritm: ta fram alla recept som innehåller ingrediensen pasta 1. Peka på rotelementet receptsamling 2. För varje recept i receptsamling 2.1 Om (ingrediens/namn=='Pasta') 2.1.1 Skriv ut namnet på receptet 2.2 annars 2.2.1 Gör ingenting
57
Lösning 1 Exempel
58
Lösning 2 Exempel
59
Algoritm: sortera alla recept i bokstavsordning 1. Peka på rotelementet receptsamling 2. För varje recept i receptsamling 2.1 Sortera recepten i stigande bokstavsordning 2.2 Skriv ut recepten
60
Lösning Exempel
61
Fler förslag på att transformera XML-filen? …
62
Övningsmaterialet http://www.adm.hb.se/~dgu/elpub/xslt1.htm Det där ska föreställa en etta
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.