Hoofdstuk 5 : XSLT 1. XSL – Inleiding 2. XSLT – Inleiding 3. Verwijzen naar XSLT in XML 4. XSLT – document 5. XSLT – elementen 6. XSLT – Oefeningen 7. XSLT – Data Types 8. XSLT – Elementen(vervolg) 9. XSLT : XML to XML 10. XSLT – In de praktijk 11. XSL-FO
XSL
1
1. XSL : inleiding • XSL : eXtensible Stylesheet Language.
XSL = XSLT + XSL-FO + XPath • XSL Transformation Language (XSLT) • Omvormen van documenten • XSL Formatting Objects (XSL-FO) • Opmaken van documenten, formatteren voor document print-outs • XML Path Language (XPath – zie hoofdstuk 4) • Adresseren van delen van een XML document XSL Formatter
XSL Transform
XSL
2
5. XSLT - 1
2. XSLT : Inleiding • XSLT • W3C standaard • Verschillende versies • XSLT 1.0 : 16 november 1999 • XSLT 2.0 : 23 januari 2007. http://www.w3.org/TR/xslt20/ – Maar nog niet in alle parsers geïmplementeerd : » Enkel de Saxon parser ondersteunt XSLT 2.0. Microsoft heeft plannen. Voor Xalan (XSLT processor in Java wereld) zijn nog geen plannen. Als je werkt aan de client side (IE, Firefox) : ondersteunen 2.0 niet. » Oxygen : Debugger – XSLT Debugger, kies voor Saxon8B
• Maakt gebruik van Xpath als localiseringsmethode
XSL
3
2. XSLT - Inleiding • Hoe werkt een transformatie? Output
Input XML Document
XML
(mogelijk van SAX of DOM)
Document
Source Tree
XSLT Processor met Mogelijke verwijzing via href
XML Parser (built-in of externe parser)
Result Tree
Output Text file
Stylesheet Tree
(flat file, EDI msg, csv, SQL, JavaScript,...)
XSLT Stylesheet(s) Output (X)html
XSL
4
5. XSLT - 2
2. XSLT - Inleiding • Voor een transformatie heb je nodig • XML document met eventueel verwijzing naar stylesheet (voor browser) • XSLT Stylesheet met de transformatieregels • XSLT processor voert de transformatie uit – Altova XMLSPY – Microsoft XML Parser(ondersteunt 1.0) http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp – Xalan: standaard XSLT processor uit de Java wereld (ondersteunt 1.0) http://www.apache.org/ – Saxon: A free XSL processor, implemented in Java, from Michael Kay (2.0) http://users.iclway.co.uk/mhkay/saxon – libXSLT – Voor meer info zie : http://www.xmlsoftware.com/
• Transformatie uitvoeren kan door browsers (hebben ingebouwde parser) of via DOS prompt of vanuit een programmeertaal Aanroepen transformatie vanuit DOS command line: run-xalan boekenlijst.xml boekenlijst.xsl boekenlijst.html run-xt boekenlijst.xml boekenlijst.xsl boekenlijst.html run-saxon boekenlijst.xml boekenlijst.xsl boekenlijst.html
XSL
5
2. XSLT - Inleiding • Een eerste voorbeeld : XML + XSLT -> html <xsl:template match="huwelijk">
<xsl:value-of select="man"/> en
<man>Adam
<xsl:value-of select="vrouw"/>
+
zijn getrouwd in het jaar
Eva
<xsl:value-of select="@voltrokken"/>.
=
Adam en
Eva zijn getrouwd in het jaar 1990.
SCHEIDING TUSSEN INHOUD EN PRESENTATIE
XSL
6
5. XSLT - 3
3. Verwijzen naar XSLT in XML • Verwijzen in xml document naar XSLT.
Verwijzen in XML document naar stylesheet (niet verplicht)
href="boekenlijst.xsl"?>
Helmut Vanhaegen Helmut Kraus Easy Computing <prijs>20 Hohann-Christian Hanke Easy Computing Tips voor... <prijs>25
XSL
7
4. XSLT - Document • XSLT document
• Is een well-formed XML document, dus starten met
<xsl:stylesheet version=“2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
• <xsl:stylesheet> => root element
<xsl:output method="html" indent="yes"/>
• <xsl:output> => type uitvoer
<xsl:template match="/"> ... ...
• Dan volgt definitie van template(s) <xsl:template>: is een transformatieregel, die een element en een actie specifieert –match–attribuut bepaalt op welke nodes van de boom de template van toepassing is. De waarde is een "Xpath expressie“. –Tussen de tag <xsl:template> staat de transformatie. Deze kan bevatten – Tekst : wordt naar de output gekopieerd – XSLT instructies : worden uitgevoerd
XSL
8
5. XSLT - 4
4. XSLT - Document Werking <xsl:stylesheet version=“2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <xsl:template match="/">
boekenlijst <xsl:apply-templates/> <xsl:template match="boekenlijst">
De boekenlijst
<xsl:apply-templates/> <xsl:template match="boek"> Een boek
Boekenlijst0.xslt
1.XSLT processor leest invoer document . De eerste node is de document node. Deze node wordt vergeleken met alle template regels in XSLT document. Dit komt overeen met de eerste template (“/”). De volgende info wordt weggeschreven naar output:
boekenlijst 2. <xsl:apply-templates/> : processor selecteert alle
kinderen van de huidige node en zoekt voor elk van de kinderen de overeenkomstige template op in xslt en voert deze uit. Het kind van de root is boekenlijst. Er is overeenkomst met de tweede template.
De boekenlijst
wordt weggeschreven. 3. <xsl:apply-templates/> selecteert de kinderen van boekenlijst en zoekt voor elk van de kinderen bijhorende template op en voert deze uit 1.Het eerste kind wordt vergeleken met de templates. Overeenkomst met de derde template. De tekst “Een boek
” wordt weggeschreven. 2.Idem voor 2de kind 4.De wordt weggeschreven.
XSL
9
4. XSLT - Document <xsl:stylesheet version=“2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <xsl:template match="/">
boekenlijst <xsl:apply-templates/> <xsl:template match="boekenlijst">
De boekenlijst
<xsl:apply-templates/> <xsl:template match="boek"> <xsl:value-of select="titel"/>
<xsl:value-of> : processor schrijft de inhoud
van de gekozen node/attribuut naar de uitvoer. • select attribuut bevat een Xpath expressie. • De inhoud van het opgegeven element in de XPath expressie wordt weggeschreven. • In dit voorbeeld de waarde van element titel (is is relatief tov de huidige node, node d.i. boek)
Boekenlijst0-valueof.xslt
XSL
10
5. XSLT - 5
5. XSLT – Elementen • De elementen uit de XSL namespace • <xsl:stylesheet version = “2.0”> • root
• <xsl:output> • Bepaalt hoe de result tree geserialiseerd wordt • Bevat 4 methoden : html, text of xml(default), xhtml (enkel in XSLT 2.0) • Attribuut indent="yes" : voegt indentering toe aan gegenereerd html document
• <xsl:template> • Definieert hoe een bepaalde node getransformeerd moet worden • Het match attribuut associeert de template met een node uit het xml document – Match = Xpath patroon » / : betekent dat template gekoppeld wordt aan doceument node van het XML document
• De binnen een template opgegeven code wordt als resultaat opgeleverd wanneer de template toegepast wordt. – De html tags/tekst binnen die template worden opgeleverd. – Alle elementen in de namespace xsl worden verwerkt door de XSL processor. Voor het localiseren van gegevens gebruik je eveneens XPath expressie, meestal relatief tov de current content node
XSL
11
5. XSLT - Elementen • <xsl:apply-templates> • Vind je altijd binnen een <xsl:template> tag. Zorgt voor de selectie van nodes en voor elk van de geselecteerde node de uitvoering van de bijhorende template. • De nodes waarvoor de template wordt uitgevoerd : – Zonder select (<xsl:apply-templates/>) : Selecteert alle kinderen (in document volgorde) van de huidige node en voert voor elk van de kinderen de bijhorende template uit – Met select attribuut : Het select attribuut bevat een Xpath expressie. De uitvoering hiervan levert een sequentie van nodes op (0, 1 of meerdere). Voor elk van de geselecteerde nodes wordt de bijhorende template uitgevoerd.
• Maar wat als er voor een bepaalde node geen template bestaat? – De default template wordt uitgevoerd. – Opmerking : <xsl:template match="/"> moet je niet expliciet voorzien. Deze zit in de default template <xsl:template match="*|/"> (zie volgende slide)
XSL
12
5. XSLT - 6
5. XSLT - Elementen • De default templates • Worden toegepast als er voor een bepaalde node geen template bestaat • igv document node of element node, selecteer alle kinderen en voer voor elk van de kinderen de bijhorende template uit <xsl:template match="*|/"> <xsl:apply-templates/> • igv tekstnode of attribuut node output tekst. <xsl:template match="text()|@*"> <xsl:value-of select="."/> • igv PI of commentaar, doe niets. <xsl:template match="comment()| processing-instruction()"/>
• Als voor een bepaalde node 2 templates bestaan, wordt de meest specifieke uitgevoerd. <xsl:template match=“boek"> of <xsl:template match=“boek[1]">
XSL
13
5. XSLT - Elementen – Voorbeeld : Wat is de output van onderstaand voorbeeld ? <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
Boekenlijst <xsl:template match="boek"> <xsl:value-of select="titel"/>
•Verandert het verwijderen van de template van boek iets aan het resultaat? •Wat is er extra nodig om de template van boek uit te voeren, of dus de titel van elk boek weer te geven? •Opgelet : De html moet voldoen aan de regels van well formed XML.
XSL
14
5. XSLT - 7
5. XSLT - Elementen – Voorbeeld : boekenlijst1.xsl » <xsl:apply-templates/> : Pas de template toe van alle kinderen (in document volgorde). » Er bestaan geen templates voor de kinderen, dus de default templates worden toegepast. » Merk op : attributen komen niet voor in output document.
<xsl:stylesheet version=“2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
Boekenlijst <xsl:apply-templates/>
Wat als je de template voor “/” verwijdert?
XSL
15
5. XSLT - Elementen – Wat is output van onderstaand voorbeeld? (boekenlijst2.xsl) <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
Boekenlijst <xsl:apply-templates select="boekenlijst/boek"/> <xsl:template match="titel"> <xsl:value-of select="."/>
XSL
16
5. XSLT - 8
5. XSLT - Elementen • Voorbeeld 1 : overzicht van titels (boekenlijst3.xsl) <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match=………>
Wat igv <xsl:apply-templates select="boekenlijst/boek/titel"/>? <xsl:apply-templates select="titel"/>? <xsl:template match="titel">? <xsl:value-of select=
XSL
17
"/boekenlijst/boek/titel"/>?
5. XSLT - Elementen • OPGELET : Paden in template zijn relatief tov de huidige context node (= match attribuut )! <xsl:template match="boek"> <xsl:value-of select=“boek/titel"/>
<xsl:template match="boek"> <xsl:value-of select=“boekenlijst/boek/titel"/>
<xsl:template match="boek"> <xsl:value-of select=“/boekenlijst/boek/titel"/>
<xsl:template match="boek"> <xsl:value-of select=“titel"/>
XSL
18
5. XSLT - 9
5. XSLT - Elementen • Voorbeeld 2 : overzicht van titels en uitgevers (boekenlijst4.xsl)
XSL
19
5. XSLT - Elementen
Titel | Uitgever |
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="/">
|
XSL
20
5. XSLT - 10
5. XSLT - Elementen • Voorbeeld 3 : overzicht van titels en uitgevers en auteurs
XSL
21
5. XSLT - Elementen • Oplossing 1 : <xsl:value-of> (boekenlijst4A.xsl)
<xsl:template match="boek">
<xsl:value-of select="titel"/> | <xsl:value-of select="uitgever"/> | <xsl:value-of select="auteur"/> |
<xsl:value-of> - Output de waarde die in de bijbehorende XPath expressie geselecteerd wordt (Xpath expressie terug relatief tov current node.) - XPath 1.0 : Als de expressie een NodeSet zou selecteren, dan zal enkel het eerste element uit die verzameling in de output verschijnen - XPath 2.0 : Alle items uit sequence worden getoond, gescheiden door spatie (kan je opgeven in separator attribuut) vb : <x><xsl:value-of select="(1,2,3,4)" separator=" | "/> -> Output : <x>1 | 2 | 3 | 4 Als we nu enkel de eerste waarde wensen, moeten we die expliciet selecteren!! Vraagjes : In dit voorbeeld mag je<xsl:value-of select="titel"/> vervangen door <xsl:value-of select=“./titel"/>. Wat als je het zou vervangen door <xsl:value-of select=“boek/titel"/>? Of door <xsl:value-of select=“/boekenlijst/boek/titel"/>?
XSL
22
5. XSLT - 11
5. XSLT - Elementen •
Oplossing 2: Maak een aparte template voor auteur zie boekenlijst5.xsl <xsl:template match="boek">
<xsl:value-of select="titel"/> | <xsl:value-of select="uitgever"/> | <xsl:apply-templates select="auteur"/> |
<xsl:template match="auteur"> <xsl:value-of select="."/>
•
Wens je het geheel wat mooier voor te stellen dan kan je nog een CSS toevoegen : zie boekenlijst5A.xsl
XSL
23
5. XSLT – Elementen • Oplossing 3 : <xsl:for-each> (zie boekenlijst6.xsl) • xsl:value-of -> selecteert de eerste waarde (XPath 1.0) • xsl:for-each -> overloopt alle nodes die voldoen aan de waarde van het select attribuut • Pull-processing (<-> <xsl:apply-templates> push processing) <xsl:template match="boek">
<xsl:value-of select="titel"/> | <xsl:value-of select="uitgever"/> | <xsl:for-each select="auteur"> <xsl:value-of select="."/> |
XSL
Relatief tov de huidige context node, di auteur (en niet boek)
24
5. XSLT - 12
6. XSLT – Oefeningen •
Oefening 1 : Schrijf stylesheet die boekenlijst.xml converteert naar onderstaande html pagina. (Gebruik voor de titels een template, voor de auteurs werk je met een for-each)
De titels uit de boekenkast
- Het grote Office 2000 boek
- De beste Office 2000 geheimen
De lijst van de auteurs
- Helmut Vanhaegen
- Helmut Kraus
- Hohann-Christian Hanke
• Oefening 2 : Wat als eenzelfde auteur meerdere maal voorkomt in XML bestand. Hoe zorg je ervoor dat hij dan maar 1 keer voorkomt in de lijst van auteurs?
XSL
25
6. XSLT – Oefeningen •
Oefening 3 : Welke html wordt er gegenereerd gegeven boekenlijst7.xml/xsl ?
Het grote Office 2000 boek Helmut Vanhaegen Helmut Kraus Easy Computing <prijs> 21.5 EUR De beste Office 2000 geheimen Hohann-Christian Hanke Easy Computing <prijs> 22.5 EUR
<xsl:template match="/">
XSL
Boekenlijst <xsl:apply-templates/> <xsl:template match="boekenlijst"> <xsl:apply-templates select="boek"/> <xsl:template match="boek"> <xsl:apply-templates/> <xsl:template match="prijs"> <xsl:value-of select="bedrag"/>
26
5. XSLT - 13
7. XSLT – Data Types • XSLT Schema Support • Heel veel W3C XML Schema simple types zijn altijd beschikbaar • Als je naar bijkomende types wenst te verwijzen dien je het schema als volgt te importeren <xsl:import-schema namespace="http://example.org/example" schema-location="/path/to/example.xsd"/>
XSL
27
7. XSLT – Data Types • XSLT Types • XSLT 2.0 laat toe om types te declareren voor • • • • • •
return type van (user-declared) functions. return type van templates parameters variabelen sequenties (opgebouwd met xsl:sequence) keys
• Voor de declaratie van types wordt het “as” - attribuut gebruikt (zie verder)
XSL
28
5. XSLT - 14
8. XSLT – Elementen (vervolg) • <xsl:if> • Bevat de xsl-instructies,… die alleen zullen worden uitgevoerd als aan de if conditie voldaan is. <xsl:if test="expressie">output
De Xpath expressie moet true of false opleveren. Indien true wordt de output gegenereerd
• Kent geen ‘else’. • Voorbeeld : lijst van boeken met meer dan 1 auteur <xsl:template match="/boekenlijst/boek"> <xsl:if test="count(auteur)>1"> <xsl:value-of select="titel"/> <xsl:value-of select="uitgever"/>
is Unicode voor non-breaking space ( in html)
Zie boekenlijst8.xsl
XSL
29
8. XSLT – Elementen (vervolg) • <xsl:choose> • Uitvoeren van testen met meerdere condities <xsl:choose> <xsl:when test="expressie">output ... <xsl:otherwise>output
Voorbeeld : Indien prijs > 20, titel in rode, anders grijze achtergrond <xsl:template match="/boekenlijst/boek">
<xsl:choose> <xsl:when test="./prijs>20"> <xsl:value-of select="titel"/> | <xsl:otherwise> <xsl:value-of select="titel"/> | <xsl:value-of select="uitgever"/> |
XSL
Zie boekenlijst9.xsl
30
5. XSLT - 15
8. XSLT – Elementen (vervolg) • <xsl:sort> • Om elementen te sorteren binnen een <xsl:apply-templates> of <xsl:for-each>. <xsl:sort select="sorteerveld" data-type="text of number" order="ascending of descending" case-order="upper-first of lower-first"/>
• Je kan op meerdere velden sorteren. Per veld neem je een <xsl:sort> op • Voorbeeld : sorteren van auteurs in 3de kolom tabel <xsl:template match="/boekenlijst/boek">
<xsl:value-of select="titel"/> | <xsl:value-of select="uitgever"/> | <xsl:for-each select="auteur"> | <xsl:apply-templates select="auteur"> <xsl:sort select="."/> <xsl:sort select="."/> <xsl:value-of select="."/> |
XSL
31
8. XSLT – Elementen (vervolg) • <xsl:variable> • Definitie van constanten (write-once) • Kan globaal of lokaal in een template • Je geeft een naam op en zijn inhoud en (XSLT 2.0) eventueel zijn data type <xsl:variable name = “naam” select = “expressie” as=“datatype”/> De variabele bevat eventueel een sequentie van een opgegeven type
• Verwijzen naar een variabele : $naam <xsl:variable name="fp" select="1" as="xs:double"/> => is een double met de waarde 1 <xsl:variable name="date“ select="xs:date('2007-11-20')"/> => is een datum <xsl:variable name="date“ select=“’2007-11-20’”/> => is de string “2007-11-20”. <xsl:variable name=“boeken" select="/boekenlijst/boek" as =“item()”/> <xsl:apply-templates select ="$boeken/titel"/> <xsl:for-each select="$boeken/titel"/>
XSL
32
5. XSLT - 16
8. XSLT – Elementen (vervolg) •
Oefening 4 : gebruik boekenlijst2ID.xml • Maak een gesorteerde lijst van de boeken en gesorteerde lijst van auteurs . Wat dient hiervoor aan de oplossing van opgave 1 te worden aangepast? • Plaats naast de titel ook de uitgever.
XSL
33
8. XSLT – Elementen (vervolg) • <xsl:param> • Doorgeven van parameters aan een named template, functie of een stylesheet • Kan globaal (buiten template) of lokaal (in een template, functie) • In <xsl:template> definieer je de parameters via <xsl:param>. Name attribuut bevat naam van parameter, select attribuut bevat een defaultwaarde(optioneel) • In <xsl:call-templates> geef je waarden van parameters door via <xsl:withparam> <xsl:template match="/"> <xsl:for-each select="//titel"> <xsl:call-template name="show_title"> <xsl:with-param name="file" select="." />
Named templates
<xsl:template name="show_title" match="titel"> <xsl:param name="file" select="login.aspx" as="xs:string" />
<xsl:value-of select = "$file"/> XSL
34
Zie boekenlijst10.xsl
5. XSLT - 17
8. XSLT – Elementen (vervolg) • Groeperen adhv <xsl:for-each-group> • • • •
select : selectie van items waarop gegroepeerd wordt (populatie) group-by : berekent een string waarde voor elke node in de populatie. Nodes met dezelfde waarde worden gegroepeerd current-group(): de leden van de huidige groep, current-grouping-key():de waarden van de huidige groep Voorbeeld : titels per auteur
<xsl:template match="/"> <xsl:for-each-group select="boekenlijst/boek" group-by="auteur">
auteur : <xsl:value-of select="current-grouping-key()"/>
<xsl:for-each select="current-group()"> - <xsl:value-of select="titel" />
Gemiddelde prijs : <xsl:value-of select="avg(current-group()/prijs)"/> Zie boekenlijst11.xml/xsl
XSL
35
8. XSLT – Elementen (vervolg) Voeg ook verwijzing naar schema toe als je xs: gebruikt
• Functies : <xsl:function>
Definieer namespace die functie bevat
(boekenlijst12.xsl)
<xsl:stylesheet version="2.0" xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://whatever"> <xsl:function name="foo:compareCI" as="xs:integer" > <xsl:param name="string1"/> Return type <xsl:param name="string2"/> <xsl:value-of select="compare(upper-case($string1),upper-case($string2))"/> <xsl:template match="/"> compareCI red,blue: <xsl:value-of select="foo:compareCI('red','blue')"/>
compareCI red,red: <xsl:value-of select="foo:compareCI('red','red')"/>
compareCI red,Red: <xsl:value-of select="foo:compareCI('red','Red')"/>
compareCI red,Yellow: <xsl:value-of select="foo:compareCI('red','Yellow')"/>
•
Voor overige elementen uit xsl namespace zie http://www.w3.org/TR/xsl/
XSL
36
5. XSLT - 18
8. XSLT – Elementen (vervolg) •
Oefening 5 (gebruik boekenlijst.xml) • Geef per uitgever, de naam van de uitgever en het aantal boeken (verzorg de uitvoer: 1 boek, 2 boeken) die hij gepubliceerd heeft.
• Voeg nu ook een functie toe voor weergave van aantal boeken. De functie heeft als input het aantal boeken x en retourneert : • Als x > 1 : x boeken anders x boek
XSL
37
9. XSLT : XML to XML • Kopiëren van nodes • <xsl:copy-of> : kopieert inhoud met inbegrip van de tags <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <xsl:comment >Een auteurslijst
<xsl:apply-templates select="boekenlijst/boek/auteur"/> <xsl:template match="auteur"> <xsl:copy-of select="."/>
Helmut Vanhaegen Helmut Kraus Hohann-Christian Hanke XSL
38
5. XSLT - 19
9. XSLT : XML to XML • <xsl:copy> : kopieert tag van de huidige node, maar geen kinderen of attributen of tekst <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <xsl:comment >Een boekenlijst
<xsl:apply-templates select="boekenlijst/boek"/> <xsl:template match="boek"> <xsl:copy> <xsl:value-of select="titel"/>
Het grote Office 2000 boek De beste Office 2000 geheimen XSL
39
9. XSLT : XML to XML • Voorbeelden <xsl:template match="boek"> <xsl:copy> <xsl:apply-templates/>
<xsl:template match="boek"> <xsl:copy/>
Het grote Office 2000 boekHelmut VanhaegenHelmut KrausEasy Computing20 De beste Office 2000 geheimenHohann-Christian HankeEasy ComputingTips voor alle Office programma's25
XSL
40
5. XSLT - 20
9. XSLT : XML to XML • Creatie van nodes en attributen • <xsl:element>, <xsl:attribute> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <xsl:comment >Een boekenlijst <xsl:element name="books"> <xsl:apply-templates select="boekenlijst/boek"/> <xsl:template match="boek"> <xsl:element name="book"> <xsl:attribute name="price"> <xsl:value-of select="prijs"/>
Het grote Office 2000 boek <xsl:value-of select="titel"/> De beste Office 2000 geheimen XSL
41
9. XSLT : XML to XML • Voorbeeld voor generatie html
<email>
[email protected]
[email protected]
• Creatie van text • <xsl:text>tekst • Creatie van een sequence • <xsl:sequence> : voegt bestaande nodes of nieuwe atomic waarden toe aan een sequence
XSL
42
5. XSLT - 21
9. XSLT – XML to XML • Opgave 6 • Maak een boekencatalogus, gesorteerd op titel met volgende layout
De beste Office 2000 geheimen Hohann-Christian Hanke Het grote Office 2000 boek Helmut Vanhaegen Helmut Kraus XSL
43
10. XSLT - in de praktijk • Waar vindt de transformatie plaats? • Transformatie in browser (client-side) • In XML neem je PI op voor stylesheet. !!! Als de gebruiker View Source doet ziet gebruiker volledig XML document !!!! • Voorbeeld maakt gebruik van ActiveX Component van Microsoft voor de transformatie in een JavaScript. Maar XML document wordt gedownload naar client !!!! <script type="text/javascript"> // Load XML var xml = new ActiveXObject("Microsoft.XMLDOM") xml.async = false xml.load("cdcatalog.xml") // Load XSL var xsl = new ActiveXObject("Microsoft.XMLDOM") xsl.async = false xsl.load("cdcatalog.xsl") // Transform document.write(xml.transformNode(xsl))
XSL
Lezen XML file adhv DOM
Lezen XSL file adhv DOM
44
5. XSLT - 22
10. XSLT - in de praktijk • Transformatie in server • Voorbeeld in ASP <% 'Load XML set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("cdcatalog.xml")) 'Load XSL set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.async = false xsl.load(Server.MapPath("cdcatalog.xsl")) 'Transform file Response.Write(xml.transformNode(xsl)) %>
• Of een ander tool doet de transformatie (zie XSLT processors)
XSL
45
10. XSLT - In de praktijk • Application integratie Tools • BizTalk van Microsoft: http://www.microsoft.com/biztalk/ • WebMethods: http://www.webmethods.com • Tibco: http://www.tibco.com
• On the web • Business Integration Journal: http://www.bijonline.com/ • EAI User Group: http://www.eaiusergroup.com/
XSL
46
5. XSLT - 23
10. XSLT - In de praktijk •Overzicht Architectuur Application A
Application B
Application C
Application Adapter
Technology Adapter
Business Process Receive Services HTTP
SMTP
MSMQ
MQSeries
File
Web Service
Routing Services
Messaging Bus Transformation Services
Declarative Routing
XML
Content Based
EDI
Publish/Subscribe
Flat
Custom
Delivery Services
Application Adapter
Application D
Application E
Application F
XSL
47
10. XSLT - In de praktijk • XML Pipelines • Piping van verschillende transformaties • XML Pipeline Definition Language Version 1.0 http://www.w3.org/TR/xml-pipeline/ • XProc : XML Pipelining Language (working draft) http://www.w3.org/TR/xproc/ • Andere implementaties • Smallx • yax
XSL
48
5. XSLT - 24
11. XSL-FO • Standaard voor opmaak (XSL-FO 2.0 work started)
Hello, world!
XSL
49
11. XSL-FO • XSL-FO • Tools • • • • •
Apache FOP Antenna House RenderX AltSoft Xml2PDF Intensive Designers
XSL
50
5. XSLT - 25
On the Web • Tip • Internet Explorer Tools for Validating XML and Viewing XSLT Output • IE past stylesheet toe en toont de output pagina. Als je op view > source klikt zie je de xml source code. Wens je de gegenereerde code te zien : http://www.microsoft.com/downloads/details.aspx?FamilyId=D23C1D2 C-1571-4D61-BDA8-ADF9F6849DF9&displaylang=en – Dubbelklik de exe om te unzippen – Rechtermuisklik op de .inf bestanden, selecteer Install in contextmenu – Dan krijg je 2 extra opties als je in IE met je rechtermuis op het venster klikt met de output pagina » Validate XML » View XSL Output
XSL
51
On the web • W3C recommendations • XSLT 2.0 : http://www.w3.org/TR/xslt20/ • XPath 2.0 specificatie : http://www.w3.org/TR/xpath20/. • XPath 2.0/XQuery data model (XDM): http://www.w3.org/TR/xpathdatamodel/. • Xpath 2.0/Xquery functies en operatoren : http://www.w3.org/TR/xquery-operators/. • XPath 2.0/XQuery Formal semantics (XPath semantiek, belangrijk voor implementoren) : http://www.w3.org/TR/xquery-semantics/.
• XSLT tutorial : • • • •
http://www.w3schools.com/xsl/default.asp http://www.xml.com/ http://www.xslt.com/ http://www.zvon.org/o_html/group_xsl.html
XSL
52
5. XSLT - 26