Sunteți pe pagina 1din 45

CURS 2

11 octombrie 2010
1.Principalele componente ale unui fiier XML
1.1 Prolog
1.2 Elemente
1.3 Atribute
1.4 Referine la entiti
1.5 Comentarii
1.6 Instruciuni de procesare
1.7 Seciuni CDATA
1.8 Declaraii de structur (DTD, XML-Schema)
1.9 Spaii de nume

1.1 Prolog
Prolog apare n partea de nceput a documentului i conine:
- declaraiile XML
- comentarii
- instruciuni de procesare
- spaii de nume
- declararea DOCTYPE(DTD)
Exemplu:
<!- -air.xml- ->
<?xml version=1.0 encoding=UTF-8 standalone=no?>
<!DOCTYPE firma SYSTEM Air.dtd*
<!ENTITY%A INCLUDE>
<!ENTITY%B IGNORE>
]>
Encoding se refer la tipul de caractere folosit.
Standalone poate lua valoarea yes sau no. Dac valoarea este yes documentul nu depinde de alte
documente externe(DTD externe).
DTD (Document Type Definition ) se folosete la validarea unui document XML.

1.2 Elemente
Elementele sunt cele mai folosite n XML. Numele lor are rolul de a arta natura coninutului i
se afla ntre marcajul de nceput i cel de sfrit.
Exemplu:
<nume_firma> Air Corporation </nume_firma>

1.2.1 Reguli privitoare la numele elementelor


Numele elementelor nu pot conine spaii.
Numele elementelor nu pot ncepe cu cuvntul xml sau cu o cifr sau cu _.
Este recomandat ca numele elementelor sa fie formate din cifre, litere i _.
Nu trebuie ca numele elementelor sa conin caractere speciale sau : ,= ,< ,, , , etc.
n documentele xml trebuie sa existe tag de nchidere si deschidere, iar elementele xml trebuie sa fie
corect imbricate.
Exemplu:
<p><b> Paragraf </b></p>
Documentele xml trebuie s conin un singur element rdcin.
Un fiier xml poate conine numai elemente. Acestea pot fi vide.
Exemplu:
1. Element vid : <discount/> echivalent cu : <discount>.</discount>
2.

.
<?xml version=1.0?>
<agenda>
<contact>
<nume> Ion </nume>
<prenume>Cristian</prenume>
<telefon> 333 333 333</telefon>
</contact>
<contact>
<nume> Alin</nume>
<prenume>Popescu</prenume>
<telefon> 333 333 333</telefon>
</contact>
</agenda>

1.3 Atribute
Atributele reprezint valori care apar n documentele xml imediat dup tagul de nceput.
Acestea contureaz anumite perechi ale elementului.
Exemplu:
1. <an_fabricatie AN=2006/>
2. <marca M=Shark Cod=00932 Seria=12311/>

Observatie!
Valorile atributelor trebuie plasate ntre ghilimele. Acestea pot conine orice text, chiar i < sau
>. Atributele vide constituie erori de sintax.
Exemplu:
Urmatoarele trei exemple sunt echivalente:
1.

< observatie data=19/10/2009>


<catre> Alina </catre>
<dela> Adriana </dela>
<subiect> Curs XML </subiect>
<text> Introducere </text>
</observatie>

2.

<observatie>
<data> 19/10/2009 </data>
<catre> Alina </catre>
<dela> Adriana </dela>
<subiect> Curs XML </subiect>
<text> Introducere </text>
</observatie>
<observatie>
<data>
<zi> 19 </zi>
<luna> 10 </luna>
<an> 2009 </an>
</data>
<catre> Alina </catre>
<dela> Adriana </dela>
<subiect> Curs XML </subiect>
<text> Introducere </text>
</observatie>

3.

Observatie!
n XML este de preferat s folosim elementele n locul atributelor, pentru ca cele din urm nu pot
conine mai multe valori, nu au structur arborescent i nu se pot extinde uor.

1.4 Referine la entiti


Entitile sunt caractere speciale ce nu pot fi folosite n XML. Pentru a putea fi introduse aceste
caractere n XML se folosesc referinele la entiti.
Entitile au nume unice.
Forma generala: &nume;
Numele entitaii
lt
gt
amp
quot

Referina la entitate
&lt
&gt
&amp
&quot

Caractere
<
>
&

apos

&apos

Exemplu:
1. <service> &lt; DA &gt; </service>
2. <TITLE> Tom &amp; Jerry </TITLE>

1.5 Comentarii
Comentariile pot fi oriunde n fiierul XML i pot conine orice caracter, mai putin - -.
Exemplu:
1. <!- --->
2. <!--air.xml-->

1.6 Instruciuni de procesare


Instruciunile de procesare sunt un tip special de marcaje ce contin informaii despre anumite
aplicaii ce urmeaz a fi executate. n realitate aceste instruciuni de procesare nu fac parte din
componentele XML ele fiind pasate unei alte aplicaii ce le nelege i le folosete.
Forma generala: <?
?>
Exemplu:
1. <?xml-stylesheet type=text/xsl href =air.xsl?>
2. <?JAVA_OBJECT JAR_FILE=/Java/jar?>

1.7 Seciuni CDATA


Seciunile CDATA sunt utilizate pentru a include blocuri de text, coninnd caractere,
care altfel ar fi cunoscute ca marcaje. n general aceste seciuni se folosesc atunci cnd dorim ca
anumite date din fiierul XML s nu fie interpretate de parser, sa fie considerate caractere.
Forma generala: <! [CDATA[text]]>
Exemplu:
Un fragment de fiier XML care conine informaii despre cum se poate crea un tabel in HTML.
<?xml version=1.0 encoding=UTF-8?>
<exemplu>
<![CDATA[
<table align=center>
<tr>
<td> Coloana 1 </td>
<td> Coloana 2</td>
</tr>
</table> ]]>
</exemplu>

CURS 3
18 octombrie 2010

1.8 Declaraii de structur (DTD, XML-Schema)


Formatare i validare fiiere XML
Regulile de formatare ale documentelor XML ,adiionale regulilor de sintax XML sunt descrise
i aplicate printr-un proces numit validare XML. Validarea folosete un document. Acesta descrie
structura i formatul datelor care sunt coninute n documentele XML.
Documentele de validare sunt produse n acelai moment i de aceeai surs ca i fiierul XML.
Tipuri de validri:
1.8.1 DTD (Document Type Definition)
1.8.2 XML Schema
Un fiier XML nu e obligat s conin o declaraie de structur. Opional un document XML
poate conine i astfel de declaraii, prin intermediul crora se furnizeaz procesoarelor XML informaii
utile pentru validarea documentelor.

O astfel de declaraie de structur poate conine:


- numele elementului rdcin;
- referine la un fiier DTD extern;
- DTD intern;
1.8.3 Documente XML bine formate
E important ca un document XML sa fie bine format, altfel nu e considerat document XML n
conformitate cu specificaiile consoriului W3C i nu va putea fi procesat sau validat.
Reguli de baz ca un fiier XML s fie well-formed:

1. Documentul trebuie s nceap cu o declaraie XML : <?xml version=1.0?>


2. Fiierul XML sa aib un unic element rdcin.

3.
4.
5.
6.
7.

Tag-urile sunt case-sensitive.


Toate tag-urile de start trebuie s corespund tag-urilor de sfrit.
Toate elementele trebuie nchise.
Valorile atributelor trebuie s fie plasate ntre ghilimele.
Caracterele speciale vor fi reprezentate prin entiti.

Trebuie s existe unele constrngeri (reguli) asupra structurii unui document XML. Aceste
constrngeri dau claritate documentelor XML fcndu-le uor de neles, de modificat i de manipulat de
mai multe aplicaii. Aceast posibilitate exist i se materializeaz n definiia de structur a
documentelor XML, numite DTD-uri.

Tipuri de fiiere XML:


- bine-formate (well-formed);
- valide - fiiere bine formate i care respect o declaraie de structur;
- invalide;
1.8.1

DTD-urile pot fi:


1.8.1.1 Interne
1.8.1.2 Externe - Publice
- Private(nepublice)

1.8.1.1 Declararea unui DTD intern


DTD-urile interne sunt definite n interiorul fiierului XML ( se va aplica setul de constrngeri
numai asupra acelui fiier).
Exemplu:
<!DOCTYPE nume_element_radacina[
Definitii DTD
]>
nume_element_radacina=numele elementului rdcin din fiierul XML
Definiiile DTD se plaseaz n corpul DTD-ului pe linii separate.
Parantezele patrate [ ] sunt obligatorii.
Observaie!
Declaraia DTD intern se va gsi mereu ntre declaraia XML i numele elementului rdcin.

1.8.1.2 Declararea unui DTD extern


DTD-urile externe sunt fiiere externe i au extensia .dtd.
Avantajele acestora constau n faptul ca se pot construi mai multe fiiere XML pe baza unui DTD extern
i c putem modifica structura fiierului XML modificnd doar DTD-ul.
DTD-ul extern public este un DTD standardizat, folosit de foarte muli utilizatori.
DTD-ul extern privat este un DTD propriu unor firme.

Declararea unui DTD extern privat

Forma general:

<!DOCTYPE nume_element_radacina SYSTEM uri>

unde URI ( Uniform Resource Identifier) se numete identificator sistem i reprezint locaia la care
poate fi gsit DTD-ul .
Observatie!
<?xml version=1.0 standalone=no?>
n declaraia XML trebuie setat atributul standalone la valoarea no.

Declararea unui DTD extern public

Forma general:

<!DOCTYPE nume_element_radacina PUBLIC id_public uri>

unde id_public este un identificator public formal FPI ( Formal Public Identifier) i e folosit de
procesorul XML pentru a ncrca localizarea ultimei versiuni a DTD-ului pe un server public.
Forma general a unui FPI:
unde prefix

prefix//proprietarul DTD//descriere DTD//identificator limba

.ISO respect standardul ISO


+ respect standardul neISO dar care e recunoscut
- indic faptul c DTD-ul respect un standard neISO, care nu e recunoscut.

Exemplu:
Un DTD public are urmtoarea form:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//
http://www.w3.org/TR/xhtml/DTD/xhtml1_transitional.dtd >

Combinarea de DTD interne i externe asociate unui fiier .xml

Un document XML poate fi validat i de un DTD intern i de unul extern, cu urmatoarele observaii:
Cele dou DTD-uri trebuie s fie compatibile: este strict interzis ca ele sa-i
supradefineasc elementele i atributele.
Definiiile de referine pot fi plasate n DTD-ul extern dar pot fi supradefinite n cel
intern, deoarece acestea vor fi luate n calcul doar n DTD-ul intern.

Exemplu:
Fiier XML cu DTD intern.
<! - -carte.xml- ->
<?xml version=1.0?>
<!DOCTYPE carte[
<!ELEMENT carte (titlu,autor,editura,an_aparitie)>
<!ELEMENT titlu (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT editura (#PCDATA)>
<!ELEMENT an_aparitie (#PCDATA)>
]>
<carte>
<titlu> XML Biblie </titlu>
<autor> Harold </autor>
<editura> IDG Books </editura>
<an_aparitie> 2002 </an_aparitie>
</carte>
Exemplu:
Fiier XML cu DTD extern privat aflat la adresa http://www.aii.pub.ro/carte.dtd .
<! - -carte.xml- ->
<?xml version=1.0?>
<!DOCTYPE carte SYSTEM http://www.aii.pub.ro/carte.dtd>
<carte>
<titlu> XML Biblie </titlu>
<autor> Harold </autor>
<editura> IDG Books </editura>
<an_aparitie> 2002 </an_aparitie>
</carte>
<! - -carte.dtd- ->
<?xml version=1.0?>
<!ELEMENT carte (titlu,autor,editura,an_aparitie)>
<!ELEMENT titlu (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT editura (#PCDATA)>
<!ELEMENT an_aparitie (#PCDATA)>

CURS 4
25 octombrie 2010
1.8.1 Definiii DTD
DTD-ul are rolul de a comunica procesorului XML meta-informaii despre structura unui
document XML.
Un DTD poate conine 4 tipuri de definiii de structur:
1. Definiii de elemente
2. Definiii de atribute
3. Definiii de entiti
4. Definiii de notaii

1.Definiiile de elemente
Definiiile de elemente sunt folosite pentru a identifica numele elementelor i natura
coninutului pentru elementele associate fiierului XML.
Forma general: <!ELEMENT nume_continut>
Exemplu:
<!ELEMENT avioane_disponibile(marca, an_fabricatie, pret, discount)>
<!ELEMENT nume_firma(#PCDATA)>
<!ELEMENT cod_identificare(#PCDATA/Nume/Prenume/CNP/Nr_cont)*>
<!ELEMENT discount EMPTY>
1.1 Elemente vide
Forma general: <!ELEMENT nume_element EMPTY>
Exemplu:
<!ELEMENT discount EMPTY>
1.2 Elemente care conin numai text (date caracter)
Forma general: <!ELEMENT nume_element (#PCDATA)> sau <!ELEMENT nume_element (#CDATA)>
1.3 Elemente cu orice coninut
Forma general: <!ELEMENT nume_element ANY>
1.4 Elemente care conin copii
Forma general: <!ELEMENT nume_element (nume_copil1,nume_copil2)>

Indicatori de apariie
Simbol
nimic
*
+
?

Numr de apariii
elementele apar o singur dat
0 sau mai multe ori
1 sau de mai multe ori
0 sau 1 dat

Exemplu:
<!ELEMENT date_identificare (#PCDATA/Nume/Prenume/CNP/Nr_cont)*>
Unde conectorul / reprezint sau.
Elementul acesta poate conine 0 sau mai multe caractere i elemente copil. #PCDATA trebuie s apar
obligatoriu primul. Elementele copil pot fi asociate n funcie de apariia lor i este posibil s li se asocieze
indicatori de apariie.
Exemplu:
<!- -biblioteca.dtd- ->
<?xml version=1.0?>
<!ELEMENT biblioteca (carte*)>
<!ELEMENT carte (titlu,(autor +/editor), editura, an_aparitie,rezumat?)>
<!ELEMENT titlu (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT editor (#PCDATA)>
<!ELEMENT editura (#PCDATA)>
<!ELEMENT an_aparitie (#PCDATA)>
<!ELEMENT rezumat (#PCDATA)>
<!- -biblioteca.xml- ->
<?xml version=1.0?>
<!DOCTYPE biblioteca SYSTEM biblioteca.dtd>
<biblioteca>
<carte>
<titlu> XML Biblia </titlu>
<autor> Rusty </autor>
<editura> IDG Books </editura>
<an_aparitie> 2002 </an_aparitie>
</carte>
</biblioteca>

2.Definiii atribute
Forme generale:
<!ATTLIST nume_element nume_atribut tip_atribut #DEFAULT valoare_default>
<!ATTLIST nume_element nume_atribut tip_atribut #FIXED valoare_fixa>
<!ATTLIST nume_element nume_atribut tip_atribut (val1, val2,) valoare_default>

<!ATTLIST nume_element nume_atribut tip_atribut #IMPLIED>


<!ATTLIST nume_element nume_atribut tip_atribut #REQUIRED>
Tip_atribut poate fi:

CDATA ( date character)

ENTITY (valoarea este o entitate)


ENTITIES (valoarea este o list de entiti)
ID (valoarea este un id unic)
IDREF (valoarea este o referin la un alt id)
IDREFS (valoarea este o list de referine la alte id-uri)
NMTOKEN (valoarea este un nume valid XML)
NMTOKENS (valoarea este o list de nume valide XML)
NOTATION ( valoarea este numele unei notaii, liste de valori)
XML (valoarea este una predefinit n XML)

Valorile implicite pot fi:


- #DEFAULT valoare: dac valoarea nu exist se va prelua valoarea default definit;
- #FIXED valoare: dac n document exist o alt valoare dect cea specificat atunci se
va genera eroare de validare;
- #IMPLIED : atributul poate s nu apar, fiind opional;
- #REQUIRED : dac elementul nu are atributul respectiv se va genera eroare.
Exemplu:
<!ATTLIST persoana sex (masculin/feminin) masculine>
Exemplu:
<!- -air.xml- ->
<?xml version=1.0?>
<avioane_disponibile>
<marca M=Shark Cod=097668 Seria=1200/>
<an_fabricatie AN=2006/>
<pret P=25000 Moneda=$/>
<discount/>
</avioane_disponibile>
<!- -air.dtd- ->
<!ATTLIST marca
M CDATA #REQUIRED
Cod CDATA #IMPLIED
Seria (1200/12002/1111) 1200>
<!ATTLIST an_fabricatie AN CDATA #REQUIRED>
<!ATTLIST pret
P CDATA #REQUIRED
Moneda CDATA #REQUIRED >

3.Definiii entiti

Forma general:

<!ENTITY continut>

3.1 Entiti interne


Entitile interne sunt cele mai simple i cele mai folosite pentru a reprezenta cu uurin
poriuni de text care se repet sau care se modific foarte des.
Forma general:
<!ENTITY nume text>
unde nume reprezint numele cu care va fi referit entitatea iar text reprezint textul ce va fi plasat
acolo unde se ntlnete referina la acea entitate.
Exemplu:
<!ENTITY website http://www.aii.pub.ro >
<!ENTITY copyright 2010 catedra AII >
n xml: <autor> &copyright;&website; </autor>
3.2 Entiti externe
Entitile externe asociaz un nume cu un fiier extern documentului XML
Text
Forme generale:
<!ENTITY nume SYSTEM uri>
<!ENTITY nume PUBLIC id_public uri>
Binare(jpeg,bmp)
Forme generale:
<!ENTITY nume SYSTEM uri NDATA nume_notaii>
<!ENTITY nume PUBLIC id_public uri NDATA nume_notaii >
unde - NDATA indic faptul c avem de-a face cu o entitate neparsabil
- uri (Universal Resource Identifier) identific o resurs aflat la o locaie
- id_public este un identificator public formal ce identific ultima versiune.

3.3 Entiti parametrice


Entitile parametrice pot aprea numai n DTD-uri, fie interne fie externe. Entitaile parametru
au rolul de a permite reutilizarea unei poriuni de cod DTD sau inserarea unui alt DTD n DTD-uri unde
entitatea parametru e definit.
Utilizarea entitilor parametru au scopul de a particulariza DTD-urile externe.
Entitate parametru intern
Entitile parametru interne permit reutilizarea unei poriuni de cod DTD.
Forma general:
<!ENTITY %nume cod DTD>
Entitate parametru extern
Entitile parametru externe permit inserarea unui DTD extern acolo unde sunt definite.
Forme generale:
<!ENTITY %nume SYSTEM uri>
<!ENTITY %nume PUBLIC id_public uri>
unde % reprezint modul n care se face referirea entitilor parametru.
Seciunile condiionale apar numai n DTD-uri externe. Exist 2 tipuri de seciuni condiionale:
A) Folosite pentru a include cod DTD
Forma general:
<![INCLUDE [
Cod DTD
]]>
B) Folosite pentru a exclude sau ignora o poriune de cod DTD
Forma general:
<![INCLUDE [
Cod DTD
]]>

4.Definiii notaii
Notaiile sunt folosite pentru:
- identificarea formatelor fiierelor neparsabile (fiiere XML cum ar fi cele binare: imagini, video);
- identificarea formatelor elementelor care conin atribute de tip notaii (notations);
- identificarea aplicaiilor crora li se adreseaz instruciunile de procesare.
Forme generale:

<!NOTATION nume SYSTEM uri>


<!NOTATION nume PUBLIC id_public >
<!NOTATION nume PUBLIC id_public uri>

CURS 5
1 noiembrie 2010
1.9 Spaii de nume
Exemplu:
1. <?xml version=1.0?>
<student>
<nume> Ion </nume>
<an> 4</an>
</student>
<materia>
<nume> XML</nume>
<an> 4</an>
</materia>
2. <!--air.xml-->
<date_identificare>
<!Date identificare persoana fizica-->
<nume> Nume:</nume>
<prenume>Prenume:</prenume>
<CNP> CNP:</CNP>
<NrCont>Nr cont:</NrCont>
</date_identificare>
<date_identificare>
<!Date identificare pentru o firma-->
<Nume SRL> Nume:</NumeSRL>
<Licenta_nr>Licenta:</Licenta_nr>
<ContSRL> ContSRL:</ContSRL>
</date_identificare>
n exemplul de mai sus apare conflictul de nume al elementelor date_identificare.
Spaiile pentru nume sau domeniile de nume, reprezint un vocabular utilizat pentru a eticheta
elementele n mod unic.
Domeniile pentru nume XML ofer o metod simpl de calificare a numelor elementelor i atributelor
folosite n fiierele XML, prin asocierea lor cu domenii pentru nume, identificate prin adrese URI
Exemplu:
1. <!ELEMENT date_identificare(#PCDATA/Nume/Prenume/CNP/NrCont)*>
2. <!ELEMENT date_identificare(#PCDATA/NumeSRL/Licenta_nr/ContSRL)*>
Domeniile pentru nume XML furnizeaz o metod de reutilizare a marcajelor n documente,
eliminnd conflictele ntre numele de elemente i atribute. Prin conflict de nume nelegem c un
element sau o combinaie de elemente i atribute definite ntr-un DTD are acelai nume cu un element
definit n acelai DTD sau n alt DTD. Pentru a rezolva conflictele de nume au fost introduse namespaces

(domeniile de nume) . Acestea identific ce elemente din document aparin aceluiai vocabular XML.
Pentru a putea face distincie ntre elementele ce reprezint concepte (vocabulare) diferite, le vom
ncadra pe fiecare n cte un domeniu de nume (namespace). Fiecrui domeniu de nume i vom asocia
un URI unic.
Observaie!
Acest URI nu pointeaz ntotdeauna ctre un fiier anume. URI definete un domeniu de nume
pur formal. Exist 3 tipuri de spaii de nume:
1. Spaii de nume prefixate
2. Spaii de nume implicite
3. Spaii de nume pentru atribute

1.Spaii de nume prefixate


Pentru a defini un spaiu de nume prefixat se folosete atributul xmlns.
xmlns:prefix=uri
unde - xmlns este un atribut ce indic prezena spaiului de nume;
- prefix este un ir de caractere care respect aceleai reguli de formare ca i elementele i
atributele XML;
Forma general : <prefix:nume_element xmlns:prefix=NAMESPACE>
<prefix:nume_copil></prefix:nume_copil>
</prefix:nume_element>
Sintaxa limbajului XML permite definirea de namespace-uri multiple pentru un singur element.
Forma general :
<prefix:nume_element_radacina xmlns:prefix_1=NS_URI_1..xmlns:prefix_n=NS_URI_N>
<prefix_1:nume_copil_nr_1></ prefix_1:nume_copil_nr_1>
.
<prefix_n:nume_copil_nr_n></ prefix_n:nume_copil_nr_n>
</ prefix:nume_element_radacina >
Exemplu:
Am creat un spaiu de nume cruia i-am asociat uri urmtor: URI=http://www.air.org/register/.
n acest spaiu de nume vor exista elementele: date_identificare, NumeSRL, Licenta_nr, ContSRL
<!--air.xml-->
<mc:date_identificare xmlns:mc=http://www.air.org/register/>
<!Date identificare firma-->
<mc:Nume SRL> NumeSRL:</mc:NumeSRL>
<mc:Licenta_nr>Licenta:</mc:Licenta_nr>
<mc:ContSRL> ContSRL:</mc:ContSRL>
</mc:date_identificare>
<!--air.dtd-->
<!ELEMENT mc:date_identificare(#PCDATA/mc:NumeSRL/mc:Licenta_nr/mc:ContSRL)*>
<!ATTLIST mc:date_identificare xmlns:mc CDATA #FIXED http://www.air.org/register/>
<!ELEMENT mc:NumeSRL(#PCDATA)>
<!ELEMENT mc:Licenta_nr(#PCDATA)>
<!ELEMENT mc:ContSRL(#PCDATA)>

2.Spaii de nume implicite


Forma general:
<nume_element xmlns=default_namespaces xmlns:prefix=NS_URI_1 xmlns:prefix=NS_URI_N>

</nume_element>
Exemplu:
Asociez un spatiu de nume implicit pentru air.xml : http://www.air.org/register/
<!--air.xml-->
<date_identificare xmlns:http://www.air.org/register>
<!Date identificare firma-->
<mc:Nume SRL> NumeSRL:</mc:NumeSRL>
<mc:Licenta_nr>Licenta:</mc:Licenta_nr>
<mc:ContSRL> ContSRL:</mc:ContSRL>
</date_identificare>

3.Spaii de nume pentru atribute


Observatie!
1. Un atribut poate face parte dintr-un spaiu de nume, doar prin precizarea unui prefix n faa
numelui acestuia (prefix:nume_atribut)
2. Atributele nu fac parte implicit din spaiul de nume al elementului la care sunt ataate.
3. Un atribut neprecedat de un prefix nu face parte din nici un spaiu de nume, nici chiar din
spaiile de nume implicite.
Elementului date_identificare i adugm un element info care va conine atributele:
nr_angajai, capital i moneda. Presupunem c cele 3 atribute fac parte din spaiul de nume ce are
URI: http//www.air.org/info, n timp ce toate elementele aparin spaiului de nume prefixat
URI:http://www.air.org/register.
Vom asocia prefixele informaii i mc.
Exemplu:
<!--air.xml-->
<mc:date_identificare xmlns:mc=http://www.air.org/register
xmlns:informatii=http//www.air.org/info>
<!Date identificare firma-->
<mc:Nume SRL> NumeSRL:</mc:NumeSRL>
<mc:Licenta_nr>Licenta:</mc:Licenta_nr>
<mc:ContSRL> ContSRL:</mc:ContSRL>
<mc:info informatii: nr_angajati=0
informatii: capital=0
informatii: moneda=$/>
</mc:date_identificare>

<!--air.dtd-->

<!ELEMENT mc:date_identificare(#PCDATA/mc:NumeSRL/mc:Licenta_nr/mc:ContSRL/mc:info)*>
<!ATTLIST mc:date_identificare xmlns:mc CDATA #FIXED http://www.air.org/register
xmlns:informatii CDATA #FIXED www.air.org/info >
<!ELEMENT mc:NumeSRL(#PCDATA)>
<!ELEMENT mc:Licenta_nr(#PCDATA)>
<!ELEMENT mc:ContSRL(#PCDATA)>
<!ELEMENT mc:info informatii: nr_angajati CDATA #REQUIRED
informatii: capital CDATA #REQUIRED
informatii: moneda CDATA #REQUIRED>
Exemplu:
<?xml version=1.0?>
<curs>
<nume> XML si informative structurata </nume>
<sectia> AII</sectia>
<an> 4 </an>
<profesor>
<persoana>
<nume> Olteanu</nume>
<prenume> Adriana </prenume>
<an> 1977 </an>
</persoana>
</profesor>
</curs>

n exemplul de mai sus exist conflict de nume. Presupunem c ncadrm mulimea de cursuri
n spaiul de nume http://aii.pub.ro/curs i persoanele le ncadrm n spaiul de nume
http://aii.pub.ro/persoana .
Exemplu: (spatii de nume prefixate)
<?xml version=1.0?>
<C:curs xmlns:C=http://aii.pub.ro/curs >
<C:nume> XML si informative structurata </C:nume>
<C:sectia> AII</C:sectia>
<C:an> 4 </C:an>
<C:profesor>
<P:persoana xmlns:P=http://aii.pub.ro/persoana >
<P:nume> Olteanu</P:nume>
<P:prenume> Adriana </P:prenume>
<P:an> 1977 </P:an>
</P:persoana>
</C:profesor>
</C:curs>
Varianta 2 presupune s se defineasc spaiile de nume ca i atribute ale elementului radcin.
Dac definiia spaiului de nume cu prefixul P aprea n rdcin, nu mai trebuia definit i n elementul
persoan.

CURS 6
8 noiembrie 2010
XML Schema Definition Language
Un fiier XML poate fi validat pe baza unui set de reguli aflat n interiorul fiierului, sau
ntr-un fiier extern .dtd. Dac dorim s definim seturi de reguli mai complexe dect cele oferite
de dtd putem apela la un limbaj mai flexibil numit XML Schema.
n plus fa de dtd, XML Schema permite definirea regulilor i relaiilor ntre elemente i
atribute folosind un fiier .xml.( o schema xml e descris ntr-un fisier xml)
Avantaje :
-

suportul pentru tipurile de date ;


fiierele schem sunt fiiere XML i respect aceast sintax ;
schemele sunt uor de ntreinut i de extins ;
sunt compatibile cu spaiile de nume.

O schem XML :
- definete elementele care pot aprea ntr-un document;
- definete atributele care pot aprea ntr-un document;
- definete elementele care au copii i care sunt acetia;
- definete ordinea copiilor unui element;
- definete numrul de copii;
- definete dac un element este vid sau poate s conin text;
- definete tipurile elementelor i atributelor;
- definete valorile implicite i fixe pe care le poate avea un element sau atribut.
Definirea unui fiier XML Schema
Un fiier XML Schema utilizeaz sintaxa xml pentru definirea structurilor i tipurilor
elementelor unui document xml n vederea validrii lui.
Fiierul are extensia .xsd i are rdcina <schema></schema>.
Acestui element i se poate ataa o serie de atribute ceea ce nseamn c poate avea diverse
forme n funcie de implementare.
Exemplu:
n exemplul de mai sus apare conflictul de nume al elementelor date_identificare.
Spaiile pentru nume sau domeniile de nume, reprezint un vocabular utilizat pentru a eticheta
elementele n mod unic.
Domeniile pentru nume XML ofer o metod simpl de calificare a numelor elementelor i atributelor
folosite n fiierele XML, prin asocierea lor cu domenii pentru nume, identificate prin adrese URI

Exemplu:
1.
2.
3.
4.
5.
6.

<xs:schema xmlns:xs=http://www.3org/2001/XML Schema


target NameSpace=http://www.air.org/register
xmlns=http://www.air.org/register
xmlns:informatii=http://www.air.org/info
element FormDefault=qualified
atribute FormDefault=unqualified >

Pe linia 1 setul de componente utilizat la construirea unei scheme provine din spaiul de nume
http://www.3org/2001/XML Schema . Se prefer ca acesta s fie prefixat xs, rar este implicit.
Linia 2 permite specificarea unei valori pentru atributul target NameSpace, aceast valoare
reprezentnd spaiul de nume definit de schema curent.
Linia 3: pentru a ne referi efectiv la componentele care aparin spaiului de nume definit n schema
curent trebuie s facem declaraia acestui spaiu de nume.
Observaie!
n acest caz e definit implicit, dar i se poate asigna un prefix.
Linia 4: aceast linie indic faptul c n schema curent ne vom folosi de componentele spaiului de
nume http://www.air.org/info.
Acesta este un spaiu de nume ale crui componente au fost declarate extern ntr+o alta schem. Putem
adauga oricte spaii definite extern.
Liniile 5 i 6 seteaz valorile atributelor element FormDefault i atributte FormDefault care au rolul
de a indica dac n schema curent elementele, respectiv atributele sunt considerate implicit ntr-un
spaiu de nume.
Dac aceste atribute au valoarea:
- qualified : elementele i atributele trebuie s aib un spaiu de nume;
- unqualified: numai elementele si atributele globale (descendenii direci ai elementelor
schem) trebuie s aib un spaiu de nume;
Definirea unui XML Schem din fiierul XML
Observaie!
Referirea DTD se fcea nainte de elementul rdcin. Referirea unei scheme se face n cadrul
elementului rdcin.
Exemplu:
<?xml version=1.0?>
<!DOCTYPE element SYSTEM uri>
<element_radacina>
.....
</element_radacina>
Forme generale:

1. <element_radacina XML
xmlns:xsi=http://www.w3org/2001/XML Schema:instance
xsi: noNameSpaceSchemaLocation= URI_Schema_XML>
</ element_radacina XML>
Prima linie permite accesul la spaiul de nume XML Schema Instance XSI (NS consacrat)
i a doua linie folosete un atribut al acestui spaiu de nume numit
noNameSpaceSchemaLocation i are dublu rol:
- este folosit pentru a indica faptul c documentul XML curent nu are asociat un spaiu de
nume implicit.
- Specific prin acel URI locaia la care se gsete schema XML corespunztoare.
2. <element_radacina XML
xmlns=URI_spatiu_de_nume
xmlns:xsi=http://www.w3org/2001/XMLSchema:instance
xsi: schemaLocation=URI_spatiu_de_nume>
</ element_radacina XML>
Aceast a doua form uzual se deosebete de prima prin faptul c se specific un
spaiu de nume implicit pentru documentul XML. Acest spaiu de nume mpreun cu URI-ul care
indic locaia unde se gasete documentul XML formeaz valoarea atributului SchemaLocation.
Componentele unei scheme XML:
1. Elemente XML Schema
Pentru a indica faptul c urmeaz sa declarm un element XML Schema se folosete
urmtoarea construcie:
Forma general : <xs:element name= type= />
2. Atribute XML Schema
Forma general : <xs:attribute></xs:attribute >
Definirea elementelor simple:
Elementele simple conin text de orice fel: ir de caractere, numere ntregi,numere zecimale,
data,etc.
Forma general : <xs:element name=nume_element type= tip_element />
Tipuri de date predefinite:

- xs: string
-xs: integer
-xs: decimal
- xs: boolean
- xs: time
- xs: date

Exemplu:
XML: <nume_firma> Air </nume_firma>
XSD: <xs:element_name=nume_firma type=xs:string/>
Definirea atributelor:
Forma general :
<xs:attribute name=nume_atribute type=tip_atribut use=required/prohibited/optional/>
Exemplu:
<marca M=Shark cod=11201 seria=121/>
<xs:attribute name=marca type=xs:string use=required/>
Tipurile de date
Tipurile de date pot fi predefinite: atomice, liste, uniuni, sau definite de ctre utilizator: tipuri
simple sau tipuri complexe.
Pentru a ne defini propriile tipuri de date XML Schema ne pune la dispoziie mecanismul de derivare a
tipurilor existente.
Cnd restrngem plaja de valori se numeste derivare prin restricie.
Cnd se mrete plaja de valori se numete derivare prin extensie.

Sintaxa general a definirii de restricii


<xs: element name=nume>
<xs: SimpleType>
<xs:restriction base=tip>
...restrictii
</xs:restriction>
</xs: SimpleType>
</xs:element>

Sintaxa general a definirii de extensii


<xs: element name=nume>
<xs: SimpleType>
<xs:extension base=tip>
...extensie
</xs:extension>
</xs: SimpleType>
</xs:element>

Restricii pentru numere:

minInclusive : numrul trebuie s fie mai mare sau egal dect o valoare dat;
minExclusive : numrul trebuie s fie mai mare dect o valoare dat;
maxInclusive : numrul trebuie s fie mai mic sau egal dect o valoare dat;
maxExclusive: numrul trebuie s fie mai mic dect o valoare dat;
totalDigits: numrul de cifre al numrului trebuie s aib exact o valoare dat;
fractionDigits: numrul de cifre de dup virgul nu trebuie s depasc o valoare dat.

Restricii pentru string-uri

length: lungimea irului trebuie s fie egal cu o valoare dat;


minLength: lungimea irului trebuie s fie mai mare sau egal dect o valoare dat;
maxLength: lungimea irului trebuie s fie mai mic sau egal dect o valoare dat;
pattern: irul trebuie s se potriveasc cu o expresie dat;
whiteSpace: nu e chiar o restricie, spune cum s trateze spaiile albe;
- value = preserve : se pstreaz spaiile;
- value = replace;
- value =colapse : toate spaiile albe sunt comasate ntr-un singur spaiu ;

Exemplu:
<xs: element name=anotimp>
<xs: SimpleType>
<xs:restriction base=xs:string>
<xs: enumeration value=primavera/>
<xs:enumeration value=vara/>
</xs:restriction>
</xs: SimpleType>
</xs:element>
Exemplu:
<xs: Simple Type name=Integer 2000>
<xs:restriction base=xs: integer>
<xs: minInclusive value=0/>
<xs:maxInclusive value=2000/>
</xs:restriction>
</xs: SimpleType>
XML:
XSD:

<suma_euro> 1900</suma_euro>
<xs:element name=suma_euro type=Integer 2000/>

CURS 7
15 noiembrie 2010
2. Tipuri de date complexe
Tipurile de date complexe sunt folosite pentru a defini elemente complexe. (elemente vide,
elemente simple ce conin numai text i atribute,elemente ce au asociate elemente copil )
Pentru definirea unui tip complex se folosete elemetul xs :complexType. Prin intermediul unui
tip de date complex se definete structura coninutului unui element complex.
Exemplu :
XML : <cv>
<nume> Marinescu </nume>
<prenume> Ion </prenume>
<sex> M</sex>
XSD:

</cv>
<xs:complexType nume=cv type=cv/>
<xs:sequence>
<xs:element name=nume type=xs:string/>
<xs:element name=prenume type=xs:string/>
< xs:element name=sex type=xs:string/>
</xs:sequence>
</xs:complexType>

Pentru a defini efectiv elementul cv : <xs: element name=cv type=cv/>


Sau se declar un tip anonim
<xs:element name=cv>
<xs:complexType>
<xs:sequence>
<xs:element name=nume type=xs:string/>
<xs:element name=prenume type=xs:string/>
< xs:element name=sex type=xs:string/>
</xs:sequence>
</xs:complexType>
</xs:element>
Pentru a defini un tip complex nou pe baza unui tip complex definit anterior se folosete
elementul xs:complexContent . n general este folosit acest element pentru crearea de noi tipuri prin
aplicarea de extensii sau restricii asupra tipurilor complexe existente.
Dac elementul conine numai text i atribut se folosete elementul xs:simpleContent.
Presupunem c dorim s definim un tip nou complex, CV extins, care va conine i elementele telefon i
adres.

Exemplu :

XML : <cv>
<nume> Marinescu </nume>
<prenume> Ion </prenume>
<sex> M</sex>
<telefon> 0123456</telefon>
<adresa> strada Pravat </adresa>
</cv>
XSD:

<xs:complexType nume=CV extins />


<xs :complexContent>
<xs :extension base= cv >
<xs:sequence>
<xs:element name=telefon type=xs:integer/>
<xs:element name=adresa type=xs:string/>
</xs:sequence>
</xs:extension>
<xs:complexContent>
</xs:complexType>

Elementul xs:simpleContent
Acest element se folosete pentru elementele complexe care conin text i accept atribute.
Cele mai cunoscute moduri de a defini un astfel de element sunt:

Prin aplicarea unei extensii asupra unui tip simplu(predefinit sau definit de utilizator);
Prin aplicarea unei extensii sau restricii asupra unui tip complex de acelai gen;

Form general:
<!aplicarea unei extensii-->
<xs:element name=nume_element>
<xs:complexType>
<xs:simleContent>
<xs:extension base=tip_de_baza>
...........
</xs:extension>
</xs:simleContent>
</xs:complexType>
</xs:element>
Observaie!
n cazul unei restricii se folosete cuvntul restriction.

Exemplu :
XML : <varsta elev=nu> 27 </varsta>

XSD:

<xs:element name=varsta>
<xs:complexType>
<xs:simpleContent>
<xs:extension base=xs:integer>
<xs:attribute name=elev type=xs:string/>
< /xs:extension >
</xs: simpleContent >
</xs:complexType>
</xs:element>

Observaie!
Singurul atribut suportat de elementul xs:simpleContent este atributul ID . Acesta este opional
i are rolul de a asocia elementului respectiv un identificator unic.
Elementul xs:complexContent
Acest element este folosit pentru a defini noi tipuri complexe pe baza celor existente, prin
intermediul extensiilor i restriciilor. Cel mai important atribut al acestui element este mixed care poate
lua valoarea true ( accept si text n interiorul elementului) sau false (accept dect alte elemente n
interiorul lui).
Exist patru tipuri de elemente complexe:
1. Elemente vide
2. Elemente care conin numai alte elemente
3. Elemente care conin numai text (au i atribute)
4. Elemente cu coninut mixt (conin text i alte elemente copil)

1. Definirea tipurilor complexe pentru elemente vide


Exemplu :
XML : <an_fabricatie AN=2005/>
XSD:

<xs:element name=an_fabricatie minOccurs=1 maxOccurs=1>


<xs:complexType>
<xs:attribute name=AN type=an_maxim use=required/>
</xs:complexType>
</xs:element>

sau
<xs:complexType name=INTERVAL>
<xs:attribute name=AN type=an_maxim use=required/>
</xs:complexType>
<xs:element name=an_fabricatie type= INTERVAL minOccurs=1 maxOccurs=1/>

Definirea intervalului an_maxim:

<xs:simpleType name=an_maxim>
<xs:restriction base=xs:integer>
<xs :minExclusive value= 1990/>
<xs :maxExclusive value= 2010/>
</xs:restriction>
</xs:simpleType>

2. Definirea tipurilor complexe pentru elemente care conin numai alte elemente
Exemplu :
XML : <comanda_firma>
<marcaAvion> null </marcaAvion>
<codAvion> null </codAvion>
<serieAvion> null </serieAvion>
</comanda_firma>
XSD:

<xs:element name=comanda_firma minOccurs=1 maxOccurs=1>


<xs:complexType mixed=false>
<xs:sequence minOccurs=1 maxOccurs=1>
<xs:element name=marcaAvion minOccurs=1 maxOccurs=1
type=xs:string/>
</xs:sequence>
</xs:complexType>
</xs:element>
Sau
<xs:complexType name=cfmixed=false>
<xs:sequence minOccurs=1 maxOccurs=1>
<xs:element name=marcaAvion minOccurs=1 maxOccurs=1 type=xs:string />
<xs:element name=codAvion minOccurs=1 maxOccurs=1 type=xs:string />
<xs:element name=serieAvion minOccurs=1 maxOccurs=1 type=xs:string />
</xs:sequence>
</xs:complexType>
<xs:element name=comanda_firma type= cf minOccurs=1 maxOccurs=1/>
Aplicm o restricie tipului complex cf, reducnd elementul marcaAvion. Acest nou tip se va numi
cf-simplu.
<xs:complexType name=cf-simplu mixed=false>
<xs:complexContent>
<xs:restriction base=cf>
<xs :sequence minOccurs=1 maxOccurs=1 >
<xs :element name= marcaAvion minOccurs=1 maxOccurs=1
type=xs:string />
</xs :sequence >
</xs:restriction>
</xs:complexContent>

</xs:simpleType>

3. Definirea tipurilor complexe pentru elemente care conin numai text (au i atribute)
Exemplu :
XML : <nume_firma tip= SRL> Air </nume_firma>
XSD:

<xs:element name=nume_firma minOccurs=1 maxOccurs=1 fixed=Air>


<xs:complexType>
<xs:simpleContent>
<xs:extension base=xs:string>
<xs:attribute name=tip type=xs:string use=required/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

4. Definirea tipurilor complexe pentru elemente cu coninut mixt (conin text i elemente
copil)
XML : <date_identificare>
Date de identificare pentru persoana fizica:
<nume> Nume: </nume>
<prenume> Prenume: </prenume>
<CNP> CNP: </CNP>
</ date_identificare >
XSD:

<xs:element name=date_identificare minOccurs=1 maxOccurs=1>


<xs:complexType mixed=true>
<xs:sequence minOccurs=1 maxOccurs=1>
<xs:element name=nume type=xs:string/>
<xs:element name=prenume type=xs:string/>
<xs:element name=CNP type=xs:string/>
</xs:sequence>
</xs:complexType>
</xs:element>

CURS 8
6 decembrie 2010

Concepte ale parsarii XML


Un avantaj major al folosirii datelor in format XML este transportabilitatea. XML propriu zis
nu ncorporeaz i integrarea datelor. Aplicaiile care trimit i primesc datele din XML au nevoie de
interfee pentru a genera XML i pentru a integra datele XML n aplicaii.Parsarea documentelor XML
este folosit pentru a integra datele XML cu aplicaiile existente.
Cuvntul parsa provine din latina pars orationis care nseamn parte a vorbirii. n
lingvistic, parsarea este desparirea structurilor propoziiilor i cuvintelor pentru a stabili relaiile i
structurile limbajului. Aceste structuri sunt reprezentate mai des sub form arborescenta. Parsarea din
punct de vedere al calculatorului este similar, dar este mai des folosit pentru a despari i a interpreta
caracterele dintr-un string. Din moment ce XML este prin definiie un set de caractere dintr-un string,
desprirea i separarea prilor dintr-un document XML se refer la parsare.
Parsarea documentelor XML identific i convertete elementele XML coninute n documentul
XML n noduri copil, structura arborescent a evenimentelor documentului, depinznd de tipul
parserului XML folosit.

Parsarea DOM (Document Object Model)


Parsarea DOM reprezint spargerea documentului n elemente copil, ce poarta numele de
noduri n reprezentarea documentelor DOM. Nodurile DOM se refer la documente sau
fragmente de documente, elemente, atribute, date de tip text, instruciuni de procesare,
comentarii, i alte tipuri de date.

Parsarea SAX (Simple API for XML)


Parsarea SAX reprezint spargerea documentelor XML n evenimente pentru a reprezenta
documentele SAX. Aceste noduri i evenimente, o dat ce au fost identificate pot fi folosite
pentru convertirea elementelor originale ale documentelor XML n alte tipuri de date, baznduse pe datele reprezentate prin elemente, atribute i valori text n documentul XML original.

1. SAX (Simple API for XML)


Bazele API-ului SAX au fost puse de ctre David Megginson. Pe parcurs, numarul celor care au
lucrat la perfecionarea acestui API a devenit impresionant, devenind cunoscui sub numele de grupul
XML-DEV. Acest API mai este cunoscut i sub numele de pushparsing mechanism, el mai avnd un
frate i anume pe StAX (Streaming API for XMP), cunoscut i sub denumirea de pull-parsing
mechanism. Cele dou API-uri sunt nfrite prin faptul c ambele parseaz documentele XML ca pe
nite fluxuri de evenimente. Versiunile reprezentative ale SAX-ului sunt SAX 1.0 si SAX 2.0 J2SE 1.5 (JAXP
1.3) i J2SE 1.6 (JAXP 1.4) suport ambele versiuni.
De la nceput este foarte important de reinut faptul c acest API funcioneaz pe 2 principii
fundamentale, i anume :
parcurge documentul XML, element cu element n maniera doar nainte (nu este permis
accesul aleator);
genereaza evenimente de genul :
o S-a ntlnit nceputul documentului XML;
o S-a ntlnit sfaritul documentului XML;
o S-a ntlnit tag-ul de nceput al unui element;
o S-a ntlnit tag-ul de sfrit al unui element;

o
o

S-a ntlnit o instruciune de procesare;


S-au ntlnit date de tipul caracter.

Fiecare gen de eveniment SAX duce la apelarea unei metode callback specifice.
Comportamentele acestor metode pot fi implementate de ctre programator.
SAX este un parser care prelucreaz fiierele XML n mod serial declannd evenimente la
ntlnirea elementelor fiierului XML. Cu un parser de tip SAX programatorul nu are acces la structura
efectiv a documentului, fiind necesar s implementeze mecanisme pentru a se asigura c prelucreaz
doar acele elemente pe care le dorete analizate.
Programatorul trebuie s scrie handlere (funcii asociate evenimentelor declansate) pentru fiecare
element de interes element pe care dorete s-l prelucreze.
Principalele avantaje ale utilizrii SAX sunt legate de faptul c permite prelucrarea streamurilor
XML pe msur ce se primesc, consum mult mai puin memorie dect parserele DOM i din acest
motiv permite prelucrarea unor documente XML care nu pot fi ncrcate complet n memorie i care
deci nu pot fi prelucrate cu DOM.
Ca dezavantaje putem meniona faptul c validarea unui fisier XML cu un parser SAX este mai
dificil i necesit cteodat parcurgerea ntregului fisier (de exemplu n cazul n care se foloseste ID si
IDREF trebuie parsat tot fisierul XML pentru a se sti dac un IDREF nu puncteaz ctre un ID ce nu
exist).

2. DOM (Document Object Model)


DOM este un standard dezvoltat de W3C bazat pe un set de interfete ce pot fi utilizate pentru
reprezentarea unui document XML sau HTML sub forma unui arbore de obiecte. DOM-ul este separat n
mai multe module dintre care cele mai importante sunt: Core (inima DOM-ului), XML i HTML, dar i
pe trei nivele ( levels), numite level 1, 2 si 3.
Un arbore DOM ne ofer o imagine ierarhizat a componentelor unui document XML, motiv
pentru care acest standard este preferat n cazul documentelor XML reprezentnd cari,articole,
referate, manuale de utilizare, etc. deoarece permite o vizualizare ierarhizat a capitolelor,
subcapitolelor, seciunilor etc.
Arborele de obiecte este format din noduri denumite dupa componentele XML. De exemplu,
cele mai cunoscute noduri DOM sunt:
- Noduri-document reprezentate de interfaa Document;
- Noduri-element - reprezentate de interfaa Element;
- Noduri-atribut reprezentate de interfaa Attr;
- Noduri-comentariu reprezentate de interfaa Comment;
- Noduri-text reprezentate de interfaa Text;
- Noduri-instructiune-de-procesare reprezentate de interfaa ProcessingInstruction;
De asemenea, ntre nodurile din arbore sunt definite diferite grade de rudenie de genul:
2.1 Printe (eng. parent), nod-printe (eng. Parent-node)
Un nod-printe este un nod care poate sa aib unul sau mai muli copii (descendeni direci sau
de gradul I).
2.2 Copil (eng. children), nod-copil (eng. Children-node)
Un nod-copil este un nod care reprezint un descendent direct al unui alt nod, numit nodprinte.
2.3 Frate (eng. sibling), nod-frate (eng. Sibling-node)

Nodurile-frate sunt acele noduri care au acelai nod-parinte.


2.4 Strmo (eng. ancestor), nod-strmo (eng. Ancestor-node)
Reprezint totalitatea nodurilor-printe ale unui nod (printele nodului, printele printelui
nodului, printele printelui printelui nodului etc.).
2.5 Descendent (eng. descendant), nod-desncendent (eng. Descendant-node)
Reprezint totalitatea nodurilor-copil ale unui nod (copilul nodului, copilul copilului nodului,
copilul copilului copilului nodului etc.).
Facilitile oferite de DOM permit manipularea arborelui de obiecte asociat unui document XML,
n sensul c este permis crearea, tergerea, modificarea, importarea, adopia, clonarea sau pur i
simplu, parcurgerea nodurilor din arbore. Pentru a scrie aplicaii Java care s beneficieze de aceast
facilitate va trebui s nvm s utilizm un set de clase i interfee dedicate lucrului cu acest standard.
Toate acestea se gasesc n pachete:
org.w3c.dom;
org.w3c.dom.bootstrap;
org.w3c.dp,.traversa;
org.w3c.dom.ls
org.w3c.dom.events.*.
Chiar dac n denumirea standardului DOM ntalnim cuvantul Object, trebuie precizat c DOM
nu este un limbaj de programare orientat pe obiecte i nici nu are preferine n ceea ce privete un
anumit limbaj de programare orientat pe obiecte. Acst lucru se datoreaz faptului c interfeele DOM
sunt scrise pe baza specificaiilor OMG IDL (cei care programeaz conform standardului CORBA sunt
familiarizai cu aceste specificaii) i deci, DOM este independent de limbajul de programare folosit.
Totui, de la limbaj la limbaj exist anumite limite de implementare.
Oricum, toate limbajele de programare care suporta tehnologia DOM trebuie s ofere o implementare
complet a interfeelor de baza (fundamentale) care formeaz inima DOM-ului (DOM Core).
Spre deosebire de SAX, DOM este un standard W3C independent de platform . Tot spre
deosebire de SAX, parsarea unui document XML folosind DOM presupune ncrcarea ntregului
document n memorie. Dup ce documentul este ncrcat, navigarea printre nodurile documentului se
poate face n orice ordine folosind relaiile de ordine din interiorul arborelui XML. Astfel se pot accesa
rapid prinii, copiii i fraii oricrui element. Aceste avantaje date de accesul rapid la coninut sunt
compensate de consumul mare de memorie necesar pentru ncrcarea documentelor XML complet n
memorie. Totodat, n cazul unor documente XML foarte mari sau n cazul unor dispozitive cu resurse de
memorie foarte limitate este posibil ca o prelucrare bazat pe DOM s nu poat fi fcut pentru c
documentul nu ncape n memorie.

Concluzii
Prelucrarea fiierelor XML este deosebit de facil existnd un numr mare de API-uri n
majoritatea limbajelor de programare de nivel nalt. Exist modaliti de prelucrare diferite i alegerea
unei metode se bazeaz pe mai multe aspecte dintre care cele mai importante ar fi urmtoarele:
- dimensiunea fiierului vs. cantitatea de resurse de memorie disponibile
- tipul de prelucrare efectuat (1 singur parcurgere este suficient sau sunt necesare prelucrri
succesive).

CURS 9
13 decembrie 2010
XSL( Extensible Stylesheet Language)
Este un limbaj pentru proiectarea foilor de stiluri dezvoltat de consortiul W3C. Prin intermediul
foilor de stiluri este specificat modul in care va fi afisat un document XSL.
XSL se bazeaza de fapt pe 2 tehnici:
1. O tehnica de transformare a unui document XML in alt document XML
2. O tennica privind descrierea modului in care va fi prezentata informatia transformata (nu este la
fel de banal ca si css)
Contine 3 module:
1. XPATH (XML Path Language)
este un limbaj folosit pentru a naviga prin documentul XML (prin arborii XML asociati
documentului)
2. XSLT (XSL Transformation)
reprezinta un limbaj folosit pentru a transforma documentul XML in alte documente XML
3. XSL-FO (XSL-Formating Object)
limbaj folosit pentru formatarea documentelor XML
Limbajul XSL poate fi privit ca un limbaj complex care ne permite sa facem urmatoarele operatii:
- transforma un fisier XML in alt fisier XML
- formateaza si afiseaza informatia din fisier
- navigheaza printre componentele documentului XML
- filtreaza si sorteaza informatia din documente
- transmite date catre dispozitive de iesire

1. XPATH
XPATH este un limbaj folosit pentru accesarea unor parti din documentul XM,L extragerea si
folosirea informatiilor sau datelor continute in nodurile din arborele asociat documentului XML, dar si
pentru a determina valori pe baza informatiilor din fisierul XML . Vom folosi versiunea 1.0 iar specificatia
oficiala se gaseste la adresa: www.w3.org/TR/Xpath .
XPATH este folosit in tehnologiile XQuery, XSLT,XPointer
Practic XPATH vede un document XML ca pe un arbore de noduri si foloseste expresii
specializate pentru a se deplasa pe nivelele arborelui si pentru a selecta unul sau mai multe noduri.
XPATH se bazeaza pe un set de peste 100 de functii predefinite (versiunea 1.0) dedicate manipularii
valorilor : sir de caractere , data calendaristica, valori intregi, valori noduri.
1.1. Terminologia XPATH
Exista o serie de termeni specifici:
- Nod (node)
- Valoare atomica (atomic value)
- Articol (item)
- Parinte (parent)
- Copil (children)
- Frate (sibling)
- Stramos (ancester)
- Descendent (descendant)

1.1.1 Nod
- XPATH suporta 7 tipuri de noduri:

- noduri document
- noduri element
- noduri atribut
- noduri spatiu de nume
- noduri instructiune de procesare
- noduri comentariu
- noduri text

1.1.2. Valoare atomica


- sunt noduri fara parinti sau copii cum sunt de exemplu valorile atributelor
1.1.3 .Articol
- reprezinta o valoare atomica sau un nod
1.1.4.Parinte (nod parinte)
- este un nod care poate sa aiba unul sau mai multi copii (descendenti directi de rang 1)
1.1.5. Copil (nod copil)
- este un nod care reprezinta un descendent direct al altui nod denumit parinte
1.1.6. Frate ( nod frate)
- sunt acele noduri care au acelasi nod parinte
1.1.7. Stramos (nod stramos)
- reprezinta totalitatea nodurilor parinte ale unui nod
1.1.8. Descendent (nod descendent)
- reprezinta totalitatea nodurilor copil ale unui nod
1.2. Tipuri de date XPATH:
- tipurile de date XPATH pot fi - boolean
- number(numere in dubla precizie pe 64 biti)
- string
- node set(colectie neordonata de noduri fara duplicate)
1.3. Expresile XPATH sau expresii cale XPATH
Sunt folosite in general unul sau mai multe noduri(node set). Aceste expresii se mai numesc si
expresii cale deoarece selecteaza nodul dorit prin evaluarea pas cu pas a unei cai (path) exact ca la
fisiere si directoare.
In expresiile XPATH complexe intra mai multe expresii simple:
nume_nod_element : sunt selectate nodurile element cu numele specificat care sunt noduri copil
ale nodului curent
/ : nodul sau nodurile selectate vor provenii numai de pe nivelul urmator din arbore raportat la
nivelul curent
// : nodurile selectate pot fi de pe orice nivel din arborele inferior nivelului curent care indeplineste
conditia de selectie
. : este electat nodul curent
: : este selectat parintele nodului curent
@ : precede numele unui atribut
Exemple:

1. Selectarea nodului element ce reprezinta nodul radacina al arborelui


firma sau /firma
2. Selectarea tuturor nodurilor element cu numele avioane_disponibile ce sunt noduri descendent
ale nodului curent
//avioane_disponibile
3. Selectarea tuturor nodurilor element marca ce reprezinta noduri copil ale tuturor nodurilor
element denumite avioane_disponibile care la randul sau sunt noduri copil ale nodului radacina
firma
/firma/avioane_disponibile/marca
4.

Selectarea tutoror nodurilor atribut cod ce sunt noduri descendent ale nodului curent

//@cod
1.4. Predicatele XPATH
Predicate XPATH permit o focalizare mai buna asupra unui nod sau set de noduri (node set).
Acestea apar in expresii XPATH specificate intre paranteze drepte. Cele mai folosite predicate XPATH
sunt:
nume_nod_element[n] : selecteaza al n-lea nod element
nume_nod_elemtn[last()] : last este o functie predefinita si selecteaza ultimul nod
element
nume_nod_element[pozition()<n] : selecteaza primele n noduri element
nume_nod_element[@nume_nod_atribut] :selecteaza toate nodurile element ce au
atasat un nod atribut
nume_nod_element[@nume_nod_atribut='valoare'] - selecteaza toate nodurile
element ce au atasate noduri atribut cu valoarea specificata intre ' '
Exemple:
1. Selectati pirmul nod element numit foto ce este nod copil al celui de-al 2-lea nod element numit
avioane_disponibile ce este la randul lui nod copil al nodului radacina firma
/firma/avioane_disponibile[2]/foto[1]
2. Selectarea ultimului nod element avioane_disponibile ce este nod descendent al nodului curent
//avioane_disponibile[last()]
3.

Selectarea primelor 2 noduri element avioane_disponibile ce sunt noduri copil ale nodului
radacina firma

/firma/avioane_disponibile[position<3]

4.

Selectarea tuturor nodurilor element marca ce sunt noduri descendent ale nodului curent si care
au atasat un nod atribut cu numele cod si valoarea 12342.

//marca[@cod='12342']
1.5. WildCard-uri
Se folosesc atunci cand dorim sa selectam un nod necunoscut sau despre care nu avem suficiente
informatii pentru a-l selecta direct
- * se refera la orice nod element
- @* se refera la orice nod atribut
- node() se refera la orice tip de nod
Exemple:
1.

Selectarea tuturor nodurilor element marca ce sunt noduri descendent ale nodului curent si care
au atasat orice nod atribut:

//marca[@*]
1.6. Selectiile multiple
Pentru a realiza o selectie multipla se foloseste operatorul |.
Exemplu:
1.

Selectarea tuturor nodurilor element marca si pret.

/firma//marca | /firma//pret
1.7. Axele XPATH
Se mai numesc directii XPATH si definesc un set de noduri (node set) relativ la nodul curent.
Axele XPATh pot fi privite ca niste interogari care descriu directiile nodurilor selectate in raport cu
nodurile curente.
Cele mai cunoscute axe:
1.7.1. Ancestor
- sunt selectati toti stramosii nodului curent
1.7.2. Ancestor-or-self
- sunt selectati toti stramosii nodului curent inclusiv el
1.7.3. Attribute
- sunt selectate toate nodurile atribut atasate nodului curent ( aceasta axa va fi vida daca nodul
curent nu este nod element)
1.7.4. Child
- sunt selectate toate nodurile copil ale nodului curent
1.7.5. Descendant
- sunt selectati toti descendentii nodului curent (obs: nodurile atribut si spatiu de de nume nu sunt
considerate noduri descendent)
1.7.6 . Descendent-or-self
- sunt selectati toti descendentii nodului curent inclusiv el

1.7.7.
Following
- sunt selectate toate nodurile ce apar dupa nodul curent cu exceptia nodurilor descendent, atribut
si spatiu de nume
1.7.8. Following-sibling
- sunt selectate toate nodurile frate ale nodului curent ce apar dupa acesta. Daca nodul curent este
atribut sau spatiu de nume aceasta axa este vida.
1.7.9. Namespace
- sunt selectate toate nodurile spatiu de nume ale nodului curent. Aceasta axa este vida daca nodul
curent nu este nod element
1.7.10. Parent
- selecteaza nodul parinte al nodului curent
1.7.11. Preceding
- sunt selectate toate nodurile ce apar inainte de nodul curent cu exceptia nodului stramos, atribut
si spatiu de nume
1.7.12. Self
- selecteaza nodul curent
Axele XPATH intra in componenta cailor absolute si relative, care au ca scop identificarea unui
nod sau a unui set de noduri (node set). Calea relativa realizeaza o navigare relativa la nodul curent in
timp de calea absoluta indica o pozitie concreta in document
Forma Generala:
Calea absoluta : /pas-1/pas-2/..../pas-n
Calea relativa: pas-1/pas-2/.../pas-n
unde:
pas este format din axa XPATH:: nod_de_test[predicat]
Observatie!
Fiecare pas din cale este evaluat in functie de setul de noduri curent
Nodurile de test sunt folosite pentru a verifica daca nodurile din arbore respecta anumite conditii.
Practic nodurile de test sunt folosite pentru a identifica nodurile ce vor fi selectate. Fiecare axa XPATH
are un nod de test.
Cele mai cunoscute noduri de test sunt:
nume_nod > reprezint nodurile cu numele nume_nod
* -> reprezint orice nod
spatiu_de_nume: nume_nod > identifica toate nodurile cu numele nume_nod ce se
gasesc n spatiului de nume specificat
spatiu_de_nume:*-> reprezint orice nod din spaiul de nume specificat
text() -> reprezint nodurile cu continut text
coment()-> reprezint nodurile cu coninut de comentariu
processing-instruction() -> reprezint nodurile_instruciuni_de_procesare
processing-instruction(int) -> reprezint nodurile_instruciuni_de_procesare care au
inta specificat
node() : reprezint orice tip de nod

Exemple de cai relative i absolute:


1. Selecteaz nodul atribut Cod al nodului curent :
attribute ::Cod( attribute ::* -toate nodurile atribut)
2. Selecteaz toate nodurile-element avioane_disponibile, ce sunt noduri copil ale nodului curent:
child ::avioane _disponibile
3. Selecteaz toate nodurile text ce sunt noduri copil ale nodului curent :
child ::text()
4. Selectarea nodului curent, cu condiia ca acesta sa fie un nod-element, avioane_disponibile (n
caz contrar, nu se selecteaz nimic)
self ::avioane_disponibile
5. S se selecteze la primul pas toate nodurile element, avioane_disponibile, ce sunt noduri copil ale
nodului curent. La pasul doi s se selecteze toate nodurile element, an_fabricaie, ce sunt noduri
descendente ale nodurilor selectate la primul pas :
child ::avioane_disponibile/descendant::an_fabricatie
6. S se selecteze la primul pas, toate nodurile element, ce sunt noduri copil ale nodului curent. La
pasul 2 s se selecteze toate nodurile element, an_fabricatie, ce sunt noduri copil ale nodurilor
selectate la primul pas:
child ::*/child::an_fabricatie
7. Selecteaz ultimul nod element an_fabricatie care este nod copil al nodului curent
child:: an_fabricatie[position()=last()]

1.8.

Operatori XPATH
Expresiile XPath suport urmatorii operatori:

1.9.

| -> permite scrierea seleciilor multiple (returneaz rezultatele seleciilor multiple)


+ -> operaia de adunare (returneaz suma a doua valori)
- -> operaia de scadere
* -> operaia de nmulire
div -> operaia de mparire, returneaz partea ntreag a mpririi a doua valori
mod -> operaia de mparire, returneaz partea fracionar a mpririi a doua
valori
= -> egal
!= ->diferit
< ->mai mic
<= ->mai mic sau egal
> ->mai mare
>= -> mai mare sau egal
or -> sau
and -> i

Funciile XPath provin din spaiul de nume


http://www.w3.org/2005/02/xpath-functions i sunt prefixate implicit de prefixul fn.

CURS 10
20 decembrie 2010
XSL( Extensible Stylesheet Language)
2. XSLT (XSL Transformation)
Limbajul XSLT permite transformarea documentelor XML in alte documente XML sau in alte
tipuri de documente(HTML, XHTML,etc) . HTML si XHTML sunt cele mai cunoascute tipuri de documente
in care se trafera de obicei un XML.
XSLT se bazeaza pe 3 arbori :
- arbore sursa
- arborele foi de stiluri
- arborele rezultat
Pentru a naviga in arborele sursa al unui document XML , programatorul se foloseste de
expresiile XPath(vezi cursul trecut). Versiunera 1.0 a XSLT este un standard W3C (www.w3.org/TR/xslt).
Este disponibila si versiunea 2.0 din anul 2005.

1. Cum functioneaza?
XSLT transforma un arbore sursa(source-tree) intr-un arbore rezultat (result-tree) . Practic , o
transformare XSLT se face pe baza unui document cunoscut sub denumirea de foi de stiluri XSL (XSL
stylesheet) si care reprezinta de fapt o regula sau un set de reguli cunoscute sub numele de machete
(templates) .
Aceste machete sunt folosite pentru a descrie modul in care se va efectua transformarea. Transformarea
arbore-sursa la arborele-rezultat se face pe baza unui arbore intermediar ,numit arbore-foi-de
stiluri(sunt arbori asemanatori cu arborilor DOM).
Fiecare macheta este compusa din 2 parti:
-un sablon (pattern) : reprezinta una sau mai multe expresii XPATH separate prin "|" . Aceste expresii
sunt evaluate pe arborele sursa pentru a stabili o potrivire care poate declansa o
etapa a transformarii .
-corpul machetei (template) :folosit efectiv pentru a descrie transformarea , deci pentru a
obtine arborele-rezultat .
Transformarile au loc in momentul in care apar potriviri intre sabloane si nodurile din arborele
sursa . XSLT se foloseste de limbajul XPATH pentru a defini sabloanele si pentru a extrage portiuni din
arborele sursa . Arborele rezultat poate fi identic cu cel sursa sau din contra poate fi foarte diferit.
Practic , putem spune ca atunci cand procesorul XSLT primeste atat documente XML , cat si foaia de
stiluri XSL acesta incearca sa localizeze potriviri intre sabloanele gasite in foaia de stiluri XSL si elemente ,
respectiv atributele gasite in documentul XML . Evident , tot acest proces se desfasoara prin intermediul
limbajului XPATH .
In momentul localizarii unei potriviri , procesorul aplica macheta corespunzatoare pentru a
efectua transformarea.
La final, rezultatul transformarii poate fi tot un document XML , dar poate fi si alt tip de document ,de
genul HTML si XHTML .
In procesul de identificare a machetei potrivite pot exista cazuri in care mai multe machete au
sabloane care se potrivesc. Aceasta este aleasa in conformitate cu regula de conflict pe care le are setate

procesorul XSLT . Cea mai buna modalitate de a ocoli aceasta problema consta in setarea coeficientului
de prioritate al machetei in raport in raport cu celelalte machete . Acest lucru se face prin intermediul
atributului priority.

2. Spatiul de nume pentru XSLT


Spatiul de nume care contine componentele limbajului XSLT si care este recunoscut de W3C ca
spatiu de nume oficial al acestui limbaj este www.w3c.org/1999/xsl/Transform . Acest spatiu este
referit, in general , cu prefixul XSL , nefiind obligatoriu. Se poate folosi orice alt prefix .
Observatie!
Nu este recomandata extinderea spatiului de nume XSLT prin elemente si atribute noi.

3. Tipuri de date XSLT 1.0.


- boolean -> caracterizat de valori true/false;
- number-> numar in dubla precizie pe 64 de biti;
- string -> reprezinta orice secventa de 0,1 sau mai multe caractere;
- node-set-> reprezinta o colectie neordonata de valori fara duplicate;
- result true fragment -> reprezinta un fragment din arborele rezultat.

4. Modelul general al unei foi de stiluri XSL


In general, foile de stiluri XSL sunt construite dupa modelul:
< xsl: stylesheet version=1.0 xmlns= http://www.w3.org/1999/XSL/Transform >
<!--Aici sunt plasate elementele top-level-->
<xsl:variable name=...select...>
</xsl: variable>
<xsl:include href=..../>
.......
< !--Aici sunt plasate machetele (templates)-->
<xsl : template match=...name=...priority=...node=...>
</xsl:template>
</xsl:stylesheet>

5. Indicarea unei foi de stiluri XSL


Pentru a indica faptul ca un document oarecare este o foaie de stiluri XSL este esential sa
cunoastem ambele elemente xsl:styleseet si xsl:transform.

Sintaxa elementelor xsl:stylesheet


<xsl:stylesheet id=...extension-element-prefixes=....exclude-result-prefixes=....version=...>
</xsl: stylesheet>

Sintaxa elementelor xsl:transform

<xsl:transform id=...extension-element-prefixes=...exclude-result-prefixes=...version=...>
</xsl:transform>
O foaie de stiluri XSL este marcata de elementul radacina al acesteia. Acesta poate fi
xsl:stylesheet sau xsl:transform. Cele 2 elemente sunt sinonime (din punct de vedere al efectului), de
aceea vom folosi numai pe xsl:stylesheet.
Forma corecta in marcarea unei foi de stiluri XSL este:
<xsl: stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform > .
Pentru a avea acces la elementele si atributele XSLT trebuie specificat spatiul de nume
http://www.w3.org/1999/Transform. Este obliatorie si specificarea atributelor version cu valoare 1.0.
Foile de stiluri sunt documente cu extensia .xsl.

6. Referirea unei foi de stiluri XSL dintr-un document XML


Pentru a atasa unui document XML o foaie de stiluri se introduce imediat dupa declaratia XML
urmatoare, instructiunea de procesare:
<?xml_stylesheet type=text/xsl href=uri?>
unde - uri este un URL care indica spre locatia foii de stiluri ( daca si foaia de stiluri si documentul XML
se afla in acelasi director vom scrie doar numele foii de stiluri);
Exista posibilitatea sa ne definim foaia de stiluri in interiorul documentului, caz in car putem
folosi :
<?xml-stylesheet type=text/xsl href=#my_stylesheet?>
<!DOCTYPE...>
<my_xml>
<my_element>
<xsl:stylesheet id=#my_stylesheet version=1.0 xmlns:xsl=
http://www.w3.org/1999/XSL/Transform>
</xsl:stylesheet>
</my_element>
</my_xml>
Pseudo-atributele (nu au acelasi statut ca si atributele normale) href si type sunt obligatorii.
Instructiunea de procesare xml-stylesheet mai poate avea urmatoarele pseudo-atribute optionale:
- alternate : Daca are valoarea no(implicit) atunci foaia curenta este foaia de stiluri principala.
- media: Un sir de caractere ce indica mediul in care ar trebui folosita acea foaie de stiluri.
Valorile posibile sunt screen (implicit),tty,tv, projection, handheld, print, braille,
aural,ale.
- chauset: Set de caractere al foii de stiluri (UTF-8,ISO-8859-1).
- title : Un sir de caractere ce reprezinta un nume.

7. Elemente si atribute XSLT 1.0.


Clasificarea elementelor XSLT dupa scopul acestora:

declararea fisierelor de stiluri XSL => XS|: stylesheet, xsl:transform;


Crearea de noduri noi=> xsl:element, xsl:attribute, xsl: text, xsl:comment, xsl:processinginstruction, xsl:attribute:set;
Iterare => xsl : for-each;
Sortare => xsl:sort;
Lucru cu spatii => xsl:strip-space, xsl:preserve-space;
Elemente contitionale => xsl:choose (xsl:when, xsl:otherwise), xsl:if;
Calculare/extrageri valori => xsl:value-of;
Copiere noduri => xsl:copy-of, xsl:copy;
Declarare variabile/elemente => xsl:variable, xsl:param;
Depanare bazata pe mesaje => xsl:message;
Importarea/includerea de fisiere XSL => xsl:import, xsl:include;
Apel sabloane => xsl:call-template
Compatibilitate=> xsl:fallback;
Indecsi=>xsl:key;
Inlocuire spatii de nume => xsl:namespace-alias;
Definirea si aplicarea sabloanelor => xsl:template, xsl:apply-templates, xsl:apply-imports;
Formatarea numerelor = > xsl:number, xsl:decimal-format;
Selectarea formatului rezultatului =>xsl:output;
Pasarea parametrilor => xsl:with-param;

7.1 Element xsl:template


Sintaxa:
<xsl:template watch=... name=... priority=... mode=...>
</xsl:template>
Elementul xsl:stylesheet suporta o serie de elemente copil XSLT si nu numai. Cel mai cunoscut
element este elementul xsl:template este folosit pentru a defini machetele de transformare. Atributul
cel mai important al este match. Valoarea acestui atribut reprezinta expresie xPath ().
Aceasta expresie este practic sablonul despre care discutam si este folosit pentru a asocia o macheta cu
unul sau mai multe noduri_element/noduri_atribut XML.
7.2 Elemente xsl:value-of
Sintaxa: <xsl:value-of select=... disable-output-escaping=.../>
Acest element xsl este folosit pentru a atrage din documentul xml valorile atributelor si
continutul elementelor cu scopul de a le plasa in rezultatul transformarii. Principalul atribut al
elementului este xsl:value-of care este si obligatoriu, este atributul select a carui valoare este
reprezentata de expresia xpath folosita pentru a indica nodul sau nodurile care vor fi selectate. Acest
element accepta si un atribut optional numit disable-output-escaping care poate lua valoarea "yes" sau
"no". Daca valoarea este "yes" atunci caracterele speciale de genul "<",">" apar in rezultatul
transformarii exact in aceasta forma, dar daca este "no" (implicit) atunci caracterele speciale apar in
rezultatele transformarii ca referinte la entitati &lt; &gt;

7.3 Elemente xsl:for-each


Sintaxa:
<xsl:for-each select... >
</xsl:for-each>
Acest element este asemanator cu instructiunea for din limbajele de programare care permite
parcurgerea unui set de noduri si selectarea fiecarui nod ..... . Atributul cel mai important, care este si
oblogatoriu este selet, folosit pentru a indica setul de noduri ce va fi parcurs. Valoarea acestui atribut
este o expresie XPath.
7.4 Elemente xsl:sort
Sintaxa:
<xsl:sort selet=... lang=... data-type=... order=... case-order=... />
Acest element reprezinta operatia de sortare (ordonare). In general elementul xsl:sort este
plasat in interiorul unui element xsl:for-each.
Atributele acceptatesunt:
select - valoare este o expresie XPath, indica setul de noduri care se doreste a fi sortat
(optional);
lang -valoarea este cod de limba : indica limba care va fi folosita pentru sortare (optional);
data-type - valoarea poate fi text, number, qname: indica tipul datelor care vor fi
sortate(implicit : text);
order - valoarea poate fi ascending sau descending : indica ordinea de sortare (implicit
ascending)(optional);
case-order- valoarea poate fi upper-first, lower-first: indica modul in care se face ordonarea.
Pentru valori "upper-first" se vor ordona mai intai literele cu majuscule si apoi minuscule
(optional).
7.5. Elemente xsl:if
Sintaxa:
<xsl:if test=...>
</xsl:if>
Acest element este similar instructiunii if din limbajele de programare.
Elementul xsl:if apare in general intr-un element for-each. Atributul cel mai important care este si
obligatoriu este test. Valoarea acestui atribut reprezinta o expresie conditionala.
7.6 Elemente xs:choose
Sintaxa : <xsl:choose></xsl:choose>
Sintaxa elementului xsl:when <xsl:when test=...></xsl:when>
Sintaxa elementului xsl:otherwise <xsl:otherwise></xsl:otherwise>

Acest element este folosit impreuna cu alte 2 elemente xsl: when si otherwise. Cele 3 elemente
sunt asemanatoare cu instructiunea switchi-case-default din limbajele de programare, fiind folosite
pentru gruparea mai multor teste conditionale. Principalul atribut se numeste test si are ca valoare o
expresie conditioanla. Elementul xsl:choose este folost in general in interiorul unu element xsl:for-each
si are forma generala:
<xsl:choose>
<xsl:when test="expresie_1">
...
</xsl:when>
<xsl:when test="expresie_2">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
<xsl:choose>

8. Functii XSL
Pe langa cele 100 de functii ale limbajului XPath, XSLT mai suporta si urmatoarele functii:

current: returneaza un set de noduri(node-set) care contine numai nodul curent;


document: returneaza unul sau mai multe noduri (node-set) din documente XML externe.
Documentul XML extern trebuie sa fie valid si parsabil.
element-available : returneaza o valoare booleana (boolean) care indica daca procesorul XSLT
suporta sau nu elementul specificat prin nume(string).
format-number: converteste un numar (number) la un sir de caractere (string).
function-available: returneaza o valoare booleana (boolean) ce indica daca procesorul XSLT
suporta sau nu functia specificata (se pot testa si functiile XPath);
generate-id: returneaza un sir de caractere generat automat (string) . Acesta identifica in mod
unic nodul sau nodurile specificate (node-set).
key: se foloseste impreuna cu elementul xsl:key pentru a localiza un nod sau mai multe noduri
(node-set)
system-property: returneaza valoarea unei proprietati de sistem specificata prin nume (string);
unparsed-entity-uri: primeste numele unei entitati neparsabile (string) si returneaza URI-ul
acesteia (string).

CURS 11
3 ianuarie 2011
XSL( Extensible Stylesheet Language)
3. XSL-FO (Extensible Stylesheet Language -Formating Object)
XSL-FO dateaz din 2001 i aparine consoriului W3C. Se folosete versiunea 1.0 iar specificaia
oficiala se gaseste la adresa www.w3.org/TR/xs .
XSL-FO reprezint un limbaj de tag-uri bayat pe specificaiile XML i folosit pentru a descrie
regulile de formatare a datelor din documentul XML, cu scopul de a le afia sau tipri.
XSLT reprezint un vocabular de transformare a fiierelor XML n alte fiiere.
XSL-FO reprezint un vocabular de prezentare a datelor din fiierele XML.
Spaiul de nume pentru XSL-FO se afl la adresa http://www.w3c.org/1999/XSL/Format . Acesta
este referit prin prefixul .fo sau .fob.
1.Structura fiierului
1. < ?xml version =1.0 encoding=ISO-8859-1 ?>
2. <fo:root xmlns:fo=http://www.w3org/1999/XSL/format>
3.
<fo:layout-master-set>
<!--Aici vin toate paginile tipar-->
4.
<fo:simple-page-master master-name=nume>
<!--Aici vine o singura pagina tipar-->
</ fo:simple-page-master>
5.
<!--Aici vin secventele de pagini tipar -->
<fo:page-sequence-master master-name=nume>
..........
</fo:page-sequence-master>
</ fo:layout-master-set>
6.
<!--Aici vin declaratiile globale pentru foi de stiluri-->
< fo :declarations>
........
</fo :declarations>
7.
<fo :page-sequnce master-reference= name>
<!--Aici vine continutul paginii-->
</ fo :page-sequnce >
........
</fo:root>
1. - Se refer la declaraia XML
2. - Elementul fo:root reprezint elementul rdcin a unui document XSL-FO.
- Declararea spaiului de nume folosit la documentele XSL-FO se face prin intermediul
atributului xmlns. Acest element nu influenteaz n nici un fel modul n care se realizeaz

formatarea. El accept un singur atribut opional numit media-usage, folosit pentru a indica
modul de prezentare al paginii rezultat.
El are 4 valori:
- auto: valoarea implicit;
- paginate: din elementul fo:page-sequence se va genera o secvena de pagini rezultat;
- bounded-in-one-dimension: se genereaz o singur pagin rezultat pentru fiecare
element fo:page-sequence;
- unbounded: se genereaz o singur pagin rezultat pentru fiecare element fo:pagesequence nespecificnd atributele page-width i page-height;
3. Elementul fo:layout-master-set conine una sau mai multe declaraii de pagini tipar i/sau
una sau mai multe declaraii de secven, de pagini tipar. Acest element este obligatoriu i
poate aprea o singur dat n cadrul fiierului.
4. Elementul fo:simple-page-master.
Formatarea fiierului XML folosind limbajul XSL-FO se face pe baza aa numitelor pagini
tipar. Aceste pagini se obin pe baza paginilor master.
XSL-FO definete un singur tip de pagin master definit de o suprafa rectangular, care
poate fi personalizat prin intermediul fo:simple-page-master.
Putem percepe pagina master ca pe o matri cu caracteristici ajustabile i pe baza lor se
pot crea mai multe pagini tipar.
Cel care scrie documentul XSL-FO poate defini oricte pagini tipar, prin folosirea
repetat a fo:simple-page-master. Fiecare pagin tipar e identificat printr-un nume unic ce
reprezint valoarea atributului master-name.
5. Elementul fo:page-sequence-master.
Dac exist mai multe pagini tipar acestea se pot grupa n secvene de pagini tipar, prin
intermediul acestui element. Folosirea acestui element e opional.
6. Elementul fo:declarations este folosit la gruparea declaraiilor globale pentru o foaie de
stiluri. Acesta este opional i poate aprea o singur dat.
7. Elementul fo:page-sequence. Pentru a defini paginile documentului rezultat, se apeleaz la
unul sau mai multe elemente fo:page-sequence (cel puin unul e obligatoriu).
Paginile documentului rezultat sunt grupate n secvene de pagini rezultat i fiecare
secven, ncepe pe o pagin rezultat nou .
Fiecare pagin rezultat din secven, are asociat o pagin tipar. Specificarea paginii se
face prin setarea atributului master-reference.

2. Afiarea rezultatului procesrii unui fiier XSL-FO


Pentru a afia rezultatul procesrii se apeleaz la suprafee rectangulare numite cutii (boxes).
Orice tip de coninut: text, imagini, tabele, liste, este formatat i afiat prin intermediu acestor cutii.
Cele mai cunoscute cutii sunt:

Paginile rezultat (pages)

Dup procesarea unui document XSL-FO se obine un document numit document


rezultat, format dintr-un set de pagini, numite pagini rezultat.
Pagina este considerat cea mai mare cutie, restul fiind ncorporat n ea.
Exemplu:
Pentru a interpreta documetul XSL-FO-FOP (Formatting Objects Processor) v.0205

Regiuni (regions)
Regiunile sunt suprafee rectangulare principale. Fiecare pagin rezultat are 5 astfel de
regiuni reprezentate de elementele urmtoare:
- fo:region-body
- fo:region-start
- fo:region-end
- fo:region-before
- fo:region-after

Blocurile de coninut (block areas)


Sunt suprafee rectangulare care pot conine: text, imagini, linii de coninut , suprafee
in-line, blocuri de coninut.
Acestea sunt distribuite secvenial. Fiecare bloc de coninut este caracterizat de 3
straturi ce nconjoar acest coninut.

Linie de coninut (line areas)


Sunt suprafee rectangulare ce se gsesc n blocurile de coninut i pot conine
suprafee in-line i spaii.

Suprafee in-line (in-line areas)


Suprafeele in-line sunt suprafee rectangulare ce se succed n interiorul liniilor de
coninut i care pot conine: un singur caracter, o ecuaie sau alte suprafee in-line.

Observatie!
Apare fenomenul de motenire a valorilor atributelor. Exist atribute pentru:
- tipul de scriere (writing mode)
- tipul de indentare
- tipul de space before
- tipul de space after

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