Professional Documents
Culture Documents
Web 06 Transformari XSL2
Web 06 Transformari XSL2
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
Tehnologii Web
Un model de date pentru <Web />
partea III: transformari XML (2)
detalii in [TX, 87-102]
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
Faceti ceva si daca nu merge incercati altceva.
Franklin Delano Roosevelt
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
Care este prezentul/viitorul
transformarilor XML?
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0
Recomandare W3C (2007)
Baza pentru XSLT 2.0 si XQuery 1.0
www.w3.org/TR/xpath20/
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Opereaza asupra unei structuri logice (abstracte)
a documentului XML numita data model
www.w3.org/TR/xpath-datamodel/
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Tipurile de date sunt cele specificate
de XML Schema
vezi
cursul viitor
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Traversarea documentelor poate utiliza axe noi
exemple:
following-sibling
preceding-sibling
...
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Secvente ordonate
in loc de seturi de noduri (node-sets)
secventele pot contine duplicate,
dar nu pot fi formate din sub-secvente
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Secvente ordonate
in loc de seturi de noduri (node-sets)
se permite si specificarea intervalelor
(considerate tot secvente)
exemplu: (8, 10, 1 to 4)
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Relativ la secventele de noduri, apar operatorii:
union (|) reuniunea de secvente
intersect intersectia de secvente
except diferenta dintre secvente
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Operatorul idiv ofera un rezultat intreg
Comparatiile generale se pot efectua
via =, !=, <, <=, >, >=,
iar cele asupra valorilor atomice
prin eq, ne, lt, le, gt, respectiv ge
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Pentru iterare de secvente,
se foloseste expresia for
for $i in (10, 20), $j in (1, 2)
return ($i + $j)
(: lista titlurilor proiectelor cu pozitii in intervalul [2, 8] :)
for $poz in (2 to 8)
return /projects/project[$poz]/title
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Expresiile conditionale pot fi exprimate prin if
if (catalog[@stare = 'final'])
then student/nota
else student/prezente
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Se permit expresii cuantificate
precedate de cuantificatorii some ori every
some $x in (1, 2, 3), $y in (2, 3, 4)
satisfies $x + $y = 4
every $x in (1, 2, 3), $y in (2, 3, 4)
satisfies $x + $y = 4
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Se permit expresii cuantificate
precedate de cuantificatorii some ori every
some $x in (1, 2, 3), $y in (2, 3, 4)
satisfies $x + $y = 4
every $x in (1, 2, 3), $y in (2, 3, 4)
satisfies $x + $y = 4
intoarce true
false
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Pot fi utilizate noi functii descrise in specificatia
http://www.w3.org/TR/xpath-functions/
apartin spatiului de nume fn desemnat de URI-ul:
http://www.w3.org/2005/xpath-functions
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Signatura unei functii este definita prin
fn:nume ($parametru as tip, ...) as tip-returnat
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii cu caracter general
error()
trace()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii privitoare la URI/IRI
iri-to-uri()
encode-for-uri()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii referitoare la siruri de caractere
compare()
upper-case()
lower-case()
ends-with()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii privind secventele de noduri
exists() index-of() empty()
zero-or-one() one-or-more() exactly-one()
subsequence() deep-equal()
reverse() remove()
etc.
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii privind accesul la noduri/document
node-name()
root()
doc()
doc-available()
document-uri()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii referitoare la valori numerice
abs()
avg()
min()
max()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
Functii oferind suport pentru expresii regulate
matches()
replace()
tokenize()
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
avansat
if (matches ($proiect/title, "^(F|T).*", "mi"))
then $proiect/title else "Titlul proiectului nu incepe cu 'F' sau 'T'."
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: noutati
si multe altele
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xpath 2.0: demo
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0
Recomandare W3C (2007)
http://www.w3.org/TR/xslt20/
se bazeaza pe XPath 2.0
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Parcurgerea grupurilor de noduri
via constructia <xsl:for-each-group>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Document XML ce include date & meta-date despre
piesele muzicale disponibile pe un mediu de stocare:
<USBDeviceLibrary>
<Song Filename="Dead Can Dance - Indus.mp3"
Artist="Dead Can Dance" Album="Spiritchaser" Title="Indus"
Genre="New Age" Year="1996" Track="3" Size="8997682"/>
<Song Filename="Pink Floyd - Mother.mp3" Artist="Pink Floyd"
Album="The Wall" Title="Mother" Genre="Rock" Year="1979"
Track="8" Size="9571309"/>
<Song Filename="Delerium.mp3" Artist="Delerium"
Album="Nuages du Monde" Title="Indoctrination"
Genre="Electronic" Year="2006" Track="4" Size="8731491"/>
<Song Filename="Pink Floyd - High Hopes.mp3" Artist="Pink Floyd"
Album="The Division Bell" Title="High Hopes" Genre="Rock"
Year="1994" Track="11" Size="12241905"/>
</USBDeviceLibrary>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Constructie XSLT 2.0 generand grupuri
conform atributului Artist:
<xsl:for-each-group
select="/USBDeviceLibrary/Song" group-by="@Artist">
<xsl:sort select="@Artist" />
Melodiile formatiei <xsl:value-of select="@Artist"/> sunt:
<!-- Selectam titlul piesei din grupul curent -->
<xsl:value-of select="current-group()/@Title" separator=", " />
* Un total de <xsl:value-of select="count(current-group())"/> piese.
* Spatiu ocupat: <xsl:value-of select=
"format-number(sum(current-group()/@Size) div (1024 * 1024), '00')" />
</xsl:for-each-group>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Rezultatul obtinut in urma efectuarii transformarii:
Melodiile formatiei Dead Can Dance sunt:
Indus, Nierika (live)
* Un total de 2 piese.
* Spatiu ocupat: 15 MB.
Melodiile formatiei Delerium sunt:
Indoctrination
* Un total de 1 piese.
* Spatiu ocupat: 08 MB.
Melodiile formatiei Pink Floyd sunt:
Outside the Wall, Mother, High Hopes, Eclipse
* Un total de 4 piese.
* Spatiu ocupat: 29 MB.
avansat
grupare pe baza
atributului Artist
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Crearea de arbori multipli la iesire
(reprezentari multiple ale transformarilor)
avansat
vezi exemplele
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Specificarea de functii definite de utilizator
<!-- functie ce inverseaza cuvintele dintr-un sir -->
<xsl:function name="tw:inverseaza">
<xsl:param name="sir"/>
<xsl:value-of select="if (contains ($sir, ' ')) then
concat (tw:inverseaza (substring-after ($sir, ' ')), ' ',
substring-before ($sir, ' ')) else $sir" />
</xsl:function>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Declaratii de tipuri pentru variabile/parametri
<!-- secventa de siruri de caractere stocata intr-o variabila -->
<xsl:variable name="mesaje" as="xs:string*">
<xsl:sequence select="mesaje/mesaj" />
</xsl:variable>
0, 1 sau mai multe
date de tip string
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
<xsl:for-each> poate procesa orice secventa
de valori nu doar de noduri
<!-- iteram tipurile de punctaje obtinute -->
<xsl:for-each select="('proiect', 'test', 'bonus')">
</xsl:for-each>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Criteriul de sortare poate fi specificat de
o functie specificata de programator
o secventa sortata poate fi generata
via constructia <xsl:perform-sort>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Aparitia de functii noi e.g., formatarea datei
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
Pot fi create noduri de tip spatiu de nume
prin constructia <xsl:namespace>
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: noutati
si multe altele
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: procesoare
Aplicatia de referinta:
Saxon (Java, C#)
http://saxon.sourceforge.net/
avansat
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
xslt 2.0: demo
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
rezumat
Transformari XSL:
de la la XPath 2.0 la XSLT 2.0
D
r
.
S
a
b
i
n
B
u
r
a
g
a
w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o
?