+ All Categories
Home > Documents > XML_BOOK

XML_BOOK

Date post: 19-Jan-2016
Category:
Upload: realpaladin
View: 9 times
Download: 4 times
Share this document with a friend
176
XML
Transcript
Page 1: XML_BOOK

XML

Page 2: XML_BOOK

CUPRINS

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

3 5 6 18

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

19 28

32 47

Conversaţia 3. Inseraţi caractere speciale cu XML ....................... 49 XML – Caracterele speciale pot provoca erori de prelucrare …………………... XML – Inseraţi secţiuni CDATA ………………………………………………………...... XML – Utilizaţi entităţi predefinite ……………………………………………………….. XML – Definiţi şi utilizaţi o referinţă de entitate generală internă ..………….. XML – Temă .………………………………………………………………………………..…..

49 50 52 53 59

Conversaţia 4. Creaţi documente XML valide ............................... 61 XML – Să nu uităm … documentele XML bine formate ………………………….. XML – Definiţi structura unui document XML valid. Aplicaţii …………………… XML – Adăugaţi atribute unui element XML. Aplicaţii …………………………….. XML – Temă ……………………………………………………………………………………..

61 62 76 84

Conversaţia 5. Afişaţi documentele XML cu ajutorul foilor de stiluri în cascadă ..................................................... 87

XML – Utilizaţi foile de stiluri CSS ………………………………………………………… XML – Creaţi fişierul de stiluri (foaia de stiluri) CSS. Aplicaţii .................... XML – Legaţi o foaie de stiluri CSS la un document XML ……………………….. XML – Inseraţi elemente HTML în documentele XML …………………………….. XML – Temă ………………………………………………………………………………………

87 88 94 96 98

Page 3: XML_BOOK

Conversaţia 6. Afişaţi documentele XML cu ajutorul foilor de stiluri XSLT .............................................................. 99

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

99 100 101 108 110 117 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 ………………………………………. XML – Inseraţi modele HTML în foile de stiluri XSLT …………….. XML – Combinaţi CSS şi XSLT ……………………………………………. XSLT, XPath – Temă ……………………………………………………………………..

121 129 136 138

Conversaţia 8. De la DTD la XML Schema ..................................... 139 XML – Scheme XML …………………………………………………………………………... XML – Tipuri de date predefinite utilizate în schemele XML .…………………… XML – Construiţi o schemă XML ………………………………………………………….. XML – Software XML Schema. Aplicaţii ………………………………………………… XML – Temă ………………………………………………………………………………………

139 141 143 149 158

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

159 160 161 170 175 177

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

Page 4: XML_BOOK

Conversaţia 1

De la (X)HTML la XML

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – eXtensible Markup Language XML – XML, un metalimbaj utilizat pentru descrierea datelor XML – Regulile de aur ale limbajului XML XML – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

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:

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

XML poate fi folosit de autorii de pagini Web ale căror nevoi depăşesc

limitele HTML-ului.

XML a fost creat pentru descrierea structurilor de date.

XML

Page 5: XML_BOOK

4 Tag-urile XML nu sunt predefinite; altfel spus, XML permite crearea

tag-urilor personalizate, ceea ce este nemaipomenit.

Pentru descrierea structurilor de date, documentele XML pot utiliza un

DTD (Document Type Definition).

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:

structurarea datelor în baze de date;

structurarea documentelor;

grafică vectorială (VML, sau Vector Markup Language);

prezentări multimedia (SMIL – Synchronized Multimedia Integration

Language; HTML + TIME, sau HTML Timed Interactive Multimedia

Extensions);

comunicarea deschisă între aplicaţii, via Web cu ajutorul mesajelor

bazate pe XML (SOAP, sau Simple Object Access Protocol);

Page 6: XML_BOOK

5

schimbul de informaţii financiare (OFX, sau Open Financial

Exchange); tranzacţii comerciale pe Internet (XFDL, sau eXtensible Forms

Description Language);

resurse umane (HRMML, sau Human Resource Management Markup

Language);

formatarea formulelor matematice pe Web (MathML, sau

Mathematical Markup Language);

descrierea structurilor moleculare (CML, sau Chemical Markup

Language);

scrierea partiturilor muzicale (MusicML, sau Music Markup

Language);

buletine meteo (OMF, sau Weather Observation Markup Format);

tranzacţii imobiliare (RETS, sau Real Estate Transaction Standard).

XML, un metalimbaj utilizat pentru

descrierea datelor

XML

Dacă sunte i documen at în XML, aţi întâlnit cu siguranţă această frază:

„XML este un metalimbaj utilizat pentru descrierea datelor”.

ţ t

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.

Page 7: XML_BOOK

6 Fraza poate fi descompusă după cum urmează:

adjectiv (ultimul); substantiv (tren); verb (a plecat); 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>

Regulile de aur ale limbajului XML

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.

Page 8: XML_BOOK

7

Regulile XML pot fi clasificate în două categorii:

reguli de sintaxă XML;

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>

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

aparenţe!</paragraf>

Remarci: Î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.

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

Figura 1.1

Î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

Page 9: XML_BOOK

8 care mai multe elemente sunt definite cu tag-urile de închidere

facultative.

Remarci: Î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>).

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

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

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

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” />

XML <imagine source=”sigla.jpg” />

Conform regulilor de sintaxă XML, elementele vide trebuie să se închidă,

folosind una din metodele prezentate mai jos:

Figura 1.2

Metoda 1 – Închideţi tag-ul cu un spaţiu şi o bară oblică (vezi

figura 1.2);

Page 10: XML_BOOK

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ştidincolo de aparenţe!</p>

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>

XHTML <input name=”c1” type=”checkbox” id=”c1” value=”Java” checked=”checked” />

Figura 1.3

Figura 1.4

Page 11: XML_BOOK

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:

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

închidere. Numele celor două tag-uri trebuie să fie identice.

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.

Elementele imbricate sunt „fii ai elementului părinte”.

Page 12: XML_BOOK

11

Exemple de elemente HTML, XHTML, XML corect imbricate

HTML <P> Acesta este <B> venitul meu </B>!

XHTML <p> Acesta este <b> venitul meu </b> </p>!

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

</întreprindere>

Exemple de elemente XML incorect imbricate

XML <întreprindere> TIMPURI NOI <cod> 2000

</întreprindere> </cod>

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!

Page 13: XML_BOOK

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 to from date subject body

<email> <to> … </to> <from> … </from> <date> … </date> <subject> … </subject> <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.5

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

Page 14: XML_BOOK

13

Remarci: Declaraţia xml utilizează caractere mici cu excepţia valorii atributului

encoding (UTF – 8).

Î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ă.

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:

documente bine formate;

documente valide.

Figura 1.7

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.

Page 15: XML_BOOK

14

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

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

Reguli:

Figura 1.8

Figura 1.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.

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.

Celelalte elemente XML au fost scrise cu tag-uri … inventate de noi: (<email>…</email>; <to>…</to>; <from>…</from>; <date>…</date>; <subject>…</subject>; <body>…</body>.

Page 16: XML_BOOK

15

Toate elementele XML trebuie să conţină un tag de deschidere şi un tag de închidere.

Elementele vide XML trebuie să se termine cu un spaţiu urmat de o bară oblică.

Pentru a delimita valorile atributelor XML utilizaţi ghilimelele. Toate atributele XML trebuie să aibă valori. Toate documentele XML trebuie să aibă cel puţin un element

rădăcină. Declaraţia XML este facultativă. Tag-urile XML trebuie să fie imbricate în mod corect. 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ă.

Numele atributelor se scriu cu minuscule. Spre deosebire de HTML, sfârşitul unui document XML nu este marcat

cu </xml>. Comentariile XML au aceeaşi sintaxă ca şi comentariile XHTML. 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

Page 17: XML_BOOK

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,

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

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

Page 18: XML_BOOK

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

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

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.

Page 19: XML_BOOK

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:

HTML;

XHTML;

XML.

5. Ce este un document bine format?

6. Ce este un document valid?

Vizitaţi site-urile

http://www.w3.org/XML/

http://msdn.microsoft.com/xml/default.asp

http://www.oasis – open.org/cover/xml.html#applications

Page 20: XML_BOOK

ţ ţ

Conversaţia 2

Creaţi documente XML bine formate

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – Structura unui document XML bine format XML – Crea i elemente XML cu tipuri de con inut diferite XML – Metode şi instrumente pentru crearea documentelor XML bine

formate 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:

Page 21: XML_BOOK

20 prologul;

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!

Prologul cuprinde primele două linii (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: 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;

o linie albă de spaţii; una sau mai multe instrucţiuni de prelucrare.

Figura 2.2

Figura 2.1

Page 22: XML_BOOK

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

Remarci:

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.

Fiecare din elementele inserate în elementul email (to, from, date, subject, body) nu conţin decât date de tip caracter.

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.

Figura 2.3

Page 23: XML_BOOK

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

<hr> </hr>

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

<hr />

Remarci: Cele două notaţii au aceeaşi semnificaţie. Puteţi utiliza un element vid pentru a indica aplicaţiei XML efectuarea unei

acţiuni sau afişarea unui obiect. 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.

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

<sigla sursa=”Droopy.gif” />

Figura 2.4

Figura 2.5

Figura 2.6

Figura 2.7

Page 24: XML_BOOK

23

Remarci: Atributele reprezintă o alternativă la inserarea informaţiilor într-un document. Utilizarea atributelor permite obţinerea unui mai mare grad de flexibilitate în

procesul prelucrărilor. În figura 2.8 sunt prezentate câteva exemple de specificaţii de atribute

ilegale. Fără comentarii!

<curs tip=” ”seral” ”>

<album tip=”<CD>”>

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

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

Explorer.

Figura 2.8

Figura 2.9

Figura 2.10

Page 25: XML_BOOK

24 Aplicaţie

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

cod (X)HTML din 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.

Remarci:

Figura 2.11

Figura 2.12

Acest document simplu XML poate fi citit şi înţeles fără a utiliza un program specializat!

Tag-urile <calendar>, datadeînceput>, <datadesfârşit>, <costuri>, <suma> imaginate de noi furnizează informaţii privind datele (de tip caracter).

Numele tag-urilor trebuie să respecte următoarele reguli:

Page 26: XML_BOOK

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. În XML, un document bine format trebuie să respecte regula: „fiecărui tag de

început îi corespunde un tag de sfârşit”. XML permite utilizarea elementelor fără conţinut (vide). Pentru a defini relaţiile între elemente, XML foloseşte următoarea

terminologie: • elementul rădăcină; • elementul părinte; • elementul fiu; • elementul frate.

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

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

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

Elementele trebuie să fie corect imbricate.

Page 27: XML_BOOK

26 Fiecare element trebuie să conţină un tag de deschidere şi un

tag de închidere, care trebuie să poarte acelaşi nume.

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

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

Elementele XML sunt case-sensitive.

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

bară oblică (/).

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

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

Page 28: XML_BOOK

27

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!

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

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

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

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

Remarci:

Figura 2.14

Figura 2.15

Figura 2.13

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.

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

Page 29: XML_BOOK

28 d) Un document (figura 2.16) care nu este bine format!

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

Creaţi elemente XML cu tipuri de conţinut

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ă:

elemente imbricate (nested);

date de tip caracter;

referinţe de entităţi generale sau referinţe de caractere;

secţiuni CDATA;

instrucţiuni de prelucrare;

comentarii.

XML

Figura 2.16

Elemente imbricate. În figura 2.17 elementul adresa conţine 5

elemente imbricate.

Page 30: XML_BOOK

29

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

Î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).

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

Figura 2.17

Figura 2.18

Figura 2.19

Page 31: XML_BOOK

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.

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

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

Page 32: XML_BOOK

31

aplicaţii. În figura 2.23 este prezentat un exemplu de instrucţiune de

prelucrare XML.

Figura 2.23

Remarci: 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. 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: Un comentariu debutează cu <!-- şi se termină cu caracterele -->. Puteţi

introduce caracterele speciale <, >,& mai puţin linia dublă -- (figura 2.24).

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

Figura 2.24

Figura 2.25

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

Page 33: XML_BOOK

32

Metode şi instrumente pentru crearea

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:

Metoda 1 – Editorul de texte Notepad;

Metoda 2 – Editorul XML Notepad

sau,

Editorul XML Spy;

Metoda 3 – Programe care generează fişiere XML;

Metoda 4 – Documente XML;

Metoda 5 – Baze de date;

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

XML

Figura 2.26

Page 34: XML_BOOK

33

Metoda 1 – Editorul de exte Notepad t

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

Remarci:

Prima linie a documentului este o declaraţie XML. Declaraţia <?xml version=”1.0” ?> indică browser-ului că … se află în

faţa unui document XML. 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.

Declaraţia poate preciza de asemenea şi setul de caractere utilizat (atributul encoding): <?xml version=”1.0” encoding=”ISO-8859-1” ?>.

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.

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

Remarci: Comentariile XML sunt similare comentariilor HTML. Comentariile nu necesită tag-uri de închidere. Lungimea comentariilor nu este limitată.

Figura 2.27

Figura 2.28

3. Tastaţi <email>, apăsaţi de câteva ori tasta Enter după care

tastaţi </email> (figura 2.29).

Page 35: XML_BOOK

34

Remarci:

<email> este elementul rădăcină. <email> … </email> delimitează tipul general de date. 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).

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

Figura 2.29

Figura 2.30

Page 36: XML_BOOK

35

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

Figura 2.32

Page 37: XML_BOOK

36 Remarci:

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.

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 Programs

Microsoft XML Notepad Microsoft XML Notepad (figura 2.33).

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

Figura 2.33

Figura 2.34

Page 38: XML_BOOK

37

3. Schimbaţi numele elementului fiu Child_Element în elementul

fiu to (figura 2.35).

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

(figura 2.36).

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

Figura 2.35

Figura 2.36

Figura 2.37

Page 39: XML_BOOK

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

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

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

(figura 2.40).

Figura 2.38

Figura 2.39

Figura 2.40

Page 40: XML_BOOK

39

9. Salvaţi documentul cu numele email în folder-ul My Documents

(figura 2.41).

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

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

Figura 2.41

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 Programs XML Spy

Suite XML Spy IDE (figura 2.43).

Page 41: XML_BOOK

40

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

Remarcă. Se deschide fereastra Create new document.

Figura 2.44

Figura 2.43

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

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

Page 42: XML_BOOK

41

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

Figura 2.45

Figura 2.46

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

2.47).

Page 43: XML_BOOK

42

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

Figura 2.47

Figura 2.48

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

elementul fiu (figura 2.49).

Page 44: XML_BOOK

43

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

Figura 2.49

Figura 2.50

Page 45: XML_BOOK

44 8. Adăugaţi şi celelalte elemente, via XML Append Element

(figura 2.51).

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

Figura 2.51

Figura 2.52

Page 46: XML_BOOK

45

10. Salvaţi documentul cu numele email1 în folder-ul My

Documents (figura 2.53).

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

(versiunea 5 sau o versiune superioară), 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.

Figura 2.53

Figura 2.54

Metoda 1 – Utilizaţi foile de stiluri CSS; 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.

Page 47: XML_BOOK

46 Remarci:

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

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

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.

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

Page 48: XML_BOOK

47

Temă

XML

Testaţi-vă cunoştinţele

1. Descrieţi în XML următoarele structuri de date (figura 2.55).

2. Creaţi documentul XML din figura 2.55 utilizând una din metodele

prezentate mai jos:

Metoda 1 – Utilizaţi un editor de texte (Notepad);

Metoda 2 – Utilizaţi un editor XML (XML Notepad, XML Spy).

3. Cum puteţi afişa un document XML într-un browser?

Figura 2.55

Vizitaţi site-urile

http://www.w3.org/AudioVideo/

http://www.w3.org/TR/SVG/

http://www.w3.org/TR/2000/REC-xml-20001006

Page 49: XML_BOOK

rţ ţţţ ţ

,

Conversaţia 3

Inseraţi caractere speciale cu XML

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – Caracterele speciale pot p ovoca erori de prelucrare XML – Insera i sec iuni CDATA XML – Utiliza i entităţi predefinite XML – Defini i şi utiliza i o referinţă de entitate generală internă XML – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

Caracterele speciale pot provoca erori de

prelucrare

XML

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.

Page 50: XML_BOOK

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

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

Figura 3.2

Page 51: XML_BOOK

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

Remarci:

O secţiune CDATA începe cu <![CDATA[ şi se termină cu ]]>. 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. Cuvântul cheie CDATA se scrie cu majuscule. Secţiunile CDATA nu pot fi imbricate.

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

(versiunea 5 sau superioară), figura 3.4.

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

Figura 3.4

Figura 3.3

Page 52: XML_BOOK

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 predefinit

Referinţa de caracter echivalentă

&amp; & &#38; &lt; < &#60; &gt; > &#62; &apos; ’ &#39; &quot; ” &#34;

Figura 3.5

Remarci:

Inserarea uneia din aceste referinţe de entităţi predefinite este echivalentă cu inserarea referinţei de caracter echivalentă.

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

Page 53: XML_BOOK

53

Remarci: 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ă.

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

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

Aplicaţie

Figura 3.7

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

generală internă

Specificaţiile XML utilizează termenul entitate, în sens general pentru a

se referi la unul din tipurile de stocare, asociate documentelor XML:

întreg documentul XML;

o secţiune DTD externă;

XML

Page 54: XML_BOOK

54 un fişier extern, definit ca o entitate externă într-un DTD şi

referită cu ajutorul unei referinţe de entitate;

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 exte Notepad t

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

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

Figura 3.8

Page 55: XML_BOOK

55

Remarci: Referinţele entităţilor generale interne se folosesc pentru texte

frecvent utilizate: adresă, nume de produs, titlu, copyright etc. 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.

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ă).

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.

Remarci:

Figura 3.9

Declaraţia unei entităţi trebuie să preceadă referinţa la această entitate.

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

Page 56: XML_BOOK

56 Entitatea cp se mai numeşte entitate generală internă analizabilă

(corespunde tipului XML bine format). 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).

Remarci:

Figura 3.10

Navigatorul înlocuieşte codul cp prin valoarea entităţii (figura 3.10). Î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.

Executaţi clic pe simbolul minus (-) din stânga elementului email (figura 3.11).

Page 57: XML_BOOK

57

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

Figura 3.11

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.

Page 58: XML_BOOK

58

Aplicaţie

Comentaţi următoarele exemple:

<titlu>&lt; fatalitate><titlu>

<produs compania=”C&amp;A”>bluză vară<produs>

<!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ă.

Figura 3.13

Page 59: XML_BOOK

59

XML Temă

Testaţi-vă cunoştinţele

1. Care este semnificaţia următoarelor referinţe de entitate:

&qt;

&amp;

&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

www.xml.com

www.w3.org/Markup/

http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm

Page 60: XML_BOOK

tţ ţţ t ţ

Conversaţia 4

Creaţi documente XML valide

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – Să nu ui ăm … documentele XML bine formate XML – Defini i structura unui document XML valid. Aplica ii XML – Adăuga i a ribute unui element XML. Aplica ii XML – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

Să nu uităm … documentele XML bine

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

XML

Figura 4.1

Page 61: XML_BOOK

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

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:

Prologul documentului cuprinde o declara ie de tip de document

care conţine un DTD ce defineşte structura documentului.

ţ

Restul documentului se conformează structurii definite în DTD.

Remarci: Norma XML defineşte DTD-ul ca „o gramatică pentru o clasă de

documente”. 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.

XML

Page 62: XML_BOOK

63

Remarci: Ca toate cuvintele cheie XML, DOCTYPE trebuie să fie scris cu

majuscule. 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).

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

declaraţii:

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

ELEMENT;

declararea listei de atribute;

declararea entităţilor (interne, externe); entităţi analizabile,

entităţi care nu sunt analizabile utilizând cuvântul cheie

ENTITY;

declararea notaţiilor, utilizând cuvântul cheie NOTATION;

instrucţiuni de prelucrare;

comentarii;

referinţe de entităţi de parametrii.

Figura 4.2

Page 63: XML_BOOK

64 Remarcă. Pentru mai multe informaţii privind tipurile de declaraţii, consultaţi

lucrările: Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML,

DOM, ASP), Editura Economică, 2002; 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ă:

tipul de elemente pe care documentul le conţine;

ordinea elementelor;

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

Page 64: XML_BOOK

65

Remarci:

Figura 4.3

Scopul unui DTD este de a defini elementele care pot fi utilizate într-un document XML şi de a specifica relaţiile între ele.

Pentru a construi un DTD trebuie să cunoaştem lista elementelor pe care dorim să le asamblăm.

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

Elementele: nume, adresa, telefoane sunt obligatorii, iar elementul online este opţional. Un client poate fi valid numai cu o adresă şi un telefon.

telefon

telefoane telefon

telefon

Simbolul se traduce prin (figura 4.4):

Figura 4.4

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

Figura 4.5

Page 65: XML_BOOK

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

Remarci: <!ELEMENT client> defineşte elementul client, care conţine patru elemente:

nume, adresa, telefoane, online. 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ă.

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.

* Nici una sau mai multe apariţii a elementului precedent. Tabelul 1

Figura 4.6

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:

Page 66: XML_BOOK

67

<! ELEMENT nume_fiu model_conţinut>

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

(figura 4.7).

Remarci: PCDATA este prescurtarea de la Parsed Character Data (date caracter

analizabile). Elementul nume poate conţine numai text, care va fi analizat de către

procesorul XML. Pentru a preciza conţinutul unui element vid folosiţi cuvântul cheie EMPTY

(figura 4.8).

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

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

sa (figura 4.10).

Figura 4.8

Figura 4.9

Figura 4.10

Figura 4.7

Page 67: XML_BOOK

68 5. Specificaţi conţinutul (date de tip text) elementelor: strada,

număr, oraş, cod, ţara, figura 4.11.

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

4.12).

Remarci:

Figura 4.11

Figura 4.12

Elementul telefoane poate conţine numai elemente telefon. 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.

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

Page 68: XML_BOOK

69

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

Figura 4.13

Figura 4.14

Page 69: XML_BOOK

70 Remarci:

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

Figura 4.15

Page 70: XML_BOOK

71

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.

Remarcă. Prezentăm trei variante pentru elementul client cu scopul de a pune în evidenţă rezultatul pentru fiecare caz în parte.

<!ELEMENT client (nume, adresa, telefoane, online?> Elementele sunt separate prin virgule. Elementele nume, adresa, telefoane sunt obligatorii, online este facultativ.

<!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ă.

<!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ă.

ţ

Figura 4.17

Page 71: XML_BOOK

72 Aplicaţii

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

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

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

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

Figura 4.18

Figura 4.19

Figura 4.20

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

Page 72: XML_BOOK

73

Figura 4.21

Figura 4.22

Figura 4.23

Figura 4.24

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

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

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

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

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

Page 73: XML_BOOK

74

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

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

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

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

Figura 4.25

Figura 4.26

Figura 4.27

Figura 4.28

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

Page 74: XML_BOOK

75

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

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

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

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

Figura 4.29

Figura 4.30

Figura 4.31

Figura 4.32

Page 75: XML_BOOK

76

Adăugaţi atribute unui element 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: atributele au un nume; atributele au o valoare; 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

utilizarea acesteia într-un document.

XML

Tabelul 2

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

urmează:

<! ATTLIST nume_element nume_atribut tip_atribut

valoare_implicită>

Page 76: XML_BOOK

77

unde,

nume_element - numele elementului căruia i se asociază

nume_atribut.

nume_atribut - numele atributului urmat de modelul

reprezentând valorile posibile.

tip_atribut - vezi tabelul 2.

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

Page 77: XML_BOOK

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

4.34 (client1.dtd).

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

Figura 4.35

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

documentelor XML, precum luminablanda1.xml din figura

4.36.

Page 78: XML_BOOK

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.

Page 79: XML_BOOK

80

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):

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

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

… <client tip=”fizică”> …

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

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

Figura 4.39

Figura 4.40

Figura 4.38

Page 80: XML_BOOK

81

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

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?)> ...

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

Figura 4.42

Figura 4.43

Figura 4.44

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

4.44).

Page 81: XML_BOOK

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

figura 4.45.

Figura 4.45

Figura 4.46

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

Page 82: XML_BOOK

83

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

Figura 4.47

Page 83: XML_BOOK

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

Page 84: XML_BOOK

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

http://www.xmlmag.com

http://xml.apache.org/

http://www.ddj.com/topics/xml/

Page 85: XML_BOOK

ţ tţ ţţţ

Conversaţia 5

Afişaţi documentele XML cu ajutorul foilor

de stiluri în cascadă • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – Utiliza i foile de s iluri CSS XML – Crea i fişierul de stiluri (foaia de stiluri) CSS. Aplica ii XML – Lega i o foaie de stiluri CSS la un document XML XML – Insera i elemente HTML în documentele XML XML – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

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.

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

Page 86: XML_BOOK

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:

Etapa 1 – Crearea fişierului de stiluri CSS;

Etapa 2 – Legarea fişierului de stiluri CSS (foii de stiluri) la un document XML.

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

XML

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

Page 87: XML_BOOK

89

Figura 5.1

Figura 5.2

Page 88: XML_BOOK

90 Remarci:

Fişierul de stiluri stud.css din figura 5.1 conţine un comentariu şi trei seturi de reguli.

Într-o foaie de stiluri comentariul debutează cu caracterele slash şi asterisc (/*) şi se termină cu caracterele asterisc şi slash (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).

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.

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

Figura 5.4

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

Figura 5.6

Page 89: XML_BOOK

91

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

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

Declaraţia margin-top: 13 pt adaugă o margine de 13 puncte deasupra textului elementului.

Declaraţia font-size: 10 pt defineşte mărimea (10 puncte) caracterelor pentru afişarea textului elementelor.

Declaraţia font-style: italic defineşte stilul italic pentru afişarea textului elementelor.

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

Figura 5.8

{font-style:italic}

Page 90: XML_BOOK

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

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

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.

Page 91: XML_BOOK

93

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

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

Folosiţi proprietatea CSS background – color (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.11

Figura 5.12

Figura 5.13

Figura 5.14

Page 92: XML_BOOK

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

Page 93: XML_BOOK

95

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.

Remarci:

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

Figura 5.17

Figura 5.18

Î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).

Page 94: XML_BOOK

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

Page 95: XML_BOOK

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,

spatiu-nume1 reprezintă spaţiul de nume utilizat

pentru numirea elementului nume1;

xmlns=” …” reprezintă declaraţia unui spaţiu de

nume;

http://www.domeniu1.com reprezintă un identificator unic

Remarci: 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.

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

Î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

Page 96: XML_BOOK

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

Amintiţi-vă că pentru a insera elemente HTML, documentul XML trebuie să conţină o foaie de stiluri ataşată.

Temă

Figura 5.21

XML

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

http://www.w3.org/TR/REC-CSS1

http://www.w3.org/TR/REC-CSS2

http://www.xml.com

http://www.w3.org/TR/REC-xml-names/

Page 97: XML_BOOK

t t ţ tţţ

ţ

Conversaţia 6

Afişaţi documentele XML cu ajutorul foilor

de stiluri XSLT • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XSLT – eXtensible Styleshee Language Transforma ion XSLT – Utiliza i foile de s iluri XSLT XSLT – Crea i fişierul de stiluri (foaia de stiluri) XSLT XSLT – Lega i o foaie de stiluri XSLT la un document XML XSLT – Principiul unei transformări XSLT. Aplica ii XSLT – Alte elemente XSLT propuse de XML XML – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

eXtensible Stylesheet Language

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: XSLT 1.0 a fost publicat sub formă de recomandare la data de 16 noiembrie

1999.

XSLT

Page 98: XML_BOOK

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

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.

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.

Utilizaţi foile de stiluri XSLT

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: O foaie de stiluri XSLT trebuie să fie un document XML bine format! (XSLT nu

admite definirea DTD-urilor!). 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:

Etapa 1 – Crearea fişierului de stiluri XSLT (XSL);

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

document XML.

Page 99: XML_BOOK

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:

Crearea unui element <html> pentru pagina Web;

Crearea unui titlu (Statistici Brazilia) pentru fereastra

navigatorului;

Crearea unui titlu (Statistici Brazilia) pentru pagina Web;

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.

Page 100: XML_BOOK

102

Remarci: Documentul conţine datele statistice pentru echipa de fotbal a Braziliei,

campionatul mondial de fotbal 2002. Î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.1

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.

Page 101: XML_BOOK

103

Remarci:

O foaie de stiluri XSLT trebuie să conţină un element rădăcină (document) <xsl:stylesheet>.

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.

Elementul rădăcină (xsl:stylesheet) conţine două atribute: version şi xmlns:xsl care au valorile menţionate.

xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” este spaţiul de nume XSLT.

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

Remarci:

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.

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.

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):

Figura 6.3

Figura 6.4

Page 102: XML_BOOK

104 <xsl:template match =”[model]”> [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.

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

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

Figura 6.6

Figura 6.7

Page 103: XML_BOOK

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

Remarcă. Aţi observat că elementul <xsl:value-of select=”echipa” a fost utilizat de trei ori în acest model pentru:

Figura 6.8

crearea conţinutului elementului HTML <title>; titlul paginii; construirea frazei „Brazilia este pe locul 1”.

6. Închideţi tag-urile <body>, <html>, <xsl:template> şi

<xsl:stylesheet> (figura 6.9).

Page 104: XML_BOOK

106

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

extensie!), figura 6.10.

Figura 6.9

Figura 6.10

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

Internet Explorer (figura 6.11).

Page 105: XML_BOOK

107

Remarci: Dacă Internet Explorer afişează un mesaj de eroare, verificaţi sintaxa foii de

stiluri. Asiguraţi-vă că toate tag-urile deschise au fost bine închise şi că toate

elementele au fost corect imbricate.

Aplicaţie

Figura 6.11

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

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

Page 106: XML_BOOK

108

XSLT

Figura 6.12

Legaţi o foaie de stiluri XSLT la un

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,

Page 107: XML_BOOK

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

Remarci: Această instrucţiune de prelucrare este recunoscută de Microsoft Internet

Explorer 5.5 şi nu de toate procesoarele XML. 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

Figura 6.13

Page 108: XML_BOOK

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

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] </xsl:template>

Remarcă. Acest model realizează următoarele operaţii: 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ă.

Modelul scrie în documentul rezultant o serie de elemente literale (tag-uri HTML care sunt copiate identic în documentul rezultant).

El aplică celelalte modele ale foii de stiluri elementelor fii ale elementului rădăcină, cu ajutorul instrucţiunii <xsl:apply-templates />.

Modelul scrie în documentul rezultant a doua serie de elemente literale şi opreşte prelucrarea documentului sursă.

XSLT

Figura 6.16

Figura 6.15

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

Page 109: XML_BOOK

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

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.

Figura 6.17

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

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

Page 110: XML_BOOK

112

Remarci: În timpul fazei de execuţie vor fi afişate toate nodurile XML, începând cu

nodul rădăcină. Tot ceea ce constituie prelucrare trebuie să fie în interiorul elementului

<xsl:template match=”/”>. Elementul xsl:template defineşte un template care va putea fi aplicat unui

nod. 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.18

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.

Page 111: XML_BOOK

113

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

Remarci:

Figura 6.20

Figura 6.21

statistici_cm_fotbal/nume – selectează elementul fiu <nume> al elementului <statistici_cm_fotbal>.

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ţă.

Page 112: XML_BOOK

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

Remarci:

Elementul <xsl:apply-templates> cu atributul select permite aplicarea regulilor template unui document.

Elementul <xsl:apply-templates> nu poate conţine decât două tipuri de elemente: xsl: sorte; xsl: with-param.

La întâlnirea elementului <xsl:apply-templates/>, procesorul XSLT analizează fiecare element fiu şi îi aplică regula template.

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

Figura 6.23

Page 113: XML_BOOK

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

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.

Page 114: XML_BOOK

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.

Remarci:

Figura 6.26

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

Page 115: XML_BOOK

117

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.

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]” />. 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ă.

În cadrul enunţului <xsl:template />, toate elementele XSLT se referă la nodul curent.

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ă:

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

comentariilor în documentul de ieşire.

<xsl:apply-imports> – permite aplicarea regulilor conţinute

într-un fişier importat;

<xsl:attribute> – permite inserarea unui atribut;

<xsl:attribute-set> – permite inserarea unui set de atribute sub

acelaşi nume;

<xsl:param> – permite declararea parametrilor locali/globali;

<xsl:call-template></xsl:call-template> – permite apelarea

unei reguli template specifice;

<xsl:choose> – permite selectarea unei variante în funcţie de

context;

<xsl:copy> – permite efectuarea unei copii a nodului curent, în

arborele rezultant;

XML

Page 116: XML_BOOK

118 <xsl:copy-of> – permite efectuarea unei copii a unui set de

noduri;

<xsl:decimal-format> – defineşte modul în care un număr este

convertit în şir de caractere;

<xsl:element> – permite definirea unui nou element;

<xsl:fallback> – generează codul de înlocuire a unui element

neidentificat de către procesorul XSLT;

<xsl:text> – adaugă un text documentului de ieşire;

<xsl:if> – evaluează o expresie logică şi returnează o valoare

booleană (true sau false);

<xsl:include> – include o foaie de stil în foaia de stiluri curentă;

<xsl:key> – creează o cheie unică pentru un element;

<xsl:message> – afişează un mesaj de eroare;

<xsl:namespace-alias> – înlocuieşte un nume de spaţiu cu un

altul;

<xsl:number> – inserează în arborele rezultant numărul

nodului curent sau afişează acest număr;

<xsl:preserve-space> – conservă nodurile vide;

<xsl:strip-space> – şterge nodurile care nu conţin decât spaţii

albe;

<xsl:stylesheet> – introduce o foaie de stil;

<xsl:variable> – declară o variabilă globală sau locală.

Temă

XML

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

Page 117: XML_BOOK

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

. .

.. ..

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

Figura 6.27

Figura 6.28

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

figura 6.29 (o listă cu simboluri).

Page 118: XML_BOOK

120

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

Figura 6.29

Figura 6.30

Vizitaţi site-urile

www.wapforum.org

http://www.w3.org/TR/xslt

Page 119: XML_BOOK

ţ

ţ ţ

t

Conversaţia 7

Utilizaţi XSLT cu XPath pentru afişarea

documentelor XML • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XPath – XML Path Language, limbaj pentru adresarea fragmentelor XML. Aplica ii

XML – Insera i modele HTML în foile de stiluri XSLT XML – Combina i CSS şi XSLT XSLT, XPath – Temă

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

XML Path Language – limbaj pentru

adresarea fragmentelor XML

XPath

„Limbajul (de transformare XML) XSLT utilizează limbajul XPath pentru

adresarea fragmen elor 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

Page 120: XML_BOOK

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>

<victorii> <victorii>Figura 7.1

Page 121: XML_BOOK

123

Remarci: 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.

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.

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.

Expresiile XPath intervin ca valori ale unor atribute ale elementelor XSLT şi ca template-uri pentru valorile atributelor.

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

@* Toate atributele nodului curent

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

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.

Operatorii folosiţi într-o expresie logică sunt: <; >; <=; >=; != (diferit).

Figura 7.2

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.

Page 122: XML_BOOK

124 Axele XPath permit construirea căilor de acces complexe în vederea

localizării nodurilor specifice ale unui document.

Calea de acces constă din:

o axă;

un test;

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.

self Nodul curent.

Figura 7.3

Page 123: XML_BOOK

125

Remarci: În figura 7.4 este ilustrată reprezentarea axelor XPath pentru documentul

XML, statistici.xml.

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

În exemplul: Child::eva[posi ion()=1], t

t

.

child este numele axei; eva este nodul de test; [position()=1] este predicatul.

Alte exemple: descendent::echipa – desemnează toate elementele numi e echipa care

sunt descendenţi ai nodului curent. parent::* – desemnează elementul părinte al nodului curent

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.

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.

preceden

descendenţi

părinte

stămoşi

următoriit curent (self)

Figura 7.4

<echipa> <echipa>

<rezultate <rezultate> <rezultate>

<victorii><victorii>

<echipa> <echipa>

<nume>

<statistici_cm_fotbal>

Page 124: XML_BOOK

126

Aplicaţii

<statistici_cm_fotbal>

<nume>

<echipa> <echipa> <echipa>

<nume> <rezultate>Figura 7.5

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

Notepad.

Figura 7.6

Page 125: XML_BOOK

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.

Page 126: XML_BOOK

128

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.

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

Figura 7.10

Figura 7.11

Page 127: XML_BOOK

129

Remarci: Specificatorul de axe XPath preceding-sibling are următoarea semnificaţie:

toate nodurile care preced nodul curent şi care au acelaşi părinte. 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

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

XML

Figura 7.12

Page 128: XML_BOOK

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.

Page 129: XML_BOOK

131

Remarci:

Figura 7.14

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.

În documentul statistici.xml (figura 7.14) datele sunt plasate dezordonat (în mod intenţionat!). Ele vor fi sortate în foaia de stiluri.

Elementul rădăcină <statistici_cm_fotbal> posedă un element fiu, <nume> care conţine numele campionatului de fotbal – Campionatul Mondial de Fotbal 2002.

<statistici_cm_fotbal> posedă mai mulţi fii instanţiaţi de elementul <echipa>. Fiecare element <echipa> posedă un fiu <nume>. În acest context, <nume>

conţine numele echipei.

Page 130: XML_BOOK

132 Fiecare element <echipa> posedă un fiu numit <rezultate>. 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.

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

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

Remarcă. Numele echipei aflându-se în elementul <nume> fiu al elementului <echipa> poate fi selecţionat direct. <xsl: value-of select=”nume”/>.

Figura 7.15

Figura 7.16

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

Page 131: XML_BOOK

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

Page 132: XML_BOOK

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.

Remarcă. Navigatorul Internet Explorer afişează datele documentului XML (statistici.xml) într-un model HTML.

Aplicaţii

Figura 7.20

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

Page 133: XML_BOOK

135

În figura 7.22 se prezintă în ordine alfabetică echipele de fotbal clasate pe

primele trei locuri.

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.

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

fotbal.

Figura 7.22

Figura 7.23

Figura 7.24

Page 134: XML_BOOK

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

Page 135: XML_BOOK

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.

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.

Figura 7.25

Page 136: XML_BOOK

138

Temă

XSLT, XPath

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

www.w3.org/TR/xpath

www.xml.com

http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm

Page 137: XML_BOOK

ţ

Conversaţia 8

De la DTD la XML Schema

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – Scheme XML XML – Tipuri de date predefini e utilizate în schemele XML XML – Construi i o schemă XML XML – Software XML Schema. Aplica ii 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.

Page 138: XML_BOOK

140 Remarcă. Limitele DTD-ului sunt următoarele:

Un DTD nu este un document XML; Regulile de instanţiere sunt limitate; 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:

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

sunt compatibile cu spaţiile de nume ceea ce permite

combinarea mai multor vocabulare în cadrul aceluiaşi

document;

sunt ele însele documente XML.

DTD XML prezintă următoarele avantaje:

utilizează o sintaxă mai simplă;

sunt mult mai concise;

sunt compatibile cu un număr mai mare de aplicaţii (cel puţin

pentru moment!)

Remarci: Probabil schemele XML şi DTD XML vor continua să coabiteze pentru o bună

perioadă de timp! 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.

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.

Page 139: XML_BOOK

141

Tipuri de date predefinite utilizate în

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]:

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);

XML

Page 140: XML_BOOK

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

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

tipuri DTD

ID;

IDREF;

IDREFS;

NMTOKEN;

NMTOKENS;

Page 141: XML_BOOK

143

ENTITY;

NOTATION;

Name.

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:

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

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

Page 142: XML_BOOK

144

Remarci: 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ă.

Ierarhia listei de produse de excursie este prezentată în figura 8.2.

Figura 8.1

Figura 8.2

Figura 8.3

Denumire produs

Unitate măsură

Cantitate

Produse excursie Produse excursieProduse excursie

Lista produse excursie

Page 143: XML_BOOK

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:

Metoda 1 – Codificarea manuală;

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

Remarci: 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.

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

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

Figura 8.4

Exemplu de utilizare a atributului targetNamespace al elementului

<xs: schema> (figura 8.5).

Page 144: XML_BOOK

146

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

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

excursie”> (figura 8.6).

Remarci:

Figura 8.6

Figura 8.5

Elementul de tip complex <lista_produse_excursie> este o secvenţă de <produse_excursie>.

După cum aţi putut constata element permite declararea unui element. El posedă două atribute: name şi ref, care sunt exclusive.

name permite declararea unui atribut în mod local. ref, care este diminutivul de la reference face referiri la un element deja

declarat sau care urmează a fi declarat ulterior. Atributele name şi ref (facultative) sunt cele mai frecvent folosite în

declararea unui element. 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ă);

Page 145: XML_BOOK

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

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

Remarci:

Figura 8.7

Figura 8.8

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.

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

Page 146: XML_BOOK

148

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

Remarci:

Figura 8.10

Figura 8.9

Elementul de tip simplu <cantitate> va fi un număr zecimal (xs: decimal). Elementul de tip simplu <produs> va fi un şir de caractere (xs: string). 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) .

Page 147: XML_BOOK

149

Remarci: Schema utilizează elementul de constrângere <xs: restriction> cu atributul

base pentru a preciza că elementul <um> este de tip xs: string. restriction conţine faţete care permit reducerea spaţiului de valori. Valoarea este restricţionată printr-o faţetă definită cu elementele

<xs: enumeration>. Faţeta enumeration permite limitarea spaţiului de valori la o listă de valori

(kg; borcan(e) etc.). Fiecare constrângere este un element care posedă un atribut numit value şi

defineşte una din valorile posibile.

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 (Me oda 2 – Codificarea automată cu aplicaţii

dedicate). Prezentăm în cele ce urmează, două dintre cele mai

cunoscute aplicaţii pentru crearea schemelor XML:

t

(TIBCO’s) XML Authority;

XML Spy.

XML

Figura 8.11

Page 148: XML_BOOK

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

Page 149: XML_BOOK

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: Dacă doriţi mai multe informaţii despre XML Authority, vizitaţi site-ul

http://www.tibco.com. 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

Page 150: XML_BOOK

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: XML Spy este un instrument simplu de folosit, extraordinar de flexibil şi foarte complet.

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.

Page 151: XML_BOOK

153

Figura 8.13

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

conform acestui DTD (figura 8.15).

Page 152: XML_BOOK

154

Figura 8.14

Page 153: XML_BOOK

155

Realizaţi schema XML echivalentă folosind una din metodele prezentate mai jos:

Figura 8.15

Metoda 1 – Codificarea manuală;

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

Page 154: XML_BOOK

156 Remarcă. Elementele <nume>, <prenume> sunt de type=”xs.string”.

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

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

Figura 8.16

Figura 8.17

Page 155: XML_BOOK

157

Figura 8.17 (continuare)

Page 156: XML_BOOK

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

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)?

XML

Figura 8.18

Vizitaţi site-urile

http://www.w3.org/2000/10/XMLSchema

http://www.w3.org/2001/XMLSchema-instance

http://www.thaiopensource.com/trex/

http://www.mutu-xml.org/

Page 157: XML_BOOK

f

ţ ţ

ţ t

Conversaţia 9

Complemente XML

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • În această conversaţie:

XML – DOM, inter aţă pentru manipularea documentelor (X)HTML şi XML XML – Script-uri XML XML – Crea i prima pagină Web interactivă XML – Insera i o imagine într-un document XML XML – Crea i legături şi interogări în documen ele XML 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.

Page 158: XML_BOOK

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> <body> Două mere, două pere! </body> <exemplu>

DocumentNode Rădăcina documentului NodeList ElementNode <exemplu> NodeList ElementNode <body> NodeList TextcharacterDataNode Două mere, două pere!

Remarci: Documentul conţine mai multe tipuri de noduri (nodul rădăcină este

obligatoriu!). Interfaţa NodeList este prezentă chiar dacă documentul nu posedă decât un

singur nod. 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.

Obiectul Node permite realizarea următoarelor operaţii principale: parcurgerea arborelui; obţinerea de informaţii dintr-un nod; actualizarea unui nod.

Atributele obiectului Node sunt următoarele: ownerDocument, nodeName, nodeValue, nodeType, namespaceURI, prefix, localName, attributes, previousSibling, nextSibling, parentNode, childNodes, firstchild, lastchild.

Metodele atributului Node sunt următoarele: supports (), cloneNode (), hascildnodes, insertBefore (), appendchild (), replacechild (), removechild ().

Script-uri XML

XML

Figura 9.1

Figura 9.2

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!

Page 159: XML_BOOK

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:

Collection Web Training, Java Script Web Training, Paris, 2002 Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML, DOM, ASP),

Editura Economică 2002, Bucureşti.

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.

XML

Page 160: XML_BOOK

162

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:

Figura 9.3

afişarea rezultatelor într-un tabel HTML;

sortarea tabelului în funcţie de clasament;

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

Page 161: XML_BOOK

163

Remarci: Numele obiectelor xslStyleSheet şi xmlSource sunt nume de variabile arbitrare.

document.XSLDocument reprezintă foaia de stiluri XSLT iar document.XMLDocument reprezintă documentul XML.

Navigatorul încarcă documentul XML şi foaia de stiluri XSLT în momentul în care script-ul este executat.

Codul JavaScript a fost inserat direct în foaia de stiluri XSLT în secţiunea CDATA.

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

va genera următorul rezultat (figura 9.6):

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

Figura 9.5

Figura 9.6

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

(figura 9.7).

Page 162: XML_BOOK

164

Figura 9.7

Remarci: 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).

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

Page 163: XML_BOOK

165

Remarci: 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.

Metoda nodeValue permite modificarea valorii lui sortColoana. Vom utiliza această metodă pentru a determina criteriul de sortare.

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

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

Page 164: XML_BOOK

166

Remarci:

De fiecare dată când utilizatorul va executa clic pe Echipa sau Clasament, funcţia display va fi apelată cu argumentul corespunzător.

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

Figura 9.12

Page 165: XML_BOOK

167

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

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

Figura 9.12 (continuare)

Figura 9.13

Page 166: XML_BOOK

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

Remarcă. Browser-ul afişează documentul dinamic cu datele sortate după numele echipei (figura 9.15).

Figura 9.14

Figura 9.15

Page 167: XML_BOOK

169

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

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

Figura 9.16

Figura 9.17

Page 168: XML_BOOK

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: Elementele vide sunt declarate prin cuvântul cheie EMPTY. Declaraţia <!ELEMENT img EMPTY>) a fost inclusă în DTD pentru a valida

documentul XML care conţine un element vid, de forma: <img/>. Navigatoarele afişează imaginile dintr-un document HTML datorită tag-ului

img. Î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).

Page 169: XML_BOOK

171

Figura 9.19

Remarci: Noi am utilizat atributul source (pentru a înţelege mai bine procedura).

Dumneavoastră puteţi folosi orice nume doriţi! Tipul de atribut ENTITY defineşte referinţa la datele binare externe (imagini).

Valoarea unui astfel de atribut nu este analizabilă. 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

Page 170: XML_BOOK

172 2. Definiţi (în DTD) notaţia (NOTATION) după entitatea care o

utilizează (figura 9.21).

Figura 9.21

Remarci: DTD-urile externe private sunt identificate prin cuvântul cheie SYSTEM. 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).

Page 171: XML_BOOK

173

În figura 9.24 este prezentat documentul sigla.xml.

În figura 9.25 este afişat rezultatul.

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

În figura 9.26 este prezentat documentul sigla.xsl.

Figura 9.23

Figura 9.24

Figura 9.25

Page 172: XML_BOOK

174

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

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

Figura 9.26

Figura 9.27

Page 173: XML_BOOK

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

Creaţi legături cu XLINK (XML Linking Language)

Trebuie să recunoaştem că legăturile HTML suferă de următoarele

limitări:

sunt unidirecţionale;

nu pot fi direcţionate decât către documente HTML;

trebuie mereu activate manual;

nu pot fi obţinute decât cu elementul <a>;

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]:

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

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

ansamblu de elemente în documentul ţintă;

orice element XML poate constitui o legătură;

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

legăturile XLink sunt multidirecţionale.

XML

Page 174: XML_BOOK

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: http://www.w3.org http://www.w3.org/1999/xlink Kay Ether, Alan Houser, XML Web Training, OEM, Collection Web Training,

Paris 2002 Yannick LEJEUNE, Alexandre PINHEL, XML, e-Poche, Micro Application, 2001,

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

Page 175: XML_BOOK

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: http://www.w3.org http://13.107.228.20/ http://www.w3.org/XML/Query

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?

XML

Consultaţi site-urile

http://www.w3.org/TR/SVG

http://users.iclway.co.uk/mhkay/Saxon

http://www.w3.org

http://www.w3.org/1999/xlink

Page 176: XML_BOOK

ţ

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