1 / 29

XSLT processing & control

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?

simone
Download Presentation

XSLT processing & control

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XSLT processing & control Datamodellering 2006

  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

  3. XML document tree root node <?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 element

  4. Nodes in de XSLT-boom • Root node (= document node) • een onzichtbaar punt boven het rootelement • 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

  5. Style sheet Stylesheet tree Result Tree Source tree Result Document Source document Transformatie proces Van boom tot boom

  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 ofbuilt-inin 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">

  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

  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>

  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.

  10. 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-templatesselect="b"/> </xsl:template> <xsl:template match="b"> Dit is een B </xsl:template> </xsl:stylesheet> <xsl:apply templates/> in combinatie met built-in rules Voorbeeld 1 output:Dit is een B Dit is een B C D

  11. 1.1 Start Debugger (in XML-Spy) let op:context = document root context

  12. 1.2 Root node Debugger gebruik van built-in rule

  13. 1.3 Node <doc> Debugger • Input-boom verder afgelopen • <doc>: geen explicit rule  built-in rule

  14. 1.4 Node <a> Debugger • Komt bij <a> • Wel explicit rule  maar geen output

  15. 1.5 Select <b> Debugger • Komt bij <a> • Wel explicit rule  maar geen output

  16. 1.6 Node <b>B1 Debugger • Wel explicit rule voor <b>  output bij B1

  17. 1.7 Node <b>B2 Debugger • Weer explicit rule voor <b>  output bij B2

  18. 1.8 Andere nodes Debugger • Output  result tree • Geen passende explicit rules meer

  19. 1.9 Node <c> Debugger

  20. 1.10 Node <d> Debugger

  21. 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> <xsl:for-each/> in combinatie met built-in rules Voorbeeld 2 output:Dit is B1 Dit is B2

  22. Voorbeel 2 - trace Debugger (in oXygen) • De trace list geeft het pad weer dat de XSLT-processor heeft gevolgd • Symbolen: •  enter •  leave

  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.

  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>

  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>

  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>

  27. Sorteren - 1 <xsl:sort> mag alleen voorkomen als kind van: • <xsl:apply-templates> • <xsl:for-each>

  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:templatematch="telephone-book"> <xsl:apply-templates> <xsl:sortselect="town"/> <xsl:sort select="surname"/> <xsl:sort select="firstname"/> </xsl:apply-templates> </xsl:template>

  29. Vragen?

More Related