Sunteți pe pagina 1din 93

Un model de date pentru <Web />

partea II: transformari XML

detalii in [TX, 52-87]

Dr. Sabin Buragawww.purl.org/net/busaco

Tehnologii Web

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

Nicolae Iorga

Dr. Sabin Buragawww.purl.org/net/busaco

Dr. Sabin Buragawww.purl.org/net/busaco

Cum modelam (reprezentam) datele?

xml-infoset
Scop: specificarea unui model de date (abstract) pentru XML
Dr. Sabin Buragawww.purl.org/net/busaco

recomandare W3C, 2004 www.w3.org/TR/xml-infoset

xml-infoset
Dr. Sabin Buragawww.purl.org/net/busaco

Se ofera un punct de vedere comun referitor la:


serializarea datelor semi-structurate

reprezentare interna (in memorie) fisier text XML

xml-infoset
Dr. Sabin Buragawww.purl.org/net/busaco

Se ofera un punct de vedere comun referitor la:


construirea/folosirea de API-uri de procesare XML

intr-o maniera standardizata

xml-infoset
Dr. Sabin Buragawww.purl.org/net/busaco

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

xml-infoset
Dr. Sabin Buragawww.purl.org/net/busaco

Modelul asigura inter-operabilitatea diferitelor tehnologii, interfete de programare (API-uri) si aplicatii XML

xml-infoset: concepte
Dr. Sabin Buragawww.purl.org/net/busaco

Document (document information item)


considerat a fi un arbore, cu radacina data de proprietatea [document element]

xml-infoset: concepte
Dr. Sabin Buragawww.purl.org/net/busaco

Document (document information item)


are proprietatea [children] desemnand lista de lucruri (items) din document, in ordinea data de algoritmul DFS

xml-infoset: concepte
Element specifica un element XML
poseda o proprietate [parent] oferind informatii despre elementul parinte caruia ii apartine
Dr. Sabin Buragawww.purl.org/net/busaco

are asociata proprietatea [children] cu semantica de mai sus

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]
Dr. Sabin Buragawww.purl.org/net/busaco

xml-infoset: concepte
Element
proprietatea [attributes] ofera lista neordonata a atributelor atasate proprietatea [namespace attributes] specifica lista neordonata a atributelor xmlns asociate
Dr. Sabin Buragawww.purl.org/net/busaco

xml-infoset: concepte
Atribut (attribute) desemneaza conceptul de atribut XML
Dr. Sabin Buragawww.purl.org/net/busaco

numele si spatiul de nume atasat sunt specificate de proprietatile [local name] si [namespace name], respectiv

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]
Dr. Sabin Buragawww.purl.org/net/busaco

xml-infoset: concepte
Caractere (characters) corespund informatiilor textuale ale continuturilor elementelor XML
proprietatea [parent] indica elementul caruia ii apartin
Dr. Sabin Buragawww.purl.org/net/busaco

proprietatea [children] contine datele-caracter propriu-zise

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]
Dr. Sabin Buragawww.purl.org/net/busaco

Document

Element

Dr. Sabin Buragawww.purl.org/net/busaco

Characters

xml-infoset: concepte
Instructiuni de procesare
(processing instruction information item)
Dr. Sabin Buragawww.purl.org/net/busaco

Comentarii
(comment information item)

Declaratia tipului de document


(document type declaration item)
vezi cursurile viitoare

xml-infoset: exemplu
Constructiei <antologie xmlns= "http://www.infoiasi.ro/antologii" coordonator="Sabin Buraga" /> ii corespunde infoset-ul:
Dr. Sabin Buragawww.purl.org/net/busaco

transformari XML
Dr. Sabin Buragawww.purl.org/net/busaco

punerea problemei, limbajele XPath si XSLT, procesoare & aplicatii, exemplificari

preliminarii
Un document XML asigura separarea continutului i.e. modelul datelor de maniera de formatare (prezentare) si/sau de procesare
Dr. Sabin Buragawww.purl.org/net/busaco

preliminarii
Dr. Sabin Buragawww.purl.org/net/busaco

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

asa-numita foaie de stiluri stylesheet

preliminarii solutie
CSS (Cascading Style Sheets)
sintaxa non-XML flexibilitate limitata nu pot fi efectuate procesari in functie de context
Dr. Sabin Buragawww.purl.org/net/busaco

utilizarea a doua foi de stiluri CSS pentru a oferi prezentari alternative ale acelorasi date XML

Dr. Sabin Buragawww.purl.org/net/busaco

preliminarii solutie
XSL (Extensible Stylesheet Language)
sintaxa XML o mai buna flexibilitate procesare in functie de context se pot opera modificari de structura XML ...
Dr. Sabin Buragawww.purl.org/net/busaco

preliminarii strategie
Dr. Sabin Buragawww.purl.org/net/busaco

1 foaie de stiluri, N documente


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

facil de dezvoltat, aplicat si controlat in house style

preliminarii strategie
Dr. Sabin Buragawww.purl.org/net/busaco

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,...

xsl: scopuri
Transformarea structurii si/sau continutului documentelor XML rescrierea documentelor XML
documente XML/HTML sau alte formate
Dr. Sabin Buragawww.purl.org/net/busaco

xsl
Dr. Sabin Buragawww.purl.org/net/busaco

Foloseste XPath si XSLT

XSL limbaj descriptiv bazat pe reguli, orientat-eveniment


detalii: www.w3.org/Style/

xsl
XSL-FO
atasarea de proprietati de formatare vizuala a continutului documentelor XML
Dr. Sabin Buragawww.purl.org/net/busaco

creare de constructii/macro-uri de formatare suport pentru internationalizare publicare independenta de medii


detalii in supliment

xsl

Dr. Sabin Buragawww.purl.org/net/busaco

Transformarea continutului XML

xsl
Document XML arbore de noduri
tipuri de noduri: Radacina, Elemente, Text, Atribute, Spatii de nume, Instructiuni de procesare, Comentarii
vezi si XML Infoset
Dr. Sabin Buragawww.purl.org/net/busaco

xsl
Dr. Sabin Buragawww.purl.org/net/busaco

Reguli compuse din pattern (model) + actiune


modelul este exprimat in XPath

actiunea se specifica via XSLT

xsl
Dr. Sabin Buragawww.purl.org/net/busaco

Transformarile se aplica recursiv tuturor nodurilor XML care satisfac sabloanele de reguli (pattern-matching)

xsl: xpath
XPath 1.0
recomandare a Consortiului Web (1999)
Dr. Sabin Buragawww.purl.org/net/busaco

www.w3.org/TR/xpath

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)
Dr. Sabin Buragawww.purl.org/net/busaco

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
Dr. Sabin Buragawww.purl.org/net/busaco

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
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath operatori


Descendent /
/html/body/article /cuprins/capitol/autor
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Traversare recursiva //
//capitol //cuprins //div/a

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Traversare recursiva //
//capitol //cuprins //div/a
Atentie la problemele de performanta!
De ce?

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Wildcard *
/cuprins/*/nume capitol/*

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

/html/body/*/section

evaluarea de expresii XPath via extensia FirePath pentru Firefox

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Nodul curent .
./capitol

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Atribut @
capitol/@nr table/@*

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

Spatiu de nume :
xsl:*

xsl: xpath operatori


Spatiu de nume :
//html:*
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath operatori


Filtru/index [ ]
/cuprins/capitol[2] //li[@class = "presentation"]
Dr. Sabin Buragawww.purl.org/net/busaco

forma generala: [expresie]

xsl: xpath operatori


Filtru/index [ ]
Dr. Sabin Buragawww.purl.org/net/busaco

7 noduri (de tip Element) care satisfac expresia //ul[1]

xsl: xpath operatori


Pentru booleeni si numere pot fi folositi operatorii uzuali:
or and = != <= < >= > + - * div mod
Dr. Sabin Buragawww.purl.org/net/busaco

comparatiile de siruri sunt case sensitive

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

6 noduri <li> (de tip Element) care au ca valoare a atributului class sirul de caractere "presentation"

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

furnizati semnificatia expresiei XPath: //*[@class="tools" or @class="presentation"]

xsl: xpath axe


Nodul curent (context node) Nodul parinte Nodurile copil Nodurile descendente Nodurile de tip atribut Nodurile spatiilor de nume self parent child descendent attribute namespace
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath axe


Nodurile ascendente
Nodurile ascendente ori nodul curent

ancestor

ancestor-or-self

Nodurile descendente ori nodul curent

descendent-or-self

Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath sintaxa prescurtata


self parent attribute namespace
../nume //child::*[@nr > 2]

. .. @ :

Dr. Sabin Buragawww.purl.org/net/busaco

//div/descendant::a //div/descendant::* Ce returneaza fiecare expresie XPath?

Dr. Sabin Buragawww.purl.org/net/busaco

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(),
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xpath functii


Dr. Sabin Buragawww.purl.org/net/busaco

count(//li[@class = "presentation"])

numararea nodurilor ce satisfac o anumita conditie

xsl: xpath functii


Dr. Sabin Buragawww.purl.org/net/busaco

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

xsl: xpath functii


Dr. Sabin Buragawww.purl.org/net/busaco

furnizati semnificatia expresiei XPath: //nav/*/li[position() mod 2 = 1]

xsl: xpath functii


Dr. Sabin Buragawww.purl.org/net/busaco

gasirea sub-nodurilor elementelor <li> aflate pe ultima pozitie din primele liste neordonate: //ul[1]/li[last()]/*

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

precizati semnificatia expresiei XPath: //section[@id and not(contains(@id, "week"))]

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

//*[contains(text(), "XML")] furnizarea tuturor nodurilor care contin sirul "XML"

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

precizati semnificatia expresiei XPath: //li[@class="presentation"]/*/a[@href]

xsl: xpath operatori


Dr. Sabin Buragawww.purl.org/net/busaco

furnizati semnificatia expresiei XPath care-i diferenta? //li[@class="presentation"]/*/a[@href]/text()

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
Dr. Sabin Buragawww.purl.org/net/busaco

XPathAPI clasa ActionScript: mx.xpath.XPathAPI

xsl: xpath
Instrumente XPath exemplificari:
Dr. Sabin Buragawww.purl.org/net/busaco

FirePath, Firefinder extensii Firebug pentru formularea de interogari XPath asupra documentelor Web EXPath initiativa de utilizare/creare de extensii pentru XPath: http://expath.org/

xsl: xslt
XSLT (XSL Transformations) 1.0
recomandare a Consortiului Web (1999)
www.w3.org/TR/xslt
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt
XSLT (XSL Transformations) 1.0
transforma documentele XML in alte tipuri de continut: XML, HTML, text etc.
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt
Dr. Sabin Buragawww.purl.org/net/busaco

Pentru a putea fi folosite, constructiile XSLT trebuie sa apartina spatiului de nume desemnat de URI-ul: http://www.w3.org/1999/XSL/Transform

xsl: xslt
Dr. Sabin Buragawww.purl.org/net/busaco

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

macar un sablon la nivelul radacina

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
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt model de procesare


O lista de noduri sursa este procesata pentru a genera un fragment de arbore de noduri destinatie (output)
Dr. Sabin Buragawww.purl.org/net/busaco

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
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt model de procesare


Dr. Sabin Buragawww.purl.org/net/busaco

Reguli de aplicare XSLT


regulile sabloanelor identifica noduri asupra carora se vor aplica transformari

selectarea nodurilor se realizeaza via XPath

xsl: xslt model de procesare


Dr. Sabin Buragawww.purl.org/net/busaco

Reguli de aplicare XSLT


un sablon se defineste prin elementul <xsl:template> aplicarea unui sablon se realizeaza via <xsl:apply-templates />

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
Dr. Sabin Buragawww.purl.org/net/busaco

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 />
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt model de procesare


Transformarea unui doc. XML, folosind un procesor XSLT
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt model de procesare


Programe XSLT
constructii repetitive: <xsl:for-each> constructii de test: <xsl:if> <xsl:choose> <xsl:when> <xsl:otherwise>
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt model de procesare


Programe XSLT
copierea nodurilor: <xsl:copy />, <xsl:copy-of /> sortarea nodurilor: <xsl:sort />
Dr. Sabin Buragawww.purl.org/net/busaco

includerea de alte foi de stiluri: <xsl:include /> variabile si parametri: <xsl:variable />, <xsl:param />

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)
Dr. Sabin Buragawww.purl.org/net/busaco

<xsl:variable name="scor" select="21 + 12" />

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
Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt functii


Furnizeaza nodul curent:
Adreseaza alt document XML: Verifica existenta unei functii:

current ()
document () function-available ()

Formateaza valori numerice: Ofera informatii despre procesorul XSLT:

format-number ()
system-property ()

Dr. Sabin Buragawww.purl.org/net/busaco

prezentari diferite ale acelorasi date XML via transformari XSLT

Dr. Sabin Buragawww.purl.org/net/busaco

xsl: xslt procesoare (api-uri)


Apache Cocoon & Xalan (Xerces)
pentru C, C++, Perl, Java: http://xml.apache.org/
Dr. Sabin Buragawww.purl.org/net/busaco

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/

xsl: xslt procesoare (api-uri)


MSXML invocare prin COM (ActiveX) .NET Framework + managed languages:
XslCompiledTransform din spatiul de nume System.Xml
Dr. Sabin Buragawww.purl.org/net/busaco

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

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/
Dr. Sabin Buragawww.purl.org/net/busaco

XSLT Debugger depanator XSLT (in KDE)

xsl: xslt aplicatii (exemple)


Dr. Sabin Buragawww.purl.org/net/busaco

<oXygen /> depanarea interactiva a transformarilor XSLT

Dr. Sabin Buragawww.purl.org/net/busaco

xsl: demo

de la XML Infoset la transformari XSLT

Dr. Sabin Buragawww.purl.org/net/busaco

rezumat

Dr. Sabin Buragawww.purl.org/net/busaco

S-ar putea să vă placă și