29
1 XSLT processing & control Datamodellering 2006

XSLT processing & control

  • Upload
    simone

  • View
    38

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: XSLT processing & control

1

XSLT processing & control

Datamodellering 2006

Page 2: XSLT processing & control

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

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

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

5

Van boom tot boom

Source tree

Source document

Result Document

Result Tree

Stylesheet tree

Stylesheet

Transformatie proces

Page 6: XSLT processing & control

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

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

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

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

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

11

1.1 Start

context

let op:context = document root

Debugger (in XML-Spy)

Page 12: XSLT processing & control

12

1.2 Root node

gebruik van built-in rule

Debugger

Page 13: XSLT processing & control

13

1.3 Node <doc>

• Input-boom verder afgelopen• <doc>: geen explicit rule built-in rule

Debugger

Page 14: XSLT processing & control

14

1.4 Node <a>

• Komt bij <a>• Wel explicit rule maar geen output

Debugger

Page 15: XSLT processing & control

15

1.5 Select <b>

• Komt bij <a>• Wel explicit rule maar geen output

Debugger

Page 16: XSLT processing & control

16

1.6 Node <b>B1

• Wel explicit rule voor <b> output bij B1

Debugger

Page 17: XSLT processing & control

17

1.7 Node <b>B2

• Weer explicit rule voor <b> output bij B2

Debugger

Page 18: XSLT processing & control

18

1.8 Andere nodes

• Output result tree• Geen passende explicit rules meer

Debugger

Page 19: XSLT processing & control

19

1.9 Node <c> Debugger

Page 20: XSLT processing & control

20

1.10 Node <d> Debugger

Page 21: XSLT processing & control

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

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

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

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

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

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

27

Sorteren - 1<xsl:sort> mag alleen voorkomen

als kind van: <xsl:apply-templates> <xsl:for-each>

Page 28: XSLT processing & control

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

29

Vragen?