Documente Academic
Documente Profesional
Documente Cultură
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>
.
<?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.
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.
Referina la entitate
<
>
&
"
Caractere
<
>
&
apos
&apos
Exemplu:
1. <service> < DA > </service>
2. <TITLE> Tom & Jerry </TITLE>
1.5 Comentarii
Comentariile pot fi oriunde n fiierul XML i pot conine orice caracter, mai putin - -.
Exemplu:
1. <!- --->
2. <!--air.xml-->
CURS 3
18 octombrie 2010
3.
4.
5.
6.
7.
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.
Forma general:
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.
Forma general:
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
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 >
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>
3.Definiii entiti
Forma general:
<!ENTITY continut>
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:
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
</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>
<!--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 :
-
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.
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.
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.
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>
Exemplu :
XML : <cv>
<nume> Marinescu </nume>
<prenume> Ion </prenume>
<sex> M</sex>
<telefon> 0123456</telefon>
<adresa> strada Pravat </adresa>
</cv>
XSD:
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)
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/>
<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:simpleType>
3. Definirea tipurilor complexe pentru elemente care conin numai text (au i atribute)
Exemplu :
XML : <nume_firma tip= SRL> Air </nume_firma>
XSD:
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:
CURS 8
6 decembrie 2010
o
o
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).
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
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.
/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
1.8.
Operatori XPATH
Expresiile XPath suport urmatorii operatori:
1.9.
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.
<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.
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:
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.
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
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