Het gebruik van xslt in adlib

Preview:

DESCRIPTION

 

Citation preview

Het gebruik van XSLT in AdlibAdlib gebruikersgroep

30-3-2010Bert Degenhart Drenth

Adlib Information Systems

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Wat is XSLT?

• eXtensible Stylesheet Language Transformation

• Neemt XML als invoer en transformeert dit naar iets anders

• Uitvoer kan XML, HTML of Tekst zijn.

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Relevantie voor Adlib

• XSLT wordt in Internet Server gebruikt• XSLT kan als uitvoerformaat gebruikt worden• XSLT kan gebruikt worden bij

gegevensconversie• In 6.6 browserveld, opmaak in één veld

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Basis XML

• Elk XML document begint met een XML declaratie<?xml version="1.0" encoding="utf-8"?>

• XML is altijd Unicode• Een XML document heeft 1 root node• XML tags zijn vrij te kiezen, soms is er een DTD

(Document Type Definition) of XML Schema (.xsd) die aangeeft welke tags mogelijk zijn.

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Basis XML

• Tags zijn case sensitive• Tags komen altijd in paren voor <open></open>

• Mag verkort worden als <open/>• Attributen: <open attr=“value”/>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Name spaces

• Een XML tag heeft een “voornaam”en een “achternaam” (de achternaam komt eerst, gevolgd door een ‘:’, met daarna de achternaam) <adlib:title>

• De achternaam heet ook wel name space• Een name space wordt geïdentificeerd door

een URI (=Uniform Resource Identifier)• Vaak is een URI ook een URL

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Name spaces 2

• Een name space krijgt betekenis door zijn URI: xmlns:xsl=http://www.w3.org/1999/XSL/Transform

• De URI van een name space is zoiets als een BSN: het geeft betekenis aan een naam

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Adlib XML

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Adlib XML

• Root = <adlibXML>• Eén node <recordList>• Per record een node <record>• Eén <diagnostic> node

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Adlib unstructured XML

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Adlib unstructured XML

• Per veld één XML element• Veldnaam in het Engels• Indien geen veldnaam voorhanden is wordt de

tag als veldnaam gebruikt

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

XSLT als uitvoerformat

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

XSLT als uitvoerformat

• Input is unstructured XML• Uitvoerformaat toevoegen als een normale

outputjob.

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

XSLT, here we go !<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Verklaar de 2e regel ?Waarom is http://www.w3.org/1999/XSL/Transform verplicht ?

XSLT is zelf geschreven als XML!

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

XSLT is een “pattern matching”taal

Kies een output method<xsl:output method="xml" indent="yes"/>

•html•xml•text

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

<xsl:template><xsl:template match=“/“> Dit is de root</xsl:template>

“/” is een xPath expressie

Beter:<xsl:template match="/"> <xsl:text>Dit is de root</xsl:text> </xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

<xsl:apply-templates><xsl:template match="/">

<xsl:text>Dit is de root</xsl:text>

<xsl:apply-templates select="adlibXML"/>

</xsl:template>

<xsl:template match="adlibXML">

<xsl:text>adlibXML is gevonden!</xsl:text>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

<xsl:apply-templates> <xsl:template match="/"> <xsl:text>Dit is de root</xsl:text> <xsl:apply-templates select="adlibXML"/> </xsl:template>

<xsl:template match="adlibXML"> <xsl:apply-templates select="recordList"/> </xsl:template>

<xsl:template match="recordList"> <xsl:text>recordList is gevonden!</xsl:text> <xsl:apply-templates select="record"/> </xsl:template>

<xsl:template match="record"> <xsl:text>Record!</xsl:text> </xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Internet Explorer is je vriend

1. Exporteer met adlwin je test set data2. Open je output file in IE3. Maak een xslt style sheet

(beide files moeten goed getoond worden)4. Voeg aan je xml file toe:

<?xml-stylesheet href="applytemplates.xslt" type="text/xsl"?>

5. Toon je XML file in je browser...

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Of.. Download X-factorhttp://eu.dummies.com/store/product/XSLT-For-Dummies.productCd-0764536516,navId-322468,descCd-DOWNLOAD.html

De url’s in het boek werken niet! Zoek naar XSLT for dummies en daarna in de download sectie!

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

X-factor

Niet op Windows 7

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

We maken er HTML van <xsl:output method="html" indent="yes"/>

<xsl:template match="/"> <xsl:apply-templates select="adlibXML"/> </xsl:template>

<xsl:template match="adlibXML"> <xsl:apply-templates select="recordList"/> </xsl:template>

<xsl:template match="recordList"> <table> <xsl:apply-templates select="record"/> </table> </xsl:template>

<xsl:template match="record"> <tr> <td>Record</td> </tr> </xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

En een beetje stijl<xsl:template match="/">

<head>

<link href="C:\Users\Public\Documents\mijnstijl.css" type="text/css“ rel="stylesheet"/>

</head>

<xsl:apply-templates select="adlibXML"/>

</xsl:template>

<xsl:template match="adlibXML">

<body>

<xsl:apply-templates select="recordList"/>

</body>

</xsl:template>

<xsl:template match="record">

<tr class="record">

<td>Record</td>

</tr>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

<xsl:value-of>• Drukt de uitkomst van een xpath expressie uit• Simpelste expressie : ‘.’ = inhoud huidige node

<xsl:template match="record"> <tr class="record"> <td> <xsl:apply-templates select="priref"/> </td> </tr></xsl:template>

<xsl:template match="priref"> <xsl:value-of select="."/></xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

<xsl:value-of><td>

<xsl:apply-templates select="priref"/>

<xsl:value-of select="3 + 4"/>

<xsl:value-of select="'Hello world'"/>

<xsl:value-of select="substring('Adlib', 1, 2)"/>

<xsl:value-of select="title[1]"/>

</td>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Nu in het echt...<xsl:template match="record">

<tr class="record">

<td>

<xsl:apply-templates select="priref"/>

</td>

<td>

<xsl:apply-templates select="creator[1]"/>

</td>

<td>

<xsl:apply-templates select="title[1]"/>"

</td>

</tr>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

A touch of class<xsl:template match="record">

<tr class="record">

<td class="priref">

<xsl:apply-templates select="priref"/>

</td>

<td class="creator">

<xsl:apply-templates select="creator[1]"/>

</td>

<td class="title">

<xsl:apply-templates select="title[1]"/>"

</td>

</tr>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Plaatje er bij?<td class="title">

<xsl:apply-templates select="title[1]"/>"

</td>

<td class ="image">

<xsl:apply-templates select="reproduction.reference[1]"/>

</td>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Plaatje er bij?<xsl:template match="reproduction.reference">

<xsl:element name="img">

<xsl:attribute name="src">

<xsl:value-of select="concat('C:\Model application 3.5 - Sql server\images\', .)"/>

</xsl:attribute>

</xsl:element>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Plaatje te groot? <xsl:template match="reproduction.reference">

<xsl:element name="img">

<xsl:attribute name="width">100</xsl:attribute>

<xsl:attribute name="src">

<xsl:value-of select="concat('C:\Model application 3.5 - Sql server\images\', .)"/>

</xsl:attribute>

</xsl:element>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Namen omdraaien?

<xsl:template match="creator"> <xsl:choose>

<xsl:when test="contains(., ',')">

<xsl:value-of select="substring-after(., ',')"/>

<xsl:text>&#xa0;</xsl:text>

<xsl:value-of select="substring-before(., ',')"/>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="."/>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

“Duurzaam programmeren” <xsl:template match="creator"> <xsl:call-template name="names"> <xsl:with-param name="name" select="."/> </xsl:call-template> </xsl:template>

<xsl:template name="names"> <xsl:param name="name"/> <xsl:choose> <xsl:when test="contains($name, ',')"> <xsl:value-of select="substring-after($name, ',')"/> <xsl:text>&#xa0;</xsl:text> <xsl:value-of select="substring-before($name, ',')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$name"/> </xsl:otherwise> </xsl:choose> </xsl:template>

Maak er een subroutine van voor hergebruik

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Herhaalde groep <xsl:template match="dimension.value">

<xsl:variable name="pos" select="position()"/>

<xsl:if test="$pos != 1">

<xsl:text>,&#xa0;</xsl:text>

</xsl:if>

<xsl:value-of select="../dimension.type[$pos]"/>

<xsl:text>&#xa0;</xsl:text>

<xsl:value-of select="."/>

<xsl:text>&#xa0;</xsl:text>

<xsl:value-of select="../dimension.unit[$pos]"/>

</xsl:template>

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Good practice

• Combineer XSLT met CSS• XSLT voor de data transformatie en CSS voor

de opmaak details• Hou templates klein (altijd kleiner dan 1

pagina)• Gebruik XSLT niet als programmeertaal, maar

als pattern matching taal • Vermijd <xsl:for-each> loops

Het gebruik van XSLT in Adlib – workshop 30 maart 2010

Vragen

Het gebruik van XSLT in Adlib – workshop 30 maart 2010