Marco Ronchetti - [email protected] 
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
J0
1
XSL – Basic elements
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
The process
J0
2
•The process starts by traversing the document tree,
attempting to find a single matching rule for each visited
node.
•Once the rule is found, the body of the rule is
istantiated
•Further processing is specified with the <xsl:applytemplates>. The nodes to process are specified in the
match attribute. If the attribute is omitted, it continues
with the next element that it has a matching template.
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Implicit rules
J0
3
<template match=“/|*”>
<apply-templates/>
</template>
<template match=“text()”>
<value-of select=“.”/>
</template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Selective processing
J0
4
<template match=“group”>
<apply-templates select=“name”>
</template>
<template match=“intro”>
<apply-templates select=“//chapter/title”>
</template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Selective processing - example
J0
5
<?xml version="1.0"?>
<?xml-stylesheet href="IgnoraParte4.xsl" type="text/xsl"
?>
<ROOT>
<SECRET>
SEZIONE RISERVATA:
<TAG1>Testo Privato</TAG1>
</SECRET>
<PUBLIC>
SEZIONE PUBBLICA
<TAG1>Testo Pubblico</TAG1>
</PUBLIC>
</ROOT>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Selective processing - example
J0
6
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:template match="SECRET">Esiste una parte privata</xsl:template>
<xsl:template match="PUBLIC">Esiste una parte pubblica</xsl:template>
<xsl:template match="PUBLIC">La parte pubblica contiene:<xsl:applytemplates/></xsl:template>
</xsl:stylesheet>
OUTPUT
<?xml version="1.0" encoding="UTF-8"?>
Esiste una parte privata
La parte pubblica contiene:
SEZIONE PUBBLICA
Testo Pubblico
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Pattern Matching - nodes
Marco Ronchetti - [email protected] 
/ matches the root node
J0
7
A matches any <A> element
* matches any element
A|B matches any <A> or <B> element
A/B matches any <B> element within a <A> element
A//B matches any <B> element with a <A> ancestor
text() matches any text node
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Pattern Matching
J0
8
id(“pippo”) matches the element with unique ID pippo
A[1] matches any <A> element that is the first <A> child
of its parent
A[last()=1] matches any <A> element that is the last <A>
child of its parent
B/A[position() mod 2 = 1] matches any <A> element that
is an odd-numbered <A> child of its B parent
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Pattern Matching - attributes
J0
9
@A matches any A attribute
@* matches any attribute
B[@A=“v”]//C matches any <C> element that has a <B>
ancestor with a A attribute with v value
processing-instruction()
node()
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Imports, priorities and spaces
J0
10
IMPORT
<import href=“…”>
PRIORITIES
<template match=“…” priority=“2” > (default 1)
A parita’ di priorita’ vince l’ultima definizione
STRIPPING SPACES
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
...
</xsl:stylesheet>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Variables, templates and parameters
J0
11
<variable name=“colore”>rosso</variable>
…
Il colore e’: <xsl:value-of select=“$colore”>.
<template name=“header”>
Sequenza di testo e tags
</template>
…
<call-template name=“header”/>
Once a value has been
assigned to a variable,
it cannot be changed
<template name=“header”><param name=“P”>default</param>
Sequenza di testo e tags, inclusa <value-of select=“$P”/>
</template>
…
<call-template name=“header”>
<with-param name=“P”>3</with-param></call-template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
conditions
J0
12
< xsl: if test”position() mod 2 =0”>
<B><apply_templates/></B>
</ xsl: if>
<xsl:choose>
<xsl: when test”position() mod 2 =0”>
<B><apply_templates/></B>
</xsl: when>
<xsl: otherwise>
<I><apply_templates/></I>
</xsl: otherwise >
</xsl: choose >
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
for-each
J0
13
<xsl:for-each select=“expression”>
some rule
</xsl:for-each>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Sorting
J0
14
<list>
<item sortcode=“C”> Pluto</item>
<item sortcode=“A”> Topolino </item>
<item sortcode=“B”>Pippo</item>
</list>
<template match=“list”>
<apply-templates><sort/></apply-templates>
</template>
<template match=“list”>
<apply-templates>
<sort select=“@sortcode” order=descending/>
</apply-templates>
</template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Numbering
J0
15
<list>
<item sortcode=“C”> Pluto</item>
<item sortcode=“A”> Topolino </item>
<item sortcode=“B”>Pippo</item>
</list>
<template match=“item”>
<apply-templates><number format=“A”/></applytemplates>
</template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
Numbering
J0
16
<chapter>
<section>
<title> First section of chapter 1</title>
…
<template match=“section/title”>
<number level=“multi” format=“1.A”/
count=chapter|section/>
</template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! - Esempio1 XML
J0
17
<?xml version="1.0"?>
<?xml-stylesheet href="try.xsl" type="text/xsl"?>
<department><deptname>Telecomunicazioni</deptname>
<group id="gr1">
<emp><nome>Mario Rossi</nome><livello>7</livello></emp>
<emp><nome>Giuseppe Verdi</nome><livello>6</livello></emp>
</group>
<group id="gr2">
<emp><nome>Filippo Neri</nome><livello>5</livello></emp>
<emp><nome>Mauro Bianchi</nome><livello>6</livello></emp>
</group>
</department>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! - Esempio1 XSL a
J0
18
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="department">
<xsl:value-of select="deptname"/>
--- Lista degli impiegati:
<xsl:for-each select="//nome" ><xsl:value-of select="position()"/>
(<xsl:value-of select="."/>)
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! - Esempio1 XSL b
J0
19
<xsl:template match="nome">Qui lavora <xsl:applytemplates/></xsl:template>
<xsl:template match="livello"> con qualifica di <xsl:value-of
select="."/> livello.</xsl:template>
</xsl:stylesheet>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! - Esempio1 OUT
J0
20
<?xml version="1.0" encoding="UTF-8"?>
Telecomunicazioni
--- Lista degli impiegati:
1(Mario Rossi)
2(Giuseppe Verdi)
3(Filippo Neri)
4(Mauro Bianchi)
==== GRUPPO gr1 ====
Qui lavora Mario Rossi con qualifica di 7 livello.
Qui lavora Giuseppe Verdi con qualifica di 6 livello.
-----------------------------------------==== GRUPPO gr2 ====
Qui lavora Filippo Neri con qualifica di 5 livello.
Qui lavora Mauro Bianchi con qualifica di 6 livello.
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 XML a
J0
21
<?xml version="1.0" ?><!--prod.xml-->
<!DOCTYPE sales [
<!ELEMENT sales ( products, record )><!--sales info-->
<!ELEMENT products ( product+ )><!--product record-->
<!ELEMENT product ( #PCDATA )><!--product information-->
<!ATTLIST product id ID #REQUIRED>
<!ELEMENT record ( cust+ )> <!--sales record-->
<!ELEMENT cust ( prodsale+ )> <!--customer sales record-->
<!ATTLIST cust num CDATA #REQUIRED><!--customer number-->
<!ELEMENT prodsale ( #PCDATA )><!--product sale record-->
<!ATTLIST prodsale idref IDREF #REQUIRED>
]>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 XML b
J0
22
<sales>
<products><product id="p1">Packing Boxes</product>
<product id="p2">Packing Tape</product></products>
<record><cust num="C001">
<prodsale idref="p1">10</prodsale>
<prodsale idref="p2">110</prodsale></cust>
<cust num="C002">
<prodsale idref="p2">10</prodsale></cust>
<cust num="C003">
<prodsale idref="p1">75</prodsale>
<prodsale idref="p2">35</prodsale></cust></record>
</sales>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 XSL a
J0
23
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:template match="sales">
<html>
<head><title>Product Sales Summary</title></head>
<body bgcolor="#ffffff"><h2>Product Sales Summary</h2>
<table summary="Product Sales Summary" border="1">
<th align="center">
<xsl:for-each select="//product">
<td><b><xsl:value-of select="."/></b></td>
</xsl:for-each></th>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 XSL b
J0
24
<xsl:for-each select="/sales/record/cust">
<xsl:variable name="customer" select="."/>
<tr align="right"><td><xsl:value-of select="@num"/></td>
<xsl:for-each select="//product">
<td><xsl:value-of select="$customer/prodsale
[@idref=current()/@id]"/>
</td></xsl:for-each>
</tr></xsl:for-each>
<tr align="right"><td><b>Totals:</b></td>
<xsl:for-each select="//product">
<xsl:variable name="pid" select="@id"/>
<td><i><xsl:value-of select="sum(//prodsale[@idref=$pid])"/></i>
</td></xsl:for-each></tr>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 XSL c
J0
25
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
“Basi di Dati Web e Distribuite” – Laurea Specialistica in Informatica – Università di Trento
Marco Ronchetti - [email protected] 
HANDS ON! – Esempio2 OUT
J0
26
Scarica

XSL