Introduktion till XSLT
Vad är XSLT?
• 
Extensible Style Language (XSL) är en språkfamilj
Består av tre delar:
1.  eXtensible Stylesheet Language for Transformations
(XSLT) för att transformera xml-dokument
2.  XSL FO är ett XML vokabulär för att specificera
formattering (XSL Formatting Objects)
3.  XPath språk som används av XSLT för åtkomst eller för att
referera till delar av XML dokument.
• 
Se http://www.w3.org/Style/XSL/ för W3C:s specifikationer
av XSL-familjen.
Introduktion till XSL
2
Varför transformera?
Konvertera ett schema till ett annat
jag säger p, du säger para
Arrangera om data för t ex formatering
T ex välja var noterna skall placeras
Välja eller projicera delar av dokument
visa de stycken som handlar om Kant
Bearbeta data i en ny miljö
t ex i en xml-databasmiljö, eller i en relationsdatabas
Introduktion till XSL
3
En input  flera output
html
pdf
xml
txt
xml
databas
excel
Introduktion till XSL
4
XSL FO
 
 
 
 
Används för att beskriva formatering av
XML dokument.
W3C rekommendation 2001.
Formateringsinstruktioner kan appliceras
i resultatträdet
W3 schools beskriver processen
http://www.w3schools.com/xslfo/xslfo_intro.asp
Introduktion till XSL
5
XSLT - Transformeringens delar
 
 
 
Ett källdokument, dvs xml-fil
Ett resultatträd
i form av xml | html | txt |
Själva transformeringen görs genom olika
metoder:
 
DOM (Document Object Model)
se http://www.w3.org/DOM/
 
SAX ( Simple API for XML)
se http://sax.sourceforge.net/
Introduktion till XSL
6
Träd & Noder
 
 
 
Med XSLT tänker man inte i termer av
dokument
Ett träd representeras av data i
dokumentet som noder
Noder är element, attribut, kommentarer
mm i en hierarki
Introduktion till XSL
7
Typ av noder
 
Rot: starten av dokumentet
OBS! inte samma som rotelementet i en xml-fil
 
 
 
 
Attributnoder
Kommentarnoder
Namnrymder
PI:s ( t ex xml deklarationen)
(Processing Instructions)
 
textnoder
Introduktion till XSL
8
XPath
 
 
 
 
En standard för identifikation och specifikation
av plats och områden i XML-dokument genom
ID:n och XML:s hierarkiska struktur.
Utformad för XSL/XSLT, XPointer, XQL och
vilka andra specifikationer som behöver
identifiera märkning i XML-dokument
Adresserar specifika delar av XML dokumentet
för att sedan tillåta transformering av dem
Manipulering av textsträngar, Booelska
uttryck, nummer
Introduktion till XSL
9
XPath grundläggande syntax
.
aktuell nod
//
var som helst i dokumentet
/
Roten
..
Föräldranoden
@
attribut
[1] position
/steg/steg/steg = absolut referens
steg/steg/steg = relativ referens
Se http://www.w3.org/TR/xpath#section-Location-Steps
Se: http://www.w3schools.com/xpath/xpath_syntax.asp
Introduktion till XSL
10
Stilmallar
 
 
 
 
 
Stilmallar byggs upp av ”templates”
Templates innehåller XSL element & XPath
uttryck
suffix = .xsl
måldokumentet måste vara välformad XML
XSLT har en uppsättning fördefinierade
element (funktioner) som utför vissa bestämda
transformationer
Se: http://www.w3schools.com/xsl/xsl_w3celementref.asp
Introduktion till XSL
11
Repetition
TEI är endast ett märkningsschema i XML.
Det är inte specificerat hur de olika TEI-elementen
presenteras i html eller i pdf-formatet.
Alla webbläsare har stöd för (X)HTML och en
möjlig lösning är att transformera TEI-kodningen
till (X)HTML.
En sådan presentationen är då ett derivat av
originalet (TEI-källan).
XSLT och XSL-FO är tekniker för att
transformera och presentera XML-dokument.
Åtkomst av XML-strukturen
Rotelement
X
X1
X1
X2
Y
X3
1) x1, x2, x3 är barn (child) till X
2) X är förälder (parent) till x1, x2, x3
3) x1, x2, x3 är syskon (sibling)
4) x1 är “äldre” syskon (precedingsibling) till x2
5) Rotelementet är förfader (ancestor)
till x1, x2, x3
6) x1, x2, x3 är ättlingar (desendant) till
Rotelementet och till X
XPath i kombination med XSLT gör
det möjligt att precisera vad i xmlträdet som skall bearbetas, dvs vilka
noder som det skall hända något
med.
Som regel vill man att ett visst
XPath-uttryck tillsammans med ett
xslt-element antingen
1) ’grabba’ tag i en uppsättning
noder, och/eller
2) generera innehåll utifrån
källdokumentet.
Exempel från bibl.xml
som används i xsltövning
Dokumentträd
bibliography
bibl
bibl
title author
title
author
m
title
Micael
lastname firstname
Hocke
y
Susan
bibl
author
w
lastname firstname
Kay
bibl
title
author
m
lastname
Aarset
h
firstname
Espen
bibl, title, author = elementnoder
m & w = attributnoder (<author type=”m”>),
OBS! attributnoder ingår inte i själva dokument
hierarkin utan betecknar egenskaper som ett
visst element besitter
Författarnamnen = textnoder
w
lastname
Ide
firstname
Nancy
Traversering
•  XSL förutsätter en xml-processor eller ”tolk” (MSXML, XALAN, Saxon etc) –
ett program som kan traversera xml-trädet och göra något med de noder det
stöter på, exempelvis omvandla ett tei-element till ett html-element.
• Dessa tolkar finns inbyggda i Oxygen och där kopplar man ihop xmldokumentet med en stilmall i t ex XSLT för att transformera texten
(se särskild handledning i Studentportalen för att koppla en stilmall till ditt
xml dokument: ”xslt-övning.zip”)
• Givetvis måste detta ske i en speciell ordningsföljd: xml-processorn gör en
på-djupet-först (depth-first) sökning med t ex DOM (Document Object Model)
• En XML DOM används för att komma åt och uppdatera innehållet, formatet
och strukturen i XML-dokument via ett gränssnitt.
• Gränssnittet har formen av en objektmodell som består av objekt,
egenskaper, metoder och händelser som kan representera och ändra
komponenterna i ett XML-dokument.
• En DOM lagrar data för ett XML-dokument i en hierarkisk trädstruktur som
efterliknar strukturen i dokumentet.
Traversering av dokumentträd
1
2
bibl
title author
m
4
3
5
lastname firstname
bibliography
bibl
title
bibl
author
title
author
w
lastname firstname
bibl
title
author
m
lastname
firstname
w
lastname
firstname
6
Kay
Micael
Hocke
y
Susan
Aarset
h
Espen
Ide
Nancy
7
• Vid traversering av dokumentträdet ”läser” ett gränssnitt in innehållet i en DOM
(Document Object Model)
• Med en DOM kan man komma åt alla komponenter i ett XML-dokument, inklusive
dokumentets element, attribut, textnoder, bearbetningsinstruktioner, kommentarer och
enhetsdeklarationer (t ex ä [ä]).
• Alla XML-dokument kan läsas in i en DOM.
• När ett XML-dokument läses in i en DOM läses det från början till slut och lagras i
DOM:en som en logisk modell av noder.
• Läs mer vid: http://www.w3schools.com/dom/default.asp
Operatorer
 
Se:
http://www.w3schools.com/xpath/
xpath_operators.asp
Introduktion till XSL
17
Nodfunktioner
 
Se:
http://www.w3schools.com/xsl/
xsl_functions.asp
Vanliga element
 
 
Observera att man alltid skriver xsl:[namn
på elementet], t ex <xsl:template
match="div”>
Läs mer vid:
http://www.w3schools.com/xsl/
xsl_w3celementref.asp där finns alla vanliga
element listade,klicka på dem, läs exemplen
och testa i din egen browser
Men hur går det till då?
Vi har en xml-fil
<recipe>
<title>Pasta för nybörjare</title>
<ingredients>
<item>Pasta</item>
<item>Riven ost</item>
</ingredients>
<cook>Koka pastan and blanda med osten</
cook>
</recipe>
Vi vill att det ska se bli så här i html:
<html><body>
<h1>Pasta för nybörjare</h1>
<p>Ingredienser: Pasta , riven ost</p>
< p>Koka pastan and blanda med osten </p>
</body></html>
Exemplen finns på
Studentportalen
(pasta.xml &
pasta.xsl)
Stilmall
Då använder vi en stilmall som greppar tag i elementen och
sedan skriver ut deras innehåll (texten)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/
Transform">
<xsl:template match="recipe">
<html><body>
<h1><xsl:value-of select="title"/></h1>
<p>Ingredients:
<xsl:apply-templates select = "ingredients/item"/>
</p>
<p><xsl:value-of select="cook"/></p>
</body></html>
</xsl:template>
</xsl:stylesheet>
Testa output och
ändra i stilmallen!
Exemplen finns
på
Studentportalen
(pasta.xml &
pasta.xsl)
Där finns även
flera andra
stilmallar som du
kan använda som
exempel och för
att testning
Tre metoder för att tillämpa XSL
1.  on-the-fly – xsl-mallen appliceras på xml-dokument i samma stund
som en webbläsare läser in xml-dokumentet. (fungerar bäst i Internet
Explorer som har inbyggd processor MSXML 3.0 el 4.0)
2.  batch – xsl-mallen associeras med och appliceras på ett xmldokument via en fristående xsl-processor (t ex Xalan m fl i Oxygen).
3.  En server hämtar xml-fil och xsl-fil och genererar utdata till en
webbläsare (Cocoon)
Ni kommer att använda metod 1 och 2.
Hur man associerar ett xslt-skript (stilmall) till ett xml-dokument i Oxygen
visas i särskild handledning
Hur man associerar en xslt till xml-dokumentet visas på nästa slide.
XSL-FO ska ni läser och övar själva vid:
http://www.w3schools.com/xslfo/default.asp
Associera stillmallen on-the-fly
 
I en html-fil associerar man en stillmall ( till exempel en cssmall) i <head> så här:
<link rel="stylesheet" type="text/css" ref=”minmall.css">
 
I en xml-fil placerar man referensen till xsl-mallen direkt efter
xml-deklarationen:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml:stylesheet type="text/xsl" href=”minmall.xsl"?>
 
OBS! Tänk på att om du inte har mallen i samma katalog
som xml-filen/html-filen måste du även ange sökväg till den
katalog (mapp) där stilmallen/mallarna finns.
T ex: href=”./mallar/minmall.xsl"
Inlämningsuppgift 3
 
 
Utgå från ”din bild” det vill säga den bild du xml-märkt
Gör en stilmall (XSLT) som visar:
 
 
 
 
 
 
brödtext
rubriker
en lista över gamla ord (efter brödtexten)
överkurs: en lista med de gamla orden och deras moderna
stavning
Instruktioner finns på Studentportalen.
Exempel på stilmallar finns också på Studentportalen.
Introduktion till XSL
24