XSLT - PowerPoint PPT Presentation

1 / 50
About This Presentation
Title:

XSLT

Description:

XSLT en introduktion Digitalisering av kulturarvet Idag Vad r XSLT? Hur fungerar XSLT? XPath och noder XSLT:s notation Templates, repetitioner och villkor TEI ... – PowerPoint PPT presentation

Number of Views:194
Avg rating:3.0/5.0
Slides: 51
Provided by: admHbSed
Category:
Tags: xslt | xslt

less

Transcript and Presenter's Notes

Title: XSLT


1
XSLT en introduktion
  • Digitalisering av kulturarvet

2
Idag
  • Vad är XSLT?
  • Hur fungerar XSLT?
  • XPath och noder
  • XSLTs 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 eXstensible 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
  • DATA LOGIK GRÄNSSNITT
  • XML XSLT XHTML(CSS)

6
XML, XSLT, XHTML och CSS
XML
XSLT
CSS
Omvandling
XHTML
7
Hur fungerar XSLT?
  • lt?xml version"1.0" encoding"iso-8859-1"?gt
  • lt!DOCTYPE boksamling SYSTEM "boksamling.dtd"gt
  • lt?xml-stylesheet type"text/xsl"
    href"boksamling.xsl"?gt
  • ltboksamlinggt
  • ltbok/gt
  • lt/boksamlinggt

8
En post i XML-filen
  • ltbokgt
  • ltforfattaregt
  • ltfNamngtSuelt/fNamngt
  • lteNamngtGraftonlt/eNamngt
  • lt/forfattaregt
  • lttitelgtL som i laglöslt/titelgt
  • ltkategorigtDeckarelt/kategorigt
  • ltpris valuta"gbp"gt20lt/prisgt
  • lt/bokgt

9
XSLT-kod
  • lt?xml version"1.0" encoding"ISO-8859-1" ?gt
  • ltxslstylesheet version"1.0" xmlnsxsl"http//ww
    w.w3.org/1999/XSL/Transform"
  • xmlns"http//www.w3.org/1999/xhtml"gt
  • ltxsloutput method"html" indent"yes"/gt
  • ltxsltemplate match"/"gt
  • ltxslapply-templates select"boksamling"/gt
  • lt/xsltemplategt
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"bok"/gt
  • lt/xsltemplategt
  • ltxsltemplate match"bok"gt
  • Författare ltxslvalue-of select"forfattare/fNam
    n"/gt
  • ltxsltextgt lt/xsltextgt
  • ltxslvalue-of select"forfattare/eNamn"/gtltbr /gt
  • Titel ltxslvalue-of select"titel"/gtltbr /gt
  • Kategori ltxslvalue-of select"kategori"/gtlthr
    /gt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

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 lt!-- kommentar --gt
  • Document node (dokumentets rotelement)

12
XPath - noder
  • lt?xml version"1.0" encoding"iso-8859-1"?gt
  • ltboksamlinggt
  • ltbokgt
  • ltforfattaregt
  • ltfNamngtSuelt/fNamngt
  • lteNamngtGraftonlt/eNamngt
  • lt/forfattaregt
  • lttitelgtL som i laglöslt/titelgt
  • ltkategorigtDeckarelt/kategorigt
  • ltpris valuta"gbp"gt20lt/prisgt
  • lt/bokgt
  • lt/boksamlinggt

Dokumentnod (rotelement)
Elementnod
Textnod
Attributnod
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
  • _at_ - 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
  • //_at_currency Pekar ut samtliga attributnoder med
    namnet currency

16
Exempel template-anrop
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"bok/forfattare/eNamn
    "/gt
  • lt/xsltemplategt
  • 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

17
En annan variant
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"bok//eNamn"/gt
  • lt/xsltemplategt
  • Gör att vi är säkra på att rätt eNamn hämtas, dvs
    det som är ättling till bok

18
En tredje variant
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"//forfattare/eNamn"/
    gt
  • lt/xsltemplategt
  • Gör att vi är säkra på att rätt eNamn hämtas, dvs
    det som är barn till forfattare

19
En fjärde variant
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"//eNamn"/gt
  • lt/xsltemplategt
  • 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
  • Att ha samma namn på noder på olika nivå i
    XML-trädet är dock ingen optimal lösning

20
Exempel anropat template
  • ltxsltemplate match"eNamn"gt
  • ltxslvalue-of select"."/gt
  • ltxslvalue-of select"../fNamn"/gt
  • ltxslvalue-of select"../../titel"/gt
  • ltxslvalue-of select"../../kategori"/gt
  • lt/xsltemplategt

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
21
Operatorer
  • AA (A är ekvivalent med A)
  • A!B (A är inte ekvivalent med B)
  • AgtB (A är större än B)
  • AltC (A är mindre än C)
  • AgtD (A är större än eller lika med D)
  • AltE (A är mindre än eller lika med E)
  • Ett uttryck av detta slaget är antingen sant
    (true) eller falskt (false)

22
Operatorer
  • AA and B!C
  • Sant om och endast om A är ekvivalent med A och B
    inte är ekvivalent med C
  • AA or BC
  • 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 (AB)
  • Sant om och endast om A inte är ekvivalent med B

23
Aritmetiska operatorer
  • addition 52
  • - subtraktion 7-2
  • multiplikation 83
  • div division 6 div 3
  • mod modulus 9 mod 2

24
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

25
XSLTs notation
  • Alla element i XSLT innehåller prefixet xsl
  • ltxslchoosegt
  • lt/xslchoosegt
  • ltxslsort select"name"/gt
  • ltxslvalue-of select"name"/gt

26
Operatorer i XSLT
  • AA A är ekvivalent med A
  • A!B A är inte ekvivalent med B
  • 8 gt 6 8 är större än 6
  • 6 lt 8 6 är mindre än 8
  • A gt B A är större än eller lika med B
  • B lt A B är mindre än eller lika med A

27
Operatorer i XSLT
  • AND, OR och AND!
  • pris lt 10 and kategori 'Deckare
  • pris lt 10 or kategori 'Deckare
  • pris lt 10 and kategori ! 'Deckare

28
Templates
  • Innehåller regler som appliceras vid matchning av
    en specificerad nod
  • Syntax
  • ltxsltemplate namenamn" matchmönster"
    modeform" prioritysiffra"gt
  • lt/xsltemplategt
  • Samtliga attribut är valfria, men minst ett av
    attributen name och match måste återfinnas

29
Exempel, templates
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"bok/forfattare/eNamn
    "/gt
  • lt/xsltemplategt
  • ltxsltemplate match"eNamn"gt
  • ltxslvalue-of select"."/gt
  • ltxslvalue-of select"../fNamn"/gt
  • ltxslvalue-of select"../../titel"/gt
  • ltxslvalue-of select"../../kategori"/gt
  • lt/xsltemplategt

30
Exempel, templates med villkor
  • ltxsltemplate match"boksamling"gt
  • ltxslapply-templates select"bok/forfattareeNamn
    'Grafton'"/gt
  • lt/xsltemplategt
  • ltxsltemplate match"forfattare"gt
  • ltxslvalue-of select"eNamn"/gt
  • ltxslvalue-of select"fNamn"/gt
  • ltxslvalue-of select"../titel"/gt
  • ltxslvalue-of select"../kategori"/gt
  • lt/xsltemplategt

31
Repetitioner i XSLT for-each
  • ltxslfor-each selectX-PATH-uttryckgt
  • kod som utförs på varje nod som överensstämmer
    med X-PATH-uttrycket
  • lt/xslfor-eachgt

32
Exempel for-each
  • ltxsltemplate match"/"gt
  • ltxslfor-each select"boksamling/bok"gt
  • ltxslvalue-of select"forfattare/eNamn"/gt
  • ltxslvalue-of select"forfattare/fNamn"/gt
    ltxslvalue-of select"titel"/gt
  • ltxslvalue-of select"kategori"/gt
  • lt/xslfor-eachgt
  • lt/xsltemplategt

33
Exempel for-each med villkor
  • ltxsltemplate match"/"gt
  • ltxslfor-each select "boksamling/bok/forfattare
    eNamn 'Grafton'"gt
  • ltxslvalue-of select"eNamn"/gt
  • ltxslvalue-of select"fNamn"/gt
  • ltxslvalue-of select"../titel"/gt
  • ltxslvalue-of select"../kategori"/gt lt/xslfor-e
    achgt
  • lt/xsltemplategt

34
Styrstrukturer i XSLT
  • om (villkor a) utför a
  • annars om (villkor b) utför b
  • annars utför c

35
Med if
  • ltxslif testvillkor a"gt
  • kod som utförs om villkor a är sant
  • lt/xslifgt
  • ltxslif testvillkor b"gt
  • kod som utförs om villkor b är sant
  • lt/xslifgt
  • ltxslif testvillkor c"gt
  • kod som utförs om villkor c är sant
  • lt/xslifgt

36
Exempel if
  • ltxslif test"pris lt 10 and kategori !
    'Deckare'"gt
  • ltxslvalue-of select"forfattare/eNamn"/gt32
  • ltxslvalue-of select"titel"/gt
  • lt/xslifgt

37
Med choose
  • ltxslchoosegt
  • ltxslwhen testvillkor a"gt
  • ...kod som utförs om villkor a är sant
  • lt/xslwhengt
  • ltxslwhen testvillkor b"gt
  • ...kod som utförs om villkor b är sant
  • lt/xslwhengt
  • ltxslotherwisegt
  • kod som utförs om varken villkor a eller b är
    sant
  • lt/xslotherwisegt
  • lt/xslchoosegt

38
Exempel choose
  • ltxslchoosegt
  • ltxslwhen test"kategori'Deckare'"gt
  • ltxslvalue-of select"titel"/gt,32
  • är en deckare
  • lt/xslwhengt
  • ltxslotherwisegt
  • ltxslvalue-of select"titel"/gt,32
  • är inte en deckare
  • lt/xslotherwisegt
  • lt/xslchoosegt

39
TEI och XSLT
  • På samma sätt som en XML-fil kan transformeras
    med XSLT kan text uppmärkt med TEI transformeras
  • Även här används XPath för navigering

40
Den TEI-uppmärkta texten
  • lt?xml version"1.0" encoding"ISO-8859-1"
    standalone"no"?gt
  • lt!DOCTYPE TEI.2 SYSTEM "http//www.adm.hb.se/mg/d
    ig/XMLLab/teilitex.dtd"gt
  • lt?xml-stylesheet type"text/xsl" href"tei.xsl"?gt
  • ltTEI.2gt
  • ltteiHeadergt
  • ltfileDescgt
  • lttitleStmtgt
  • lttitlegtThe Life and Opinions of Tristram
    Shandy, Gentleman, by Laurence Sterne Electronic
    editionlt/titlegt
  • lt/TEI.2gt

41
Ett XSLT-skal
  • lt?xml version"1.0" encoding"ISO-8859-1" ?gt
  • ltxslstylesheet version"1.0" xmlnsxsl"http//ww
    w.w3.org/1999/XSL/Transform"gt
  • ltxsloutput method"text"/gt
  • ltxsltemplate match"/"gt
  • lthtmlgt
  • ltheadgt
  • lt/headgt
  • ltbodygt
  • lt/bodygt
  • lt/htmlgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

42
Lite innehåll
  • lthtmlgt
  • ltheadgt
  • lttitlegtltxslvalue-of select"TEI.2/teiHead
    er/fileDesc/
  • titleStmt/title"/gtlt/titlegt
  • lt/headgt
  • ltbodygt
  • lth1gtltxslvalue-of select"TEI.2/teiHeader/
    fileDesc/
  • titleStmt/title"/gtlt/h1gt
  • lt/bodygt
  • lt/htmlgt

43
Hämta allt med for-each
  • lth1gt
  • ltxslvalue-of select"TEI.2/teiHeader/fileDesc/
  • titleStmt/title"/gt
  • lt/h1gt
  • ltxslfor-each select"/TEI.2//"gt
  • ltpgt
  • ltxslvalue-of select"."/gt
  • lt/pgt
  • lt/xslfor-eachgt

44
OK, men det ser ju inte så lyckat ut
  • /TEI.2// matchar alla noder som befinner sig i
    TEI.2
  • ltxslvalue-of select"."/gt skriver ut värdet på
    den nod som XSLT-processorn pekar på
  • Om en nod har fler än ett barn kommer innehållet
    i denna nod (plus dess barn) att skrivas ut lika
    många gånger som antalet barn

45
Templates
  • ltbodygt
  • ltxslapply-templates/gt
  • lt/bodygt
  • Skriver ut allt
  • Ytterligare templates och mer styrning behövs

46
Placering av nytt template
  • ltxsltemplate match"/"gt
  • lthtmlgt
  • ltheadgt
  • lttitlegt
  • ltxslvalue-of select"TEI.2/teiHeader/fileDesc/
    titleStmt/title"/gt
  • lt/titlegt
  • lt/headgt
  • ltbodygt
  • ltxslapply-templates/gt
  • lt/bodygt
  • lt/htmlgt
  • lt/xsltemplategt
  • ltxsltemplate match"div"gt
  • lt/xsltemplategt

47
Två templates infogas
  • ltxsltemplate match"div"gt
  • ltdiv style"border 3px double black padding
    50px width 750px"gt
  • ltxslapply-templates/gt
  • lt/divgt
  • lt/xsltemplategt
  • ltxsltemplate match"p"gt
  • ltpgt
  • ltxslapply-templates/gt
  • lt/pgt
  • lt/xsltemplategt

48
Varför skrivs headern ut igen?
  • ltbodygt
  • ltxslapply-templates/gt
  • lt/bodygt
  • Skriver ut allt (inklusive teiHeader-noden)
  • Detta åtgärdas med hjälp av select

49
Uteslutning av överflödig headerinformation
  • ltbodygt
  • lth1gtltxslvalue-of select "TEI.2/teiHeader/fileD
    esc/
  • titleStmt/title"/gtlt/h1gt
  • ltxslapply-templates select"TEI.2/text/body"/gt
  • lt/bodygt

50
Att titta på över sommaren
  • http//www.w3schools.com/xsl/
  • http//www.w3.org/TR/xslt
  • Ray, Eric T. (2003). Learning XML. 2. ed.
    Sebastopol OReilly. 399 s.
  • Kompendiet Digitalisering av text
Write a Comment
User Comments (0)
About PowerShow.com