xslt processing & control
DESCRIPTION
XSLT processing & control. Datamodellering 2006. Onderwerpen. Hoe verwerkt een XSLT processor de XML inputtekst? Wat zijn de uitgangspunten bij het schrijven van een XSLT-stylesheet? Welke control structures zijn er? - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/1.jpg)
1
XSLT processing & control
Datamodellering 2006
![Page 2: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/2.jpg)
2
Onderwerpen Hoe verwerkt een XSLT processor de
XML inputtekst? Wat zijn de uitgangspunten bij het
schrijven van een XSLT-stylesheet? Welke control structures zijn er? Niet: XPath, zie daarvoor en voor
andere XSLT-zaken bijvoorbeeld de XSLT Reference van ZVON en stof UWT: http://www.zvon.org/xxl/XSLTreference/Output/index.html
![Page 3: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/3.jpg)
3
XML document tree<?xml version="1.0"?><!-- Dee-licious! --><sandwich
xmlns="http://www.food.org/ns"><ingredient type="grape"> jelly</ingredient><ingredient>
<?knife spread thickly?>peanut-butter
</ingredient><ingredient>
bread<!-- white bread, preferably --></ingredient>
</sandwich>
root elemen
t
root node
![Page 4: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/4.jpg)
4
Nodes in de XSLT-boom Root node (= document node)
een onzichtbaar punt boven het root element Element
correspondeert met element in XML document Attribute
correspondeert met een attribuut van een element in een XML document
heeft een element als parent, maar wordt niet als een gewoon child behandeld in XSLT
Text de tekstuele inhoud van het document
Comment Processing instruction Namespace
![Page 5: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/5.jpg)
5
Van boom tot boom
Source tree
Source document
Result Document
Result Tree
Stylesheet tree
Stylesheet
Transformatie proces
![Page 6: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/6.jpg)
6
Template rules De transformatie is op te vatten als een reis door
de input-boom, waarbij stapsgewijs de output-boom wordt opgebouwd
XSLT-instructies sturen dit proces = toepassen van:
template rules specificeren de transformaties expliciet in de XSLT-file of built-in in de XSLT-processor bestaan twee delen:
een actie een pattern (het match-attribute) op welk deel van de
input-boom de actie moet worden toegepast Voorbeeld:
<xsl:template name="Booklist" match="booklist">
![Page 7: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/7.jpg)
7
Default situatie Schrijven we geen uitvoerige template rules,
dan toch output. Voorbeeld:
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform "version="1.0">
<xsl:template name="Basic"><xsl:apply-templates/>
</xsl:template></xsl:stylesheet>
dit doorloopt de hele input tree (depth first) en geeft alle text weer
![Page 8: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/8.jpg)
8
Sturing template-gebruik <xsl:apply-templates/> <xsl:apply-templates select=""/>
<xsl:for-each select=""/>in combinatie met:
<xsl:call-template name=""/> of:
<xsl:call-template name=""> <xsl:with-param name=""> value </xsl:with-param></xsl:call-template>
![Page 9: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/9.jpg)
9
XSLT processing model XSLT-processor leest de input tree. Ongeacht de inhoud van de XSLT-file, altijd eerst
de virtual call:<xsl: apply-templates select="/">
root node wordt current node call template rule die root node matcht alle nodes
in result tree. Processor loopt input tree verder af en zoekt
meest specifieke, expliciet vermelde template rule die matcht.
XPath om matching-expressie te definiëren. Debugger in een goede editor het pad volgen.
![Page 10: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/10.jpg)
10
Voorbeeld 1
XML<?xml version="1.0"
encoding="UTF-8"?><doc> <a>A</a> <b>B1</b> <b>B2</b> <c>C <d>D</d> </c></doc>
XSLT<?xml version="1.0" encoding="UTF-
8"?><xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/> <xsl:template match="a"> <xsl:apply-templates
select="b"/> </xsl:template> <xsl:template match="b"> Dit is een B</xsl:template> </xsl:stylesheet>
<xsl:apply templates/>in combinatie met
built-in rules
output:Dit is een BDit is een BC D
![Page 11: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/11.jpg)
11
1.1 Start
context
let op:context = document root
Debugger (in XML-Spy)
![Page 12: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/12.jpg)
12
1.2 Root node
gebruik van built-in rule
Debugger
![Page 13: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/13.jpg)
13
1.3 Node <doc>
• Input-boom verder afgelopen• <doc>: geen explicit rule built-in rule
Debugger
![Page 14: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/14.jpg)
14
1.4 Node <a>
• Komt bij <a>• Wel explicit rule maar geen output
Debugger
![Page 15: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/15.jpg)
15
1.5 Select <b>
• Komt bij <a>• Wel explicit rule maar geen output
Debugger
![Page 16: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/16.jpg)
16
1.6 Node <b>B1
• Wel explicit rule voor <b> output bij B1
Debugger
![Page 17: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/17.jpg)
17
1.7 Node <b>B2
• Weer explicit rule voor <b> output bij B2
Debugger
![Page 18: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/18.jpg)
18
1.8 Andere nodes
• Output result tree• Geen passende explicit rules meer
Debugger
![Page 19: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/19.jpg)
19
1.9 Node <c> Debugger
![Page 20: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/20.jpg)
20
1.10 Node <d> Debugger
![Page 21: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/21.jpg)
21
Voorbeeld 2<xsl:for-each/>
in combinatie met built-in rules
XML<?xml version="1.0"
encoding="UTF-8"?><doc> <a>A</a> <b>B1</b> <b>B2</b> <c>C <d>D</d> </c></doc>
XSLT<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:output method="text"/><xsl:template match="doc"> <xsl:for-each select="b">
<xsl:call-template name="T1"/> </xsl:for-each></xsl:template>
<xsl:template name="T1"> Dit is <xsl:value-of select="."/> </xsl:template></xsl:stylesheet>
output: Dit is B1Dit is B2
![Page 22: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/22.jpg)
22
Voorbeel 2 - trace De trace list geeft
het pad weer dat de XSLT-processor heeft gevolgd
Symbolen: enter leave
Debugger (in oXygen)
![Page 23: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/23.jpg)
23
Wanneer welke stijl?Globale vuistregel:
<apply templates> wanneer het voorkomen van elementen betrekkelijk onvoorspelbaar is
b.v. bold, italic, afbeeldigen in tekst etc. <for-each> wanneer er een
regelmatige, bekende datastructuur is b.v. een databaserecord-structuur of
vaste volgorde van hoofdstukken, secties, etc.
![Page 24: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/24.jpg)
24
Parameters - 1 XSLT-templates kunnen parameters
hebben:<xsl:template name="calcArea"
<xsl:param name="width"/> <xsl:param name="height"/> <xsl:value-of select="$width * $height"/>
</xsl:template> Gebruik:
<xsl:call-template name="calcArea"> <xsl:with-param name="width">5</xsl:with-param>
<xsl:with-param name="height" select="7"/></xsl:call-template>
![Page 25: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/25.jpg)
25
Parameters - 2 Parameters kunnen ook globaal zijn voor
het hele XSLT-programma. Dan is <xsl:param> een top-level element. Zij zijn vergelijkbaar met een XSLT-
variabelen. Default waarde via select-attribuut of via
template content. Voorbeelden:
<xsl:param name="naam" select="expression"/> <xsl:param name="naam">value</xsl:param>
![Page 26: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/26.jpg)
26
De case-clause: choose<xsl:choose>
<xsl:when test="$format='normal'">...</xsl:when><xsl:when test="$format='alternate'">
...</xsl:when><xsl:otherwise>
...</xsl:otherwise>
</xsl:choose>
![Page 27: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/27.jpg)
27
Sorteren - 1<xsl:sort> mag alleen voorkomen
als kind van: <xsl:apply-templates> <xsl:for-each>
![Page 28: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/28.jpg)
28
Sorteren - 2<telephone-book>...<entry id="44456">
<surname>Mentary</surname><firstname>Rudy</firstname><town>Simpleton</town><street>123 Bushwack Ln</street><phone>555-1234</phone>
</entry><entry id="44457">
<surname>Chains</surname><firstname>Allison</firstname><town>Simpleton</town><street>999 Leafy Rd</street><phone>555-4321</phone></entry>
...</telephone-book>
<xsl:template match="telephone-book"><xsl:apply-templates> <xsl:sort select="town"/> <xsl:sort select="surname"/> <xsl:sort select="firstname"/></xsl:apply-templates></xsl:template>
![Page 29: XSLT processing & control](https://reader034.vdocuments.pub/reader034/viewer/2022051020/56815c33550346895dca1546/html5/thumbnails/29.jpg)
29
Vragen?