Sunteți pe pagina 1din 176

XML

CUPRINS
Conversaţia 1. De la (X)HTML la XML.............................................. 3
XML – eXtensible Markup Language ...................................................... 3
XML – XML, un metalimbaj utilizat pentru descrierea datelor …………………. 5
XML – Regulile de aur ale limbajului XML …………………………………………….. 6
XML – Temă ………………………………….…………………………………………………. 18

Conversaţia 2. Creaţi documente XML bine formate .................... 19


XML – Structura unui document XML bine format …..……………………………. 19
XML – Creaţi elemente XML cu tipuri de conţinut diferite .……………………… 28
XML – Metode şi instrumente pentru crearea documentelor XML bine
formate ………………………………………………………………………………….. 32
XML – Temă ……………………………………………………………………………………… 47

Conversaţia 3. Inseraţi caractere speciale cu XML ....................... 49


XML – Caracterele speciale pot provoca erori de prelucrare …………………... 49
XML – Inseraţi secţiuni CDATA ………………………………………………………...... 50
XML – Utilizaţi entităţi predefinite ……………………………………………………….. 52
XML – Definiţi şi utilizaţi o referinţă de entitate generală internă ..………….. 53
XML – Temă .………………………………………………………………………………..….. 59

Conversaţia 4. Creaţi documente XML valide ............................... 61


XML – Să nu uităm … documentele XML bine formate ………………………….. 61
XML – Definiţi structura unui document XML valid. Aplicaţii …………………… 62
XML – Adăugaţi atribute unui element XML. Aplicaţii …………………………….. 76
XML – Temă …………………………………………………………………………………….. 84

Conversaţia 5. Afişaţi documentele XML cu ajutorul foilor de


stiluri în cascadă ..................................................... 87
XML – Utilizaţi foile de stiluri CSS ………………………………………………………… 87
XML – Creaţi fişierul de stiluri (foaia de stiluri) CSS. Aplicaţii .................... 88
XML – Legaţi o foaie de stiluri CSS la un document XML ……………………….. 94
XML – Inseraţi elemente HTML în documentele XML …………………………….. 96
XML – Temă ……………………………………………………………………………………… 98
Conversaţia 6. Afişaţi documentele XML cu ajutorul foilor de
stiluri XSLT .............................................................. 99
XSLT – eXtensible Stylesheet Language Transformation ………………………. 99
XSLT – Utilizaţi foile de stiluri XSLT …………………………………………………….. 100
XSLT – Creaţi fişierul de stiluri (foaia de stiluri) XSLT ……………………………. 101
XSLT – Legaţi o foaie de stiluri XSLT la un document XML …………………….. 108
XSLT – Principiul unei transformări XSLT. Aplicaţii ………………………………… 110
XSLT – Alte elemente XSLT propuse de XML ……………………………………….. 117
XML – Temă ….………………………………………………………………………………… 118

Conversaţia 7. Utilizaţi XSLT cu XPath pentru afişarea


documentelor XML .................................................. 121
XPath – XML Path Language, limbaj pentru adresarea
fragmentelor XML. Aplicaţii ………………………………………. 121
XML – Inseraţi modele HTML în foile de stiluri XSLT …………….. 129
XML – Combinaţi CSS şi XSLT ……………………………………………. 136
XSLT, XPath – Temă …………………………………………………………………….. 138

Conversaţia 8. De la DTD la XML Schema ..................................... 139


XML – Scheme XML …………………………………………………………………………... 139
XML – Tipuri de date predefinite utilizate în schemele XML .…………………… 141
XML – Construiţi o schemă XML ………………………………………………………….. 143
XML – Software XML Schema. Aplicaţii ………………………………………………… 149
XML – Temă ……………………………………………………………………………………… 158

Conversaţia 9. Complemente XML ................................................. 159


XML – DOM, interfaţă pentru manipularea documentelor (X)HTML
şi XML ……………………………………………………………………………………. 159
XML – Script-uri XML …………………………………………………………………………. 160
XML – Creaţi prima pagină Web interactivă ………………………………………….. 161
XML – Inseraţi o imagine într-un document XML ………………………………….. 170
XML – Creaţi legături şi interogări în documentele XML …………………………. 175
XML – Temă ……………………………………………………………………………………… 177

Bibliografie ....................................................................................... 179


Conversaţia 1

De la (X)HTML la XML
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – eXtensible Markup Language
f XML – XML, un metalimbaj utilizat pentru descrierea datelor
f XML – Regulile de aur ale limbajului XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

XML eXtensible Markup Language

Ce este XML?
Limbajul XML, acronimul de la eXtensible Markup Language, a fost
definit de consorţiul W3C în anul 1996.

Remarcă. Definiţia completă a limbajului XML dată de W3C o găsiţi la adresa:


http://www.w3.org/TR/REC-xml.
Dacă nu sunteţi documentat în XML, vă cer permisiunea să prezint în câteva
cuvinte XML-ul:

9 XML, ca şi HTML se bazează pe tag-uri.


9 XML poate fi folosit de autorii de pagini Web ale căror nevoi depăşesc
limitele HTML-ului.
9 XML a fost creat pentru descrierea structurilor de date.
4
9 Tag-urile XML nu sunt predefinite; altfel spus, XML permite crearea
tag-urilor personalizate, ceea ce este nemaipomenit.
9 Pentru descrierea structurilor de date, documentele XML pot utiliza un
DTD (Document Type Definition).
9 Un document care conţine un DTD este autodescriptiv.
Remarcă. Pentru a înţelege XML-ul, trebuie să vă aduceţi aminte ce este (X)HTML-ul!
(vezi Liviu Dumitraşcu, (X)HTML, Editura Universităţii din Ploieşti, 2003).

XML va înlocui HTML-ul?


La ora actuală, răspunsul la această întrebare este NU. HTML rămâne
primul limbaj utilizat pentru a indica browser-elor cum să afişeze
informaţiile pe Web.

XML a fost conceput pentru a stabili şi a menţine o interoperabilitate cu


HTML.

Remarcă. Cele 10 obiective oficiale ale limbajului XML au fost publicate pe site-ul
consorţiului W3C, la adresa http://www.w3.org/TR/REC-xml.

Aplicaţii XML
Pe bună dreptate, vă puteţi întreba ce faceţi cu XML în practică? Teoria
fără praxă….

Prezentăm în continuare, o scurtă listă de aplicaţii XML:


9 structurarea datelor în baze de date;
9 structurarea documentelor;
9 grafică vectorială (VML, sau Vector Markup Language);
9 prezentări multimedia (SMIL – Synchronized Multimedia Integration
Language; HTML + TIME, sau HTML Timed Interactive Multimedia
Extensions);
9 comunicarea deschisă între aplicaţii, via Web cu ajutorul mesajelor
bazate pe XML (SOAP, sau Simple Object Access Protocol);
5
9 schimbul de informaţii financiare (OFX, sau Open Financial
Exchange);
9 tranzacţii comerciale pe Internet (XFDL, sau eXtensible Forms
Description Language);
9 resurse umane (HRMML, sau Human Resource Management Markup
Language);
9 formatarea formulelor matematice pe Web (MathML, sau
Mathematical Markup Language);
9 descrierea structurilor moleculare (CML, sau Chemical Markup
Language);
9 scrierea partiturilor muzicale (MusicML, sau Music Markup
Language);
9 buletine meteo (OMF, sau Weather Observation Markup Format);
9 tranzacţii imobiliare (RETS, sau Real Estate Transaction Standard).

XML, un metalimbaj utilizat pentru


XML
descrierea datelor
Dacă sunteţi documentat în XML, aţi întâlnit cu siguranţă această frază:
„XML este un metalimbaj utilizat pentru descrierea datelor”.

Această afirmaţie nu ne oferă nici un detaliu privind metalimbajul în


sine. În realitate, noţiunea de metalimbaj vă este bine cunoscută din
primii ani de şcoală.

Remarcă. Un metalimbaj este un limbaj utilizat pentru descrierea unui alt limbaj.

Structura unei fraze din limbajul natural este un exemplu fundamental


de metalimbaj.

Iată cum descompunem în elemente de metalimbaj fraza:

Ultimul tren a plecat.


6
Fraza poate fi descompusă după cum urmează:
9 adjectiv (ultimul);
9 substantiv (tren);
9 verb (a plecat);
9 sfârşit de frază (.).
Această structură poate fi utilizată ca model în metalimbajul folosit
pentru descrierea unei familii infinite de fraze de forma:

<adjectiv><substantiv><verb><sfârşit>

în care, elementele de metalimbaj sunt încadrate între „<” şi „>”.

Pentru a delimita componentele unei fraze putem adopta sintaxa


utilizată în (X)HTML, după cum urmează:

<adjectiv> Ultimul </adjectiv>


<substantiv> tren </substantiv>
<verb> a plecat </verb>
<sfârşit> . </sfârşit>
Putem scrie structura fundamentală, ca model pentru acest tip de fraze.

<adjectiv> </adjectiv>
<substantiv> </substantiv>
<verb> </verb>
<sfârşit> </sfârşit>

XML Regulile de aur ale limbajului XML

Înainte de a începe crearea unui document XML este important să


cunoaşteţi câteva din regulile XML pe care este bine să le respectaţi.

Regulile pe care trebuie să le respecte documentele XML facilitează atât


crearea instrumentelor de analiză a documentelor cât şi lucrul efectiv cu
XML. Regulile sunt simple, multe dintre ele fiindu-vă cunoscute de la
HTML.
7
Regulile XML pot fi clasificate în două categorii:

9 reguli de sintaxă XML;

9 reguli de validitate a documentelor XML.

Regulile de sintaxă XML


Cea mai mare parte a regulilor de sintaxă XML sunt mult mai stricte
decât cele aplicate unui document HTML.

Din acest motiv vom proceda la o prezentare comparativă a regulilor


care se aplică unui document HTML, XHTML respectiv XML.

Iată cum definim paragraful: „Învaţă să priveşti dincolo de aparenţe!” în


toate cele trei limbaje (figura 1.1).

Limbaj Codul sursă


HTML <P>Învaţă să priveşti dincolo de aparenţe!</P>

XHTML <p>Învaţă să priveşti dincolo de aparenţe!</p>

Figura 1.1 XML <paragraf>Învaţă să priveşti dincolo de


aparenţe!</paragraf>
Remarci:
9 În exemplul precedent sintaxa XHTML este judecată corect atunci
când exemplul HTML nu a fost considerat ca un document XHTML
bine format, şi nu trebuie să fie analizată de un parser. Aceasta nu
înseamnă că un navigator nu va face analiza documentului, nu-l va
interpreta şi nu va identifica tag-ul care nu este bine format.
9 În cea mai mare parte a cazurilor, navigatoarele nu vor analiza
documentul XHTML ca pe un document XHTML ci mai degrabă ca un
document HTML; eventual, ele vor analiza documentul XHTML ca un
document XML. Pentru moment puteţi folosi un singur parser pentru a
verifica erorile conţinute de documentele dumneavoastră, înainte ca
acestea să fie găzduite de un server.

Închideţi toate elementele


Toate elementele XML trebuie să conţină, obligatoriu un tag de
deschidere şi unul de închidere. Acesta nu este cazul limbajului HTML, în
8
care mai multe elemente sunt definite cu tag-urile de închidere
facultative.

Remarci:
9 În figura 1.1 (limbajul XHTML), elementul <p> conţine tag-ul de
început (<p>), conţinutul (date de tip caracter) şi tag-ul de sfârşit
(</p>).
9 În figura 1.1 (limbajul HTML), codul sursă conţine tag-ul de început
(<P>), conţinutul propriu-zis (date de tip caracter) şi opţional tag-ul
de sfârşit </P>.
9 În figura 1.1 (limbajul XML), elementul <paragraf> conţine tag-ul de
început <paragraf>, conţinutul (date de tip caracter) şi tag-ul de
sfârşit </paragraf>.
9 În limbajul HTML, singurul mod care-i permite navigatorului să deducă
situaţia în care un paragraf s-a închis este prezenţa unui alt element,
<P>, de exemplu. Deschiderea unui alt element sugerează că
elementul precedent trebuie mai întâi să fie închis.
9 Spre deosebire de HTML, XHTML impune ca toate elementele să fie
închise.

Închideţi elementele vide


Vă mai amintiţi de cunoştinţele noastre mai vechi: <IMG> şi <BR> pe
care le-aţi utilizat în HTML? În XML, spre deosebire de HTML aceste
două elemente trebuie închise, dar fiind elemente vide (lipsite de
conţinut), ele urmează o sintaxă specială.

Iată cum inserăm o imagine, sigla.jpg în toate cele trei limbaje (figura
1.2).

Limbaj Codul sursă


HTML <IMG src=”sigla.jpg”>

XHTML <img src=”sigla.jpg” />


Figura 1.2
XML <imagine source=”sigla.jpg” />
Conform regulilor de sintaxă XML, elementele vide trebuie să se închidă,
folosind una din metodele prezentate mai jos:
9 Metoda 1 – Închideţi tag-ul cu un spaţiu şi o bară oblică (vezi
figura 1.2);
9
9 Metoda 2 – Adăugaţi un tag de închidere (Exemplu: <br>
</br>).
Remarcă. Vă sugerăm să utilizaţi prima metodă, care vă oferă o economie de spaţiu şi
de timp.

Utilizaţi ghilimelele pentru a delimita valorile atributelor


Limbajul HTML permite definirea fără ghilimele a valorilor atributelor. În
XML, XHTML regula este alta: toate valorile atributelor trebuie să fie
delimitate de ghilimele.

Iată cum delimităm valorile a trei atribute în limbajele: HTML, XHTML,


XML (figura 1.3).

Limbaj Codul sursă


HTML <P align=center>Învaţă să priveşti dincolo de
aparenţe!

XHTML <p style=”text-align:center”>Învaţă să priveşti


dincolo de aparenţe!</p>

Figura 1.3 XML <mesaj prioritate=”urgent”>Să nu-mi înşeli


niciodată credinţa!</mesaj>

Toate atributele trebuie să conţină valori


Pentru ce mai mare parte a atributelor, această regulă este destul de
simplă.

Iată cum definim valorile pentru atributul checked, care aparţine


elementului <INPUT> în limbajele HTML şi XHTML (figura 1.4).

Limbaj Codul sursă


HTML <INPUT name=”C1” type=”checkbox” id=”C1”
value=”Java” checked>

Figura 1.4 XHTML <input name=”c1” type=”checkbox” id=”c1”


value=”Java” checked=”checked” />
10
Remarcă. În limbajul HTML, sintaxa tag-ului <INPUT> este corectă, dar în XHTML,
conform regulilor XML (toate atributele trebuie să conţină valori) sintaxa nu este
corectă. Nu ne rămâne decât să definim atributul egal cu el însuşi.

Elementele XML sunt case-sensitive


În XML caracterele mici sunt interpretate diferit de cele mari
(case-sensitive), ceea ce înseamnă că va trebui să utilizaţi elementele şi
atributele aşa cum au fost ele scrise în DTD-ul (Document Type
Definition) asociat.

Dacă decideţi să nu utilizaţi un DTD, limbajul XML impune întotdeauna


ca unui tag de deschidere să-i corespundă un tag de închidere. De
exemplu, tag-ul <P> nu este acelaşi cu tag-ul <p>.

Remarcă. Nu există nici-un motiv care ne poate obliga ca elementele şi atributele


DTD-urilor să fie scrise cu minuscule. Dar, regula fiind stabilită, va trebui s-o aplicaţi în
documentele dumneavoastră XHTML şi XML.

Imbricaţi corect elementele


În general, tag-urile sunt imbricate, ceea ce înseamnă că un element
poate conţine alte elemente. Tag-urile XML funcţionează în acelaşi mod
ca şi parantezele în matematică.

Regulile de imbricare sunt următoarele:

9 Fiecărui tag de deschidere trebuie să-i corespundă un tag de


închidere. Numele celor două tag-uri trebuie să fie identice.
9 Tag-ul de închidere al unui element fiu trebuie să preceadă
tag-ul de închidere al părintelui său. Altfel spus, un fiu trebuie
să fie închis înaintea părintelui său.
9 Elementele imbricate sunt „fii ai elementului părinte”.
11
Exemple de elemente HTML, XHTML, XML corect imbricate
9 HTML <P> Acesta este <B> venitul meu </B>!
9 XHTML <p> Acesta este <b> venitul meu </b> </p>!
9 XML <întreprindere> TIMPURI NOI <cod> 2000 </cod>
</întreprindere>

Exemple de elemente XML incorect imbricate


9 XML <întreprindere> TIMPURI NOI <cod> 2000
</întreprindere> </cod>

9 XML <rezultate> <victorii> 6 </rezultate> </victorii>

Reguli de validitate a documentelor XML


Regulile de sintaxă se învaţă şi se aplică uşor deoarece sunt foarte
simple dar şi foarte stricte. Un document XML este bine format dacă
respectă toate notaţiile şi regulile structurale XML.

Dacă un document XML bine format respectă regulile unui DTD asociat
el se numeşte document valid. Atenţie! Nu întotdeauna un document
bine format are o structură validă!

Cele mai multe restricţii de validitate sunt facultative; ele merită să fie
cunoscute chiar dacă nu sunt necesare!

Utilizaţi un element rădăcină!


Toate documentele XML trebuie să conţină cel puţin un element
rădăcină. Această regulă este foarte simplă. Elementul rădăcină trebuie
să conţină toate celelalte elemente ale paginii.

Remarcă. În limbajul XHTML, elementul rădăcină este elementul <html>. Poate, unii
dintre dumneavoastră îşi vor pune întrebarea: „de ce nu s-a schimbat elementul
rădăcină <html> în <xhtml>?”. Limbajul XHTML utilizează exact acelaşi vocabular ca
limbajul HTML. Această caracteristică nu poate decât să uşureze efortul pe care îl fac
parser-ele!
12
Un element rădăcină este delimitat printr-un tag de deschidere plasat la
începutul documentului şi un tag de închidere plasat la finele
documentului.

În figura 1.5 este prezentat tipul de date email (element rădăcină) sub
formă de structură arborescentă.

email <email>
to <to> … </to>
from <from> … </from>
date <date> … </date>
subject <subject> … </subject>
Figura 1.5 body <body> … </body>
</email>
În figura 1.6 este prezentat documentul XML, care descrie datele e-mail
(vezi figura 1.5) de o manieră structurată.

Figura 1.6

Declaraţia XML este facultativă


Deşi declaraţia xml este facultativă, consorţiul W3C recomandă folosirea
acesteia. Declaraţia xml semnalează procesorului că documentul pe care
îl prelucrează este un document XML. Declaraţia XML poate accepta trei
atribute: version, encoding şi standalone (figura 1.7).
13

Figura 1.7

Remarci:
9 Declaraţia xml utilizează caractere mici cu excepţia valorii atributului
encoding (UTF – 8).
9 Întrucât nu există decât o singură versiune XML şi cum declaraţia XML
este facultativă, ea poate fi abandonată. Totuşi, este puţin probabil că
specificaţia XML nu se va dezvolta. Cum interpretaţi declaraţia <?xml
version=”2.0”>? Dacă utilizaţi declaraţia xml la începutul
documentului, procesorul curent sau cel viitor vor ştii, fără nici-o
ambiguitate cum să prelucreze documentul dumneavoastră.
9 O a doua versiune a limbajului XML a fost publicată dar ea nu
corectează decât erorile minore ale specificaţiei 1.0; ea nu reprezintă
modificări de conţinut pentru standard. Titlul oficial al acestei versiuni
este XML 1.0 (A doua versiune).

Declaraţia DOCTYPE este facultativă


Un document XML poate fi scris în două maniere:

9 documente bine formate;

9 documente valide.

Documente XML bine formate


În figura 1.8 este prezentat un document bine format (o mai veche
cunoştinţă a noastră!), care respectă regulile de gramatică şi de sintaxă
XML.
14

Figura 1.8

Dacă deschidem acest document în Internet Explorer (versiunea 5.0 sau


superioară) se obţine rezultatul afişat în figura 1.9.

Figura 1.9

Reguli:
9 Prima linie a acestui exemplu
<?xml version=”1.0” encoding=”ISO – 8859 – 2”?>
declară că documentul este scris în XML.
Valoarea atributului version nu poate fi în acest moment decât 1.0.
Atributul encoding se referă la definiţia setului de caractere utilizat în
documentul XML.
9 Această linie trebuie scrisă cu caractere mici. Nu este admisă nici-o
majusculă! În caz contrar, programul de verificare (parser) XML al
navigatorului va afişa o eroare – în acest caz documentul XML nu mai
este bine format.
9 Celelalte elemente XML au fost scrise cu tag-uri … inventate de noi:
(<email>…</email>; <to>…</to>; <from>…</from>;
<date>…</date>; <subject>…</subject>; <body>…</body>.
15
9 Toate elementele XML trebuie să conţină un tag de deschidere şi un
tag de închidere.
9 Elementele vide XML trebuie să se termine cu un spaţiu urmat de o
bară oblică.
9 Pentru a delimita valorile atributelor XML utilizaţi ghilimelele.
9 Toate atributele XML trebuie să aibă valori.
9 Toate documentele XML trebuie să aibă cel puţin un element
rădăcină.
9 Declaraţia XML este facultativă.
9 Tag-urile XML trebuie să fie imbricate în mod corect.
9 Numele tag-urilor pot conţine: caractere alfanumerice (litere şi cifre),
liniuţă (-), liniuţă de subliniere (_) şi trebuie să conţină cel puţin o
literă.
9 Numele atributelor se scriu cu minuscule.
9 Spre deosebire de HTML, sfârşitul unui document XML nu este marcat
cu </xml>.
9 Comentariile XML au aceeaşi sintaxă ca şi comentariile XHTML.
9 Un document bine format nu necesită un DTD (Document Type
Definition). Declaraţia DOCTYPE este facultativă.

Documente XML valide


Un document XML valid este un document XML bine format care conţine
în plus un DTD (Document Type Definition). Acest DTD defineşte
modelul documentului, adică structura tag-urilor. Un DTD integrat
într-un document XML poate fin intern sau extern documentului.

DTD intern
Două sunt tag-urile care ne permit să definim în interiorul documentului
XML propria noastră structură: <!DOCTYPE> şi <!ELEMENT>.

Tag-ul <!DOCTYPE> permite deschiderea unui bloc de definire a


tag-ului. Va trebui să dăm un nume acestui bloc. Sintaxa (reluăm
exemplul anterior: email), este prezentă în figura 1.10.

<!DOCTYPE email
[
Figura 1.10 …
]>
16
Numele poate conţine litere, cifre (în afară de prima literă) şi caracterul
de subliniere (underscore, caracterul _).

Tag-urile sunt apoi definite în interiorul parantezelor drepte. Tag-ul


<!ELEMENT> permite definirea unui tag. Sintaxa este următoarea:
<!ELEMENT nume_tag (conţinut)>

unde,

9 nume_tag desemnează numele tag-ului (cum indică numele său);


9 conţinut specifică la care tag (tag-uri) sau date este legat acest tag.
Astfel, pentru a defini elementul <email> care conţine tag-urile: <to>,
<from>, <date>, <subject>, <body>, vom scrie:

<!ELEMENT email (to, from, date, subject, body)>.

Pentru a atribui o valoare de tip text tag-urilor: to, from, date, subject,
body introduceţi #PCDATA (Parser Character Data), figura 1.11.

Figura 1.11
17
DTD extern
Dacă doriţi să definiţi un fişier DTD extern (ex.dtd) va trebui să creaţi un
nou fişier (vezi figura 1.12).

Figura 1.12

Pentru a include fişierul ex.dtd în fişierul XML, este suficient să adăugaţi


linia următoare:

<!DOCTYPE email SYSTEM ”ex.dtd”>

Remarcă. Cuvântul SYSTEM desemnează faptul că fişierul este definit local. Dacă utilizaţi
un DTD public, atunci va trebui să înlocuiţi SYSTEM cu cuvântul PUBLIC.

Fişierul complet mail.xml este prezentat în figura 1.13.

Figura 1.13

Aplicaţie

‰ În figura 1.14 este prezentat un document XML bine format şi valid


(client.xml), care defineşte tipul de date client (element rădăcină).
Comentaţi declaraţia DOCTYPE, care este obligatorie.
18

Figura 1.14

XML Temă

Testaţi-vă cunoştinţele
1. Care sunt cele 10 obiective ale limbajului XML?
2. Cum este utilizat XML-ul în practică?
3. Care sunt regulile de sintaxă XML pe care le-aţi reţinut?
4. Care dintre elementele de mai jos sunt case-sensitive:
9 HTML;
9 XHTML;
9 XML.
5. Ce este un document bine format?
6. Ce este un document valid?

Vizitaţi site-urile
9 http://www.w3.org/XML/
9 http://msdn.microsoft.com/xml/default.asp
9 http://www.oasis – open.org/cover/xml.html#applications
Conversaţia 2

Creaţi documente XML bine formate


•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – Structura unui document XML bine format
f XML – Creaţi elemente XML cu tipuri de conţinut diferite
f XML – Metode şi instrumente pentru crearea documentelor XML bine
formate
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

XML Structura unui document XML bine format

Un document bine format satisface un minimum de criterii de


conformitate XML. Atunci când creaţi un document XML bine format,
puteţi începe direct prin a adăuga elementele de care aveţi nevoie şi prin
a introduce datele documentului, exact ca la crearea unei pagini Web în
(X)HTML. După cum aţi remarcat în conversaţia anterioară, într-un
document XML dumneavoastră sunteţi aceia care … inventaţi propriile
elemente în loc de a utiliza elementele predefinite. Vă asigurăm că nu
veţi avea nici o problemă de prelucrare sau de afişare a unui document
XML bine format în Microsoft Internet Explorer.

După cum aţi putut constata (vezi Conversaţia 1), un document XML
conţine două părţi principale:
20
9 prologul;
9 elementul rădăcină (numit şi elementul document).

Pentru a înţelege mai bine anatomia unui document XML, vom face
referiri la documentul mail.xml, o mai veche cunoştinţă de-a noastră
(figura 2.1).
Să începem cu … prologul!

Figura 2.1

Prologul cuprinde primele două linii (figura 2.2).

Figura 2.2

Prima linie este declaraţia XML (opţională). Dacă vă hotărâţi să includeţi


totuşi o declaraţie XML, ea trebuie să apară la începutul documentului.
Cea de-a doua linie a prologului este un comentariu. Comentariile sunt
recomandate în măsura în care acestea facilitează citirea şi înţelegerea
codului sursă.

Remarcă. Prologul poate conţine de asemenea şi următoarele elemente opţionale:


9 un DTD (Document Type Definition), care defineşte tipul şi structura
documentului. Atunci când este utilizat, DTD-ul trebuie să fie plasat după
declaraţia XML;
9 o linie albă de spaţii;
9 una sau mai multe instrucţiuni de prelucrare.
21
Elementul rădăcină. Cea de-a doua parte a unui document XML

corespunde unui element unic desemnat ca element rădăcină sau


element document, care poate conţine alte elemente.

Într-un document XML, elementele indică structura logică a


documentului şi conţin informaţiile corespunzătoare. Un element tip
cuprinde un tag de deschidere, conţinutul elementului şi tag-ul de
închidere. Conţinutul elementului poate fi constituit din date de tip
caracter, alte elemente imbricate (nested), sau combinaţii ale celor
două.

Remarcă. Într-un document XML textul este un melange de tag-uri şi de date


de tip caracter sau date de tip text.
În exemplul nostru (documentul mail.xml), elementul rădăcină este
email. Tag-ul său de deschidere este <email>, tag-ul de închidere este
</email>, iar conţinutul său este alcătuit din 5 elemente: <to>,
<from>, <date>, <subject>, <body> (figura 2.3).

Figura 2.3

Remarci:
9 Numele care apare în tag-ul de deschidere şi în tag-ul de închidere ale unui
element se mai numeşte şi tipul de element.
9 Fiecare din elementele inserate în elementul email (to, from, date, subject,
body) nu conţin decât date de tip caracter.
9 Elementul rădăcină din cadrul unui document XML este similar elementului
BODY din cadrul unei pagini (X)HTML, cu singura deosebire că puteţi să-i
atribuiţi orice nume legal.
22
Elemente vide
Puteţi introduce de asemenea în documentul dumneavoastră un element
vid, altfel spus un element fără conţinut.

Puteţi crea un element vid plasând tag-ul de închidere imediat după


tag-ul de deschidere (figura 2.4).

Figura 2.4 <hr> </hr>

Sau, puteţi utiliza tag-ul specific elementului vid (figura 2.5).

Figura 2.5 <hr />

Remarci:
9 Cele două notaţii au aceeaşi semnificaţie.
9 Puteţi utiliza un element vid pentru a indica aplicaţiei XML efectuarea unei
acţiuni sau afişarea unui obiect.
9 Un element vid poate stoca informaţie utilizând atribute XML.

Adăugaţi atribute elementelor XML


Puteţi insera unul sau mai multe specificaţii de atribut în tag-ul de
deschidere al unui element sau în tag-ul elementului vid. O specificaţie
de atribut este o pereche nume-valoare care este asociată unui element.

În figura 2.6 este prezentat un exemplu de atribut (vânzare) căruia i s-a


atribuit valoarea RODIPET.

Figura 2.6 <pret vanzare=”RODIPET”> 30 euro </pret>

În figura 2.7 atributul sursa indică numele fişierului care conţine


imaginea pe care dorim s-o afişăm.

Figura 2.7 <sigla sursa=”Droopy.gif” />


23
Remarci:
9 Atributele reprezintă o alternativă la inserarea informaţiilor într-un document.
9 Utilizarea atributelor permite obţinerea unui mai mare grad de flexibilitate în
procesul prelucrărilor.
9 În figura 2.8 sunt prezentate câteva exemple de specificaţii de atribute
ilegale. Fără comentarii!

<curs tip=” ”seral” ”>


<album tip=”<CD>”>
Figura 2.8 <magazin tip=”C&A”>

Un document XML cu structură minimală


După cum am precizat, elementele din prologul unui document XML bine
format sunt toate opţionale. În consecinţă, prologul este el însuşi
opţional, iar documentul din figura 2.9 (document cu structură
minimală) conţine un singur element <logo>, care respectă norma XML
pentru ca acesta să fie un document bine format.

Figura 2.9

În figura 2.10 se prezintă rezultatul vizualizării documentului în Internet


Explorer.

Figura 2.10
24
Aplicaţie

‰ Creaţi un document XML cu structură minimală, pornind de la secvenţa de


cod (X)HTML din figura 2.11.

Figura 2.11

În figura 2.12 se prezintă codul sursă XML, în care tag-urile … imaginate


de noi sunt semnificative, nu creează confuzii şi descriu conţinutul lor.

Figura 2.12

Remarci:
9 Acest document simplu XML poate fi citit şi înţeles fără a utiliza un program
specializat!
9 Tag-urile <calendar>, datadeînceput>, <datadesfârşit>, <costuri>, <suma>
imaginate de noi furnizează informaţii privind datele (de tip caracter).
9 Numele tag-urilor trebuie să respecte următoarele reguli:
25
• numele unui tag trebuie să înceapă cu o literă (majusculă sau
minusculă) sau cu o liniuţă de subliniere;
• numele unui tag poate să conţină: litere, cifre, liniuţe de subliniere,
linii şi puncte;
• numele unui tag nu trebuie să conţină spaţii;
• numele unui tag nu trebuie să înceapă cu XML, xml, XmL, xML, xMl,
xmL, XMl;
• numele tag-urilor sunt limitate numai la caractere latine;
• numele unui tag poate conţine caracterul (:) numai în construcţia
specială, spaţiu de nume.
9 În XML, un document bine format trebuie să respecte regula: „fiecărui tag de
început îi corespunde un tag de sfârşit”.
9 XML permite utilizarea elementelor fără conţinut (vide).
9 Pentru a defini relaţiile între elemente, XML foloseşte următoarea
terminologie:
• elementul rădăcină;
• elementul părinte;
• elementul fiu;
• elementul frate.
9 În exemplul nostru (figura 2.12), <fraza> este elementul rădăcină;
<descriere> este elementul părinte al elementelor <calendar> şi <costuri>;
<calendar> şi <costuri> sunt elemente fiu ale elementului <descriere>;
<calendar> şi <costuri> sunt elemente fraţi.
9 În structura unui document XML numai elementul rădăcină nu are un element
părinte. Un element fiu aparţine unui singur element părinte.

Regulile de aur ale documentelor XML bine formate


Documentul mail.xml pe care l-am analizat anterior este un exemplu de
document XML bine format care respectă regulile de aur ale
documentelor XML bine formate.

Prezentăm în continuare câteva din regulile care stau la baza creării unui
document XML bine format.

9 Documentul trebuie să conţină un element de cel mai înalt nivel


(elementul rădăcină sau elementul document). Toate celelalte
elemente trebuie să se găsească în interiorul elementului
rădăcină.

9 Elementele trebuie să fie corect imbricate.


26
9 Fiecare element trebuie să conţină un tag de deschidere şi un
tag de închidere, care trebuie să poarte acelaşi nume.

9 Numele tag-urilor nu trebuie să conţină spaţii, ci numai litere,


cifre (nu în prima poziţie) şi liniuţe de subliniere (_).

9 Elementele XML sunt case-sensitive.

9 Numele tag-urilor elementelor vide trebuie să se termine cu o


bară oblică (/).

9 Valorile atributelor trebuie să fie plasate între ghilimele sau


apostrofuri.

Dacă dumneavoastră respectaţi aceste reguli (pe care vi le reamintim ori


de câte ori avem ocazia s-o facem), documentele XML pe care le veţi
realiza vor fi cu siguranţă bine formate şi vor fi corect interpretate de
browser-e cât şi de alte programe.

Identificaţi şi eliminaţi erorile de sintaxă XML


Înainte ca browser-ul Microsoft Internet Explorer să afişeze documentul
dumneavoastră XML, parser-ul său XML (analizor sintactic) analizează
conţinutul documentului. Dacă parser-ul detectează o eroare, browser-ul
afişează o pagină care conţine un mesaj de eroare, fără a încerca să
afişeze documentul. Microsoft Internet Explorer 5 (sau o versiune
superioară) va afişa pagina de erori, pe care documentul XML trebuie să
o lege sau nu la o foaie de stiluri.

Remarci:
9 Procesorul XML este modulul software care citeşte documentul XML şi
furnizează accesul la conţinutul documentului. El obţine acest acces cu
ajutorul unui modul software numit aplicaţie, care manipulează şi afişează
conţinutul documentului.
9 Atunci când afişaţi un document XML într-un browser (Microsoft Internet
Explorer 5 sau o versiune superioară), browser-ul furnizează procesorul XML
şi cel puţin o parte a aplicaţiei (termenul de aplicaţie pe care-l utilizăm este
diferit de o aplicaţie XML sau vocabular pe care am definit-o în Conversaţia 1).
27
9 Atunci cânt deschideţi un document XML direct în Microsoft Internet Explorer
5 (sau o versiune superioară), parser-ul verifică numai dacă documentul este
bine format şi afişează un mesaj în caz de eroare. El nu verifică dacă
documentul este valid!
Aplicaţii

‰ Verificaţi dacă următoarele documente sunt bine formate. Identificaţi şi


eliminaţi erorile de sintaxă.

a) Un document (figura 2.13) care nu este bine format!

Figura 2.13

Remarcă. Afişaţi documentul XML într-un browser.


b) Un document (figura 2.14) care nu este bine format.

Figura 2.14

Remarcă. Afişaţi documentul XML într-un browser.


c) Un document (figura 2.15) care nu este bine format!

Figura 2.15

Remarci:
9 Un element care conţine unul sau mai multe elemente imbricate (carte, în
exemplul nostru) se numeşte element părinte. Un element care este conţinut
direct în elementul părinte (titlu, în exemplul nostru) se numeşte element fiu
sau sub-element sau element inserat în elementul părinte.
9 Afişaţi documentul XML într-un browser.
28
d) Un document (figura 2.16) care nu este bine format!

Figura 2.16

Remarcă. Afişaţi documentul XML într-un browser.

Creaţi elemente XML cu tipuri de conţinut


XML
diferite
Conţinutul unui element este textul situat între tag-ul de început şi
tag-ul de sfârşit al acestuia. Puteţi include diferite tipuri de item-uri în
conţinutul unui element, după cum urmează:

9 elemente imbricate (nested);


9 date de tip caracter;
9 referinţe de entităţi generale sau referinţe de caractere;
9 secţiuni CDATA;
9 instrucţiuni de prelucrare;
9 comentarii.
Elemente imbricate. În figura 2.17 elementul adresa conţine 5
elemente imbricate.
29

Figura 2.17

Date de tip caracter. Datele de tip caracter reprezintă textul


corespunzător conţinutului informativ al unei element. În figura 2.18
conţinutul elementului titlu îl reprezintă datele de tip text (Pădurea
spânzuraţilor).

Figura 2.18

În figura 2.19 este ilustrat un exemplu de conţinut al unui element care


cuprinde atât date de tip text (Calea Victoriei) cât şi un element imbricat
(subtitlu).

Figura 2.19

Remarcă. Atunci când adăugaţi text unui element puteţi insera orice caracter cu excepţia
următoarelor caractere (speciale): < (simbolul mai mic), & (simbolul ampersand), ]]>
(şir de caractere).
30
Referinţe de entităţi generale. În figura 2.20 este prezentat un
exemplu care conţine o referinţă de entitate generală internă în vederea
afişării copyright-ului.

Figura 2.20

Referinţe de caractere. În figura 2.21 este prezentat un exemplu care


conţine o referinţă de caractere în vederea afişării simbolului © de
copyright.

Figura 2.21

Secţiuni CDATA. O secţiune CDATA este un bloc de text în interiorul


căruia puteţi insera liber, orice caracter doriţi cu excepţia şirului de
caractere ]]>.

În figura 2.22 este prezentat un exemplu de secţiune CDATA plasată în


elementul <mesaj>.

Figura 2.22

Instrucţiuni de prelucrare. Rolul unei instrucţiuni de prelucrare este


de a furniza o informaţie pe care procesorul XML să o poată trimite unei
31
aplicaţii. În figura 2.23 este prezentat un exemplu de instrucţiune de
prelucrare XML.

Figura 2.23

Remarci:
9 Instrucţiunea de prelucrare din prolog creează o legătură către o foaie de
stiluri pentru a afişa datele de tip caracter ale unui document XML.
9 Folosiţi instrucţiuni de prelucrare pentru a preciza navigatorului forma de
prelucrare sau de afişare a documentului.

Comentariile. Un comentariu reprezintă o adnotare în documentul


dumneavoastră XML pe care însă programatorul o poate folosi (citi) dar
procesorul XML … o ignoră.

Remarci:
9 Un comentariu debutează cu <!-- şi se termină cu caracterele -->. Puteţi
introduce caracterele speciale <, >,& mai puţin linia dublă -- (figura 2.24).

Figura 2.24

9 Puteţi insera un comentariu la finele elementului rădăcină (figura 2.25).

Figura 2.25

9 În figura 2.26 se prezintă un exemplu de comentariu ilegal.


32

Figura 2.26

Metode şi instrumente pentru crearea


XML
documentelor XML bine formate
Documentele XML bine formate pot fi create cu ajutorul mai multor
instrumente (soft), multe dintre acestea fiind gratuite (!). De menţionat
că toate instrumentele şi metodele recomandate prezintă avantaje şi
dezavantaje, de care va trebui să ţineţi seama în alegerea pe care
urmează să o faceţi.

Pentru a crea documente XML bine formate, folosiţi una din metodele
prezentate mai jos:

9 Metoda 1 – Editorul de texte Notepad;


9 Metoda 2 – Editorul XML Notepad
sau,
Editorul XML Spy;
9 Metoda 3 – Programe care generează fişiere XML;
9 Metoda 4 – Documente XML;
9 Metoda 5 – Baze de date;
9 Metoda 6 – Aplicaţii care generează date sub forma unor
documente XML.
Iată cum creăm cu editorul de texte Notepad, un document XML bine
format, care conţine următorul mesaj e-mail: „Trimiteţi script-urile” (vezi
Conversaţia 1).
33
Metoda 1 – Editorul de texte Notepad

1. Tastaţi, cu litere mici, prima linie a documentului (figura 2.27).

Figura 2.27

Remarci:
9 Prima linie a documentului este o declaraţie XML.
9 Declaraţia <?xml version=”1.0” ?> indică browser-ului că … se află în
faţa unui document XML.
9 Declaraţia poate conţine şi alte informaţii, dar forma cea mai simplă
este cea indicată. Cu siguranţă, W3C va propune în viitor noi
modificări.
9 Declaraţia poate preciza de asemenea şi setul de caractere utilizat
(atributul encoding): <?xml version=”1.0” encoding=”ISO-8859-1”
?>.
9 Setul de caractere ISO-8859-1, încă numit ISO-Latin 1 conţine
caracterele accentuate ale limbii franceze, înlocuind setul UTF-8
utilizat în mod implicit. Setul UTF-8 reprezintă caracterele ASCII
standard pe 1 octet şi caracterele accentuate pe 3 octeţi.
9 Declaraţia XML trebuie să utilizeze caractere mici, exceptând valoarea
atributului encoding (ISO-8859-1).
2. Introduceţi comentariul „Prima aplicaţie XML” (figura 2.28).

Figura 2.28

Remarci:
9 Comentariile XML sunt similare comentariilor HTML.
9 Comentariile nu necesită tag-uri de închidere.
9 Lungimea comentariilor nu este limitată.
3. Tastaţi <email>, apăsaţi de câteva ori tasta Enter după care
tastaţi </email> (figura 2.29).
34

Figura 2.29

Remarci:
9 <email> este elementul rădăcină.
9 <email> … </email> delimitează tipul general de date.
9 Puteţi da orice nume elementului rădăcină, dar nu uitaţi că acesta
trebuie să fie semnificativ!
4. Introduceţi între tag-urile <email> … </email> tag-urile
<to>, <from>, <date>, <subject>, <body> care descriu
structura mesajului (tipul de date) e-mail (figura 2.30).

Figura 2.30

Remarcă. Modelul general al unui exemplar (instance, în limba engleză) specific


tipului de date e-mail este:
<email>
<to> </to>
<from> </from>
<date> </date>
<subject> </subject>
<body> </body>
</email>
5. Salvaţi fişierul în folder-ul My Documents, sub numele mail.xml
(figura 2.31).
35

Figura 2.31

Remarcă. Dacă editorul dumneavoastră de texte adaugă extensia .txt, plasaţi


numele fişierului între ghilimele (“mail.xml”).
6. Afişaţi documentul XML în Microsoft Internet Explorer (figura
2.32).

Figura 2.32
36
Remarci:
9 Dacă fişierul dumneavoastră nu a fost afişat corect sau aţi obţinut un
mesaj de eroare (!), verificaţi codul XML în editorul de texte
(declaraţia XML se găseşte pe prima linie?; tag-urile XML au fost
introduse corect?; tag-urile de deschidere au fost scrise corect?;
documentul a fost corect salvat?), corectaţi erorile, salvaţi din nou
fişierul şi reîncărcaţi-l în browser.
9 Puteţi cere navigatorului să afişeze un tag particular cu un anume font,
size, color etc. Pentru aceasta, fie utilizaţi foile de stiluri CSS, fie
transformaţi tag-urile XML în HTML cu ajutorul unui limbaj XSLT (XML
Stylesheet Language Transformation).
Metoda 2 – Editorul XML Notepad

1. Deschideţi aplicaţia XML Notepad, via Start t Programs t


Microsoft XML Notepad t Microsoft XML Notepad (figura 2.33).

Figura 2.33

2. Schimbaţi numele elementului rădăcină în email (figura 2.34).

Figura 2.34
37
3. Schimbaţi numele elementului fiu Child_Element în elementul
fiu to (figura 2.35).

Figura 2.35

4. Introduceţi în fereastra Values valoarea pentru elementul to


(figura 2.36).

Figura 2.36

5. Inseraţi un nou element via Insert t Element (figura 2.37).

Figura 2.37
38
6. Introduceţi numele acestui element, from (figura 2.38).

Figura 2.38

7. Introduceţi valoarea elementului (figura 2.39).

Figura 2.39

8. Repetaţi paşii 5, 6, 7 pentru elementele date, subject şi body


(figura 2.40).

Figura 2.40
39
9. Salvaţi documentul cu numele email în folder-ul My Documents
(figura 2.41).

Figura 2.41

10. Afişaţi documentul XML în Microsoft Internet Explorer


(versiunea 5 sau o versiune superioară), figura 2.42.

Figura 2.42

Metoda 2 – XML Spy (http://www.smlspy.com)

Iată cum creăm acelaşi document e-mail cu XML Spy


(http://www.xmlspy.com).
1. Deschideţi aplicaţia XML Spy, via Start t Programs t XML Spy
Suite t XML Spy IDE (figura 2.43).
40

Figura 2.43

2. Creaţi un nou document via File t New (figura 2.44).

Figura 2.44

Remarcă. Se deschide fereastra Create new document.

3. În fereastra Create new document alegeţi tipul de document


dorit, iar apoi apăsaţi butonul OK (figura 2.45).
41

Figura 2.45

Remarcă. Se creează un nou document XML (figura 2.46).

Figura 2.46

4. Adăugaţi un nou element via XML t Append t Element (figura


2.47).
42

Figura 2.47

5. Introduceţi numele elementului – email (figura 2.48).

Figura 2.48

6. Pentru acest element, care este elementul rădăcină, introduceţi


elementul fiu (figura 2.49).
43

Figura 2.49

7. Introduceţi numele şi atributul acestui element (figura 2.50).

Figura 2.50
44
8. Adăugaţi şi celelalte elemente, via XML t Append t Element
(figura 2.51).

Figura 2.51

9. Introduceţi numele elementelor şi atributele lor (figura 2.52).

Figura 2.52
45
10. Salvaţi documentul cu numele email1 în folder-ul My
Documents (figura 2.53).

Figura 2.53

11. Afişaţi documentul XML în Microsoft Internet Explorer


(versiunea 5 sau o versiune superioară), figura 2.54.

Figura 2.54

Remarcă. Pentru a afişa în anumite condiţii (pe care le puteţi impune)


documentul XML într-un browser, folosiţi metodele prezentate mai jos.
9 Metoda 1 – Utilizaţi foile de stiluri CSS;
9 Metoda 2 – Transformaţi elementele XML în HTML înainte de a le afişa.
În continuare, descriem pe scurt caracteristicile celorlalte metode (3, 4,
5, 6) de creare a documentelor XML.
46
Remarci:
9 Programele capabile să înregistreze datele în format XML sunt din ce
în ce mai numeroase: Microsoft Office, PAO etc. Aceste programe
generează direct fişiere XML, pe care apoi le puteţi consulta şi
modifica cu orice editor de texte sau editor XML (Metoda 3).
9 Este normal, ca odată cu generalizarea formatului XML tot mai mulţi
utilizatori să dorească să utilizeze acest tip de document, sortând,
extrăgând informaţii, personalizând afişarea acestora. Limbajul XSLT
este un limbaj creat pentru acest scop: sortare, selecţie şi accesare
date XML (Metoda 4).
9 Există numeroase similitudini între documentele XML şi bazele de
date. În cele două cazuri, datele sunt înregistrate sub o formă
structurată permiţând efectuarea a numeroase prelucrări (sortări,
selecţii, manipulări, interogări). Unul din marile avantaje privind
legătura între bazele de date şi documentele XML este productivitatea.
Dacă doriţi să actualizaţi baza de date şi să afişaţi datele modificate,
câştigul de timp este apreciabil în raport cu metoda clasică
(actualizarea separat a bazei de date şi a listelor cu tranzacţii; cazul
unui catalog de produse, de exemplu) – Metoda 5.
9 Datorită sintaxei simple a XML-ului se pot scrie uşor aplicaţii care să
genereze datele sub forma unor documente XML, urmând ca aceste
date să poată fi exportate sub diferite forme (Metoda 6).
47

XML Temă

Testaţi-vă cunoştinţele
1. Descrieţi în XML următoarele structuri de date (figura 2.55).

Figura 2.55

2. Creaţi documentul XML din figura 2.55 utilizând una din metodele
prezentate mai jos:
9 Metoda 1 – Utilizaţi un editor de texte (Notepad);
9 Metoda 2 – Utilizaţi un editor XML (XML Notepad, XML Spy).
3. Cum puteţi afişa un document XML într-un browser?

Vizitaţi site-urile
9 http://www.w3.org/AudioVideo/
9 http://www.w3.org/TR/SVG/
9 http://www.w3.org/TR/2000/REC-xml-20001006
Conversaţia 3

Inseraţi caractere speciale cu XML


•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – Caracterele speciale pot provoca erori de prelucrare
f XML – Inseraţi secţiuni CDATA
f XML – Utilizaţi entităţi predefinite
f XML – Definiţi şi utilizaţi o referinţă de entitate generală internă
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

Caracterele speciale pot provoca erori de


XML
prelucrare
După cum aţi putut constata, nu puteţi insera direct caracterele speciale:
<, >, &, © în datele din conţinutul unui element. O soluţie de a ocoli
această restricţie este de a utiliza o referinţă de caracter (exemplu,
&#169 pentru caracterul ©) sau o referinţă de entitate generală
predefinită (exemplu, &lt; pentru caracterul <). Totodată, dacă doriţi să
inseraţi mai multe caractere speciale (<, >, & etc.), utilizarea
referinţelor este complicată şi creează dificultăţi la citirea datelor. În
acest caz este mult mai simplu de a plasa textul care conţine caractere
speciale în interiorul unei secţiuni CDATA.
50

XML Inseraţi secţiuni CDATA


O secţiune CDATA permite afişarea (fără erori!) datelor care conţin
caractere speciale.

Iată cum afişăm în XML mesajul: „Dacă a<>0 atunci x=b/a”.

1. Creaţi cu XML Spy un document XML (ecuatie.xml) cu structura


minimală: <mesaj>Dacă a<>0 atunci x=b/a. </mesaj> (figura
3.1).

Figura 3.1

Remarcă. Documentul ecuatie.xml nu va putea fi afişat din cauza caracterelor


speciale „<” şi „>” inserate.
2. Afişaţi documentul XML în Microsoft Internet Explorer
(versiunea 5 sau o versiune superioară), figura 3.2.

Figura 3.2
51
Remarcă. Browser-ul afişează un mesaj de eroare provocat de existenţa
caracterelor „<” şi „>”.
3. Plasaţi mesajul într-o secţiune CDATA (figura 3.3).

Figura 3.3

Remarci:
9 O secţiune CDATA începe cu <![CDATA[ şi se termină cu ]]>.
9 Toate caracterele unei secţiuni CDATA sunt tratate ca o parte literală
a datelor de tip caracter ale elementului şi nu ca un tag XML.
9 Cuvântul cheie CDATA se scrie cu majuscule.
9 Secţiunile CDATA nu pot fi imbricate.
4. Afişaţi documentul XML în Microsoft Internet Explorer
(versiunea 5 sau superioară), figura 3.4.

Figura 3.4

Remarcă. Navigatorul afişează textul plasat în secţiunea CDATA fără eroare.


52

XML Utilizaţi entităţi predefinite


Într-un document XML, puteţi utiliza o referinţă la o entitate predefinită
pentru a insera unul din cele cinci caractere listate în figura 3.5.

Referinţa entitate Caracter inserat Referinţa de caracter


predefinit echivalentă
&amp; & &#38;
&lt; < &#60;
&gt; > &#62;
Figura 3.5 &apos; ’ &#39;
&quot; ” &#34;

Remarci:
9 Inserarea uneia din aceste referinţe de entităţi predefinite este
echivalentă cu inserarea referinţei de caracter echivalentă.
9 Referinţele de entităţi predefinite sunt mult mai uşor de reţinut şi de
înţeles atunci când le vedeţi într-un document.
Iată cum creăm un document XML (cu structură minimală) care conţine
codul <promo>Vizitaţi magazinele C&A!</promo>, utilizând entitatea
predefinită &amp; pentru a insera caracterul special &.
1. Înlocuiţi caracterul & cu referinţa la entitatea predefinită &amp;
(figura 3.6).

Figura 3.6
53
Remarci:
9 Referinţa la entitatea predefinită &amp; este identică celei utilizate în
(X)HTML – începe cu &, se continuă cu amp şi se termină cu punct şi
virgulă.
9 (X)HTML utilizează entităţi de caractere pentru afişarea caracterelor
speciale, în timp ce XML nu le utilizează decât pentru specificarea
datelor.
2. Afişaţi documentul XML în Microsoft Internet Explorer
(versiunea 5 sau o versiune superioară), figura 3.7.

Figura 3.7

Remarcă. În navigator, caracterul & apare explicit.


Aplicaţie

‰ Creaţi documentul XML (cu structură minimală) care conţine codul


<copyright>©2003 LUMINA BLANDA</copyright>.

Indicaţie. Utilizaţi referinţe de caractere &#169; sau &#?; înlocuind semnul


întrebării (?) cu valoarea hexazecimală a lui 169.

Definiţi şi utilizaţi o referinţă de entitate


XML
generală internă
Specificaţiile XML utilizează termenul entitate, în sens general pentru a
se referi la unul din tipurile de stocare, asociate documentelor XML:

9 întreg documentul XML;


9 o secţiune DTD externă;
54
9 un fişier extern, definit ca o entitate externă într-un DTD şi
referită cu ajutorul unei referinţe de entitate;
9 un şir de caractere între ghilimele, definit ca o entitate internă
într-un DTD şi referită cu ajutorul unei referinţe de entitate.
În particular, mecanismul entităţilor XML este util pentru stocarea
blocurilor de text XML foarte des utilizate, ceea ce permite inserarea
rapidă a textului, acolo unde doriţi.

Referinţele entităţilor generale interne se definesc în DTD prin tag-ul


<!ENTITY>.

În cele ce urmează vom utiliza termenul entitate într-un sens mai


restrâns şi anume referirea la un şir de caractere plasat între ghilimele,
definit ca entitate într-un DTD al documentului şi referit cu ajutorul
referinţelor de entităţi.

Iată cum adăugăm, la finele documentului email.xml, datele de tip text,


frecvent utilizate în site-ul nostru: Copyright 2003 LUMINA BLANDA.

Vom defini şi utiliza o referinţă de entitate generală internă, cp.

Metoda 1 – Editorul de texte Notepad

1. Introduceţi în DTD-ul documentului (bine format), imediat sub


linia de comentariu, entitatea internă cp (figura 3.8).

Figura 3.8
55
Remarci:
9 Referinţele entităţilor generale interne se folosesc pentru texte
frecvent utilizate: adresă, nume de produs, titlu, copyright etc.
9 O entitate internă este o entitate conţinută într-un şir de caractere
plasat între ghilimele. O entitate externă este o entitate conţinută
într-un fişier separat.
9 Entităţile interne sunt definite în DTD cu tag-ul special <!ENTITY>
care este sintaxa:
<!ENTITY nume_entitate valoare_entitate>
unde,
ƒ nume_entitate (cp în exemplul nostru) trebuie să respecte regulile
de aur XML;
ƒ valoare_entitate este valoarea entităţii; valoarea pe care
dumneavoastră o atribuiţi unei entităţi generale interne este un şir
de caractere delimitat prin ghilimele, numit şir între ghilimele sau
expresie literală (Copyright 2003 LUMINA BLANDA, în aplicaţia
noastră).
9 Puteţi afecta unei entităţi generale interne întreaga valoare a unei
expresii generale interne, cu respectarea următoarelor reguli:
ƒ şirul poate fi delimitat cu ajutorul unor ghilimele simple (’) sau
duble (”);
ƒ şirul nu poate conţine ghilimele identice cu cele ale delimitatorilor;
ƒ şirul nu poate conţine caracterul (&), excepţie făcând începutul
unei referinţe de entitate caracter sau entitate generală;
ƒ şirul nu poate conţine caracterul (%);
ƒ conţinutul şirului trebuie evident să fie plasat legal, în locul în care
doriţi să inseraţi entitatea.
2. Introduceţi referinţa de entitate &cp; (figura 3.9), la finele
documentului.

Figura 3.9

Remarci:
9 Declaraţia unei entităţi trebuie să preceadă referinţa la această
entitate.
9 Referinţa de entitate &cp; conţine numele entităţii (cp) plasat între &
şi ;. Numele entităţii (cp) reprezintă numele atribuit entităţii în
declaraţia <!DOCTYPE>.
56
9 Entitatea cp se mai numeşte entitate generală internă analizabilă
(corespunde tipului XML bine format).
9 Utilizarea unei entităţi generale internă prezintă avantajul următor:
puteţi modifica valoarea în tot documentul XML.
3. Vizualizaţi documentul (email.xml) într-un browser (figura
3.10).

Figura 3.10

Remarci:
9 Navigatorul înlocuieşte codul cp prin valoarea entităţii (figura 3.10).
9 Întrucât documentul email.xml nu conţine un link la o foaie de stiluri,
navigatorul (Internet Explorer) se mulţumeşte să afişeze codul sursă
al documentului care cuprinde: tag-urile (comentariile) şi datele de tip
caracter. Microsoft Internet Explorer atribuie un cod color diferitelor
componente ale documentului pentru a facilita identificarea acestora
şi afişează elementul documentului (<email>) sub forma unei
arborescenţe retractabile/expandabile pentru a indica structura logică
a documentului şi a vă permite vizualizarea diferitelor nivele de
detaliu.
9 Executaţi clic pe simbolul minus (-) din stânga elementului email
(figura 3.11).
57

Figura 3.11

9 Elementul documentului se va contracta, ca în figura 3.12.

Figura 3.12

Metoda 2 – Editorul XML Spy

Iată cum creăm acelaşi document email.xml cu XML Spy.

În figura 3.13 se prezintă documentul email.xml în care puteţi identifica


numele elementelor şi atributele lor.
58

Figura 3.13

Aplicaţie

‰ Comentaţi următoarele exemple:


9 <titlu>&lt; fatalitate><titlu>
9 <produs compania=”C&amp;A”>bluză vară<produs>
9 <!ENTITY titlu ”c1 &quot; Kit &quot; B”>

Remarcă. În cele trei exemple, referinţele de entităţi predefinite sunt utilizate pentru a
insera caractere, care nu pot fi inserate sub forma lor literală.
59

XML Temă

Testaţi-vă cunoştinţele
1. Care este semnificaţia următoarelor referinţe de entitate:
9 &qt;
9 &amp;
9 &lt;
2. În ce situaţii definiţi şi utilizaţi o referinţă de entitate generală internă
(analizabilă)?
3. În ce situaţii utilizaţi o secţiune CDATA?

Vizitaţi site-urile
9 www.xml.com
9 www.w3.org/Markup/
9 http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm
Conversaţia 4

Creaţi documente XML valide


•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – Să nu uităm … documentele XML bine formate
f XML – Definiţi structura unui document XML valid. Aplicaţii
f XML – Adăugaţi atribute unui element XML. Aplicaţii
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

Să nu uităm … documentele XML bine


XML
formate
Fiecare document XML trebuie să fie bine format. Altfel spus, el trebuie
să satisfacă un minimum de exigenţă şi de conformitate (figura 4.1).

Figura 4.1
62
Remarcă. Dacă suprimaţi elementul <mama> sau dacă adăugaţi încă trei
elemente <copil>, browser-ul, oricare ar fi el, nu va afişa nici-un mesaj de
eroare! Dacă un document nu este bine format, el nu poate fi considerat ca
un document XML.

Definiţi structura unui document XML


XML valid. Aplicaţii
Un document XML bine format poate fi de asemenea valid. Un document
XML valid este un document bine format, care satisface următoarele
două criterii:

9 Prologul documentului cuprinde o declaraţie de tip de document


care conţine un DTD ce defineşte structura documentului.
9 Restul documentului se conformează structurii definite în DTD.

Remarci:
9 Norma XML defineşte DTD-ul ca „o gramatică pentru o clasă de
documente”.
9 Un DTD furnizează procesorului XML (Microsoft Internet Explorer) un
prototip standard pentru verificarea validităţii documentului.

Adăugaţi un DTD
O declaraţie de tip de document este un bloc de tag-uri XML, care se
plasează în prologul unui document XML valid.

O declaraţie de tip de document are următoarea sintaxă:

<!DOCTYPE nume_element DTD>

unde,

ƒ nume_element este numele elementului rădăcină;


ƒ DTD este definiţia tipului de document (Document Type
Definition), care conţine declaraţii ce definesc elementele,
atributele şi alte caracteristici ale documentului.
63
Remarci:
9 Ca toate cuvintele cheie XML, DOCTYPE trebuie să fie scris cu
majuscule.
9 DTD-ul trebuie să fie înlocuit prin conţinutul său real.
DTD-ul se compune dintr-o paranteză dreaptă deschisă ([), urmată de o
serie de declaraţii de tag-uri, urmate de o paranteză dreaptă închisă (]).
Declaraţiile de tag-uri descriu structura logică a documentului; altfel
spus, ele definesc elementele documentului, atributele şi alte
caracteristici.

În figura 4.2 se prezintă un document XML valid complet, care conţine


un DTD cu o singură declaraţie (de tip element) fără restricţii de
conţinut (ANY).

Figura 4.2

Un DTD (Document Type Definition) poate conţine următoarele tipuri de


declaraţii:

9 declararea tipurilor de elemente, utilizând cuvântul cheie


ELEMENT;
9 declararea listei de atribute;
9 declararea entităţilor (interne, externe); entităţi analizabile,
entităţi care nu sunt analizabile utilizând cuvântul cheie
ENTITY;
9 declararea notaţiilor, utilizând cuvântul cheie NOTATION;
9 instrucţiuni de prelucrare;
9 comentarii;
9 referinţe de entităţi de parametrii.
64
Remarcă. Pentru mai multe informaţii privind tipurile de declaraţii, consultaţi
lucrările:
9 Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML,
DOM, ASP), Editura Economică, 2002;
9 Michael J. Young, XML, Etape par étape, Microsoft Press, Paris, 2001.

Declaraţi tipul de element


Într-un document XML, trebuie să declaraţi explicit tipul fiecărui element
utilizat în document.

O declaraţie de tip de element (DTD) precizează numele tipului de


element şi conţinutul autorizat al elementului (specificând totodată şi
ordinea în care elementele pot apărea). Declaraţiile DTD descriu
structura logică a documentului. Altfel spus, declaraţiile DTD indică:

9 tipul de elemente pe care documentul le conţine;


9 ordinea elementelor;
9 specificaţiile de conţinut sau modelul de conţinut ale
elementelor.
Considerăm că este mai uşor de înţeles structura unui DTD cu ajutorul
unui exemplu.

Iată cum creăm un DTD care include numele, adresa şi informaţiile de


contact ale unui client (figura 4.3).
65

Figura 4.3

Remarci:
9 Scopul unui DTD este de a defini elementele care pot fi utilizate într-un
document XML şi de a specifica relaţiile între ele.
9 Pentru a construi un DTD trebuie să cunoaştem lista elementelor pe care
dorim să le asamblăm.
9 Schema din figura 4.3 se numeşte schema modelului de date şi defineşte
conţinutul elementului client. Schema a fost realizată cu aplicaţia XML Spy
(vezi www.xmlspy.com).
9 Elementele: nume, adresa, telefoane sunt obligatorii, iar elementul online este
opţional. Un client poate fi valid numai cu o adresă şi un telefon.

9 Simbolul se traduce prin (figura 4.4):

telefon

telefoane telefon
Figura 4.4
telefon

1. Definiţi un document de tip client (figura 4.5).

Figura 4.5
66
2. Definiţi elementul client specificând structura sa.

2.1 Utilizaţi sintaxa:

<! ELEMENT nume_element model_conţinut>

unde,

ƒ nume_element este numele elementului rădăcină;

ƒ model_conţinut sau specificatii_continut precizează


conţinutul elementului.

2.2 Înlocuiţi nume_element cu client şi model_conţinut cu:


nume, adresa, telefoane, online?, în ordinea indicată (figura
4.6).

Figura 4.6

Remarci:
9 <!ELEMENT client> defineşte elementul client, care conţine patru elemente:
nume, adresa, telefoane, online.
9 Elementele cu unul sau mai multe elemente fiu sunt definite cu numele
elementelor fiu plasate între paranteze rotunde. Faptul că ele sunt separate
prin virgulă impune ca ele să se găsească în ordinea indicată.
9 Puteţi modifica model_conţinut utilizând: semnul întrebării (?), semnul plus
(+) şi asteriscul (*), a căror semnificaţie este precizată în tabelul 1.
Caracter Semnificaţie
? Nici una sau o apariţie a elementului precedent (este opţional).
+ Una sau mai multe apariţii a elementului precedent.
Tabelul 1 * Nici una sau mai multe apariţii a elementului precedent.

9 Elementul online? (online urmat de un semn de întrebare) poate să nu apară


sau să apară o singură dată în conţinutul unei instanţe (este opţional).

3. Specificaţi conţinutul elementului nume.

3.1 Utilizaţi sintaxa:


67
<! ELEMENT nume_fiu model_conţinut>

3.2 Înlocuiţi nume_fiu cu nume şi model_conţinut cu #PCDATA


(figura 4.7).

Figura 4.7

Remarci:
9 PCDATA este prescurtarea de la Parsed Character Data (date caracter
analizabile).
9 Elementul nume poate conţine numai text, care va fi analizat de către
procesorul XML.
9 Pentru a preciza conţinutul unui element vid folosiţi cuvântul cheie EMPTY
(figura 4.8).

Figura 4.8

9 Pentru elementele cu un conţinut oarecare folosiţi cuvântul cheie ANY (figura


4.9).

Figura 4.9

4. Definiţi elementul adresa (vezi figura 4.3) specificând structura


sa (figura 4.10).

Figura 4.10
68
5. Specificaţi conţinutul (date de tip text) elementelor: strada,
număr, oraş, cod, ţara, figura 4.11.

Figura 4.11

6. Definiţi elementul telefoane specificând structura sa (figura


4.12).

Figura 4.12

Remarci:
9 Elementul telefoane poate conţine numai elemente telefon.
9 Semnul „+” semnifică faptul că elementul telefoane trebuie să conţină cel
puţin un element telefon şi că acest element poate fi repetat ori de câte ori
este necesar. Elementul telefon va conţine text ca şi elementele strada,
număr, oraş, cod, ţara. Numerele de telefon pot fi deci introduse direct între
tag-urile de închidere şi de început.
9 Absenţa unuia din operatorii: *, +, ? ce apar în model_conţinut al unui
element părinte semnifică faptul că elementul declarat este obligatoriu şi nu
se poate repeta (el trebuie să apară o dată şi numai o dată). Altfel, se va
genera o eroare în faza de validare.

7. Definiţi elementul online cu cele două elemente fiu email şi


url; specificaţi conţinutul (date de tip text) celor două elemente
fiu, iar apoi închideţi tag-ul <!DOCTYPE> (figura 4.13).
69

Figura 4.13

Remarcă. În figura 4.14 este prezentat documentul XML în care este inclus DTD-ul
(intern).

Figura 4.14
70
Remarci:
9 Definiţia XML a modelului de date client (schema completă) este ilustrată în
figura 4.15 (client.dtd) şi poate fi referită şi utilizată în documentele XML,
precum luminablanda.xml din figura 4.16.

Figura 4.15

Figura 4.16
71
9 Deoarece DTD-ul are o structură ce poate fi folosită la generarea mai multor
documente, se preferă definirea acestuia ca o entitate separată
(luminablanda.xml). Spunem că avem de-a face cu un DTD extern privat.
DTD-urile externe private sunt identificate în cadrul tag-ului <DOCTYPE>
prin cuvântul cheie SYSTEM urmat de un URL-relativ (client.dtd) sau absolut
(http://...): <!DOCTYPE client SYSTEM ”client.dtd”>.

8. Afişaţi documentul XML în Microsoft Internet Explorer (versiunea


5 sau o versiune superioară), figura 4.17.

Figura 4.17

Remarcă. Prezentăm trei variante pentru elementul client cu scopul de a pune în


evidenţă rezultatul pentru fiecare caz în parte.
9 <!ELEMENT client (nume, adresa, telefoane, online?>
Elementele sunt separate prin virgule. Elementele nume, adresa, telefoane
sunt obligatorii, online este facultativ.
9 <!ELEMENT client (nume|adresa|telefoane)+, online?)>
Unul din elementele: nume, adresa, telefoane poate fi prezent. Semnul +
precizează că această opţiune poate fi repetată. Elementul online nu se
schimbă.
9 <!ELEMENT client (nume?, adresa?, telefoane?, online?)>
Fiecare element poate să apară o dată, în mod opţional. Fiind separate prin
virgule, elementele trebuie să apară în ordinea indicată.
72
Aplicaţii

‰ Se consideră DTD-ul descris în figura 4.18.

Figura 4.18

Precizaţi care din afirmaţiile următoare sunt corecte.

1. Element rădăcină invalid (figura 4.19).

Figura 4.19

2. Element rădăcină valid (figura 4.20).

Figura 4.20

‰ Se consideră DTD-ul descris în figura 4.21.


73

Figura 4.21

Precizaţi care din afirmaţiile următoare sunt corecte.

1. Element rădăcină valid (figura 4.22).

Figura 4.22

2. Element rădăcină invalid (figura 4.23).

Figura 4.23

3. Element rădăcină invalid (figura 4.24).

Figura 4.24

4. Element rădăcină valid (figura 4.25).


74

Figura 4.25

‰ Se consideră DTD-ul descris în figura 4.26.

Figura 4.26

Precizaţi care din afirmaţiile următoare sunt corecte.

1. Element rădăcină valid (figura 4.27).

Figura 4.27

2. Element rădăcină invalid (figura 4.28).

Figura 4.28

‰ Se consideră DTD-ul descris în figura 4.29.


75

Figura 4.29

Precizaţi care din afirmaţiile următoare sunt corecte.

1. Element rădăcină valid (figura 4.30).

Figura 4.30

2. Element rădăcină valid (figura 4.31).

Figura 4.31

3. Element rădăcină valid (figura 4.32).

Figura 4.32
76
Adăugaţi atribute unui element XML.
XML
Aplicaţii
Toate elementele descrise într-un DTD pot avea un număr oarecare de
atribute. Atributele nu sunt obligatorii. Ele permit adăugarea de
informaţii suplimentare în mod simplu.

Remarcă. Iată ceea ce ştim până în acest moment despre atribute:


9 atributele au un nume;
9 atributele au o valoare;
9 valoarea trebuie să fie plasată între ghilimele.

În tabelul 2 se prezintă diferite tipuri de atribute cu o scurtă descriere.

Tipuri de atribute Descriere


CDATA Poate conţine text (şir de caractere).
ENTITY Numele unei entităţi externe.
ENTITIES O listă de entităţi externe (separate prin spaţii).
Enumerare O listă de cuvinte separate prin „|”.
ID Identificator unic.
IDREF O referinţă la un identificator unic.
IDREFS O listă de referinţe la identificatori unici (separaţi
prin spaţii).
NMTOKEN Un cuvânt.
NMTOKENS O listă de NMTOKEN separate prin spaţii.
NOTATION Permite declararea unei imagini într-un DTD şi apoi
Tabelul 2 utilizarea acesteia într-un document.

Lista de atribute a unui element XML începe cu ATTLIST, după cum


urmează:

<! ATTLIST nume_element nume_atribut tip_atribut


valoare_implicită>
77
unde,

9 nume_element - numele elementului căruia i se asociază


nume_atribut.
9 nume_atribut - numele atributului urmat de modelul
reprezentând valorile posibile.
9 tip_atribut - vezi tabelul 2.
9 valoare_implicită - unul din cuvintele rezervate: #REQUIRED
(atributul trebuie să fie întotdeauna
prezent); #IMPLIED (prezenţa atributului
este facultativă); #FIXED (atributul va
utiliza întotdeauna valoarea implicită care
a fost declarată).
Iată cum procedăm pentru a adăuga atributul tip=”telefon” elementului
<mobil>. Vom utiliza modelul de date (modificat) client (figura 4.33)
realizat cu aplicaţia XML Spy.

Figura 4.33
78
Remarcă. Definiţia XML a modelului de date (modificat) client este ilustrată în figura
4.34 (client1.dtd).

Figura 4.34

1. Introduceţi după ultimul element definit (<!ELEMENT mobil


(#PCDATA)>) linia <!ATTLIST nume_element
nume_atribut tip_atribut valoare_implicită>, înlocuind
nume_element cu mobil, nume_atribut cu tip, tip_atribut cu
CDATA şi valoare_implicită cu #IMPLIED (figura 4.35).

Figura 4.35

2. Utilizaţi noua schemă completă (client1.dtd) pentru generarea


documentelor XML, precum luminablanda1.xml din figura
4.36.
79

Figura 4.36

3. Introduceţi în elementul <mobil> din documentul


luminablanda1.xml atributul tip=”telefon” (figura 4.37).

Figura 4.37

4. Afişaţi documentul XML în Microsoft Internet Explorer


(versiunea 5 sau o versiune superioară), figura 4.38.
80

Figura 4.38

Aplicaţii

‰ Adăugaţi un atribut elementului <client> care să evidenţieze tipul clientului:


persoană fizică sau persoană juridică.

Indicaţie. Introduceţi în schema anterioară următoarea linie de cod (figura


4.39):

Figura 4.39 <!ATTLIST client tip=(fizica|juridica) #REQUIRED>

Actualizaţi documentul XML care utilizează noua schemă (figura 4.40):


<client tip=”fizică”>
Figura 4.40 …

‰ Adăugaţi elementului <client> un atribut de tip identificator unic.

Indicaţie. Introduceţi următoarea linie de cod (figura 4.41).


81
...
<!ATTLIST client tip (fizica|juridica) #REQUIRED id ID #IMPLIED>
Figura 4.41 ...

‰ Modificaţi elementul <telefon> astfel încât elementele <acasa> şi


<mobil> să fie opţionale.

Indicaţie. În documentul client1.dtd schimbaţi linia de cod a elementului


<telefon> (figura 4.42).
...
<!ELEMENT telefon (acasa?, serviciu, mobil?)>
Figura 4.42 ...

‰ Construiţi DTD-ul corespunzător unui raport (tehnic, de cercetare etc).

Elementele raportului (structura ierarhică) sunt: en-tête, introducere, cuprins,


concluzii, bibliografie [2].

Iată care este procedura pe care vă invităm s-o aplicaţi.

1. Construiţi DTD-ul corespunzător en-tête-ului (figura 4.43).

Figura 4.43

2. Construiţi DTD-ul corespunzător introducerii şi concluziilor (figura


4.44).

Figura 4.44
82
3. Construiţi DTD-ul corespunzător cuprinsului (corpul documentului),
figura 4.45.

Figura 4.45

4. Construiţi DTD-ul corespunzător bibliografiei (figura 4.46).

Figura 4.46
83
5. Scrieţi DTD-ul în forma sa finală (figura 4.47).

Figura 4.47
84
‰ Creaţi documentul XML corespunzător raportului (vezi structura DTD-ului din
aplicaţia precedentă), figura 4.48.

Figura 4.48

XML Temă

Testaţi-vă cunoştinţele
1. Care este structura unui DTD (Document Type Definition)?
2. Care este semnificaţia următoarelor caractere: „?”, „+”, „*”, „|”?
3. Precizaţi rolul cuvintelor cheie: PCDATA, EMPTY, ANY în cadrul
tag-ului <! ELEMENT>.
85
4. Care este rolul atributelor?
5. Ce tipuri de atribute cunoaşteţi?
6. Care sunt valorile implicite ale atributelor?

Vizitaţi site-urile
9 http://www.xmlmag.com
9 http://xml.apache.org/
9 http://www.ddj.com/topics/xml/
Conversaţia 5

Afişaţi documentele XML cu ajutorul foilor


de stiluri în cascadă
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – Utilizaţi foile de stiluri CSS
f XML – Creaţi fişierul de stiluri (foaia de stiluri) CSS. Aplicaţii
f XML – Legaţi o foaie de stiluri CSS la un document XML
f XML – Inseraţi elemente HTML în documentele XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

XML Utilizaţi foile de stiluri CSS


O foaie de stiluri în cascadă (Cascading Style Sheet – CSS) este un fişier
care conţine instrucţiuni de formatare a elementelor unui document
XML.

Cum dumneavoastră inventaţi (creaţi) propriile elemente în XML, evident


un navigator nu poate ştii cum să le afişeze (tag-urile XML nu sunt
predefinite!).

Crearea unei foi de stiluri în cascadă şi legarea ei la un document XML


este o metodă de a indica navigatorului cum trebuie să afişeze
elementele unui document. Un document XML cu o foaie de stiluri
ataşată, poate fi deschis direct în browser (Microsoft Internet Explorer 5
88
sau o versiune superioară). Nu este necesar să utilizăm o pagină HTML
pentru a accesa datele şi a le afişa (contrar altor metode de afişare a
unui document XML pe care le vom prezenta în conversaţiile următoare).

Plasarea instrucţiunilor de afişare într-o foaie de stiluri separată a


documentului XML măreşte gradul de utilizare a acesteia iar actualizarea
este mult mai uşoară!

Utilizarea unei foi de stiluri în cascadă este probabil metoda cea mai
simplă de afişare a unui document XML.

Pentru a afişa un document XML cu o foaie de stiluri CSS trebuie să


parcurgeţi următoarele două etape principale:

9 Etapa 1 – Crearea fişierului de stiluri CSS;

9 Etapa 2 – Legarea fişierului de stiluri CSS (foii de stiluri) la un


document XML.

XML Creaţi fişierul de stiluri (foaia de stiluri) CSS

O foaie de stiluri în cascadă este un fişier text cu extensia .css.

Fişierul conţine un set de reguli care indică navigatorului modul de


formatare şi afişare a elementelor într-un document XML specific. Pentru
a crea un fişier de stiluri, nu ezitaţi să apelaţi la … bătrânul Notepad!

Iată cum creăm fişierul de stiluri stud.css (figura 5.1), care conţine trei
seturi de reguli pentru afişarea elementelor: student, nume, facultatea
ce aparţin documentului XML matricola.xml (figura 5.2).
89

Figura 5.1

Figura 5.2
90
Remarci:
9 Fişierul de stiluri stud.css din figura 5.1 conţine un comentariu şi trei
seturi de reguli.
9 Într-o foaie de stiluri comentariul debutează cu caracterele slash şi
asterisc (/*) şi se termină cu caracterele asterisc şi slash (figura 5.3).

Figura 5.3

Puteţi de asemenea folosi comentarii în situaţia în care doriţi să


dezactivaţi temporar o regulă sau o parte a regulii (figura 5.4).

Figura 5.4

9 Fişierul de stiluri stud.css conţine trei reguli: una pentru elementele


student, una pentru elementele nume şi în sfârşit una pentru
elementele facultatea.
9 Fiecare din cele trei reguli conţine:
ƒ selectorul, care este numele tipului de element căruia i se aplică
modul de formatare şi afişare (figura 5.5);

Figura 5.5

ƒ blocul de declaraţie, delimitat prin două acolade ({}), care conţine


una sau mai multe declaraţii separate prin punct şi virgulă (figura
5.6);

Figura 5.6
91
ƒ declaraţia, care se compune dintr-o proprietate particulară, urmată
de caracterul două puncte (:), urmată de o valoare (figura 5.7).

{font-style:italic}

Figura 5.7

9 Declaraţia display-block inserează o linie de spaţii înainte şi după


textul elementului.
9 Declaraţia margin-top: 13 pt adaugă o margine de 13 puncte
deasupra textului elementului.
9 Declaraţia font-size: 10 pt defineşte mărimea (10 puncte) caracterelor
pentru afişarea textului elementelor.
9 Declaraţia font-style: italic defineşte stilul italic pentru afişarea textului
elementelor.
9 Declaraţia font-weight: bold defineşte stilul bold pentru afişarea
textului elementelor.
Aplicaţii

‰ Afişaţi cu caractere normale (nu italice!), cu font 14 (nu 10!) elementul


<nume> Adam Ion </nume>, care aparţin documentului matricola.xml (figura
5.8). Utilizaţi atributul style.

Iată care este procedura pe care vă invităm s-o aplicaţi.


În figura 5.8 este prezentat modul de utilizare al atributului style; se asociază
atributul (style) elementului nume.

Figura 5.8
92
Remarcă. În cazul unui document XML valid, va trebui să declaraţi atributul style în DTD
înainte de a-l putea utiliza.
<!ATTLIST nume style CDATA # IMPLIED>
‰ Aplicaţi următoarelor elemente: nuvela, titlu, autor, editura, an una din
regulile prezentate mai jos.
ƒ {display: block;
margin-right: 14 pt}
ƒ {display: block;
margin-bottom: 12 pt}
ƒ {display: block;
margin-left: 12 pt}

Iată care este procedura pe care vă invităm s-o aplicaţi (figura 5.9).

Figura 5.9

Remarcă. Puteţi de asemenea include un tip de element în mai mult de o regulă, în


aceeaşi foaie de stiluri (figura 5.10).

Figura 5.10

‰ Pentru elementul student, definiţi proprietatea display, folosind unul din


următoarele cuvinte cheie CSS: block, inline (valoare implicită), none
(navigatorul nu afişează elementul).

‰ Afişaţi elementul facultatea cu una din proprietăţile CSS: font-family (figura


5.11); font-size; font-style; font-weight; font-variant.
93

Figura 5.11

Remarcă. Pentru mai multe informaţii consultaţi lucrarea: Liviu Dumitraşcu,


(X)HTML, Editura Universităţii din Ploieşti, 2003.
‰ Afişaţi textul elementului nume în culoarea roşie. Folosiţi proprietatea CSS
color (figura 5.12).

Figura 5.12

‰ Afişaţi textul elementului nume cu culoarea albastră pe un fond galben.


Folosiţi proprietatea CSS background – color (figura 5.13).

Figura 5.13

‰ Plasaţi imaginea upg.jpg în centrul elementului facultatea. Folosiţi


proprietăţile background – repeat şi background – position (figura 5.14).

Figura 5.14
94
‰ Folosiţi proprietatea text-align cu valoarea center pentru a centra elementul
nume (figura 5.15).

Figura 5.15

Remarcă. Pentru mai multe informaţii privind afişarea documentelor XML cu


ajutorul foilor de stiluri în cascadă, consultaţi lucrările:
ƒ Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web, Editura
Economică, 2002.
ƒ Michael J. Young, XML, Etape par etape, Microsoft Press, Paris, 2001.

Legaţi o foaie de stiluri CSS la un document


XML
XML
Pentru a lega o foaie de stiluri în cascadă (CSS) la un document XML,
trebuie să inseraţi în prologul documentului, instrucţiunea de prelucrare
xml-stylesheet. Sintaxa generală a acestei instrucţiuni este următoarea:

<?xml-stylesheet type=”text/css” href=”calefişier CSS”?>,

unde,

calefişier CSS este un URL care indică amplasarea fişierului foii de stiluri.

Iată cum legăm fişierul de stiluri CSS stud.css la documentul XML


matricola.xml.

1. Inseraţi în prologul documentului XML, instrucţiunea de


prelucrare xml-stylesheet (figura 5.16).
95

Figura 5.16

2. Afişaţi documentul XML (în care aţi inserat instrucţiunea de


prelucrare xml-stylesheet) în Microsoft Internet Explorer
(versiunea 5 sau superioară), figura 5.17.

Figura 5.17

Remarci:
9 Atunci când o foaie de stiluri CSS este legată direct la un document XML,
puteţi deschide direct acest document în Internet Explorer (versiunea 5 sau
superioară). Tastaţi URL-ul (figura 5.18) şi acţionaţi tasta Enter.

Figura 5.18

9 Într-un document XML puteţi include mai multe foi de stiluri, inserând o
instrucţiune de prelucrare xml-stylesheet pentru fiecare dintre ele (figura
5.19).
96

Figura 5.19

Inseraţi elemente HTML în documentele


XML
XML
Să presupunem că doriţi să inseraţi într-un document XML elementul:

<IMG src=”sigla.jpg”/>.

Este un element HTML, veţi spune!

Este adevărat, însă navigatorul nu are de unde să ştie dacă este vorba
de un element HTML şi nu de un element XML. Pentru a face să
funcţioneze acest mecanism de discriminare, trebuie ca toate numele de
elemente HTML (sunt destule!) să fie rezervate exclusiv pentru inserarea
elementelor HTML. O astfel de regulă, ar fi împotriva spiritului XML, care
vă permite utilizarea tuturor numelor pe care le găsiţi corespunzătoare
pentru elementele legale.

Din fericire pentru dumneavoastră, puteţi utiliza o convenţie XML numită


spaţiu de nume care vă permite să distingeţi numele aflate în conflict.

Două elemente distincte pot avea acelaşi nume, cu condiţia ca ele să


aparţină unor spaţii de nume distincte (vezi lucrarea Michael J. Young,
XML étape par étape, Microsoft Press, Paris, 2001 pag. 217 – 218).
97
Numele unui element care se regăseşte într-un spaţiu de nume se
construieşte în felul următor: plasaţi la începutul numelui elementului
spaţiul de nume, introduceţi în continuare două puncte (:), iar apoi
numele elementului.

Un element cu numele spaţiu – nume1: nume1 şi elementul cu numele


nume1 pot coexista în acelaşi document şi vor fi considerate ca două
elemente distincte întrucât ambele aparţin unor spaţii de nume
separate: spaţiu – nume1: nume1 se află în spaţiul de nume
spaţiu – nume 1, în timp ce nume 1 este în spaţiul de nume implicit al
documentului.

Pentru a putea utiliza un spaţiu de nume trebuie să-l declaraţi explicit


(figura 5.20).

Figura 5.20

unde,

9 spatiu-nume1 reprezintă spaţiul de nume utilizat


pentru numirea elementului nume1;
9 xmlns=” …” reprezintă declaraţia unui spaţiu de
nume;
9 http://www.domeniu1.com reprezintă un identificator unic

Remarci:
9 Dacă un element XML poartă numele unui element HTML (IMG, A, HR etc.) şi
dacă el se află în spaţiul de nume html, Internet Explorer 5 (sau o versiune
superioară) îl va trata ca pe un element HTML şi-l va insera în pagina afişată.
Dimpotrivă, dacă elementul nu este în spaţiul de nume html, navigatorul îl va
trata ca pe un element XML normal.
9 Spaţiul de nume html este un spaţiu de nume rezervat şi specific, care se
declară în maniera următoare:
xmlns:html=’http://www.w3c.org/TR/REC-html40’.
9 În figura 5.21 se prezintă un element XML vid şi bine format care forţează
navigatorul să insereze un element HTML IMG. Elementul are un nume
98
asociat unui spaţiu de nume şi conţine de asemenea două atribute; primul
atribut declară spaţiul de nume iar al doilea atribut este un atribut standard
HTML (SRC).

Figura 5.21

9 Amintiţi-vă că pentru a insera elemente HTML, documentul XML trebuie să


conţină o foaie de stiluri ataşată.

XML Temă

Testaţi-vă cunoştinţele
1. Prezentaţi etapele pe care trebuie să le parcurgeţi pentru a afişa un
document XML în Microsoft Internet Explorer (versiunea 5 sau
superioară), cu ajutorul foilor de stiluri CSS.
2. Descrieţi procedura de creare a unui fişier de stiluri.
3. Descrieţi procedura de legare (asociere) a foilor de stiluri la un
document XML.
4. Explicaţi mecanismul de cascadă în foile de stiluri CSS.
5. Cum definiţi proprietatea display?
6. Cum definiţi proprietatea font-style?

Vizitaţi site-urile
9 http://www.w3.org/TR/REC-CSS1
9 http://www.w3.org/TR/REC-CSS2
9 http://www.xml.com
9 http://www.w3.org/TR/REC-xml-names/
Conversaţia 6

Afişaţi documentele XML cu ajutorul foilor


de stiluri XSLT
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XSLT – eXtensible Stylesheet Language Transformation
f XSLT – Utilizaţi foile de stiluri XSLT
f XSLT – Creaţi fişierul de stiluri (foaia de stiluri) XSLT
f XSLT – Legaţi o foaie de stiluri XSLT la un document XML
f XSLT – Principiul unei transformări XSLT. Aplicaţii
f XSLT – Alte elemente XSLT propuse de XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

eXtensible Stylesheet Language


XSLT
Transformation
Vom începe conversaţia noastră prin a studia XSLT. XSLT este un limbaj
de înalt nivel care cuprinde 35 de elemente definite de World Wide Web
Consortium. XSLT este un limbaj declarativ. Principalul obiectiv al
limbajului îl constituie transformarea documentelor (sursă) XML în alte
documente XML care pot fi afişate într-un navigator Internet, pe un
telefon mobil, pe hârtie de imprimantă etc.

Remarci:
9 XSLT 1.0 a fost publicat sub formă de recomandare la data de 16 noiembrie
1999.
100
9 XSLT (eXtensible Stylesheet Language Transformation) şi XSL/FO (eXtensible
Stylesheet Language Formatting Objects) reprezintă două mari tehnologii ale
limbajului XSL (eXtensible Stylesheet Language), limbaj de descriere a stilului
de prezentare a documentelor XML.
9 Se poate face o paralelă între relaţia CSS – HTML şi relaţia XSL – XML. XSL şi
XSLT corespund tehnologiei foilor de stiluri XML, chiar dacă aceasta rămâne o
viziune mai simplistă a mecanismelor de punere în operă prin această
tehnologie.
9 Limbajul XSLT este exprimat sub forma unui vocabular XML, adică un
ansamblu de modele (templates, în limba engleză). Modelele corespund unor
pattern-uri compuse din elemente şi atribute în arborele sursă şi definesc
conţinutul arborelui rezultant, atunci când aceste pattern-uri sunt identificate.

XSLT Utilizaţi foile de stiluri XSLT


O foaie de stiluri XSLT este un fişier XML care permite integrarea datelor
XML într-un template (model), în aceeaşi manieră în care inseraţi
adresele într-o scrisoare tip (cu foile de stiluri CSS nu puteţi afişa decât
informaţiile declarate în documentul XML!).

Foile de stiluri XSLT permit formatarea şi afişarea atributelor şi


elementelor XML (cu foile de stiluri CSS nu puteţi formata şi afişa decât
elementele XML!).

În sfârşit, foile de stiluri XSLT permit manipularea, reorganizarea şi


afişarea datelor de o manieră dinamică (cu foile de stiluri CSS nu puteţi
afişa datele decât într-o manieră statică!).

Remarci:
9 O foaie de stiluri XSLT trebuie să fie un document XML bine format! (XSLT nu
admite definirea DTD-urilor!).
9 Limbajul foilor de stiluri XSLT permite scrierea foilor de stiluri transformând
documentele sursă în documente care utilizează un vocabular (ansamblu de
tag-uri) diferit.

Pentru a afişa un document XML cu o foaie de stiluri XSLT (XSL) vă


invităm să parcurgeţi următoarele etape prezentate mai jos:
9 Etapa 1 – Crearea fişierului de stiluri XSLT (XSL);
9 Etapa 2 – Legarea fişierului de stiluri XSLT (foii de stiluri) la un
document XML.
101
Creaţi fişierul de stiluri (foaia de stiluri)
XSLT XSLT
O foaie de stiluri XSLT (XSL) este un fişier text cu extensia .xsl.

Fişierul de stiluri conţine un set de reguli template (templates rules, în


limba engleză). La rândul ei, o regulă template defineşte un „pattern”
(element ţintă), care corespunde elementelor din arborele sursă şi un
„template”. Elementul template permite definirea modului de
transformare şi de afişare a nodurilor de date XML, sau elementele
specificate prin atributul match al modelului.

Pentru a crea un fişier de stiluri XSLT (XSL), nu-l uitaţi pe … bătrânul


Notepad!

Iată cum procedăm pentru a crea fişierul de stiluri (foaia de stiluri)


XSLT, statistica.xsl, care va prelucra fişierul sursă XML, statistica.xml
(figura 6.1) şi va crea fişierul HTML rezultant.

Funcţiile fişierului de stiluri XSLT, statistica.xsl sunt următoarele:

9 Crearea unui element <html> pentru pagina Web;

9 Crearea unui titlu (Statistici Brazilia) pentru fereastra


navigatorului;

9 Crearea unui titlu (Statistici Brazilia) pentru pagina Web;

9 Afişarea numelui echipei şi a rezultatului (BRAZILIA este pe


locul 1).

În figura 6.1 este prezentat documentul XML (statistica.xml) creat cu


Notepad pentru care dorim să creăm fişierul de stiluri (foaia de stiluri)
statistica.xsl.
102

Figura 6.1

Remarci:
9 Documentul conţine datele statistice pentru echipa de fotbal a Braziliei,
campionatul mondial de fotbal 2002.
9 În absenţa foii de stiluri XSLT legate la documentul XML, statistica.xml
navigatorul (Internet Explorer) va afişa rezultatul ilustrat în figura 6.2.

Figura 6.2

Şi-acum să ne grăbim încet, pas cu pas. Treziţi-l pe bătrânul Notepad!

1. Introduceţi elementul rădăcină <xsl:stylesheet> după


declaraţia xml (prima linie), figura 6.3.
103

Figura 6.3

Remarci:
9 O foaie de stiluri XSLT trebuie să conţină un element rădăcină (document)
<xsl:stylesheet>.
9 Elementul rădăcină xsl:stylesheet informează procesorul că acest document
este o foaie de stiluri XSLT, precizându-i totodată că toate elementele care
vor începe cu xsl: vor fi elemente XSLT şi că aceste elemente vor fi conforme
cu recomandarea XSLT 1.0.
9 Elementul rădăcină (xsl:stylesheet) conţine două atribute: version şi xmlns:xsl
care au valorile menţionate.
9 xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” este spaţiul de nume
XSLT.
9 Următoarea formă este de asemenea validă:
<xsl:transform xmlns:xsl=”http://www.w3c.org/1999/XSL/Transform”
version=”1.0”. Valoarea 1999 reprezintă anul de alocare a URI pentru W3C.

2. Introduceţi elementul <xsl:template>, cu atributul


match=”statistica” (figura 6.4).

Figura 6.4

Remarci:
9 Nu uitaţi că elementele foilor de stiluri care încep cu xsl: sunt elemente XSL.
Toate celelalte elemente sunt fragmente ale rezultatului literal şi sunt copiate
ca atare în documentul rezultant. Aceste elemente constituie scheletul paginii
HTML generate. Datele sunt însă extrase din documentul XML pentru a umple
scheletul.
9 Pattern-ul unei reguli template este valoarea atributului match al elementului
xsl:template. Template-ul pentru ieşire este conţinutul elementului
xsl:template. Elementele care nu conţin prefixul xsl: se regăsesc în arborele
rezultant.
9 Modul cel mai simplu prin care stabilim o corespondenţă între o regulă de
prelucrare (template) şi elementele de prelucrat constă în a utiliza elementul
<xsl:template/>. Un model <xsl:template/> se construieşte astfel (figura
6.5):
104
<xsl:template match =”[model]”>
Figura 6.5 [elemente rezultante literale şi elemente XSLT]
</xsl:template>
Modelul poate fi un nume de element sau o expresie care identifică un
fragment al documentului XML.
9 Fiecare regulă template este reprezentată printr-un element <xsl:template>.
3. Introduceţi elementul <xsl:value-of select=”[expresie]”/>
pentru crearea conţinutului elementului HTML <title> Statistici
Brazilia </title>, înlocuind [expresie] cu echipa (figura 6.6).

Figura 6.6

4. Introduceţi elementul <xsl:value-of select=”[expresie]”/>


pentru crearea conţinutului elementului HTML <h1> Statistici
Brazilia </h1>, înlocuind [expresie] cu echipa (figura 6.7).

Figura 6.7
105
Remarcă. Elementul <xsl:value-of select=”[expresie]”/> permite scrierea în documentul
rezultant a valorii unui element al documentului sursă. Acest element prezintă un
pericol: dacă elementul documentului sursă posedă elemente fiu, atunci textul acestor
elemente este de asemenea inclus.

5. Introduceţi instrucţiunea <xsl:value-of select=”[expresie]”/>


pentru crearea conţinutului elementului HTML <p> Brazilia este
pe locul 1 </p>, înlocuind prima dată [expresie] cu echipa, iar
apoi [expresie] cu clasament (figura 6.8).

Figura 6.8

Remarcă. Aţi observat că elementul <xsl:value-of select=”echipa” a fost utilizat


de trei ori în acest model pentru:
9 crearea conţinutului elementului HTML <title>;
9 titlul paginii;
9 construirea frazei „Brazilia este pe locul 1”.
6. Închideţi tag-urile <body>, <html>, <xsl:template> şi
<xsl:stylesheet> (figura 6.9).
106

Figura 6.9

7. Salvaţi foaia de stiluri sub numele statistica.xsl (atenţie la


extensie!), figura 6.10.

Figura 6.10

8. Verificaţi dacă foaia de stiluri este bine formată, afişând-o în


Internet Explorer (figura 6.11).
107

Figura 6.11

Remarci:
9 Dacă Internet Explorer afişează un mesaj de eroare, verificaţi sintaxa foii de
stiluri.
9 Asiguraţi-vă că toate tag-urile deschise au fost bine închise şi că toate
elementele au fost corect imbricate.
Aplicaţie

‰ Construiţi acelaşi document cu editorul XML Spy.


În figura 6.12 se prezintă documentul generat cu XML Spy.
108

Figura 6.12

Legaţi o foaie de stiluri XSLT la un


XSLT
document XML
Pentru a lega o foaie de stiluri XSLT la un document XML, trebuie să
inseraţi în prologul documentului, instrucţiunea de prelucrare
xml-stylesheet.

Sintaxa generală a acestei instrucţiuni este următoarea:

<?xml-stylesheet type=”text/css” href=”calefişier.xsl”?>

unde,
109
calefişier.xsl este URL-ul care indică amplasarea fişierului foii de stiluri
XSLT.

Iată cum legăm fişierul de stiluri XSLT statistica.xsl la documentul XML


statistica.xml.

1. Inseraţi în prologul documentului XML, instrucţiunea de


prelucrare xml-stylesheet (figura 6.13).

Figura 6.13

Remarci:
9 Această instrucţiune de prelucrare este recunoscută de Microsoft Internet
Explorer 5.5 şi nu de toate procesoarele XML.
9 href=”statistica.xsl” acţionează în mod similar tag-ului LINK din HTML 4.0
(XML este mult mai dependent de foile de stiluri decât HTML!).

2. Afişaţi documentul XML (în care aţi inserat instrucţiunea de


prelucrare xml-stylesheet) în Microsoft Internet Explorer
(versiunea 5 sau superioară), figura 6.14.

Figura 6.14
110
Remarcă. Atunci când o foaie de stiluri XSLT este legată direct la un document XML,
puteţi deschide direct acest document în Internet Explorer (versiunea 5 sau
superioară). Tastaţi URL-ul şi acţionaţi tasta Enter (figura 6.15).

Figura 6.15

XSLT Principiul unei transformări XSLT. Aplicaţii


Vom studia în cele ce urmează diferite elemente XSLT propuse de XSL:
<xsl: template match=”/”>; <xsl:value-of/>;

<xsl:for-each>; <xsl:apply-templates>; <xsl:sort/>.

Majoritatea foilor de stiluri sunt alcătuite din reguli template


asemănătoare cu cele prezentate în figura 6.16 [1].

<xsl:template match=”/”>
[elemente literale rezultante]
<xsl:apply-templates/>
[elemente literale rezultante]
Figura 6.16
</xsl:template>
Remarcă. Acest model realizează următoarele operaţii:
9 Modelul găseşte elementul rădăcină al documentului, aplicând regula
<xsl:template match=”/”>.
Pentru a desemna nodul rădăcină se va utiliza simbolul „/” ca valoare a
atributului match. Această regulă se aplică numai nodului rădăcină al arborelui
sursă.
9 Modelul scrie în documentul rezultant o serie de elemente literale (tag-uri
HTML care sunt copiate identic în documentul rezultant).
9 El aplică celelalte modele ale foii de stiluri elementelor fii ale elementului
rădăcină, cu ajutorul instrucţiunii <xsl:apply-templates />.
9 Modelul scrie în documentul rezultant a doua serie de elemente literale şi
opreşte prelucrarea documentului sursă.

În cele ce urmează vom lucra cu o versiune mai bogată a documentului


statistica.xml. Vom include şi situaţiile statistice ale echipelor Germaniei,
Turciei, care au cucerit locul 2, respectiv 3 la Campionatul mondial de
fotbal din Coreea şi Japonia, ediţia 2002.
111
Aplicaţii

‰ Creaţi o foaie de stiluri XSLT care generează un document HTML ce conţine


un tabel cu o linie pentru fiecare element <echipa>. Capul de tabel cuprinde
următoarele câmpuri: Echipa, Victorii, Înfrângeri, Clasament.

În figura 6.17 este prezentat documentul XML (statistica.xml) pentru care dorim
să creăm fişierul de stiluri (foaia de stiluri).

Figura 6.17

Iată cum construim o foaie de stiluri XSLT, care generează un document HTML
ce conţine un tabel cu o linie pentru fiecare element <echipa>. Utilizaţi editorul
de texte Notepad.

1. Introduceţi elementul <xsl:template match=”/”> pentru a localiza


elementul rădăcină (figura 6.18).
112

Figura 6.18

Remarci:
9 În timpul fazei de execuţie vor fi afişate toate nodurile XML, începând cu
nodul rădăcină.
9 Tot ceea ce constituie prelucrare trebuie să fie în interiorul elementului
<xsl:template match=”/”>.
9 Elementul xsl:template defineşte un template care va putea fi aplicat unui
nod.
9 Atributul match permite definirea nodurilor asupra cărora se vor aplica regulile
template-ului.
2. Creaţi o pagină HTML (figura 6.19).

Figura 6.19

3. Introduceţi elementul <xsl:value-of /> pentru a crea titlul ferestrei


navigatorului (Statistici pentru Campionatul Mondial de Fotbal 2002) şi
titlul paginii (Campionatul Mondial de Fotbal 2002), figura 6.20.
113

Figura 6.20

Remarcă. Valoarea atributului (obligatoriu) select este o expresie. Această expresie este
evaluată şi obiectul rezultat este convertit într-un şir de caractere.
4. Introduceţi elementul <xsl:for-each select=”//echipa”> pentru a
genera un tabel cu o linie pentru fiecare element <echipa> (figura
6.21).

Figura 6.21

Remarci:
9 statistici_cm_fotbal/nume – selectează elementul fiu <nume> al elementului
<statistici_cm_fotbal>.
9 Cu enunţul <xsl:for-each select=”[expresie]”/> se identifică un element
(echipa) din documentul XML care este iterat (repetat) şi căruia i se aplică
aceeaşi transformare pentru fiecare instanţă.
114
9 Prin ”//” se selectează toate nodurile descendente ale elementului echipa
indiferent de nivelul ierarhic.
5. Introduceţi elementul <xsl:apply-templates/> pentru a umple cele trei
linii ale tabelului cu datele corespunzătoare fiecărei echipe (nume,
rezultate, clasament), figura 6.22.

Figura 6.22

Remarci:
9 Elementul <xsl:apply-templates> cu atributul select permite aplicarea
regulilor template unui document.
9 Elementul <xsl:apply-templates> nu poate conţine decât două tipuri de
elemente:
ƒ xsl: sorte;
ƒ xsl: with-param.
9 La întâlnirea elementului <xsl:apply-templates/>, procesorul XSLT analizează
fiecare element fiu şi îi aplică regula template.
9 Există numeroase asemănări între sistemul de adresare a documentelor XML
(sub formă de arbore şi noduri) şi navigarea în structura directoarelor.
6. Introduceţi tag-urile de închidere: </table>, </body>,
</xsl:template>, </xsl:stylesheet> (figura 6.23).

Figura 6.23
115
Atunci când documentul şi foaia de stiluri asociată sunt analizate de către
procesorul XML, acesta generează documentul HTML ilustrat în figura 6.24.

Figura 6.24

Remarci:
9 Tag-urile HTML au înlocuit tag-urile XML originale. Numai conţinutul
elementelor documentului XML original, şi nu tag-urile este copiat în
documentul rezultant.
9 Tag-urile originale sunt suprimate dar ele au servit la identificarea elementelor
al căror conţinut trebuia să fie copiat. Acest conţinut este plasat în elementele
HTML definite în foaia de stiluri.
7. Afişaţi documentul XML în Microsoft Internet Explorer (versiunea 5
sau o versiune superioară), figura 6.25.
116

Figura 6.25

‰ Afişaţi echipele în ordinea în care au fost clasate (după clasament!).

Indicaţie. Pentru a sorta elementele unui document sursă utilizaţi elementul


<xsl:sort/>. Acest element trebuie utilizat ca fiu al unuia din elementele
<xsl:apply templates/>, <xsl:for-each/>. Adăugaţi elementului <xsl:sort/>
atributul select care precizează elementul utilizat drept criteriu de sortare. În
cazul nostru, vom sorta elementele documentului sursă (XML) în funcţie de
clasamentul echipelor.

Iată cum aplicaţi elementul <xsl:sort/> pentru sortarea elementelor


documentului sursă din figura 6.26.

Figura 6.26

Remarci:
9 Nu întotdeauna este necesar de a defini explicit un model (template) care
corespunde fiecărui element al documentului sursă. XSLT furnizează modele
standard sau modele implicite care permit prelucrarea elementelor în absenţa
regulilor specifice (vezi elementul <xsl:apply-template />).
117
9 Puteţi suprima conţinutul unui element al documentului sursă definind un
model vid pentru acel element. De exemplu, modelul <xsl:template
match=”Statistica” /> suprimă conţinutul elementului <statistica>. Întrucât
acest model (vid) nu conţine nici un element literal rezultant şi nici un
element XSLT, el nu va genera nimic în documentul rezultant.
9 Evitaţi să utilizaţi elementul <xsl:apply-templates /> fără atributul match.
Folosiţi enunţurile: <xsl:for-each select=”[expresie]” /> sau
<xsl:apply-templates match=”[expresie]” />.
9 Erorile XSLT curente, pe care de regulă le fac debutanţii sunt următoarele:
ƒ foaia de stiluri nu este un document bine format;
ƒ foaia de stiluri nu găseşte elementul rădăcină.
9 În cadrul enunţului <xsl:template />, toate elementele XSLT se referă la
nodul curent.

XML Alte elemente XSLT propuse de XSL

Listăm în continuare alte elemente XSLT (vezi Yannick LEJEUNE &


Alexandre PINHEL, XML, e-Poche, Micro Application, 2001, Paris şi
Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web, Editura
Economică, 2002) pe care vă invităm să le folosiţi în aplicaţiile
dumneavoastră:

9 <xsl:comment></xsl comment> – permite generarea


comentariilor în documentul de ieşire.
9 <xsl:apply-imports> – permite aplicarea regulilor conţinute
într-un fişier importat;
9 <xsl:attribute> – permite inserarea unui atribut;
9 <xsl:attribute-set> – permite inserarea unui set de atribute sub
acelaşi nume;
9 <xsl:param> – permite declararea parametrilor locali/globali;
9 <xsl:call-template></xsl:call-template> – permite apelarea
unei reguli template specifice;
9 <xsl:choose> – permite selectarea unei variante în funcţie de
context;
9 <xsl:copy> – permite efectuarea unei copii a nodului curent, în
arborele rezultant;
118
9 <xsl:copy-of> – permite efectuarea unei copii a unui set de
noduri;
9 <xsl:decimal-format> – defineşte modul în care un număr este
convertit în şir de caractere;
9 <xsl:element> – permite definirea unui nou element;
9 <xsl:fallback> – generează codul de înlocuire a unui element
neidentificat de către procesorul XSLT;
9 <xsl:text> – adaugă un text documentului de ieşire;
9 <xsl:if> – evaluează o expresie logică şi returnează o valoare
booleană (true sau false);
9 <xsl:include> – include o foaie de stil în foaia de stiluri curentă;
9 <xsl:key> – creează o cheie unică pentru un element;
9 <xsl:message> – afişează un mesaj de eroare;
9 <xsl:namespace-alias> – înlocuieşte un nume de spaţiu cu un
altul;
9 <xsl:number> – inserează în arborele rezultant numărul
nodului curent sau afişează acest număr;
9 <xsl:preserve-space> – conservă nodurile vide;
9 <xsl:strip-space> – şterge nodurile care nu conţin decât spaţii
albe;
9 <xsl:stylesheet> – introduce o foaie de stil;
9 <xsl:variable> – declară o variabilă globală sau locală.

XML Temă

Testaţi-vă cunoştinţele
1. Comparaţi foile de stiluri CSS cu foile de stiluri XSLT.
2. Descrieţi pe scurt etapele pentru afişarea unui document XML cu o
foaie de stiluri XSLT (XSL).
119
3. Ce este XSL?
4. Cum definiţi o regulă template?
5. Care este patern-ul următoarei reguli template?
<xsl:template match=”statistica”>
6. Cum selectaţi nodul rădăcină al arborelui sursă?
7. Comentaţi următoarea regulă template:
<xsl:template match=”/”>
<b> <xsl:value-of select=”card”/> </b>
</xsl:stylesheet>
8. Cum traduceţi în limba română cuvântul match (vezi atributul
match=”/”).
9. Descrieţi următoarele exemple de pattern-uri utilizate pentru
identificarea nodurilor unei structuri arborescente asociate unui
document sursă XML (figura 6.27).
Pattern Exemplu Descriere
Nume persoana Elementul persoana
* * Oricare element
/ /
// //persoana
. .
Figura 6.27 .. ..

10.Se consideră următorul exemplu XML (figura 6.28).

Figura 6.28

Efectuaţi transformarea XML Š HTML pentru a obţine rezultatul afişat în


figura 6.29 (o listă cu simboluri).
120

Figura 6.29

11.Comentaţi următorul exemplu (figura 6.30) creat cu XML Spy.

Figura 6.30

Vizitaţi site-urile
9 www.wapforum.org
9 http://www.w3.org/TR/xslt
Conversaţia 7

Utilizaţi XSLT cu XPath pentru afişarea


documentelor XML
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XPath – XML Path Language, limbaj pentru adresarea
fragmentelor XML. Aplicaţii
f XML – Inseraţi modele HTML în foile de stiluri XSLT
f XML – Combinaţi CSS şi XSLT
f XSLT, XPath – Temă
•••••••••••••••••••••••••••••••••••••••••

XML Path Language – limbaj pentru


XPath
adresarea fragmentelor XML
„Limbajul (de transformare XML) XSLT utilizează limbajul XPath pentru
adresarea fragmentelor unui document XML” (extras din recomandarea
W3C).

XSLT permite crearea şi aplicarea template-urilor (modelelor) unor


documente sursă XML. Cu limbajul XPath puteţi selecta un nod (o
resursă) al unui document XML pentru a-i aplica o transformare.

Este posibil de a crea expresii XPath pentru a selecta datele XML. XSLT
şi XPath facilitează crearea unor transformări specifice. Puteţi selecta
122
elementele unui document XML pentru a le copia în documentul
rezultant. Puteţi sorta, selecta şi manipula elementele în funcţie de
următoarele caracteristici: numele elementului, numele atributului,
valoarea atributului, prezenţa unui element fiu/părinte particular.

Remarcă. Această listă este departe de a fi completă. XPath este un subiect prea vast
pentru a putea fi tratat integral în această lucrare. Pentru a explora XPath în detalii,
vizitaţi site-ul www.w3c.org/TR/xpath.

Vizualizaţi documentele XML ca arbore de noduri


Înainte de a începe să explorăm sintaxa limbajului XPath şi de a scrie
expresii XPath, este necesar de a vedea documentele XML sub o formă
puţin diferită. Până acum, am considerat documentele ca pe un text
alcătuit din tag-uri care oferă informaţii asupra conţinutului
documentului. Este posibil de a considera ierarhia elementelor sub forma
unui arbore de noduri.

Un arbore de noduri reprezintă atât structura cât şi conţinutul unui


document XML [1].

În figura 7.1 este prezentat documentul XML, statistici.xml ca un arbore


de elemente.

<statistici_cm_fotbal>

<nume>

<echipa> <echipa> <echipa> <echipa>

<rezultate <rezultate> <rezultate>

Figura 7.1 <victorii> <victorii>


123
Remarci:
9 Un arbore poate conţine şapte tipuri de noduri:
ƒ nod rădăcină;
ƒ noduri element;
ƒ noduri text;
ƒ noduri atribut;
ƒ noduri spaţiu de nume;
ƒ noduri instrucţiune de prelucrare;
ƒ noduri comentariu.
9 Elementul XSLT <xsl:apply-template/> poate fi utilizat în două moduri:
ƒ fără atribut, <xsl:apply-template/>;
ƒ cu un atribut match, <xsl:apply-template match=”[expresie]”/>
unde,
expresie este o expresie XPath alcătuită din instrucţiuni care permit selectarea
unuia sau mai multor elemente ale unui document XML; o expresie XPath
poate fi un simplu nume de element.
9 XSLT utilizează XPath pentru:
ƒ selectarea nodului de prelucrare;
ƒ specificarea condiţiilor de prelucrare a unui nod;
ƒ generarea textului care se va insera în arborele rezultant.
9 Expresiile XPath intervin ca valori ale unor atribute ale elementelor XSLT şi ca
template-uri pentru valorile atributelor.
9 Elementele fundamentale ale expresiilor XPath sunt prezentate în figura 7.2.
Simbol Semnificaţie
/ Fiu al nodului curent
../ Părinte al nodului curent
// Descendent al nodului curent
* Oricare element fiu al nodului curent
Figura 7.2 @* Toate atributele nodului curent

9 Exemple de expresii XPath:


ƒ /statistici_cm_fotbal/* – selectează toate elementele fii ale elementului
<statistici_cm_fotbal>;
ƒ /statistici_cm_fotbal/nume – selectează elementul fiu <nume> al
elementului <statistici_cm_fotbal>;
ƒ //înfrângeri – selectează toţi descendenţii elementului <înfrângeri>.
9 Puteţi perfecţiona căile de acces către elementele documentului sursă
utilizând predicate XPath. Un predicat este o expresie booleană, care în urma
evaluării returnează o valoare de tip boolean: true sau false.
9 Operatorii folosiţi într-o expresie logică sunt: <; >; <=; >=; != (diferit).

Axele XPath
XPath furnizează un set de cuvinte cheie, numite axe pentru a specifica
relaţiile între elemente. Axele XPath selectează nodurile în funcţie de
relaţia lor ierarhică cu nodul curent.
124
Axele XPath permit construirea căilor de acces complexe în vederea
localizării nodurilor specifice ale unui document.

Calea de acces constă din:

9 o axă;

9 un test;

9 unul sau mai multe predicate.

În figura 7.3 se prezintă specificatorii axelor XPath.

Axa Semnificaţie
child Toţi fiii nodului curent. Un nod fiu este situat direct în
nodul curent.
descendent Toţi descendenţii nodului curent.
parent Părintele direct al nodului curent.
ancestor Toţi strămoşii nodului curent.
following-sibling Toate nodurile care se succed nodului curent şi care au
acelaşi părinte.
preceding-sibling Toate nodurile care preced nodul curent şi care au
acelaşi părinte.
following Toate nodurile care se succed nodului curent, oricare ar
fi nivelul lor ierarhic.
preceding Toate nodurile care preced nodul curent, oricare ar fi
nivelul lor ierarhic.
Figura 7.3 self Nodul curent.
125
Remarci:
9 În figura 7.4 este ilustrată reprezentarea axelor XPath pentru documentul
XML, statistici.xml.

stămoşi <statistici_cm_fotbal>

părinte
<nume>

precedent curent (self) următorii


<echipa> <echipa> <echipa> <echipa>

<rezultate <rezultate> <rezultate>

Figura 7.4 <victorii> <victorii> descendenţi

9 Sintaxa XPath este structurată în mai multe părţi, după cum urmează:
ƒ axa, care reprezintă relaţia arborescentă ce posedă nodul curent împreună
cu nodurile pe care dorim să le selectăm;
ƒ nodul de test, care va preciza ce caracteristici trebuie să posede nodurile
pentru a fi selectate;
ƒ unul sau mai multe predicate (situate între paranteze drepte) care permit
rafinarea nodurilor selectate.
9 Sintaxa unui XPath este următoarea: numele axei, urmat de nodul de test
separat prin ”::”, urmat de zero sau mai multe predicate plasate între
paranteze drepte.
9 În exemplul:
Child::eva[position()=1],
ƒchild este numele axei;
ƒeva este nodul de test;
ƒ[position()=1] este predicatul.
9 Alte exemple:
ƒ descendent::echipa – desemnează toate elementele numite echipa care
sunt descendenţi ai nodului curent.
ƒ parent::* – desemnează elementul părinte al nodului curent.
9 Limbajul XPath permite identificarea elementelor, atributelor, textului,
comentariilor sau instrucţiunilor de prelucrare într-un document în funcţie de
metadate (numele tag-urilor şi atributelor) şi de poziţia lor în ierarhia
elementelor XML.
9 Atunci când o foaie de stiluri prelucrează un document XML, elementele
documentului sunt comparate cu elementele XSLT ale acestei foi. În
momentul prelucrării, nodul în curs de prelucrare este numit nod contextual.
În figura 7.5 este ilustrat modul în care nodul contextual se deplasează în
arborele documentului prelucrat prin foaia de stiluri.
126

<statistici_cm_fotbal>

<nume>

<echipa> <echipa> <echipa>

Figura 7.5 <nume> <rezultate>

Aplicaţii

‰ Se consideră documentul statistici.xml ilustrat în figura 7.6, construit cu


Notepad.

Figura 7.6
127
Afişaţi rezultatul expresiei: <xsl:value-of select=”nume”>, considerând că nodul
contextual este al doilea element <echipa> (TURCIA) al documentului.

Utilizaţi următoarea foaie de stiluri (vezi figura 7.7).

Figura 7.7

În figura 7.8 este afişat rezultatul pe care trebuie să-l obţineţi.

Figura 7.8

‰ Modificaţi fişierul statistici.xml şi înlocuiţi xpath.xsl cu xpath2.xsl. Foaia de


stiluri xpath2.xsl utilizează instrucţiunea <xsl:value-of
select=”statistici_cm_fotbal/nume”/>. Salvaţi documentul şi afişaţi în Internet
Explorer rezultatul acestei instrucţiuni.

În figura 7.9 este afişat rezultatul pe care trebuie să-l obţineţi.


128

Figura 7.9

‰ Modificaţi fişierul statistici.xml şi înlocuiţi xpath2.xsl cu xpath3.xsl. Foaia de


stiluri xpath3.xsl utilizează instrucţiunea: <xsl:value-of
select=”//echipa[3]/nume”/>. Salvaţi documentul şi afişaţi în Internet Explorer
rezultatul acestei instrucţiuni.

În figura 7.10 este afişat rezultatul pe care trebuie să-l obţineţi.

Figura 7.10

‰ Modificaţi fişierul statistici.xml şi înlocuiţi xpath3.xsl cu xpath4.xsl. Foaia de


stiluri xpath4.xsl utilizează instrucţiunea

<xsl:value-of select=”preceding-sibling::echipa/rezultate/ victorii”/>.

Salvaţi documentul şi afişaţi în Internet Explorer rezultatul acestei instrucţiuni.


În figura 7.11 este afişat rezultatul pe care trebuie să-l obţineţi.

Figura 7.11
129
Remarci:
9 Specificatorul de axe XPath preceding-sibling are următoarea semnificaţie:
toate nodurile care preced nodul curent şi care au acelaşi părinte.
9 Instrucţiunea <xsl:value-of select=”preceding-sibling::echipa/
rezultate/victorii”/> selectează valoarea elementului fiu <victorii> al
elementului <rezultate> al elementului <echipa> care preced nodul
contextual.

Inseraţi modele HTML în foile de stiluri


XML
XSLT
Recomandarea XSLT a consorţiului W3C vă permite scrierea unei foi de
stiluri sub forma unui element literal rezultant. Un element literal
rezultant permite la rândul lui crearea unui model HTML şi umplerea
zonelor documentului cu ajutorul instrucţiunilor XSLT/XPath [1].

Remarcă. Un model HTML este constituit din cod HTML, care este comun tuturor
paginilor site-ului.

Iată cum modificăm pagina HTML afişată în figura 7.12 pentru a servi ca
model în foaia de stiluri. Va trebui mai întâi să precizăm câmpurile din
pagina HTML care urmează să primească datele XML (vezi figura 7.13 în
care se prezintă modelul HTML care conţine statisticile pentru
Campionatul Mondial de Fotbal 2002).

Figura 7.12
130

Figura 7.13

1. Examinaţi fişierul XML (statistici.xml) prezentat în figura 7.14,


pentru a putea crea expresiile XPath cu care vor fi extrase
datele XML.
131

Figura 7.14

Remarci:
9 Originea acestui fişier nu are importanţă. Puteţi să-l creaţi manual, el putând
de asemenea proveni dintr-o bază de date. Pentru moment, ne vom
concentra numai pe structura datelor, pentru a putea scrie foaia de stiluri
XSLT.
9 În documentul statistici.xml (figura 7.14) datele sunt plasate dezordonat (în
mod intenţionat!). Ele vor fi sortate în foaia de stiluri.
9 Elementul rădăcină <statistici_cm_fotbal> posedă un element fiu, <nume>
care conţine numele campionatului de fotbal – Campionatul Mondial de Fotbal
2002.
9 <statistici_cm_fotbal> posedă mai mulţi fii instanţiaţi de elementul <echipa>.
9 Fiecare element <echipa> posedă un fiu <nume>. În acest context, <nume>
conţine numele echipei.
132
9 Fiecare element <echipa> posedă un fiu numit <rezultate>.
9 Fiecare element <rezultate> posedă fiii: <victorii>, <înfrângeri> şi <nule>.
Aceste elemente conţin respectiv numărul de victorii, numărul de înfrângeri şi
numărul de meciuri nule ale echipei.
9 Fiecare element <echipa> posedă un element <clasament> care conţine
clasamentul echipei la Campionatul Mondial de Fotbal 2002 din Coreea şi
Japonia.

2. Creaţi expresiile XPath pentru extragerea datelor din fişierul


XML.

Întrucât noi cunoaştem ordinea datelor, vom utiliza instrucţiunea


<xsl:value-of /> pentru a selecta o dată specifică în fişierul statistici.xml
în vederea plasării acesteia în modelul HTML. Pentru aceasta, vom scrie
o cale de acces care va servi ca valoare atributului select.

2.1 Scrieţi instrucţiunea XPath pentru a extrage conţinutul


elementului <nume>, fiul lui <statistici_cm_fotbal>
(figura 7.15).

...
Figura 7.15
<xsl:value-of select=”statistici_cm_fotbal/nume”/>
...
2.2 Scrieţi instrucţiunea XPath pentru a extrage informaţiile
privind cele trei echipe medaliate la Campionatul Mondial
de Fotbal 2002 din Coreea şi Japonia (figura 7.16).

...
<xsl:for-each select=”statistici_cm_fotbal/echipa”>
Figura 7.16 ...

Remarcă. Numele echipei aflându-se în elementul <nume> fiu al elementului


<echipa> poate fi selecţionat direct.
<xsl: value-of select=”nume”/>.
2.3 Scrieţi instrucţiunea XPath pentru a extrage informaţiile
privind numărul de victorii, înfrângeri şi meciuri nule
pentru cele trei echipe de fotbal (figura 7.17).
133
...
<xsl:value-of select=”rezultate/victorii”/>
<xsl:value-of select=”rezultate/infrangeri”/>
<xsl:value-of select=”rezultate/nule”/>
Figura 7.17 ...

2.4 Scrieţi instrucţiunea XPath pentru a extrage conţinutul


elementului <clasament> (figura 7.18).

...
<xsl:value-of select=”clasament”>
Figura 7.18 ...

3. Introduceţi în foaia de stiluri (literal.xsl) din figura 7.19


expresiile XPath pe care le-aţi creat (figura 7.18).

Figura 7.19

4. Deschideţi fişierul statistici.xml într-un editor de texte şi


asociaţi-i foaia de stiluri literal.xsl, adăugând după linia de
134
declaraţie următoarea linie: <?xml-stylesheet type=”text/xsl”
href=”literal.xsl”?>.

5. Deschideţi fişierul în Internet Explorer. În figura 7.20 este afişat


rezultatul pe care trebuie să-l obţineţi.

Figura 7.20

Remarcă. Navigatorul Internet Explorer afişează datele documentului XML (statistici.xml)


într-un model HTML.
Aplicaţii

‰ Afişaţi în ordine alfabetică echipele de fotbal clasate pe primele trei locuri la


Campionatul Mondial de Fotbal 2002 ce a avut loc în Coreea şi Japonia.

Indicaţie. În corpul instrucţiunii <xsl:for-each> adăugaţi instrucţiunea <xsl:sort


select=”nume”/> ca în secvenţa următoare (figura 7.21):

Figura 7.21
135
În figura 7.22 se prezintă în ordine alfabetică echipele de fotbal clasate pe
primele trei locuri.

Figura 7.22

‰ Afişaţi în funcţie de clasament echipele de fotbal clasate pe primele trei locuri


la Campionatul Mondial de Fotbal 2002 ce a avut loc în Coreea şi Japonia.

Indicaţie. Modificaţi linia <xsl:sort select=”nume”/> înlocuind valoarea


atributului select cu clasament.

Figura 7.23

În figura 7.24 se prezintă clasamentul (locul 1, locul 2, locul 3) echipelor de


fotbal.

Figura 7.24
136

XML Combinaţi CSS şi XSLT


XML este un limbaj suplu care poate fi utilizat pentru numeroase aplicaţii
profesionale. Întreprinderile îl utilizează ca format pentru schimbul
informaţiilor comerciale. Noi domenii de utilizare apar în fiecare zi.

Înainte de a vă entuziasma de facilităţile CSS cu XML este util de a


compara această tehnologie cu XSLT, limbajul foilor de stiluri. CSS şi
XSLT prezintă diferenţe importante.

Utilizat cu XPath, XSLT permite următoarele prelucrări ale datelor XML:


selectarea din document a unui conţinut specific; manipularea şi
sortarea datelor, combinarea conţinutului mai multor documente;
conversia XML  HTML, XML  WML etc.

XSLT prezintă de asemenea câteva limitări, ca de exemplu: XSLT


nu propune nici o sintaxă pentru formatare (formatarea poate fi indicată
numai efectuând o conversie către un alt limbaj, ca HTML); XSLT şi
XPath sunt limbaje greoaie şi dificil de învăţat; XSLT cere un program
special, procesor XSLT, sau transformator XSLT cu care puţine
browser-e sunt echipate.

CSS-urile permit specificarea într-o manieră foarte simplă a formatării


elementelor HTML sau XML. Această facilitate reprezintă un avantaj!

CSS-urile impun şi anumite limitări, ca de exemplu: ele nu pot manipula


elemente XML; CSS-urile nu pot selecta/sorta elemente; documentul
XML este afişat integral sau deloc; suportul CSS variază în funcţie de
navigator; CSS-urile nu permit specificarea unei formatări variind în
funcţie de atributele elementelor.

XSLT este un limbaj de programare bogat şi puternic, util pentru


convertirea unui document XML al unui vocabular către un altul, precum
137
HTML în vederea afişării acestuia. CSS oferă pe de altă parte o sintaxă
simplă pentru a specifica modul în care elementele trebuie să fie afişate.

Remarcă. Cu toate limitările, CSS-urile sunt foarte puternice dacă le utilizaţi în


combinaţie cu XSLT.
Aplicaţie [1]

‰ Combinaţi două foi de stiluri CSS şi XSLT pentru a afişa datele XML
prezentate în figura 7.25.

Figura 7.25

Indicaţie. Creaţi o foaie de stiluri CSS simplificată (gen.css) care va conţine


două clase: masculin şi feminin. Elementele primei clase vor fi afişate cu bold
(.masculin{font-weight:bold;}), iar elementele celei de-a doua clase vor fi
afişate cu italic (.feminin{font-style:italic;}). Creaţi după aceea o foaie de stiluri
XSLT pentru extragerea datelor necesare pornind de la fişierul (gen. xml).
Plasaţi elementele într-o linie a tabelului care va fi de clasă masculin sau
feminin în funcţie de atributul sex al elementului <nume>. Utilizaţi instrucţiunea
<xsl:choose> pentru a testa valoarea atributului şi a crea elementul
corespunzător în documentul rezultant.
138

XSLT, XPath Temă

Testaţi-vă cunoştinţele
1. Care este rolul limbajului XPath?
2. De ce utilizăm XSLT cu XPath?
3. Cum definiţi axele XPath?
4. Comentaţi instrucţiunea:
<xsl: sort select=”clasament”/>

Vizitaţi site-urile
9 www.w3.org/TR/xpath
9 www.xml.com
9 http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm
Conversaţia 8

De la DTD la XML Schema


•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – Scheme XML
f XML – Tipuri de date predefinite utilizate în schemele XML
f XML – Construiţi o schemă XML
f XML – Software XML Schema. Aplicaţii
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

XML Scheme XML


Pe parcursul conversaţiilor precedente am învăţat să utilizăm DTD XML
pentru a defini vocabularul şi structura documentelor XML. Am învăţat
de asemenea cum să validăm un document în raport cu un DTD,
verificând structura documentului cu cea descrisă prin DTD.

Autorii XML-ului doreau la început să conserve o compatibilitate maximă


cu SGML (Standard Generalized Markup Language) predecesorul său,
mult mai complex. Din acest motiv, versiunea 1.0 a recomandării XML
specifică o formă simplificată a DTD-ului pentru crearea de vocabulare şi
validarea documentelor XML.

O dată cu dezvoltarea şi răspândirea XML-ului, limitele DTD-ului apăreau


din ce în ce mai jenante.
140
Remarcă. Limitele DTD-ului sunt următoarele:
9 Un DTD nu este un document XML;
9 Regulile de instanţiere sunt limitate;
9 Controlul tipului de conţinut al unui element este limitat.
Pentru a elimina aceste limite ale DTD-ului consorţiul W3C a decis să
creeze un nou standard (mai 2001) – XML Schema, capabil să răspundă
nevoilor utilizatorilor.

Aşadar, va trebui să alegeţi când creaţi documente XML, între schemele


XML şi DTD XML. Analizaţi şi decideţi!

Scheme XML sau DTD XML?


Schemele XML prezintă, în raport cu DTD XML următoarele avantaje:

9 permit definirea tipurilor de date într-un mod mult mai precis;


9 sunt compatibile cu spaţiile de nume ceea ce permite
combinarea mai multor vocabulare în cadrul aceluiaşi
document;
9 sunt ele însele documente XML.
DTD XML prezintă următoarele avantaje:
9 utilizează o sintaxă mai simplă;
9 sunt mult mai concise;
9 sunt compatibile cu un număr mai mare de aplicaţii (cel puţin
pentru moment!)
Remarci:
9 Probabil schemele XML şi DTD XML vor continua să coabiteze pentru o bună
perioadă de timp!
9 Pentru a lua corect o decizie în privinţa utilizării schemelor XML sau DTD XML
trebuie să ţineţi cont şi de compatibilitatea celor două tehnici cu instrumentele
pe care le aveţi la dispoziţie.
9 Cu excepţia spaţiilor de nume, alegerea între scheme XML şi DTD XML nu
afectează structura documentelor pe care le creaţi. Puteţi crea şi valida
aceleaşi documente cu ajutorul unei scheme XML sau a unui DTD. O schemă
XML oferă în plus posibilitatea validării conţinutului elementelor.
141
Tipuri de date predefinite utilizate în
XML
schemele XML
Înainte de a construi împreună prima schemă XML, va trebui să
înţelegem principiile fundamentale. A construi o schemă fără a respecta
anumite principii … nu se poate!

Tipuri de date predefinite


Unul din principalele avantaje ale schemelor XML este acela că permit
specificarea tipului de conţinut şi a atributelor elementelor XML. O
schemă XML poate specifica dacă un element trebuie să conţină un
număr (întreg, zecimal etc.) ceea ce un DTD nu permitea.

Cele mai importante tipuri de date predefinite utilizate în schemele XML


sunt următoarele [2]:

9 tipuri simple numerice


ƒ Boolean (defineşte tipul de date boolean – true sau false; 1
sau 0);
ƒ Binary (defineşte tipul de date binar);
ƒ Integer (orice întreg situat în intervalul închis -126789 la
126789);
ƒ NonPositiveInteger (orice număr întreg negativ sau nul situat
în intervalul închis -126789 la 0);
ƒ nonNegativeInteger (orice număr întreg pozitiv sau nul situat
în intervalul închis 0 la 126789);
ƒ positiveInteger (orice număr întreg pozitiv situat în intervalul
închis 1 la 126789);
ƒ negativeInteger (orice număr întreg negativ situat în
intervalul închis -126789 la -1);
ƒ byte (orice număr întreg situat în intervalul închis -1 la 126);
142
ƒ short (orice număr întreg situat în intervalul închis -1 la
12678);
ƒ int (orice număr întreg situat în intervalul închis -1 la
126789675);
ƒ long (orice număr întreg situat în intervalul închis -1 la
12678967543233);
ƒ unsignedByte (orice număr întreg situat în intervalul închis 0
la 126);
ƒ unsignedShort (orice număr întreg situat în intervalul închis 0
la 12678);
ƒ unsignedInt (orice număr întreg situat în intervalul închis 0 la
1267896754);
ƒ unsignedLong (orice număr întreg situat în intervalul închis 0
la 12678967543233);
ƒ decimal (orice număr zecimal pozitiv sau negativ);
ƒ float (orice număr zecimal situat în intervalul 3.4e+38 la
1.4e-45).
9 tipuri temporale
ƒ time (defineşte ora);
ƒ date (defineşte data calendaristică: zzllaa);
ƒ dateTime (Exemplu: 2003-09-01 T13:20:00+02:00);
ƒ duration (Exemple: P-1347M; P134Y; P3Y4M10J
T8H30M13S);
ƒ GYearMonth (Exmplu: 2003-09).
9 tipuri DTD
ƒ ID;
ƒ IDREF;
ƒ IDREFS;
ƒ NMTOKEN;
ƒ NMTOKENS;
143
ƒ ENTITY;
ƒ NOTATION;
ƒ Name.
9 tipuri particulare
ƒ string (defineşte un şir de caractere);
ƒ hexBinary (defineşte datele în sistemul hexazecimal);
ƒ any URI (defineşte un identificator de resurse).

Elemente de tip simplu şi de tip complex


Schema XML descrie structura documentelor XML în mod similar
DTD-urilor. Schemele XML fac distincţie între două tipuri de elemente:

9 elemente de tip simplu, care nu pot avea nici fii, nici atribute;

9 elemente de tip complex, care pot avea elemente fii şi atribute.

Remarcă. Este foarte important să reuşiţi să deosebiţi cele două tipuri de elemente între
ele întrucât acestea se definesc în mod diferit în cadrul unei scheme XML (simpleType
defineşte elementul de tip simplu, iar complexType defineşte elementul de tip
complex).

XML Construiţi o schemă XML

Pentru început vom compara un DTD cu schema XML echivalentă. Apoi


veţi vedea şi singuri ce va urma.

Iată cum procedăm pentru a crea o schemă XML, piesă cu piesă pornind
de la documentul XML scheme.xml creat cu editorul Notepad (figura 8.3)
al cărui DTD este prezentat în figura 8.1 (creat de asemenea cu
Notepad).
144

Figura 8.1

Remarci:
9 DTD-ul XML prezentat nu spune nimic despre valorile autorizate ale
elementului <um> (unitate de măsură) şi nu precizează faptul că elementul
<cantitate> are drept conţinut o valoare numerică.
9 Ierarhia listei de produse de excursie este prezentată în figura 8.2.

Lista produse excursie

Produse excursie Produse excursie Produse excursie

Cantitate Unitate Denumire


Figura 8.2 măsură produs

Figura 8.3
145
Remarcă. Evident, puteţi critica sărăcia acestei liste! În ceea ce ne priveşte am
considerat suficiente 3 kg de banane, 2 kg de biscuiţi şi 1 borcan de ness pentru o
simplă ascensiune, în doi pe … OMUL!

Şi-acum să fim creativi!

Pentru a crea o schemă XML, folosiţi una din metodele prezentate mai
jos:

9 Metoda 1 – Codificarea manuală;

9 Metoda 2 – Codificarea automată cu aplicaţii dedicate.

Metoda 1

Dacă vi se va părea complicată această metodă să nu vă îngrijoraţi, căci


nu sunteţi singurii în această situaţie.

1. Definiţi spaţiul de nume cu tag-ul <xs: schema> şi atributul


xmlns (figura 8.4).

Figura 8.4

Remarci:
9 După declaraţia documentului XML (prima linie), <xs: schema> este primul
element pe care îl întâlnim într-o schemă XML. El este deci, elementul
rădăcină iar prezenţa sa este obligatorie.
9 Cu această declaraţie, toate elementele schemei care conţin sufixul xs: (xsd:)
vor fi recunoscute ca aparţinând spaţiului de nume corespunzător (vezi
http://www.w3.org/2001/XMLSchema).
9 <xs: schema> poate conţine de asemenea şi următoarele atribute, toate
facultative: targetNamespace; version; elementFormDefault;
attributeFormDefault; blockDefault; finalDefault; id (vezi
http://www.w3.org/2000/10/XMLSchema).

Exemplu de utilizare a atributului targetNamespace al elementului


<xs: schema> (figura 8.5).
146

Figura 8.5

2. Definiţi elementul de tip complex <lista_produse_excursie>.

2.1.Introduceţi elementul <xs: element name= ”lista_produse_


excursie”> (figura 8.6).

Figura 8.6

Remarci:
9 Elementul de tip complex <lista_produse_excursie> este o secvenţă de
<produse_excursie>.
9 După cum aţi putut constata element permite declararea unui element. El
posedă două atribute: name şi ref, care sunt exclusive.
9 name permite declararea unui atribut în mod local.
9 ref, care este diminutivul de la reference face referiri la un element deja
declarat sau care urmează a fi declarat ulterior.
9 Atributele name şi ref (facultative) sunt cele mai frecvent folosite în
declararea unui element.
9 Celelalte atribute facultative ale tag-ului <xs: element> sunt [2]:
ƒ type (defineşte tipul elementului; primeşte ca valoare un nume);
ƒ equivclass (ia ca valoare un nume);
ƒ minOccurs (defineşte numărul minim de apariţii ale unui element
(occurence) într-un document; ia ca valoare un întreg pozitiv sau nul (în
mod implicit primeşte valoarea 1));
ƒ maxOccurs (defineşte numărul maxim de apariţii ale unui element într-un
document; ia ca valori un întreg pozitiv sau nul (în mod implicit primeşte
valoarea 1));
ƒ default (primeşte ca valoare un şir de caractere; atribuie elementului o
valoare implicită);
ƒ fixed (primeşte ca valoare un şir de caractere; atribuie elementului o
valoare fixă şi invariabilă);
147
ƒ nullable (primeşte ca valoare true sau false; testează dacă elementul este
sau nu este nul);
ƒ abstract (primeşte ca valoare true sau false; testează dacă elementul nu
va putea fi prezent într-un document);
ƒ form (primeşte ca valoare qualified sau unqualified; indică dacă numele
elementului trebuie să conţină sau nu prefixul xs:(xsd:));
ƒ id (vezi DTD).

2.2.Introduceţi elementul <xs: complexType> (figura 8.7).

Figura 8.7

2.3.Introduceţi enunţul <xs: sequence> (figura 8.8).

Figura 8.8

Remarci:
9 sequence este un grup de elemente. Într-un document, elementele declarate
în secvenţă trebuie să apară obligatoriu cel puţin o dată în ordinea în care ele
au fost definite.
9 Atributele pe care le posedă <xs: sequence> sunt: id; maxOccurs;
minOccurs.

2.4.Introduceţi elementul vid <produse_excursie> cu atributul


maxOccurs (figura 8.9).
148

Figura 8.9

Remarcă. maxOccurs=”unbounded” precizează că numărul maxim de elemente


<produse_excursie> care trebuie să fie prezente în document nu este limitat.

3. Definiţi elementul de tip complex <produse_excursie>, care


conţine secvenţa: <cantitate>, <um>, <produs>, în ordinea
indicată (figura 8.10).

Figura 8.10

Remarci:
9 Elementul de tip simplu <cantitate> va fi un număr zecimal (xs: decimal).
9 Elementul de tip simplu <produs> va fi un şir de caractere (xs: string).
9 Elementul <um> poate fi definit ca un simplu string dar dorim să-l limităm la
o serie de valori predefinite.

4. Definiţi elementul <um> cu următoarele valori predefinite: kg;


borcan (borcane); bucăţi; niciuna (figura 8.11) .
149

Figura 8.11

Remarci:
9 Schema utilizează elementul de constrângere <xs: restriction> cu atributul
base pentru a preciza că elementul <um> este de tip xs: string.
9 restriction conţine faţete care permit reducerea spaţiului de valori.
9 Valoarea este restricţionată printr-o faţetă definită cu elementele
<xs: enumeration>.
9 Faţeta enumeration permite limitarea spaţiului de valori la o listă de valori
(kg; borcan(e) etc.).
9 Fiecare constrângere este un element care posedă un atribut numit value şi
defineşte una din valorile posibile.

XML Software XML Schema


La ora actuală există numeroase aplicaţii care vă pot ajuta să creaţi
scheme XML fără a mai învăţa sintaxa prezentată în cadrul primei
metode. Aceste aplicaţii utilizează liste derulante pentru selecţia
elementelor şi afişează rezultatul sub formă grafică. Ele permit de
asemenea crearea în mod automat a schemelor XML pornind de la
documentele XML (Metoda 2 – Codificarea automată cu aplicaţii
dedicate). Prezentăm în cele ce urmează, două dintre cele mai
cunoscute aplicaţii pentru crearea schemelor XML:

9 (TIBCO’s) XML Authority;

9 XML Spy.
150
(TIBCO’s) XML Authority
XML Authority (http://www.tibco.com) a fost creat de o întreprindere
numită Extensibility (răscumpărată după aceea de TIBCO). Este unul din
primele medii de dezvoltare a schemelor creat pentru XML.

XML Authority este simplu şi uşor de utilizat de la nivel de interfaţă şi


permite dezvoltatorilor de aplicaţii să creeze rapid scheme pe care apoi
să le verifice în timp real. Este un instrument practic pentru a crea,
modifica şi elimina elemente şi atribute. XML Authority oferă o
reprezentare vizuală a modelului, posibilitatea de a insera uşor
comentarii şi de a modifica direct sursa pentru aceia care, din timp în
timp au nevoie să intervină în cod. Una din funcţiunile cele mai
interesante ale XML-ului Authority, în afară de interfaţa cu utilizatorul
este şi aceea de a lucra cu mai multe dialecte. Puteţi de exemplu
deschide un DTD XML şi să-l salvaţi (cu comanda Save as) în
echivalentul său XML Schema, SOX (Schema for object – Oriented XML),
SGML (Standard Generalized Markup Language), compatibil Microsoft Biz
Talk (http://biztalk.org) sau altele.

XML Authority poate lucra [5] cu următoarele dialecte: Biz Talk


(http://www.biztalk.org); DCD (http://www.w3.org/TR/NOTE-dcd);
DDML (http://www.w3.org/TR/NOTE-ddml); One Soft
(http://www.onesoft.com); SGML (http://www.iso.ch); RELAX
(http://www.xml.gr.jp/relax); Schema Adjunct
(http://www.extensibility.com/resources/saf.htm); SOX versiunea 2
(http://www.w3.org/TR/NOTE-SOX); XDR (http://msdn.microsoft.com/
librarz/default.asp?URL=/library/psdk/xmlsdk/xmlp7k6d.htm); DTD XML
(http://www.w3.org/TR/2000/REC-xml-20001006); XML Schema
(http://www.w3.org/XML/Schema).
151
Exportul în diverse dialecte nu este singura funcţie importantă a XML
Authority. El ştie de asemenea să importe o serie întreagă de surse de
date diverse şi variante şi să construiască o reprezentare XML pornind
de la aceste surse. Sursele de date pe care XML Authority ştie să le
importe sunt: COM, Java, LDAP (Lightweight Directory Access Protocol),
ODBC, SGML, XML (document XML bine format).

Câteva funcţii ale XML Authority oferă o mare supleţe pentru conversiile
unui tip de date în altul. În plus, faţă de aceste funcţii, XML Authority
permite să se exporte reprezentarea vizuală a schemelor în format GIF;
ajută utilizatorul cu o funcţie de introducere date semi-automată; oferă
o interfaţă simplă pentru listele de elemente şi de atribute.

Remarci:
9 Dacă doriţi mai multe informaţii despre XML Authority, vizitaţi site-ul
http://www.tibco.com.
9 XML Authority este disponibil sub Windows, Unix şi MacOs.
Aplicaţie

‰ Creaţi cu XML Authority (Metoda 2) schema XML pornind de la documentul


XML ilustrat în figura 8.3, al cărui DTD este prezentat în figura 8.1 (vezi Metoda
1). Afişaţi totodată şi codul sursă al schemei XML realizate.

XML Spy
XML Spy (http://www.xmlspy.com) este un alt celebru instrument de
creare a schemelor XML. XML Spy este disponibil numai sub Windows!
XML Spy permite editarea fişierelor HTML şi ASP, dar ele nu au la bază
XML.

Formatele (extensia fişierului) pe care XML Spy [5] ştie să le recunoască


sunt: .biz (BizTalk); .cml (Chemical Markup Language), .dcd (Document
Content Description); .dtd (Document Type Definition); .ent (Entity
Sets); .math şi .mml (Mathematical Markup Language); .mtx
(MetaStream XML); .rdf (Resource Description Framework); .smil
152
(Synchronized Multimedia Integration Language); .svg (Scalable Vector
Graphics); .wml (Wireless Markup Language); .xdr (XML – Data
Reduced); .xhtml (eXtensible Hypertext Markup Language); .xml
(document XML); .xsd (Schema XML); .xsl (foaia de stiluri XSL); .xslt
(transformare XSL).

Remarci:
9 XML Spy este un instrument simplu de folosit, extraordinar de flexibil
şi foarte complet.
9 XML Spy prezintă şi alte facilităţi precum: introducerea semi-automată
a datelor; editarea vizuală a schemelor; editarea directă a sursei XML;
posibilitatea de creare a unei documentaţii în format HTML sau Word.
Aplicaţii

‰ Creaţi cu XML Spy (Metoda 2) aceeaşi schemă XML pe care aţi realizat-o
manual (Metoda 1) şi automat (Metoda 2) cu XML Authority.

În figura 8.12 se prezintă schema XML generată cu XML Spy.

Figura 8.12

Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.13.
153

Figura 8.13

‰ Se consideră DTD-ul (agenda.dtd) din figura 8.14 şi documentul XML


conform acestui DTD (figura 8.15).
154

Figura 8.14
155

Figura 8.15

Realizaţi schema XML echivalentă folosind una din metodele prezentate mai jos:
9 Metoda 1 – Codificarea manuală;
9 Metoda 2 – Codificarea automată cu aplicaţii dedicate.
156
Remarcă. Elementele <nume>, <prenume> sunt de type=”xs.string”.

În figura 8.16 se prezintă schema XML generată cu XML Spy (Metoda 2).

Figura 8.16

Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.17.

Figura 8.17
157

Figura 8.17
(continuare)
158
Remarcă. Puteţi realiza o conversie automată DTD XML Š XML Schema şi cu aplicaţia
dtd2xsd, care se găseşte pe site-ul W3C (www.w3c.org).

XML Temă

Testaţi-vă cunoştinţele
1. Când folosiţi schemele XML?
2. Daţi exemple de tipuri de date predefinite.
3. Cum se definesc elementele de tip simplu şi de tip complex?
4. Ce software XML Schema cunoaşteţi?
5. Comentaţi următorul cod XML (figura 8.18)?

Figura 8.18

Vizitaţi site-urile
9 http://www.w3.org/2000/10/XMLSchema
9 http://www.w3.org/2001/XMLSchema-instance
9 http://www.thaiopensource.com/trex/
9 http://www.mutu-xml.org/
Conversaţia 9

Complemente XML
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – DOM, interfaţă pentru manipularea documentelor (X)HTML şi XML
f XML – Script-uri XML
f XML – Creaţi prima pagină Web interactivă
f XML – Inseraţi o imagine într-un document XML
f XML – Creaţi legături şi interogări în documentele XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••

XML DOM, interfaţă pentru manipularea


documentelor (X)HTML şi XML
DOM (Document Object Model) este o interfaţă, definită de World Wide
Web Consortium, care permite manipularea documentelor HTML şi XML
în mod independent de toate limbajele de programare. Altfel spus, DOM
este un model de reprezentare la nivel de obiect a documentelor HTML
şi XML şi constituie principala interfaţă de programare a aplicaţiilor Web.

DOM creează o ierarhie de obiecte sau mai exact un arbore ale cărui
noduri reprezintă obiectele documentului XML.

Aceste noduri sau obiecte ne furnizează metode (funcţii) care permit


manipularea (sortare, transformare etc.) documentelor.
160
Remarcă. Această prezentare este departe de a fi completă. DOM este un subiect prea
vast pentru a putea fi tratat integral în această lucrare. Pentru a explora DOM în
detalii, consultaţi lucrările [2], [3], [5].

În figura 9.1 se prezintă un exemplu de document XML reprezentat în


DOM, sub formă ierarhică (figura 9.2).

<exemplu>
Figura 9.1 <body> Două mere, două pere! </body>
<exemplu>

DocumentNode Rădăcina documentului


NodeList
ElementNode <exemplu>
NodeList
ElementNode <body>
Figura 9.2 NodeList
TextcharacterDataNode Două mere, două pere!
Remarci:
9 Documentul conţine mai multe tipuri de noduri (nodul rădăcină este
obligatoriu!).
9 Interfaţa NodeList este prezentă chiar dacă documentul nu posedă decât un
singur nod.
9 Interfeţele se prezintă sub două forme [1]:
ƒ interfeţe
fundamentale – Node, Document, DOMImplementation,
DocumentFragment, NodeList, Element, NamedNodeMap, Attr,
CharacterData, Text, Comments, DOMException;
ƒ interfeţe extinse – CDATASection, DocumentType, Notation, Entity,
EntityReference, ProcessingInstruction.
9 Obiectul Node permite realizarea următoarelor operaţii principale: parcurgerea
arborelui; obţinerea de informaţii dintr-un nod; actualizarea unui nod.
9 Atributele obiectului Node sunt următoarele: ownerDocument, nodeName,
nodeValue, nodeType, namespaceURI, prefix, localName, attributes,
previousSibling, nextSibling, parentNode, childNodes, firstchild, lastchild.
9 Metodele atributului Node sunt următoarele: supports (), cloneNode (),
hascildnodes, insertBefore (), appendchild (), replacechild (), removechild ().

XML Script-uri XML

Creaţi şi manipulaţi obiecte DOM XML cu Java Script


După cum aţi putut constata, paginile Web pe care le-am construit
împreună au fost … statice! Cu siguranţă că vă aşteptaţi la mai mult!
161
În cele ce urmează vom învăţa să manipulăm documentele XML,
utilizând facilităţile de script ale browser-ului Microsoft Internet Explorer
(versiunea 5 şi superioară) pentru a crea, în sfârşit pagini Web
interactive.

Remarcă. Puteţi utiliza DOM, Java Script, CSS, DHTML pentru a crea pagini Web
interactive.

Java Script (nu Java!) este unul din limbajele cele mai vechi şi cele mai
răspândite pentru prelucrarea paginilor Web. Java Script permite
asamblarea obiectelor DOM în paginile noastre Web.

Java Script este un limbaj uşor de învăţat şi este recunoscut de toate


navigatoarele. Aceste calităţi şi nu … doar atât îl recomandă pentru
manipularea documentelor şi a foilor de stiluri cu ajutorul DOM.

Remarcă. Pentru mai multe detalii privind limbajul Java Script consultaţi următoarele
resurse:
9 Collection Web Training, Java Script Web Training, Paris, 2002
9 Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML, DOM, ASP),
Editura Economică 2002, Bucureşti.

XML Creaţi prima pagină Web interactivă

Construcţia paginilor Web interactive este o activitate complexă, care pe


lângă tehnicile cunoscute mai face apel la tehnicile specifice DOM şi Java
Script.

Iată cum procedăm pentru a crea pagina Web interactivă intitulată


„Campionatul Mondial de Fotbal 2002”, pornind de la documentul XML
statistici.xml prezentat în figura 9.3.

Remarcă. Pentru realizarea acestei aplicaţii am folosit lucrarea: Kay Ether, Alan Houser,
XML Web Training, OEM, Collection Web Training, Paris 2002, paginile 258 – 259.
162

Figura 9.3

Remarcă. Pentru a putea exemplifica execuţia aplicaţiei, am schimbat ordinea în


clasament a celor trei echipe.

1. Precizaţi funcţiunile paginii Web.

Pagina Web interactivă trebuie să asigure următoarele funcţiuni:

9 afişarea rezultatelor într-un tabel HTML;

9 sortarea tabelului în funcţie de clasament;

9 sortarea tabelului în ordine alfabetică, după numele echipelor


sau în funcţie de clasament, executând clic pe titlul coloanei
corespunzătoare.

2. Iniţializaţi obiectele reprezentând documentul sursă XML şi foaia


de stiluri XSLT (figura 9.4).
163

Figura 9.4

Remarci:
9 Numele obiectelor xslStyleSheet şi xmlSource sunt nume de variabile
arbitrare.
9 document.XSLDocument reprezintă foaia de stiluri XSLT iar
document.XMLDocument reprezintă documentul XML.
9 Navigatorul încarcă documentul XML şi foaia de stiluri XSLT în momentul în
care script-ul este executat.
9 Codul JavaScript a fost inserat direct în foaia de stiluri XSLT în secţiunea
CDATA.
9 Cu instrucţiunea <xsl:comment> codul JavaScript va fi comentat în fişierul
rezultant.
Codul din figura 9.5:

<script>
<xsl:comment>
<![CDATA[
Cod JavaScript …
Figura 9.5
]]>
va genera următorul rezultat (figura 9.6):

<script>
<!--
Cod JavaScript
-->
Figura 9.6 </script>

3. Manipulaţi obiectele DOM. Utilizaţi metoda selectSingleNode


(figura 9.7).
164

Figura 9.7

Remarci:
9 Odată create obiectele care reprezintă documentele, ele pot fi utilizate pentru
a manipula aceste documente. Pentru aceasta este suficient de a utiliza una
sau mai multe metode (metoda este un termen al programării orientate obiect
şi are aproximativ aceeaşi semnificaţie ca şi o funcţie).
9 Obiectul XSLDocument, care reprezintă foaia de stiluri posedă o metodă
numită selectSingleNode care permite selectarea unui element sau a unui
atribut (sau încă un alt tip de nod, cum ar fi un comentariu sau o instrucţiune
de prelucrare). Această metodă ia în considerare un singur argument: drumul
de acces către nodul care trebuie să fie selectat.
Instrucţiunea următoare selectează atributul numit select al elementului
<xsl:sort> al foii de stiluri.

4. Creaţi o funcţie JavaScript pentru a modifica atributul select al


elementului <xsl:sort> (figura 9.8).

Figura 9.8
165
Remarci:
9 Funcţia display(coloana) are un singur argument numit coloana, unde coloana
poate primi una din valorile: echipa sau clasament pe care le folosim în
operaţia de sortare.
9 Metoda nodeValue permite modificarea valorii lui sortColoana. Vom utiliza
această metodă pentru a determina criteriul de sortare.
9 Obiectul xmlSource.documentElement posedă o metodă numită
transformNode care primeşte ca argument numele obiectului corespunzător
foii de stiluri. Noi apelăm această metodă cu xslStylesheet pentru a reaplica
foaia de stil modificată.
9 Pentru a afişa datele, vom utiliza DOM-ul plasând rezultatele într-un obiect
numit clasament. DOM HTML Microsoft posedă o metodă innerHTML care
permite modificarea unei porţiuni a codului HTML al unei pagini. În acest
mod, obiectul clasament va conţine rezultatele.

5. Inseraţi tag-ul <div id=”clasament”/> în fişierul HTML rezultant


(figura 9.9).

Figura 9.9

6. Apelaţi funcţia de afişare display, declarând mai întâi o clasă


.active care transformă pointer-ul într-un icon de tip mânuţă,
(figura 9.10) adăugând după aceea câmpurilor Echipa şi
Clasament un gestionar de evenimente onclick (figura 9.11).

Figura 9.10
166

Figura 9.11

Remarci:
9 De fiecare dată când utilizatorul va executa clic pe Echipa sau Clasament,
funcţia display va fi apelată cu argumentul corespunzător.
9 Atunci când vom aplica unui element clasa active, pointer-ul se va modifica de
fiecare dată când el va fi plasat pe acel element.

7. Realizaţi programul complet. În figura 9.12 se prezintă foaia de


stiluri XSLT care conţine codul JavaScript.

Figura 9.12
167

Figura 9.12
(continuare)

8. Afişaţi documentul (statistici.xml) în Microsoft Internet Explorer


(versiunea 5 sau o versiune superioară), figura 9.13.

Figura 9.13
168
9. Testaţi rezultatul. Executaţi clic pe Echipa (figura 9.14).

Figura 9.14

Remarcă. Browser-ul afişează documentul dinamic cu datele sortate după


numele echipei (figura 9.15).

Figura 9.15
169
10. Testaţi rezultatul. Executaţi clic pe Clasament (figura 9.16).

Figura 9.16

Remarcă. Browser-ul afişează documentul dinamic cu datele sortate după clasament


(figura 9.17).

Figura 9.17
170

XML Inseraţi o imagine într-un document XML


Codul care permite inserarea imaginilor într-un document XML este mult
mai complex decât cel utilizat în (X)HTML. În XML va trebui să modificaţi
DTD-ul pentru ca tipurile de imagini utilizate să fie acceptate.

Iată cum procedăm pentru a adăuga un element imagine (img în HTML)


într-un DTD (excursie.dtd) [1].

1. Definiţi un element img într-un DTD – începeţi cu <!ELEMENT,


adăugaţi numele elementului şi terminaţi cu EMPTY> (figura
9.18).

Figura 9.18

Remarci:
9 Elementele vide sunt declarate prin cuvântul cheie EMPTY.
9 Declaraţia <!ELEMENT img EMPTY>) a fost inclusă în DTD pentru a valida
documentul XML care conţine un element vid, de forma: <img/>.
9 Navigatoarele afişează imaginile dintr-un document HTML datorită tag-ului
img.
9 În XML nu se întâmplă acelaşi lucru. Navigatoarele nu recunosc tag-ul img
inclus într-un document XML. În consecinţă, puteţi numi cum doriţi acest tag:
img, grafic, poză, foto etc. Am preferat img pentru a înţelege mai bine
procedura.

2. Adăugaţi un atribut pentru a preciza calea de acces la imagine


(figura 9.19).
171

Figura 9.19

Remarci:
9 Noi am utilizat atributul source (pentru a înţelege mai bine procedura).
Dumneavoastră puteţi folosi orice nume doriţi!
9 Tipul de atribut ENTITY defineşte referinţa la datele binare externe (imagini).
Valoarea unui astfel de atribut nu este analizabilă.
9 Vă mai amintiţi de cuvântul cheie #REQUIRED! El semnifică faptul că atributul
trebuie să fie întotdeauna prezent. De fiecare dată când veţi utiliza tag-ul img,
va trebui să indicaţi o valoare pentru atributul source pentru a preciza calea
de acces către imagine.

Definirea unei entităţi în DTD nu constituie decât jumătate din ceea ce


avem de făcut! În continuare, va trebui să definim o notaţie (NDATA)
pentru formatele de imagine GIF, JPEG, PNG ş.a.m.d.

Iată care este procedura pe care trebuie s-o urmaţi pentru a crea o
notaţie.

1. Definiţi entitatea (ENTITY) imagine într-un DTD – după


cuvântul cheie <!ENTITY indicaţi numele (sigla) entităţii (figura
9.20), apoi SYSTEM şi calea de acces; introduceţi în continuare
NDATA şi numele utilizat în notaţie (GIF, JPEG etc.).

Figura 9.20
172
2. Definiţi (în DTD) notaţia (NOTATION) după entitatea care o
utilizează (figura 9.21).

Figura 9.21

Remarci:
9 DTD-urile externe private sunt identificate prin cuvântul cheie SYSTEM.
9 Datele (fişierele) externe semnifică faptul că dumneavoastră referiţi fişiere
non-XML în documentele pe care le-aţi creat. Dacă faceţi referire la un fişier
GIF/JPG, dumneavoastră utilizaţi un tip de date externe.

Acum, după ce aţi definit notaţiile în DTD, puteţi să le utilizaţi în


documentele dumneavoastră XML.

Iată cum adăugăm codul necesar pentru a insera o imagine într-un


document XML (figura 9.22).

Figura 9.22

Remarcă. În XML toate tag-urile elementelor vide trebuie să se termine cu „/”, contrar
sintaxei HTML. Nu uitaţi bara oblică!
Aplicaţie

‰ Inseraţi într-un document XML (sigla.xml) sigla societăţii LUMINA BLÂNDĂ.


În figura 9.23 este prezentat DTD-ul aplicaţiei (sigla.dtd).
173

Figura 9.23

În figura 9.24 este prezentat documentul sigla.xml.

Figura 9.24

În figura 9.25 este afişat rezultatul.

Figura 9.25

Remarci:
9 Deşi disponibil, fişierul sigla.jpg nu este afişat în browser.
9 Pentru afişarea siglei societăţii LUMINA BLÂNDA (sigla.jpg) utilizaţi XSLT.
În figura 9.26 este prezentat documentul sigla.xsl.
174

Figura 9.26

În figura 9.27 este afişat rezultatul în browser-ul Internet Explorer.

Figura 9.27

Remarcă. SVG (Scalable Vector Graphics) este un vocabular standard XML care permite
crearea imaginilor. Imaginile SVG se integrează perfect în documentele XML.
Pentru crearea şi afişarea imaginilor aveţi nevoie de un soft dedicat (Adobe SVG
Viewer, Adobe Illustrator 9 etc.).
175
Pentru mai multe detalii privind standardul SVG vizitaţi site-ul:
http://www.w3.org/TR/SVG.

Creaţi legături şi interogări în documentele


XML
XML
Creaţi legături cu XLINK (XML Linking Language)
Trebuie să recunoaştem că legăturile HTML suferă de următoarele
limitări:

9 sunt unidirecţionale;
9 nu pot fi direcţionate decât către documente HTML;
9 trebuie mereu activate manual;
9 nu pot fi obţinute decât cu elementul <a>;
9 nu pot fi direcţionate decât către un document întreg sau către
un punct al unui document sau un reper definit în prealabil.
Poate pentru moment multe dintre aceste limitări nu vă deranjează, dar
cu siguranţă vă veţi schimba opinia atunci când veţi cunoaşte facilităţile
oferite de XLink. XLink a fost creat pentru a permite utilizarea legăturilor
mult mai puternice decât cele HTML.

XLink posedă o sintaxă mult mai bogată. Prezentăm pe scurt câteva


dintre facilităţile oferite de XLink [2]:

9 legăturile XLink pot fi direcţionate către orice tip de resursă;

9 o legătură XLink poate fi direcţionată către un element sau un


ansamblu de elemente în documentul ţintă;

9 orice element XML poate constitui o legătură;

9 legăturile XLink pot fi activate manual sau în mod automat;

9 legăturile XLink sunt multidirecţionale.


176
Aplicaţii

‰ Creaţi legături XLink simple.

Exemplu:
<xlink:simple href=”sigla.xml”> Link către sigla.xml
</xlink:simple>.

‰ Creaţi elemente XLink.

Exemplu:
<!ELEMENT mail (#PCDATA)>
<!ATTLIST mail
xlink: type (simple) #FIXED „simple”
xlink: href CDATA #REQUIRED
Remarcă. Pentru mai multe detalii consultaţi următoarele resurse:
9 http://www.w3.org
9 http://www.w3.org/1999/xlink
9 Kay Ether, Alan Houser, XML Web Training, OEM, Collection Web Training,
Paris 2002
9 Yannick LEJEUNE, Alexandre PINHEL, XML, e-Poche, Micro Application, 2001,
Paris
9 R. Allen Wyke, Sultan Rehman, Brad Leupen, Manuel de référence XML,
Microsoft, 2002

Limbajul XML Pointer (XPointer)


XPointer este utilizat pentru referirea secţiunilor documentelor externe.

Vă mai amintiţi de XPath? L-aţi folosit în foile de stiluri XSLT! Cea mai
mare parte a sintaxei XPointer este împrumutată din specificaţiile XPath.
În afară de facilităţile de referire a elementelor, XPointer conţine
instrucţiuni suplimentare care servesc identificării unor părţi ale acestor
elemente, evident în funcţie de structura şi conţinutul acestora.

XPointer poate indica de asemenea poziţiile relative ale acestora


(Exemplu: al patrulea element după primul element <persoana>).

Remarcă. Pentru mai multe detalii consultaţi site-ul: http://www.w3.org.


177
Limbajul XML Query
Limbajul XML Query a fost creat de W3C (World Wide Web Consortium).
XQuery foloseşte elementele limbajelor XPath, XPointer şi conţine în plus
un set de instrucţiuni proprii pentru limbajul de interogare, pentru
afectarea rezultatelor intermediare variabilelor, pentru utilizarea
expresiilor condiţionale şi pentru filtrarea rezultatelor.

Remarcă. Pentru mai multe detalii consultaţi site-urile:


9 http://www.w3.org
9 http://13.107.228.20/
9 http://www.w3.org/XML/Query

XML Temă

Testaţi-vă cunoştinţele
1. Ce este DOM-ul?
2. Cum creaţi o pagină Web interactivă?
3. Cum inseraţi o imagine într-un document XML?
4. Care sunt facilităţile oferite de XLink?
5. Care sunt facilităţile oferite de limbajele XML XPointer şi XML XQuery?

Consultaţi site-urile
9 http://www.w3.org/TR/SVG
9 http://users.iclway.co.uk/mhkay/Saxon
9 http://www.w3.org
9 http://www.w3.org/1999/xlink
BIBLIOGRAFIE

1. Kay Ether, Alan Houser, XML Web Training, OEM, Collection Web
Training, Paris, 2002

2. Yannick Lejeune, Alexandre Pinnel, XML, e-Poche, MicroApplication,


2001, Paris

3. Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML, DOM,


ASP), Editura Economică, 2002, Bucureşti

4. Michael J. Young, XML, Étape par étape, Microsoft Press, Paris, 2001

5. R. Allen Wyke, Sultan Rehman, Brad Leupen, Manuél de référence XML,


Microsoft, 2002

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