You are on page 1of 93

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

Tehnologii Web
Un model de date pentru <Web />
partea II: transformari XML






detalii in [TX, 52-87]
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

Lemn bun, lemn rau, aceeasi cenusa.
Dar nu aceeasi flacara!


Nicolae Iorga
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

Cum modelam (reprezentam) datele?
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

xml-infoset
Scop:
specificarea unui model de date (abstract)
pentru XML



recomandare W3C, 2004

www.w3.org/TR/xml-infoset
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

xml-infoset
Se ofera un punct de vedere comun referitor la:

serializarea datelor semi-structurate



reprezentare interna (in memorie) fisier text 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

xml-infoset
Se ofera un punct de vedere comun referitor la:

construirea/folosirea de API-uri de procesare XML



intr-o maniera standardizata
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

xml-infoset
Se ofera un punct de vedere comun referitor la:

definirea unor specificatii de nivel (mai) inalt,
precum XPath, XSLT sau XML Schema


care impartasesc acelasi model abstract 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

xml-infoset
Modelul asigura inter-operabilitatea diferitelor
tehnologii, interfete de programare (API-uri)
si aplicatii 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

xml-infoset: concepte
Document (document information item)

considerat a fi un arbore, cu radacina data
de proprietatea [document element]
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

xml-infoset: concepte
Document (document information item)

are proprietatea [children] desemnand
lista de lucruri (items) din document,
in ordinea data de algoritmul DFS
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

xml-infoset: concepte
Element
specifica un element XML


poseda o proprietate [parent] oferind informatii
despre elementul parinte caruia ii apartine


are asociata proprietatea [children] cu semantica de mai sus
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

xml-infoset: concepte
Element

proprietatea [local name] desemneaza numele local
al elementului al carui scop este dat de
[namespace name] ce indica URI-ul spatiului de nume
folosit vid daca nu se specifica spatii de nume

prefixul spatiului de nume utilizat este stocat
de proprietatea [prefix]
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

xml-infoset: concepte
Element

proprietatea [attributes] ofera lista neordonata
a atributelor atasate

proprietatea [namespace attributes] specifica
lista neordonata a atributelor xmlns asociate
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

xml-infoset: concepte
Atribut (attribute)
desemneaza conceptul de atribut XML





numele si spatiul de nume atasat sunt specificate
de proprietatile [local name] si [namespace name], respectiv
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

xml-infoset: concepte
Atribut (attribute)

elementul caruia ii apartine este indicat
de proprietatea [owner element]

valoarea propriu-zisa a atributului
este specificata de [normalized value]
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

xml-infoset: concepte
Caractere (characters)
corespund informatiilor textuale
ale continuturilor elementelor XML


proprietatea [parent] indica elementul caruia ii apartin


proprietatea [children] contine datele-caracter propriu-zise
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

xml-infoset: concepte
Caractere (characters)

setul de caractere utilizat este desemnat
de proprietatea [character code]


modul de procesare a spatiilor albe este specificat
de proprietatea booleana [element content whitespace]
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

Document
Element
Characters
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

xml-infoset: concepte
Instructiuni de procesare
(processing instruction information item)

Comentarii
(comment information item)

Declaratia tipului de document
(document type declaration item)

vezi cursurile
viitoare
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

xml-infoset: exemplu
Constructiei

<antologie xmlns=
"http://www.infoiasi.ro/antologii"
coordonator="Sabin Buraga" />

ii corespunde infoset-ul:
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

transformari XML
punerea problemei, limbajele XPath si XSLT,
procesoare & aplicatii, exemplificari
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

preliminarii
Un document XML asigura separarea continutului
i.e. modelul datelor
de maniera de formatare (prezentare)
si/sau de procesare
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

preliminarii
Pentru a prezenta utilizatorului datele XML,
trebuie specificata o modalitate de redare



asa-numita foaie de stiluri stylesheet
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

preliminarii solutie
CSS (Cascading Style Sheets)

sintaxa non-XML
flexibilitate limitata
nu pot fi efectuate procesari in functie de context
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

utilizarea a doua foi de stiluri CSS
pentru a oferi prezentari alternative ale acelorasi date 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

preliminarii solutie
XSL (Extensible Stylesheet Language)

sintaxa XML
o mai buna flexibilitate
procesare in functie de context
se pot opera modificari de structura 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

preliminarii strategie
1 foaie de stiluri, N documente

se mentine consistenta formatului (look & feel)
pentru documente multiple


facil de dezvoltat, aplicat si controlat in house style
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

preliminarii strategie
N foi de stiluri, 1 document

formatari diferite in functie de mediile de redare
(ecran(e), imprimanta,...) sau de preferinte e.g., skin-uri


usor de produs documente derivate (interogari slabe):
selectii, sortari, sumarizari, indexari, catalogari,...
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

xsl: scopuri
Transformarea structurii si/sau continutului
documentelor XML

rescrierea documentelor XML

documente XML/HTML sau alte formate
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

xsl
Foloseste XPath si XSLT

XSL limbaj descriptiv bazat pe reguli,
orientat-eveniment


detalii: www.w3.org/Style/
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

xsl
XSL-FO
atasarea de proprietati de formatare vizuala
a continutului documentelor XML

creare de constructii/macro-uri de formatare

suport pentru internationalizare

publicare independenta de medii

detalii in
supliment
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

xsl
Transformarea continutului 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

xsl
Document XML arbore de noduri


tipuri de noduri:
Radacina, Elemente, Text, Atribute,
Spatii de nume, Instructiuni de procesare, Comentarii
vezi si
XML Infoset
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

xsl
Reguli compuse din pattern (model) + actiune

modelul este exprimat in XPath

actiunea se specifica via XSLT
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

xsl
Transformarile se aplica recursiv
tuturor nodurilor XML
care satisfac sabloanele de reguli
(pattern-matching)
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

xsl: xpath
XPath 1.0

recomandare a Consortiului Web (1999)

www.w3.org/TR/xpath
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

xsl: xpath
XPath 1.0

adreseaza parti dintr-un document XML

ofera facilitati de baza pentru manipularea datelor
(siruri, numere,)

opereaza la nivelul structurii abstracte
a documentelor XML (arborele)
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

xsl: xpath
expresia XPath constructie de baza


evaluarea se realizeaza in functie de context:
un nod al documentului XML
pozitie
o functie de biblioteca
o declaratie a unui spatiu de nume
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

xsl: xpath
expresia XPath constructie de baza


in urma evaluarii expresiei, e returnat un obiect:
o multime de noduri (node-set)
o valoare logica true/false
un numar (float)
un sir de caractere
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

xsl: xpath operatori
Descendent /
/html/body/article
/cuprins/capitol/autor
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

xsl: xpath operatori
Traversare recursiva //

//capitol
//cuprins
//div/a
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

xsl: xpath operatori
Traversare recursiva //

//capitol
//cuprins
//div/a
Atentie la problemele de performanta!
De ce?
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

xsl: xpath operatori
Wildcard *

/cuprins/*/nume
capitol/*

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

xsl: xpath operatori
evaluarea de expresii XPath
via extensia FirePath pentru Firefox
/html/body/*/section
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

xsl: xpath operatori
Nodul curent .

./capitol
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

xsl: xpath operatori
Atribut @

capitol/@nr
table/@*
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

xsl: xpath operatori
Spatiu de nume :

xsl:*
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

xsl: xpath operatori
Spatiu de nume :
//html:*
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

xsl: xpath operatori
Filtru/index [ ]

/cuprins/capitol[2]
//li[@class = "presentation"]



forma generala: [expresie]
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

xsl: xpath operatori
Filtru/index [ ]
7 noduri (de tip Element) care satisfac expresia //ul[1]
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

xsl: xpath operatori
Pentru booleeni si numere pot fi folositi
operatorii uzuali:
or and = != <= < >= >
+ - * div mod



comparatiile de siruri sunt case sensitive
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

xsl: xpath operatori
6 noduri <li> (de tip Element) care au ca valoare
a atributului class sirul de caractere "presentation"
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

xsl: xpath operatori
furnizati semnificatia expresiei XPath:
//*[@class="tools" or @class="presentation"]
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

xsl: xpath axe
Nodul curent (context node) self
Nodul parinte parent
Nodurile copil child
Nodurile descendente descendent
Nodurile de tip atribut attribute
Nodurile spatiilor de nume namespace

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

xsl: xpath axe
Nodurile ascendente ancestor

Nodurile ascendente
ori nodul curent ancestor-or-self

Nodurile descendente
ori nodul curent descendent-or-self

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

xsl: xpath sintaxa prescurtata
self .
parent ..
attribute @
namespace :

../nume
//child::*[@nr > 2]
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

//div/descendant::a
//div/descendant::*
Ce returneaza fiecare expresie XPath?
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

xsl: xpath functii
Noduri: id(), position(), count(), name(),
namespace-uri(), last(),
Tipuri de noduri: node(), text(), comment(),
processing-instruction()
Siruri: concat(), starts-with(), contains(), substring(),
string-length(), translate(),
Booleeni: not(), true(), false()
Numere: sum(), round(), floor(), number(),
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

xsl: xpath functii
count(//li[@class = "presentation"])

numararea nodurilor ce satisfac o anumita conditie
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

xsl: xpath functii
count(//a[@href]) = count(//a)true
toate elementele <a> includ atributul href
count(//li[@class]) = count(//li)false
exista elemente <li> care nu au specificat atributul class
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

xsl: xpath functii
furnizati semnificatia expresiei XPath:
//nav/*/li[position() mod 2 = 1]
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

xsl: xpath functii
gasirea sub-nodurilor elementelor <li> aflate pe ultima
pozitie din primele liste neordonate: //ul[1]/li[last()]/*
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

xsl: xpath operatori
precizati semnificatia expresiei XPath:
//section[@id and not(contains(@id, "week"))]
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

xsl: xpath operatori
//*[contains(text(), "XML")]
furnizarea tuturor nodurilor care contin sirul "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

xsl: xpath operatori
precizati semnificatia expresiei XPath:
//li[@class="presentation"]/*/a[@href]
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

xsl: xpath operatori
furnizati semnificatia expresiei XPath care-i diferenta?
//li[@class="presentation"]/*/a[@href]/text()
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

xsl: xpath
Exemple de instrumente (API-uri) de procesare:

REXML (Ruby) modul XML cu suport si pentru XPath

XML::XPath modul Perl

XPath API diverse interfete de programare oferite de
Apache Xalan si Saxon pentru Java
vezi si javax.xml.xpath.XPath din cadrul JAXP

XPathAPI clasa ActionScript: mx.xpath.XPathAPI
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

xsl: xpath
Instrumente XPath exemplificari:

FirePath, Firefinder extensii Firebug pentru formularea
de interogari XPath asupra documentelor Web

EXPath initiativa de utilizare/creare de extensii
pentru XPath: http://expath.org/
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

xsl: xslt
XSLT (XSL Transformations) 1.0

recomandare a Consortiului Web (1999)

www.w3.org/TR/xslt
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

xsl: xslt
XSLT (XSL Transformations) 1.0

transforma documentele XML
in alte tipuri de continut: XML, HTML, text etc.
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

xsl: xslt
Pentru a putea fi folosite, constructiile XSLT
trebuie sa apartina spatiului de nume
desemnat de URI-ul:
http://www.w3.org/1999/XSL/Transform
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

xsl: xslt
O foaie de stiluri XSLT are drept element radacina
<xsl:stylesheet> sau <xsl:transform>

include sabloane de transformare

macar un sablon la nivelul radacina
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

xsl: xslt
Pentru transformare,
se recurge la expresii XPath folosite la:

selectarea nodurilor dorite a fi procesate

specificarea conditiilor de procesare

generarea textului de iesire
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

xsl: xslt model de procesare
O lista de noduri sursa este procesata
pentru a genera un fragment de arbore
de noduri destinatie (output)
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

xsl: xslt model de procesare
O lista de noduri sursa este procesata
pentru a genera un fragment de arbore
de noduri destinatie (output)

initial, se proceseaza nodul radacina, la care se insereaza
noduri copil generate de sabloane aplicate unei liste
de noduri selectate (recursiv) prin pattern-matching
via expresii XPath
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

xsl: xslt model de procesare
Reguli de aplicare XSLT

regulile sabloanelor identifica noduri
asupra carora se vor aplica transformari

selectarea nodurilor se realizeaza via XPath
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

xsl: xslt model de procesare
Reguli de aplicare XSLT

un sablon se defineste prin elementul <xsl:template>

aplicarea unui sablon
se realizeaza via <xsl:apply-templates />
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

xsl: xslt model de procesare
Crearea arborelui de iesire

intr-un sablon, orice elemente ce nu apartin spatiului
de nume XSLT sunt copiate
fara a fi operate modificari
in arborele de iesire
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

xsl: xslt model de procesare
Crearea arborelui de iesire

pot fi generate si alte tipuri de noduri:
<xsl:element>, <xsl:attribute>, <xsl:text>, <xsl:comment> etc.

extragerea unor valori se face via <xsl:value-of />

controlul iesirii e stabilit prin <xsl:output />
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

xsl: xslt model de procesare
Transformarea unui doc. XML, folosind un procesor XSLT
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

xsl: xslt model de procesare
Programe XSLT

constructii repetitive: <xsl:for-each>

constructii de test:
<xsl:if> <xsl:choose> <xsl:when> <xsl:otherwise>
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

xsl: xslt model de procesare
Programe XSLT

copierea nodurilor: <xsl:copy />, <xsl:copy-of />

sortarea nodurilor: <xsl:sort />

includerea de alte foi de stiluri: <xsl:include />

variabile si parametri: <xsl:variable />, <xsl:param />
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

xsl: xslt model de procesare
Remarci:

variabilele declarate cu <xsl:variable>
au valori imutabile (valoarea asociata nu se schimba
din moment ce a fost evaluata)



<xsl:variable name="scor" select="21 + 12" />
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

xsl: xslt model de procesare
Remarci:

parametrii declarati prin <xsl:param /> isi pot
modifica ulterior valoarea

apelarea (invocarea) unui sablon se poate realiza cu
pasarea de valori ale parametrilor via <xsl:with-param />
a se studia
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

xsl: xslt functii
Furnizeaza nodul curent: current ()

Adreseaza alt document XML: document ()

Verifica existenta unei functii: function-available ()

Formateaza valori numerice: format-number ()

Ofera informatii
despre procesorul XSLT: system-property ()
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

prezentari diferite ale acelorasi date XML via transformari XSLT

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

xsl: xslt procesoare (api-uri)
Apache Cocoon & Xalan (Xerces)
pentru C, C++, Perl, Java: http://xml.apache.org/

libxslt (C/C++): http://xmlsoft.org/XSLT/

Sablotron (C): http://www.gingerall.org/
portat pentru PHP, Perl (modulul XML::Sablotron) etc.

Saxon (Java, .NET): http://saxon.sourceforge.net/
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

xsl: xslt procesoare (api-uri)
MSXML invocare prin COM (ActiveX)
.NET Framework + managed languages:
XslCompiledTransform din spatiul de nume System.Xml

TrAX (parte din JAXP): http://java.sun.com/

XML::XSLT (modul Perl): http://www.cpan.org/
suport in cadrul actualelor navigatoare (clienti) Web
via JavaScript
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

xsl: xslt aplicatii (exemple)
Adobe Help Center sistem de ajutor

Apache Forrest framework de publicare pentru Web:
http://projects.apache.org/projects/forrest.html

Microsoft InfoPath editor/procesor de formulare

Open Office suita de birou

TransforMiiX modul XSLT inclus in Firefox:
https://www.mozilla.org/projects/xslt/

XSLT Debugger depanator XSLT (in KDE)
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

xsl: xslt aplicatii (exemple)
<oXygen /> depanarea interactiva a transformarilor XSLT
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

xsl: 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
de la XML Infoset la transformari XSLT
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

?

You might also like