Documente Academic
Documente Profesional
Documente Cultură
XML
XML
CUPRINS
Conversaţia 1. De la (X)HTML la XML.............................................. 3
XML – eXtensible Markup Language ...................................................... 3
XML – XML, un metalimbaj utilizat pentru descrierea datelor …………………. 5
XML – Regulile de aur ale limbajului XML …………………………………………….. 6
XML – Temă ………………………………….…………………………………………………. 18
De la (X)HTML la XML
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – eXtensible Markup Language
f XML – XML, un metalimbaj utilizat pentru descrierea datelor
f XML – Regulile de aur ale limbajului XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••
Ce este XML?
Limbajul XML, acronimul de la eXtensible Markup Language, a fost
definit de consorţiul W3C în anul 1996.
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ă….
Remarcă. Un metalimbaj este un limbaj utilizat pentru descrierea unui alt limbaj.
<adjectiv><substantiv><verb><sfârşit>
<adjectiv> </adjectiv>
<substantiv> </substantiv>
<verb> </verb>
<sfârşit> </sfârşit>
Remarci:
9 În figura 1.1 (limbajul XHTML), elementul <p> conţine tag-ul de
început (<p>), conţinutul (date de tip caracter) şi tag-ul de sfârşit
(</p>).
9 În figura 1.1 (limbajul HTML), codul sursă conţine tag-ul de început
(<P>), conţinutul propriu-zis (date de tip caracter) şi opţional tag-ul
de sfârşit </P>.
9 În figura 1.1 (limbajul XML), elementul <paragraf> conţine tag-ul de
început <paragraf>, conţinutul (date de tip caracter) şi tag-ul de
sfârşit </paragraf>.
9 În limbajul HTML, singurul mod care-i permite navigatorului să deducă
situaţia în care un paragraf s-a închis este prezenţa unui alt element,
<P>, de exemplu. Deschiderea unui alt element sugerează că
elementul precedent trebuie mai întâi să fie închis.
9 Spre deosebire de HTML, XHTML impune ca toate elementele să fie
închise.
Iată cum inserăm o imagine, sigla.jpg în toate cele trei limbaje (figura
1.2).
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!
Remarcă. În limbajul XHTML, elementul rădăcină este elementul <html>. Poate, unii
dintre dumneavoastră îşi vor pune întrebarea: „de ce nu s-a schimbat elementul
rădăcină <html> în <xhtml>?”. Limbajul XHTML utilizează exact acelaşi vocabular ca
limbajul HTML. Această caracteristică nu poate decât să uşureze efortul pe care îl fac
parser-ele!
12
Un element rădăcină este delimitat printr-un tag de deschidere plasat la
începutul documentului şi un tag de închidere plasat la finele
documentului.
În figura 1.5 este prezentat tipul de date email (element rădăcină) sub
formă de structură arborescentă.
email <email>
to <to> … </to>
from <from> … </from>
date <date> … </date>
subject <subject> … </subject>
Figura 1.5 body <body> … </body>
</email>
În figura 1.6 este prezentat documentul XML, care descrie datele e-mail
(vezi figura 1.5) de o manieră structurată.
Figura 1.6
Figura 1.7
Remarci:
9 Declaraţia xml utilizează caractere mici cu excepţia valorii atributului
encoding (UTF – 8).
9 Întrucât nu există decât o singură versiune XML şi cum declaraţia XML
este facultativă, ea poate fi abandonată. Totuşi, este puţin probabil că
specificaţia XML nu se va dezvolta. Cum interpretaţi declaraţia <?xml
version=”2.0”>? Dacă utilizaţi declaraţia xml la începutul
documentului, procesorul curent sau cel viitor vor ştii, fără nici-o
ambiguitate cum să prelucreze documentul dumneavoastră.
9 O a doua versiune a limbajului XML a fost publicată dar ea nu
corectează decât erorile minore ale specificaţiei 1.0; ea nu reprezintă
modificări de conţinut pentru standard. Titlul oficial al acestei versiuni
este XML 1.0 (A doua versiune).
9 documente valide.
Figura 1.8
Figura 1.9
Reguli:
9 Prima linie a acestui exemplu
<?xml version=”1.0” encoding=”ISO – 8859 – 2”?>
declară că documentul este scris în XML.
Valoarea atributului version nu poate fi în acest moment decât 1.0.
Atributul encoding se referă la definiţia setului de caractere utilizat în
documentul XML.
9 Această linie trebuie scrisă cu caractere mici. Nu este admisă nici-o
majusculă! În caz contrar, programul de verificare (parser) XML al
navigatorului va afişa o eroare – în acest caz documentul XML nu mai
este bine format.
9 Celelalte elemente XML au fost scrise cu tag-uri … inventate de noi:
(<email>…</email>; <to>…</to>; <from>…</from>;
<date>…</date>; <subject>…</subject>; <body>…</body>.
15
9 Toate elementele XML trebuie să conţină un tag de deschidere şi un
tag de închidere.
9 Elementele vide XML trebuie să se termine cu un spaţiu urmat de o
bară oblică.
9 Pentru a delimita valorile atributelor XML utilizaţi ghilimelele.
9 Toate atributele XML trebuie să aibă valori.
9 Toate documentele XML trebuie să aibă cel puţin un element
rădăcină.
9 Declaraţia XML este facultativă.
9 Tag-urile XML trebuie să fie imbricate în mod corect.
9 Numele tag-urilor pot conţine: caractere alfanumerice (litere şi cifre),
liniuţă (-), liniuţă de subliniere (_) şi trebuie să conţină cel puţin o
literă.
9 Numele atributelor se scriu cu minuscule.
9 Spre deosebire de HTML, sfârşitul unui document XML nu este marcat
cu </xml>.
9 Comentariile XML au aceeaşi sintaxă ca şi comentariile XHTML.
9 Un document bine format nu necesită un DTD (Document Type
Definition). Declaraţia DOCTYPE este facultativă.
DTD intern
Două sunt tag-urile care ne permit să definim în interiorul documentului
XML propria noastră structură: <!DOCTYPE> şi <!ELEMENT>.
<!DOCTYPE email
[
Figura 1.10 …
]>
16
Numele poate conţine litere, cifre (în afară de prima literă) şi caracterul
de subliniere (underscore, caracterul _).
unde,
Pentru a atribui o valoare de tip text tag-urilor: to, from, date, subject,
body introduceţi #PCDATA (Parser Character Data), figura 1.11.
Figura 1.11
17
DTD extern
Dacă doriţi să definiţi un fişier DTD extern (ex.dtd) va trebui să creaţi un
nou fişier (vezi figura 1.12).
Figura 1.12
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.
Figura 1.13
Aplicaţie
Figura 1.14
XML Temă
Testaţi-vă cunoştinţele
1. Care sunt cele 10 obiective ale limbajului XML?
2. Cum este utilizat XML-ul în practică?
3. Care sunt regulile de sintaxă XML pe care le-aţi reţinut?
4. Care dintre elementele de mai jos sunt case-sensitive:
9 HTML;
9 XHTML;
9 XML.
5. Ce este un document bine format?
6. Ce este un document valid?
Vizitaţi site-urile
9 http://www.w3.org/XML/
9 http://msdn.microsoft.com/xml/default.asp
9 http://www.oasis – open.org/cover/xml.html#applications
Conversaţia 2
După cum aţi putut constata (vezi Conversaţia 1), un document XML
conţine două părţi principale:
20
9 prologul;
9 elementul rădăcină (numit şi elementul document).
Pentru a înţelege mai bine anatomia unui document XML, vom face
referiri la documentul mail.xml, o mai veche cunoştinţă de-a noastră
(figura 2.1).
Să începem cu … prologul!
Figura 2.1
Figura 2.2
Figura 2.3
Remarci:
9 Numele care apare în tag-ul de deschidere şi în tag-ul de închidere ale unui
element se mai numeşte şi tipul de element.
9 Fiecare din elementele inserate în elementul email (to, from, date, subject,
body) nu conţin decât date de tip caracter.
9 Elementul rădăcină din cadrul unui document XML este similar elementului
BODY din cadrul unei pagini (X)HTML, cu singura deosebire că puteţi să-i
atribuiţi orice nume legal.
22
Elemente vide
Puteţi introduce de asemenea în documentul dumneavoastră un element
vid, altfel spus un element fără conţinut.
Remarci:
9 Cele două notaţii au aceeaşi semnificaţie.
9 Puteţi utiliza un element vid pentru a indica aplicaţiei XML efectuarea unei
acţiuni sau afişarea unui obiect.
9 Un element vid poate stoca informaţie utilizând atribute XML.
Figura 2.9
Figura 2.10
24
Aplicaţie
Figura 2.11
Figura 2.12
Remarci:
9 Acest document simplu XML poate fi citit şi înţeles fără a utiliza un program
specializat!
9 Tag-urile <calendar>, datadeînceput>, <datadesfârşit>, <costuri>, <suma>
imaginate de noi furnizează informaţii privind datele (de tip caracter).
9 Numele tag-urilor trebuie să respecte următoarele reguli:
25
• numele unui tag trebuie să înceapă cu o literă (majusculă sau
minusculă) sau cu o liniuţă de subliniere;
• numele unui tag poate să conţină: litere, cifre, liniuţe de subliniere,
linii şi puncte;
• numele unui tag nu trebuie să conţină spaţii;
• numele unui tag nu trebuie să înceapă cu XML, xml, XmL, xML, xMl,
xmL, XMl;
• numele tag-urilor sunt limitate numai la caractere latine;
• numele unui tag poate conţine caracterul (:) numai în construcţia
specială, spaţiu de nume.
9 În XML, un document bine format trebuie să respecte regula: „fiecărui tag de
început îi corespunde un tag de sfârşit”.
9 XML permite utilizarea elementelor fără conţinut (vide).
9 Pentru a defini relaţiile între elemente, XML foloseşte următoarea
terminologie:
• elementul rădăcină;
• elementul părinte;
• elementul fiu;
• elementul frate.
9 În exemplul nostru (figura 2.12), <fraza> este elementul rădăcină;
<descriere> este elementul părinte al elementelor <calendar> şi <costuri>;
<calendar> şi <costuri> sunt elemente fiu ale elementului <descriere>;
<calendar> şi <costuri> sunt elemente fraţi.
9 În structura unui document XML numai elementul rădăcină nu are un element
părinte. Un element fiu aparţine unui singur element părinte.
Prezentăm în continuare câteva din regulile care stau la baza creării unui
document XML bine format.
Remarci:
9 Procesorul XML este modulul software care citeşte documentul XML şi
furnizează accesul la conţinutul documentului. El obţine acest acces cu
ajutorul unui modul software numit aplicaţie, care manipulează şi afişează
conţinutul documentului.
9 Atunci când afişaţi un document XML într-un browser (Microsoft Internet
Explorer 5 sau o versiune superioară), browser-ul furnizează procesorul XML
şi cel puţin o parte a aplicaţiei (termenul de aplicaţie pe care-l utilizăm este
diferit de o aplicaţie XML sau vocabular pe care am definit-o în Conversaţia 1).
27
9 Atunci cânt deschideţi un document XML direct în Microsoft Internet Explorer
5 (sau o versiune superioară), parser-ul verifică numai dacă documentul este
bine format şi afişează un mesaj în caz de eroare. El nu verifică dacă
documentul este valid!
Aplicaţii
Figura 2.13
Figura 2.14
Figura 2.15
Remarci:
9 Un element care conţine unul sau mai multe elemente imbricate (carte, în
exemplul nostru) se numeşte element părinte. Un element care este conţinut
direct în elementul părinte (titlu, în exemplul nostru) se numeşte element fiu
sau sub-element sau element inserat în elementul părinte.
9 Afişaţi documentul XML într-un browser.
28
d) Un document (figura 2.16) care nu este bine format!
Figura 2.16
Figura 2.17
Figura 2.18
Figura 2.19
Remarcă. Atunci când adăugaţi text unui element puteţi insera orice caracter cu excepţia
următoarelor caractere (speciale): < (simbolul mai mic), & (simbolul ampersand), ]]>
(şir de caractere).
30
Referinţe de entităţi generale. În figura 2.20 este prezentat un
exemplu care conţine o referinţă de entitate generală internă în vederea
afişării copyright-ului.
Figura 2.20
Figura 2.21
Figura 2.22
Figura 2.23
Remarci:
9 Instrucţiunea de prelucrare din prolog creează o legătură către o foaie de
stiluri pentru a afişa datele de tip caracter ale unui document XML.
9 Folosiţi instrucţiuni de prelucrare pentru a preciza navigatorului forma de
prelucrare sau de afişare a documentului.
Remarci:
9 Un comentariu debutează cu <!-- şi se termină cu caracterele -->. Puteţi
introduce caracterele speciale <, >,& mai puţin linia dublă -- (figura 2.24).
Figura 2.24
Figura 2.25
Figura 2.26
Pentru a crea documente XML bine formate, folosiţi una din metodele
prezentate mai jos:
Figura 2.27
Remarci:
9 Prima linie a documentului este o declaraţie XML.
9 Declaraţia <?xml version=”1.0” ?> indică browser-ului că … se află în
faţa unui document XML.
9 Declaraţia poate conţine şi alte informaţii, dar forma cea mai simplă
este cea indicată. Cu siguranţă, W3C va propune în viitor noi
modificări.
9 Declaraţia poate preciza de asemenea şi setul de caractere utilizat
(atributul encoding): <?xml version=”1.0” encoding=”ISO-8859-1”
?>.
9 Setul de caractere ISO-8859-1, încă numit ISO-Latin 1 conţine
caracterele accentuate ale limbii franceze, înlocuind setul UTF-8
utilizat în mod implicit. Setul UTF-8 reprezintă caracterele ASCII
standard pe 1 octet şi caracterele accentuate pe 3 octeţi.
9 Declaraţia XML trebuie să utilizeze caractere mici, exceptând valoarea
atributului encoding (ISO-8859-1).
2. Introduceţi comentariul „Prima aplicaţie XML” (figura 2.28).
Figura 2.28
Remarci:
9 Comentariile XML sunt similare comentariilor HTML.
9 Comentariile nu necesită tag-uri de închidere.
9 Lungimea comentariilor nu este limitată.
3. Tastaţi <email>, apăsaţi de câteva ori tasta Enter după care
tastaţi </email> (figura 2.29).
34
Figura 2.29
Remarci:
9 <email> este elementul rădăcină.
9 <email> … </email> delimitează tipul general de date.
9 Puteţi da orice nume elementului rădăcină, dar nu uitaţi că acesta
trebuie să fie semnificativ!
4. Introduceţi între tag-urile <email> … </email> tag-urile
<to>, <from>, <date>, <subject>, <body> care descriu
structura mesajului (tipul de date) e-mail (figura 2.30).
Figura 2.30
Figura 2.31
Figura 2.32
36
Remarci:
9 Dacă fişierul dumneavoastră nu a fost afişat corect sau aţi obţinut un
mesaj de eroare (!), verificaţi codul XML în editorul de texte
(declaraţia XML se găseşte pe prima linie?; tag-urile XML au fost
introduse corect?; tag-urile de deschidere au fost scrise corect?;
documentul a fost corect salvat?), corectaţi erorile, salvaţi din nou
fişierul şi reîncărcaţi-l în browser.
9 Puteţi cere navigatorului să afişeze un tag particular cu un anume font,
size, color etc. Pentru aceasta, fie utilizaţi foile de stiluri CSS, fie
transformaţi tag-urile XML în HTML cu ajutorul unui limbaj XSLT (XML
Stylesheet Language Transformation).
Metoda 2 – Editorul XML Notepad
Figura 2.33
Figura 2.34
37
3. Schimbaţi numele elementului fiu Child_Element în elementul
fiu to (figura 2.35).
Figura 2.35
Figura 2.36
Figura 2.37
38
6. Introduceţi numele acestui element, from (figura 2.38).
Figura 2.38
Figura 2.39
Figura 2.40
39
9. Salvaţi documentul cu numele email în folder-ul My Documents
(figura 2.41).
Figura 2.41
Figura 2.42
Figura 2.43
Figura 2.44
Figura 2.45
Figura 2.46
Figura 2.47
Figura 2.48
Figura 2.49
Figura 2.50
44
8. Adăugaţi şi celelalte elemente, via XML t Append t Element
(figura 2.51).
Figura 2.51
Figura 2.52
45
10. Salvaţi documentul cu numele email1 în folder-ul My
Documents (figura 2.53).
Figura 2.53
Figura 2.54
XML Temă
Testaţi-vă cunoştinţele
1. Descrieţi în XML următoarele structuri de date (figura 2.55).
Figura 2.55
2. Creaţi documentul XML din figura 2.55 utilizând una din metodele
prezentate mai jos:
9 Metoda 1 – Utilizaţi un editor de texte (Notepad);
9 Metoda 2 – Utilizaţi un editor XML (XML Notepad, XML Spy).
3. Cum puteţi afişa un document XML într-un browser?
Vizitaţi site-urile
9 http://www.w3.org/AudioVideo/
9 http://www.w3.org/TR/SVG/
9 http://www.w3.org/TR/2000/REC-xml-20001006
Conversaţia 3
Figura 3.1
Figura 3.2
51
Remarcă. Browser-ul afişează un mesaj de eroare provocat de existenţa
caracterelor „<” şi „>”.
3. Plasaţi mesajul într-o secţiune CDATA (figura 3.3).
Figura 3.3
Remarci:
9 O secţiune CDATA începe cu <![CDATA[ şi se termină cu ]]>.
9 Toate caracterele unei secţiuni CDATA sunt tratate ca o parte literală
a datelor de tip caracter ale elementului şi nu ca un tag XML.
9 Cuvântul cheie CDATA se scrie cu majuscule.
9 Secţiunile CDATA nu pot fi imbricate.
4. Afişaţi documentul XML în Microsoft Internet Explorer
(versiunea 5 sau superioară), figura 3.4.
Figura 3.4
Remarci:
9 Inserarea uneia din aceste referinţe de entităţi predefinite este
echivalentă cu inserarea referinţei de caracter echivalentă.
9 Referinţele de entităţi predefinite sunt mult mai uşor de reţinut şi de
înţeles atunci când le vedeţi într-un document.
Iată cum creăm un document XML (cu structură minimală) care conţine
codul <promo>Vizitaţi magazinele C&A!</promo>, utilizând entitatea
predefinită & pentru a insera caracterul special &.
1. Înlocuiţi caracterul & cu referinţa la entitatea predefinită &
(figura 3.6).
Figura 3.6
53
Remarci:
9 Referinţa la entitatea predefinită & este identică celei utilizate în
(X)HTML – începe cu &, se continuă cu amp şi se termină cu punct şi
virgulă.
9 (X)HTML utilizează entităţi de caractere pentru afişarea caracterelor
speciale, în timp ce XML nu le utilizează decât pentru specificarea
datelor.
2. Afişaţi documentul XML în Microsoft Internet Explorer
(versiunea 5 sau o versiune superioară), figura 3.7.
Figura 3.7
Figura 3.8
55
Remarci:
9 Referinţele entităţilor generale interne se folosesc pentru texte
frecvent utilizate: adresă, nume de produs, titlu, copyright etc.
9 O entitate internă este o entitate conţinută într-un şir de caractere
plasat între ghilimele. O entitate externă este o entitate conţinută
într-un fişier separat.
9 Entităţile interne sunt definite în DTD cu tag-ul special <!ENTITY>
care este sintaxa:
<!ENTITY nume_entitate valoare_entitate>
unde,
nume_entitate (cp în exemplul nostru) trebuie să respecte regulile
de aur XML;
valoare_entitate este valoarea entităţii; valoarea pe care
dumneavoastră o atribuiţi unei entităţi generale interne este un şir
de caractere delimitat prin ghilimele, numit şir între ghilimele sau
expresie literală (Copyright 2003 LUMINA BLANDA, în aplicaţia
noastră).
9 Puteţi afecta unei entităţi generale interne întreaga valoare a unei
expresii generale interne, cu respectarea următoarelor reguli:
şirul poate fi delimitat cu ajutorul unor ghilimele simple (’) sau
duble (”);
şirul nu poate conţine ghilimele identice cu cele ale delimitatorilor;
şirul nu poate conţine caracterul (&), excepţie făcând începutul
unei referinţe de entitate caracter sau entitate generală;
şirul nu poate conţine caracterul (%);
conţinutul şirului trebuie evident să fie plasat legal, în locul în care
doriţi să inseraţi entitatea.
2. Introduceţi referinţa de entitate &cp; (figura 3.9), la finele
documentului.
Figura 3.9
Remarci:
9 Declaraţia unei entităţi trebuie să preceadă referinţa la această
entitate.
9 Referinţa de entitate &cp; conţine numele entităţii (cp) plasat între &
şi ;. Numele entităţii (cp) reprezintă numele atribuit entităţii în
declaraţia <!DOCTYPE>.
56
9 Entitatea cp se mai numeşte entitate generală internă analizabilă
(corespunde tipului XML bine format).
9 Utilizarea unei entităţi generale internă prezintă avantajul următor:
puteţi modifica valoarea în tot documentul XML.
3. Vizualizaţi documentul (email.xml) într-un browser (figura
3.10).
Figura 3.10
Remarci:
9 Navigatorul înlocuieşte codul cp prin valoarea entităţii (figura 3.10).
9 Întrucât documentul email.xml nu conţine un link la o foaie de stiluri,
navigatorul (Internet Explorer) se mulţumeşte să afişeze codul sursă
al documentului care cuprinde: tag-urile (comentariile) şi datele de tip
caracter. Microsoft Internet Explorer atribuie un cod color diferitelor
componente ale documentului pentru a facilita identificarea acestora
şi afişează elementul documentului (<email>) sub forma unei
arborescenţe retractabile/expandabile pentru a indica structura logică
a documentului şi a vă permite vizualizarea diferitelor nivele de
detaliu.
9 Executaţi clic pe simbolul minus (-) din stânga elementului email
(figura 3.11).
57
Figura 3.11
Figura 3.12
Figura 3.13
Aplicaţie
Remarcă. În cele trei exemple, referinţele de entităţi predefinite sunt utilizate pentru a
insera caractere, care nu pot fi inserate sub forma lor literală.
59
XML Temă
Testaţi-vă cunoştinţele
1. Care este semnificaţia următoarelor referinţe de entitate:
9 &qt;
9 &
9 <
2. În ce situaţii definiţi şi utilizaţi o referinţă de entitate generală internă
(analizabilă)?
3. În ce situaţii utilizaţi o secţiune CDATA?
Vizitaţi site-urile
9 www.xml.com
9 www.w3.org/Markup/
9 http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm
Conversaţia 4
Figura 4.1
62
Remarcă. Dacă suprimaţi elementul <mama> sau dacă adăugaţi încă trei
elemente <copil>, browser-ul, oricare ar fi el, nu va afişa nici-un mesaj de
eroare! Dacă un document nu este bine format, el nu poate fi considerat ca
un document XML.
Remarci:
9 Norma XML defineşte DTD-ul ca „o gramatică pentru o clasă de
documente”.
9 Un DTD furnizează procesorului XML (Microsoft Internet Explorer) un
prototip standard pentru verificarea validităţii documentului.
Adăugaţi un DTD
O declaraţie de tip de document este un bloc de tag-uri XML, care se
plasează în prologul unui document XML valid.
unde,
Figura 4.2
Figura 4.3
Remarci:
9 Scopul unui DTD este de a defini elementele care pot fi utilizate într-un
document XML şi de a specifica relaţiile între ele.
9 Pentru a construi un DTD trebuie să cunoaştem lista elementelor pe care
dorim să le asamblăm.
9 Schema din figura 4.3 se numeşte schema modelului de date şi defineşte
conţinutul elementului client. Schema a fost realizată cu aplicaţia XML Spy
(vezi www.xmlspy.com).
9 Elementele: nume, adresa, telefoane sunt obligatorii, iar elementul online este
opţional. Un client poate fi valid numai cu o adresă şi un telefon.
telefon
telefoane telefon
Figura 4.4
telefon
Figura 4.5
66
2. Definiţi elementul client specificând structura sa.
unde,
Figura 4.6
Remarci:
9 <!ELEMENT client> defineşte elementul client, care conţine patru elemente:
nume, adresa, telefoane, online.
9 Elementele cu unul sau mai multe elemente fiu sunt definite cu numele
elementelor fiu plasate între paranteze rotunde. Faptul că ele sunt separate
prin virgulă impune ca ele să se găsească în ordinea indicată.
9 Puteţi modifica model_conţinut utilizând: semnul întrebării (?), semnul plus
(+) şi asteriscul (*), a căror semnificaţie este precizată în tabelul 1.
Caracter Semnificaţie
? Nici una sau o apariţie a elementului precedent (este opţional).
+ Una sau mai multe apariţii a elementului precedent.
Tabelul 1 * Nici una sau mai multe apariţii a elementului precedent.
Figura 4.7
Remarci:
9 PCDATA este prescurtarea de la Parsed Character Data (date caracter
analizabile).
9 Elementul nume poate conţine numai text, care va fi analizat de către
procesorul XML.
9 Pentru a preciza conţinutul unui element vid folosiţi cuvântul cheie EMPTY
(figura 4.8).
Figura 4.8
Figura 4.9
Figura 4.10
68
5. Specificaţi conţinutul (date de tip text) elementelor: strada,
număr, oraş, cod, ţara, figura 4.11.
Figura 4.11
Figura 4.12
Remarci:
9 Elementul telefoane poate conţine numai elemente telefon.
9 Semnul „+” semnifică faptul că elementul telefoane trebuie să conţină cel
puţin un element telefon şi că acest element poate fi repetat ori de câte ori
este necesar. Elementul telefon va conţine text ca şi elementele strada,
număr, oraş, cod, ţara. Numerele de telefon pot fi deci introduse direct între
tag-urile de închidere şi de început.
9 Absenţa unuia din operatorii: *, +, ? ce apar în model_conţinut al unui
element părinte semnifică faptul că elementul declarat este obligatoriu şi nu
se poate repeta (el trebuie să apară o dată şi numai o dată). Altfel, se va
genera o eroare în faza de validare.
Figura 4.13
Remarcă. În figura 4.14 este prezentat documentul XML în care este inclus DTD-ul
(intern).
Figura 4.14
70
Remarci:
9 Definiţia XML a modelului de date client (schema completă) este ilustrată în
figura 4.15 (client.dtd) şi poate fi referită şi utilizată în documentele XML,
precum luminablanda.xml din figura 4.16.
Figura 4.15
Figura 4.16
71
9 Deoarece DTD-ul are o structură ce poate fi folosită la generarea mai multor
documente, se preferă definirea acestuia ca o entitate separată
(luminablanda.xml). Spunem că avem de-a face cu un DTD extern privat.
DTD-urile externe private sunt identificate în cadrul tag-ului <DOCTYPE>
prin cuvântul cheie SYSTEM urmat de un URL-relativ (client.dtd) sau absolut
(http://...): <!DOCTYPE client SYSTEM ”client.dtd”>.
Figura 4.17
Figura 4.18
Figura 4.19
Figura 4.20
Figura 4.21
Figura 4.22
Figura 4.23
Figura 4.24
Figura 4.25
Figura 4.26
Figura 4.27
Figura 4.28
Figura 4.29
Figura 4.30
Figura 4.31
Figura 4.32
76
Adăugaţi atribute unui element XML.
XML
Aplicaţii
Toate elementele descrise într-un DTD pot avea un număr oarecare de
atribute. Atributele nu sunt obligatorii. Ele permit adăugarea de
informaţii suplimentare în mod simplu.
Figura 4.33
78
Remarcă. Definiţia XML a modelului de date (modificat) client este ilustrată în figura
4.34 (client1.dtd).
Figura 4.34
Figura 4.35
Figura 4.36
Figura 4.37
Figura 4.38
Aplicaţii
…
<client tip=”fizică”>
Figura 4.40 …
Figura 4.43
Figura 4.44
82
3. Construiţi DTD-ul corespunzător cuprinsului (corpul documentului),
figura 4.45.
Figura 4.45
Figura 4.46
83
5. Scrieţi DTD-ul în forma sa finală (figura 4.47).
Figura 4.47
84
Creaţi documentul XML corespunzător raportului (vezi structura DTD-ului din
aplicaţia precedentă), figura 4.48.
Figura 4.48
XML Temă
Testaţi-vă cunoştinţele
1. Care este structura unui DTD (Document Type Definition)?
2. Care este semnificaţia următoarelor caractere: „?”, „+”, „*”, „|”?
3. Precizaţi rolul cuvintelor cheie: PCDATA, EMPTY, ANY în cadrul
tag-ului <! ELEMENT>.
85
4. Care este rolul atributelor?
5. Ce tipuri de atribute cunoaşteţi?
6. Care sunt valorile implicite ale atributelor?
Vizitaţi site-urile
9 http://www.xmlmag.com
9 http://xml.apache.org/
9 http://www.ddj.com/topics/xml/
Conversaţia 5
Utilizarea unei foi de stiluri în cascadă este probabil metoda cea mai
simplă de afişare a unui document XML.
Iată cum creăm fişierul de stiluri stud.css (figura 5.1), care conţine trei
seturi de reguli pentru afişarea elementelor: student, nume, facultatea
ce aparţin documentului XML matricola.xml (figura 5.2).
89
Figura 5.1
Figura 5.2
90
Remarci:
9 Fişierul de stiluri stud.css din figura 5.1 conţine un comentariu şi trei
seturi de reguli.
9 Într-o foaie de stiluri comentariul debutează cu caracterele slash şi
asterisc (/*) şi se termină cu caracterele asterisc şi slash (figura 5.3).
Figura 5.3
Figura 5.4
Figura 5.5
Figura 5.6
91
declaraţia, care se compune dintr-o proprietate particulară, urmată
de caracterul două puncte (:), urmată de o valoare (figura 5.7).
{font-style:italic}
Figura 5.7
Figura 5.8
92
Remarcă. În cazul unui document XML valid, va trebui să declaraţi atributul style în DTD
înainte de a-l putea utiliza.
<!ATTLIST nume style CDATA # IMPLIED>
Aplicaţi următoarelor elemente: nuvela, titlu, autor, editura, an una din
regulile prezentate mai jos.
{display: block;
margin-right: 14 pt}
{display: block;
margin-bottom: 12 pt}
{display: block;
margin-left: 12 pt}
Iată care este procedura pe care vă invităm s-o aplicaţi (figura 5.9).
Figura 5.9
Figura 5.10
Figura 5.11
Figura 5.12
Figura 5.13
Figura 5.14
94
Folosiţi proprietatea text-align cu valoarea center pentru a centra elementul
nume (figura 5.15).
Figura 5.15
unde,
calefişier CSS este un URL care indică amplasarea fişierului foii de stiluri.
Figura 5.16
Figura 5.17
Remarci:
9 Atunci când o foaie de stiluri CSS este legată direct la un document XML,
puteţi deschide direct acest document în Internet Explorer (versiunea 5 sau
superioară). Tastaţi URL-ul (figura 5.18) şi acţionaţi tasta Enter.
Figura 5.18
9 Într-un document XML puteţi include mai multe foi de stiluri, inserând o
instrucţiune de prelucrare xml-stylesheet pentru fiecare dintre ele (figura
5.19).
96
Figura 5.19
<IMG src=”sigla.jpg”/>.
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.
Figura 5.20
unde,
Remarci:
9 Dacă un element XML poartă numele unui element HTML (IMG, A, HR etc.) şi
dacă el se află în spaţiul de nume html, Internet Explorer 5 (sau o versiune
superioară) îl va trata ca pe un element HTML şi-l va insera în pagina afişată.
Dimpotrivă, dacă elementul nu este în spaţiul de nume html, navigatorul îl va
trata ca pe un element XML normal.
9 Spaţiul de nume html este un spaţiu de nume rezervat şi specific, care se
declară în maniera următoare:
xmlns:html=’http://www.w3c.org/TR/REC-html40’.
9 În figura 5.21 se prezintă un element XML vid şi bine format care forţează
navigatorul să insereze un element HTML IMG. Elementul are un nume
98
asociat unui spaţiu de nume şi conţine de asemenea două atribute; primul
atribut declară spaţiul de nume iar al doilea atribut este un atribut standard
HTML (SRC).
Figura 5.21
XML Temă
Testaţi-vă cunoştinţele
1. Prezentaţi etapele pe care trebuie să le parcurgeţi pentru a afişa un
document XML în Microsoft Internet Explorer (versiunea 5 sau
superioară), cu ajutorul foilor de stiluri CSS.
2. Descrieţi procedura de creare a unui fişier de stiluri.
3. Descrieţi procedura de legare (asociere) a foilor de stiluri la un
document XML.
4. Explicaţi mecanismul de cascadă în foile de stiluri CSS.
5. Cum definiţi proprietatea display?
6. Cum definiţi proprietatea font-style?
Vizitaţi site-urile
9 http://www.w3.org/TR/REC-CSS1
9 http://www.w3.org/TR/REC-CSS2
9 http://www.xml.com
9 http://www.w3.org/TR/REC-xml-names/
Conversaţia 6
Remarci:
9 XSLT 1.0 a fost publicat sub formă de recomandare la data de 16 noiembrie
1999.
100
9 XSLT (eXtensible Stylesheet Language Transformation) şi XSL/FO (eXtensible
Stylesheet Language Formatting Objects) reprezintă două mari tehnologii ale
limbajului XSL (eXtensible Stylesheet Language), limbaj de descriere a stilului
de prezentare a documentelor XML.
9 Se poate face o paralelă între relaţia CSS – HTML şi relaţia XSL – XML. XSL şi
XSLT corespund tehnologiei foilor de stiluri XML, chiar dacă aceasta rămâne o
viziune mai simplistă a mecanismelor de punere în operă prin această
tehnologie.
9 Limbajul XSLT este exprimat sub forma unui vocabular XML, adică un
ansamblu de modele (templates, în limba engleză). Modelele corespund unor
pattern-uri compuse din elemente şi atribute în arborele sursă şi definesc
conţinutul arborelui rezultant, atunci când aceste pattern-uri sunt identificate.
Remarci:
9 O foaie de stiluri XSLT trebuie să fie un document XML bine format! (XSLT nu
admite definirea DTD-urilor!).
9 Limbajul foilor de stiluri XSLT permite scrierea foilor de stiluri transformând
documentele sursă în documente care utilizează un vocabular (ansamblu de
tag-uri) diferit.
Figura 6.1
Remarci:
9 Documentul conţine datele statistice pentru echipa de fotbal a Braziliei,
campionatul mondial de fotbal 2002.
9 În absenţa foii de stiluri XSLT legate la documentul XML, statistica.xml
navigatorul (Internet Explorer) va afişa rezultatul ilustrat în figura 6.2.
Figura 6.2
Figura 6.3
Remarci:
9 O foaie de stiluri XSLT trebuie să conţină un element rădăcină (document)
<xsl:stylesheet>.
9 Elementul rădăcină xsl:stylesheet informează procesorul că acest document
este o foaie de stiluri XSLT, precizându-i totodată că toate elementele care
vor începe cu xsl: vor fi elemente XSLT şi că aceste elemente vor fi conforme
cu recomandarea XSLT 1.0.
9 Elementul rădăcină (xsl:stylesheet) conţine două atribute: version şi xmlns:xsl
care au valorile menţionate.
9 xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” este spaţiul de nume
XSLT.
9 Următoarea formă este de asemenea validă:
<xsl:transform xmlns:xsl=”http://www.w3c.org/1999/XSL/Transform”
version=”1.0”. Valoarea 1999 reprezintă anul de alocare a URI pentru W3C.
Figura 6.4
Remarci:
9 Nu uitaţi că elementele foilor de stiluri care încep cu xsl: sunt elemente XSL.
Toate celelalte elemente sunt fragmente ale rezultatului literal şi sunt copiate
ca atare în documentul rezultant. Aceste elemente constituie scheletul paginii
HTML generate. Datele sunt însă extrase din documentul XML pentru a umple
scheletul.
9 Pattern-ul unei reguli template este valoarea atributului match al elementului
xsl:template. Template-ul pentru ieşire este conţinutul elementului
xsl:template. Elementele care nu conţin prefixul xsl: se regăsesc în arborele
rezultant.
9 Modul cel mai simplu prin care stabilim o corespondenţă între o regulă de
prelucrare (template) şi elementele de prelucrat constă în a utiliza elementul
<xsl:template/>. Un model <xsl:template/> se construieşte astfel (figura
6.5):
104
<xsl:template match =”[model]”>
Figura 6.5 [elemente rezultante literale şi elemente XSLT]
</xsl:template>
Modelul poate fi un nume de element sau o expresie care identifică un
fragment al documentului XML.
9 Fiecare regulă template este reprezentată printr-un element <xsl:template>.
3. Introduceţi elementul <xsl:value-of select=”[expresie]”/>
pentru crearea conţinutului elementului HTML <title> Statistici
Brazilia </title>, înlocuind [expresie] cu echipa (figura 6.6).
Figura 6.6
Figura 6.7
105
Remarcă. Elementul <xsl:value-of select=”[expresie]”/> permite scrierea în documentul
rezultant a valorii unui element al documentului sursă. Acest element prezintă un
pericol: dacă elementul documentului sursă posedă elemente fiu, atunci textul acestor
elemente este de asemenea inclus.
Figura 6.8
Figura 6.9
Figura 6.10
Figura 6.11
Remarci:
9 Dacă Internet Explorer afişează un mesaj de eroare, verificaţi sintaxa foii de
stiluri.
9 Asiguraţi-vă că toate tag-urile deschise au fost bine închise şi că toate
elementele au fost corect imbricate.
Aplicaţie
Figura 6.12
unde,
109
calefişier.xsl este URL-ul care indică amplasarea fişierului foii de stiluri
XSLT.
Figura 6.13
Remarci:
9 Această instrucţiune de prelucrare este recunoscută de Microsoft Internet
Explorer 5.5 şi nu de toate procesoarele XML.
9 href=”statistica.xsl” acţionează în mod similar tag-ului LINK din HTML 4.0
(XML este mult mai dependent de foile de stiluri decât HTML!).
Figura 6.14
110
Remarcă. Atunci când o foaie de stiluri XSLT este legată direct la un document XML,
puteţi deschide direct acest document în Internet Explorer (versiunea 5 sau
superioară). Tastaţi URL-ul şi acţionaţi tasta Enter (figura 6.15).
Figura 6.15
<xsl:template match=”/”>
[elemente literale rezultante]
<xsl:apply-templates/>
[elemente literale rezultante]
Figura 6.16
</xsl:template>
Remarcă. Acest model realizează următoarele operaţii:
9 Modelul găseşte elementul rădăcină al documentului, aplicând regula
<xsl:template match=”/”>.
Pentru a desemna nodul rădăcină se va utiliza simbolul „/” ca valoare a
atributului match. Această regulă se aplică numai nodului rădăcină al arborelui
sursă.
9 Modelul scrie în documentul rezultant o serie de elemente literale (tag-uri
HTML care sunt copiate identic în documentul rezultant).
9 El aplică celelalte modele ale foii de stiluri elementelor fii ale elementului
rădăcină, cu ajutorul instrucţiunii <xsl:apply-templates />.
9 Modelul scrie în documentul rezultant a doua serie de elemente literale şi
opreşte prelucrarea documentului sursă.
În figura 6.17 este prezentat documentul XML (statistica.xml) pentru care dorim
să creăm fişierul de stiluri (foaia de stiluri).
Figura 6.17
Iată cum construim o foaie de stiluri XSLT, care generează un document HTML
ce conţine un tabel cu o linie pentru fiecare element <echipa>. Utilizaţi editorul
de texte Notepad.
Figura 6.18
Remarci:
9 În timpul fazei de execuţie vor fi afişate toate nodurile XML, începând cu
nodul rădăcină.
9 Tot ceea ce constituie prelucrare trebuie să fie în interiorul elementului
<xsl:template match=”/”>.
9 Elementul xsl:template defineşte un template care va putea fi aplicat unui
nod.
9 Atributul match permite definirea nodurilor asupra cărora se vor aplica regulile
template-ului.
2. Creaţi o pagină HTML (figura 6.19).
Figura 6.19
Figura 6.20
Remarcă. Valoarea atributului (obligatoriu) select este o expresie. Această expresie este
evaluată şi obiectul rezultat este convertit într-un şir de caractere.
4. Introduceţi elementul <xsl:for-each select=”//echipa”> pentru a
genera un tabel cu o linie pentru fiecare element <echipa> (figura
6.21).
Figura 6.21
Remarci:
9 statistici_cm_fotbal/nume – selectează elementul fiu <nume> al elementului
<statistici_cm_fotbal>.
9 Cu enunţul <xsl:for-each select=”[expresie]”/> se identifică un element
(echipa) din documentul XML care este iterat (repetat) şi căruia i se aplică
aceeaşi transformare pentru fiecare instanţă.
114
9 Prin ”//” se selectează toate nodurile descendente ale elementului echipa
indiferent de nivelul ierarhic.
5. Introduceţi elementul <xsl:apply-templates/> pentru a umple cele trei
linii ale tabelului cu datele corespunzătoare fiecărei echipe (nume,
rezultate, clasament), figura 6.22.
Figura 6.22
Remarci:
9 Elementul <xsl:apply-templates> cu atributul select permite aplicarea
regulilor template unui document.
9 Elementul <xsl:apply-templates> nu poate conţine decât două tipuri de
elemente:
xsl: sorte;
xsl: with-param.
9 La întâlnirea elementului <xsl:apply-templates/>, procesorul XSLT analizează
fiecare element fiu şi îi aplică regula template.
9 Există numeroase asemănări între sistemul de adresare a documentelor XML
(sub formă de arbore şi noduri) şi navigarea în structura directoarelor.
6. Introduceţi tag-urile de închidere: </table>, </body>,
</xsl:template>, </xsl:stylesheet> (figura 6.23).
Figura 6.23
115
Atunci când documentul şi foaia de stiluri asociată sunt analizate de către
procesorul XML, acesta generează documentul HTML ilustrat în figura 6.24.
Figura 6.24
Remarci:
9 Tag-urile HTML au înlocuit tag-urile XML originale. Numai conţinutul
elementelor documentului XML original, şi nu tag-urile este copiat în
documentul rezultant.
9 Tag-urile originale sunt suprimate dar ele au servit la identificarea elementelor
al căror conţinut trebuia să fie copiat. Acest conţinut este plasat în elementele
HTML definite în foaia de stiluri.
7. Afişaţi documentul XML în Microsoft Internet Explorer (versiunea 5
sau o versiune superioară), figura 6.25.
116
Figura 6.25
Figura 6.26
Remarci:
9 Nu întotdeauna este necesar de a defini explicit un model (template) care
corespunde fiecărui element al documentului sursă. XSLT furnizează modele
standard sau modele implicite care permit prelucrarea elementelor în absenţa
regulilor specifice (vezi elementul <xsl:apply-template />).
117
9 Puteţi suprima conţinutul unui element al documentului sursă definind un
model vid pentru acel element. De exemplu, modelul <xsl:template
match=”Statistica” /> suprimă conţinutul elementului <statistica>. Întrucât
acest model (vid) nu conţine nici un element literal rezultant şi nici un
element XSLT, el nu va genera nimic în documentul rezultant.
9 Evitaţi să utilizaţi elementul <xsl:apply-templates /> fără atributul match.
Folosiţi enunţurile: <xsl:for-each select=”[expresie]” /> sau
<xsl:apply-templates match=”[expresie]” />.
9 Erorile XSLT curente, pe care de regulă le fac debutanţii sunt următoarele:
foaia de stiluri nu este un document bine format;
foaia de stiluri nu găseşte elementul rădăcină.
9 În cadrul enunţului <xsl:template />, toate elementele XSLT se referă la
nodul curent.
XML Temă
Testaţi-vă cunoştinţele
1. Comparaţi foile de stiluri CSS cu foile de stiluri XSLT.
2. Descrieţi pe scurt etapele pentru afişarea unui document XML cu o
foaie de stiluri XSLT (XSL).
119
3. Ce este XSL?
4. Cum definiţi o regulă template?
5. Care este patern-ul următoarei reguli template?
<xsl:template match=”statistica”>
6. Cum selectaţi nodul rădăcină al arborelui sursă?
7. Comentaţi următoarea regulă template:
<xsl:template match=”/”>
<b> <xsl:value-of select=”card”/> </b>
</xsl:stylesheet>
8. Cum traduceţi în limba română cuvântul match (vezi atributul
match=”/”).
9. Descrieţi următoarele exemple de pattern-uri utilizate pentru
identificarea nodurilor unei structuri arborescente asociate unui
document sursă XML (figura 6.27).
Pattern Exemplu Descriere
Nume persoana Elementul persoana
* * Oricare element
/ /
// //persoana
. .
Figura 6.27 .. ..
Figura 6.28
Figura 6.29
Figura 6.30
Vizitaţi site-urile
9 www.wapforum.org
9 http://www.w3.org/TR/xslt
Conversaţia 7
Este posibil de a crea expresii XPath pentru a selecta datele XML. XSLT
şi XPath facilitează crearea unor transformări specifice. Puteţi selecta
122
elementele unui document XML pentru a le copia în documentul
rezultant. Puteţi sorta, selecta şi manipula elementele în funcţie de
următoarele caracteristici: numele elementului, numele atributului,
valoarea atributului, prezenţa unui element fiu/părinte particular.
Remarcă. Această listă este departe de a fi completă. XPath este un subiect prea vast
pentru a putea fi tratat integral în această lucrare. Pentru a explora XPath în detalii,
vizitaţi site-ul www.w3c.org/TR/xpath.
<statistici_cm_fotbal>
<nume>
Axele XPath
XPath furnizează un set de cuvinte cheie, numite axe pentru a specifica
relaţiile între elemente. Axele XPath selectează nodurile în funcţie de
relaţia lor ierarhică cu nodul curent.
124
Axele XPath permit construirea căilor de acces complexe în vederea
localizării nodurilor specifice ale unui document.
9 o axă;
9 un test;
Axa Semnificaţie
child Toţi fiii nodului curent. Un nod fiu este situat direct în
nodul curent.
descendent Toţi descendenţii nodului curent.
parent Părintele direct al nodului curent.
ancestor Toţi strămoşii nodului curent.
following-sibling Toate nodurile care se succed nodului curent şi care au
acelaşi părinte.
preceding-sibling Toate nodurile care preced nodul curent şi care au
acelaşi părinte.
following Toate nodurile care se succed nodului curent, oricare ar
fi nivelul lor ierarhic.
preceding Toate nodurile care preced nodul curent, oricare ar fi
nivelul lor ierarhic.
Figura 7.3 self Nodul curent.
125
Remarci:
9 În figura 7.4 este ilustrată reprezentarea axelor XPath pentru documentul
XML, statistici.xml.
stămoşi <statistici_cm_fotbal>
părinte
<nume>
9 Sintaxa XPath este structurată în mai multe părţi, după cum urmează:
axa, care reprezintă relaţia arborescentă ce posedă nodul curent împreună
cu nodurile pe care dorim să le selectăm;
nodul de test, care va preciza ce caracteristici trebuie să posede nodurile
pentru a fi selectate;
unul sau mai multe predicate (situate între paranteze drepte) care permit
rafinarea nodurilor selectate.
9 Sintaxa unui XPath este următoarea: numele axei, urmat de nodul de test
separat prin ”::”, urmat de zero sau mai multe predicate plasate între
paranteze drepte.
9 În exemplul:
Child::eva[position()=1],
child este numele axei;
eva este nodul de test;
[position()=1] este predicatul.
9 Alte exemple:
descendent::echipa – desemnează toate elementele numite echipa care
sunt descendenţi ai nodului curent.
parent::* – desemnează elementul părinte al nodului curent.
9 Limbajul XPath permite identificarea elementelor, atributelor, textului,
comentariilor sau instrucţiunilor de prelucrare într-un document în funcţie de
metadate (numele tag-urilor şi atributelor) şi de poziţia lor în ierarhia
elementelor XML.
9 Atunci când o foaie de stiluri prelucrează un document XML, elementele
documentului sunt comparate cu elementele XSLT ale acestei foi. În
momentul prelucrării, nodul în curs de prelucrare este numit nod contextual.
În figura 7.5 este ilustrat modul în care nodul contextual se deplasează în
arborele documentului prelucrat prin foaia de stiluri.
126
<statistici_cm_fotbal>
<nume>
Aplicaţii
Figura 7.6
127
Afişaţi rezultatul expresiei: <xsl:value-of select=”nume”>, considerând că nodul
contextual este al doilea element <echipa> (TURCIA) al documentului.
Figura 7.7
Figura 7.8
Figura 7.9
Figura 7.10
Figura 7.11
129
Remarci:
9 Specificatorul de axe XPath preceding-sibling are următoarea semnificaţie:
toate nodurile care preced nodul curent şi care au acelaşi părinte.
9 Instrucţiunea <xsl:value-of select=”preceding-sibling::echipa/
rezultate/victorii”/> selectează valoarea elementului fiu <victorii> al
elementului <rezultate> al elementului <echipa> care preced nodul
contextual.
Remarcă. Un model HTML este constituit din cod HTML, care este comun tuturor
paginilor site-ului.
Iată cum modificăm pagina HTML afişată în figura 7.12 pentru a servi ca
model în foaia de stiluri. Va trebui mai întâi să precizăm câmpurile din
pagina HTML care urmează să primească datele XML (vezi figura 7.13 în
care se prezintă modelul HTML care conţine statisticile pentru
Campionatul Mondial de Fotbal 2002).
Figura 7.12
130
Figura 7.13
Figura 7.14
Remarci:
9 Originea acestui fişier nu are importanţă. Puteţi să-l creaţi manual, el putând
de asemenea proveni dintr-o bază de date. Pentru moment, ne vom
concentra numai pe structura datelor, pentru a putea scrie foaia de stiluri
XSLT.
9 În documentul statistici.xml (figura 7.14) datele sunt plasate dezordonat (în
mod intenţionat!). Ele vor fi sortate în foaia de stiluri.
9 Elementul rădăcină <statistici_cm_fotbal> posedă un element fiu, <nume>
care conţine numele campionatului de fotbal – Campionatul Mondial de Fotbal
2002.
9 <statistici_cm_fotbal> posedă mai mulţi fii instanţiaţi de elementul <echipa>.
9 Fiecare element <echipa> posedă un fiu <nume>. În acest context, <nume>
conţine numele echipei.
132
9 Fiecare element <echipa> posedă un fiu numit <rezultate>.
9 Fiecare element <rezultate> posedă fiii: <victorii>, <înfrângeri> şi <nule>.
Aceste elemente conţin respectiv numărul de victorii, numărul de înfrângeri şi
numărul de meciuri nule ale echipei.
9 Fiecare element <echipa> posedă un element <clasament> care conţine
clasamentul echipei la Campionatul Mondial de Fotbal 2002 din Coreea şi
Japonia.
...
Figura 7.15
<xsl:value-of select=”statistici_cm_fotbal/nume”/>
...
2.2 Scrieţi instrucţiunea XPath pentru a extrage informaţiile
privind cele trei echipe medaliate la Campionatul Mondial
de Fotbal 2002 din Coreea şi Japonia (figura 7.16).
...
<xsl:for-each select=”statistici_cm_fotbal/echipa”>
Figura 7.16 ...
...
<xsl:value-of select=”clasament”>
Figura 7.18 ...
Figura 7.19
Figura 7.20
Figura 7.21
135
În figura 7.22 se prezintă în ordine alfabetică echipele de fotbal clasate pe
primele trei locuri.
Figura 7.22
Figura 7.23
Figura 7.24
136
Combinaţi două foi de stiluri CSS şi XSLT pentru a afişa datele XML
prezentate în figura 7.25.
Figura 7.25
Testaţi-vă cunoştinţele
1. Care este rolul limbajului XPath?
2. De ce utilizăm XSLT cu XPath?
3. Cum definiţi axele XPath?
4. Comentaţi instrucţiunea:
<xsl: sort select=”clasament”/>
Vizitaţi site-urile
9 www.w3.org/TR/xpath
9 www.xml.com
9 http://www.ibiblio.org/pub/sun-info/standards/xml/why/xmlapps.htm
Conversaţia 8
9 elemente de tip simplu, care nu pot avea nici fii, nici 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).
Iată cum procedăm pentru a crea o schemă XML, piesă cu piesă pornind
de la documentul XML scheme.xml creat cu editorul Notepad (figura 8.3)
al cărui DTD este prezentat în figura 8.1 (creat de asemenea cu
Notepad).
144
Figura 8.1
Remarci:
9 DTD-ul XML prezentat nu spune nimic despre valorile autorizate ale
elementului <um> (unitate de măsură) şi nu precizează faptul că elementul
<cantitate> are drept conţinut o valoare numerică.
9 Ierarhia listei de produse de excursie este prezentată în figura 8.2.
Figura 8.3
145
Remarcă. Evident, puteţi critica sărăcia acestei liste! În ceea ce ne priveşte am
considerat suficiente 3 kg de banane, 2 kg de biscuiţi şi 1 borcan de ness pentru o
simplă ascensiune, în doi pe … OMUL!
Pentru a crea o schemă XML, folosiţi una din metodele prezentate mai
jos:
Metoda 1
Figura 8.4
Remarci:
9 După declaraţia documentului XML (prima linie), <xs: schema> este primul
element pe care îl întâlnim într-o schemă XML. El este deci, elementul
rădăcină iar prezenţa sa este obligatorie.
9 Cu această declaraţie, toate elementele schemei care conţin sufixul xs: (xsd:)
vor fi recunoscute ca aparţinând spaţiului de nume corespunzător (vezi
http://www.w3.org/2001/XMLSchema).
9 <xs: schema> poate conţine de asemenea şi următoarele atribute, toate
facultative: targetNamespace; version; elementFormDefault;
attributeFormDefault; blockDefault; finalDefault; id (vezi
http://www.w3.org/2000/10/XMLSchema).
Figura 8.5
Figura 8.6
Remarci:
9 Elementul de tip complex <lista_produse_excursie> este o secvenţă de
<produse_excursie>.
9 După cum aţi putut constata element permite declararea unui element. El
posedă două atribute: name şi ref, care sunt exclusive.
9 name permite declararea unui atribut în mod local.
9 ref, care este diminutivul de la reference face referiri la un element deja
declarat sau care urmează a fi declarat ulterior.
9 Atributele name şi ref (facultative) sunt cele mai frecvent folosite în
declararea unui element.
9 Celelalte atribute facultative ale tag-ului <xs: element> sunt [2]:
type (defineşte tipul elementului; primeşte ca valoare un nume);
equivclass (ia ca valoare un nume);
minOccurs (defineşte numărul minim de apariţii ale unui element
(occurence) într-un document; ia ca valoare un întreg pozitiv sau nul (în
mod implicit primeşte valoarea 1));
maxOccurs (defineşte numărul maxim de apariţii ale unui element într-un
document; ia ca valori un întreg pozitiv sau nul (în mod implicit primeşte
valoarea 1));
default (primeşte ca valoare un şir de caractere; atribuie elementului o
valoare implicită);
fixed (primeşte ca valoare un şir de caractere; atribuie elementului o
valoare fixă şi invariabilă);
147
nullable (primeşte ca valoare true sau false; testează dacă elementul este
sau nu este nul);
abstract (primeşte ca valoare true sau false; testează dacă elementul nu
va putea fi prezent într-un document);
form (primeşte ca valoare qualified sau unqualified; indică dacă numele
elementului trebuie să conţină sau nu prefixul xs:(xsd:));
id (vezi DTD).
Figura 8.7
Figura 8.8
Remarci:
9 sequence este un grup de elemente. Într-un document, elementele declarate
în secvenţă trebuie să apară obligatoriu cel puţin o dată în ordinea în care ele
au fost definite.
9 Atributele pe care le posedă <xs: sequence> sunt: id; maxOccurs;
minOccurs.
Figura 8.9
Figura 8.10
Remarci:
9 Elementul de tip simplu <cantitate> va fi un număr zecimal (xs: decimal).
9 Elementul de tip simplu <produs> va fi un şir de caractere (xs: string).
9 Elementul <um> poate fi definit ca un simplu string dar dorim să-l limităm la
o serie de valori predefinite.
Figura 8.11
Remarci:
9 Schema utilizează elementul de constrângere <xs: restriction> cu atributul
base pentru a preciza că elementul <um> este de tip xs: string.
9 restriction conţine faţete care permit reducerea spaţiului de valori.
9 Valoarea este restricţionată printr-o faţetă definită cu elementele
<xs: enumeration>.
9 Faţeta enumeration permite limitarea spaţiului de valori la o listă de valori
(kg; borcan(e) etc.).
9 Fiecare constrângere este un element care posedă un atribut numit value şi
defineşte una din valorile posibile.
9 XML Spy.
150
(TIBCO’s) XML Authority
XML Authority (http://www.tibco.com) a fost creat de o întreprindere
numită Extensibility (răscumpărată după aceea de TIBCO). Este unul din
primele medii de dezvoltare a schemelor creat pentru XML.
Câteva funcţii ale XML Authority oferă o mare supleţe pentru conversiile
unui tip de date în altul. În plus, faţă de aceste funcţii, XML Authority
permite să se exporte reprezentarea vizuală a schemelor în format GIF;
ajută utilizatorul cu o funcţie de introducere date semi-automată; oferă
o interfaţă simplă pentru listele de elemente şi de atribute.
Remarci:
9 Dacă doriţi mai multe informaţii despre XML Authority, vizitaţi site-ul
http://www.tibco.com.
9 XML Authority este disponibil sub Windows, Unix şi MacOs.
Aplicaţie
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.
Remarci:
9 XML Spy este un instrument simplu de folosit, extraordinar de flexibil
şi foarte complet.
9 XML Spy prezintă şi alte facilităţi precum: introducerea semi-automată
a datelor; editarea vizuală a schemelor; editarea directă a sursei XML;
posibilitatea de creare a unei documentaţii în format HTML sau Word.
Aplicaţii
Creaţi cu XML Spy (Metoda 2) aceeaşi schemă XML pe care aţi realizat-o
manual (Metoda 1) şi automat (Metoda 2) cu XML Authority.
Figura 8.12
Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.13.
153
Figura 8.13
Figura 8.14
155
Figura 8.15
Realizaţi schema XML echivalentă folosind una din metodele prezentate mai jos:
9 Metoda 1 – Codificarea manuală;
9 Metoda 2 – Codificarea automată cu aplicaţii dedicate.
156
Remarcă. Elementele <nume>, <prenume> sunt de type=”xs.string”.
În figura 8.16 se prezintă schema XML generată cu XML Spy (Metoda 2).
Figura 8.16
Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.17.
Figura 8.17
157
Figura 8.17
(continuare)
158
Remarcă. Puteţi realiza o conversie automată DTD XML XML Schema şi cu aplicaţia
dtd2xsd, care se găseşte pe site-ul W3C (www.w3c.org).
XML Temă
Testaţi-vă cunoştinţele
1. Când folosiţi schemele XML?
2. Daţi exemple de tipuri de date predefinite.
3. Cum se definesc elementele de tip simplu şi de tip complex?
4. Ce software XML Schema cunoaşteţi?
5. Comentaţi următorul cod XML (figura 8.18)?
Figura 8.18
Vizitaţi site-urile
9 http://www.w3.org/2000/10/XMLSchema
9 http://www.w3.org/2001/XMLSchema-instance
9 http://www.thaiopensource.com/trex/
9 http://www.mutu-xml.org/
Conversaţia 9
Complemente XML
•••••••••••••••••••••••••••••••••••••••••
În această conversaţie:
f XML – DOM, interfaţă pentru manipularea documentelor (X)HTML şi XML
f XML – Script-uri XML
f XML – Creaţi prima pagină Web interactivă
f XML – Inseraţi o imagine într-un document XML
f XML – Creaţi legături şi interogări în documentele XML
f XML – Temă
•••••••••••••••••••••••••••••••••••••••••
DOM creează o ierarhie de obiecte sau mai exact un arbore ale cărui
noduri reprezintă obiectele documentului XML.
<exemplu>
Figura 9.1 <body> Două mere, două pere! </body>
<exemplu>
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.
Remarcă. Pentru mai multe detalii privind limbajul Java Script consultaţi următoarele
resurse:
9 Collection Web Training, Java Script Web Training, Paris, 2002
9 Floarea Năstase, Pavel Năstase, Tehnologia aplicaţiilor Web (XML, DOM, ASP),
Editura Economică 2002, Bucureşti.
Remarcă. Pentru realizarea acestei aplicaţii am folosit lucrarea: Kay Ether, Alan Houser,
XML Web Training, OEM, Collection Web Training, Paris 2002, paginile 258 – 259.
162
Figura 9.3
Figura 9.4
Remarci:
9 Numele obiectelor xslStyleSheet şi xmlSource sunt nume de variabile
arbitrare.
9 document.XSLDocument reprezintă foaia de stiluri XSLT iar
document.XMLDocument reprezintă documentul XML.
9 Navigatorul încarcă documentul XML şi foaia de stiluri XSLT în momentul în
care script-ul este executat.
9 Codul JavaScript a fost inserat direct în foaia de stiluri XSLT în secţiunea
CDATA.
9 Cu instrucţiunea <xsl:comment> codul JavaScript va fi comentat în fişierul
rezultant.
Codul din figura 9.5:
<script>
<xsl:comment>
<![CDATA[
Cod JavaScript …
Figura 9.5
]]>
va genera următorul rezultat (figura 9.6):
<script>
<!--
Cod JavaScript
-->
Figura 9.6 </script>
Figura 9.7
Remarci:
9 Odată create obiectele care reprezintă documentele, ele pot fi utilizate pentru
a manipula aceste documente. Pentru aceasta este suficient de a utiliza una
sau mai multe metode (metoda este un termen al programării orientate obiect
şi are aproximativ aceeaşi semnificaţie ca şi o funcţie).
9 Obiectul XSLDocument, care reprezintă foaia de stiluri posedă o metodă
numită selectSingleNode care permite selectarea unui element sau a unui
atribut (sau încă un alt tip de nod, cum ar fi un comentariu sau o instrucţiune
de prelucrare). Această metodă ia în considerare un singur argument: drumul
de acces către nodul care trebuie să fie selectat.
Instrucţiunea următoare selectează atributul numit select al elementului
<xsl:sort> al foii de stiluri.
Figura 9.8
165
Remarci:
9 Funcţia display(coloana) are un singur argument numit coloana, unde coloana
poate primi una din valorile: echipa sau clasament pe care le folosim în
operaţia de sortare.
9 Metoda nodeValue permite modificarea valorii lui sortColoana. Vom utiliza
această metodă pentru a determina criteriul de sortare.
9 Obiectul xmlSource.documentElement posedă o metodă numită
transformNode care primeşte ca argument numele obiectului corespunzător
foii de stiluri. Noi apelăm această metodă cu xslStylesheet pentru a reaplica
foaia de stil modificată.
9 Pentru a afişa datele, vom utiliza DOM-ul plasând rezultatele într-un obiect
numit clasament. DOM HTML Microsoft posedă o metodă innerHTML care
permite modificarea unei porţiuni a codului HTML al unei pagini. În acest
mod, obiectul clasament va conţine rezultatele.
Figura 9.9
Figura 9.10
166
Figura 9.11
Remarci:
9 De fiecare dată când utilizatorul va executa clic pe Echipa sau Clasament,
funcţia display va fi apelată cu argumentul corespunzător.
9 Atunci când vom aplica unui element clasa active, pointer-ul se va modifica de
fiecare dată când el va fi plasat pe acel element.
Figura 9.12
167
Figura 9.12
(continuare)
Figura 9.13
168
9. Testaţi rezultatul. Executaţi clic pe Echipa (figura 9.14).
Figura 9.14
Figura 9.15
169
10. Testaţi rezultatul. Executaţi clic pe Clasament (figura 9.16).
Figura 9.16
Figura 9.17
170
Figura 9.18
Remarci:
9 Elementele vide sunt declarate prin cuvântul cheie EMPTY.
9 Declaraţia <!ELEMENT img EMPTY>) a fost inclusă în DTD pentru a valida
documentul XML care conţine un element vid, de forma: <img/>.
9 Navigatoarele afişează imaginile dintr-un document HTML datorită tag-ului
img.
9 În XML nu se întâmplă acelaşi lucru. Navigatoarele nu recunosc tag-ul img
inclus într-un document XML. În consecinţă, puteţi numi cum doriţi acest tag:
img, grafic, poză, foto etc. Am preferat img pentru a înţelege mai bine
procedura.
Figura 9.19
Remarci:
9 Noi am utilizat atributul source (pentru a înţelege mai bine procedura).
Dumneavoastră puteţi folosi orice nume doriţi!
9 Tipul de atribut ENTITY defineşte referinţa la datele binare externe (imagini).
Valoarea unui astfel de atribut nu este analizabilă.
9 Vă mai amintiţi de cuvântul cheie #REQUIRED! El semnifică faptul că atributul
trebuie să fie întotdeauna prezent. De fiecare dată când veţi utiliza tag-ul img,
va trebui să indicaţi o valoare pentru atributul source pentru a preciza calea
de acces către imagine.
Iată care este procedura pe care trebuie s-o urmaţi pentru a crea o
notaţie.
Figura 9.20
172
2. Definiţi (în DTD) notaţia (NOTATION) după entitatea care o
utilizează (figura 9.21).
Figura 9.21
Remarci:
9 DTD-urile externe private sunt identificate prin cuvântul cheie SYSTEM.
9 Datele (fişierele) externe semnifică faptul că dumneavoastră referiţi fişiere
non-XML în documentele pe care le-aţi creat. Dacă faceţi referire la un fişier
GIF/JPG, dumneavoastră utilizaţi un tip de date externe.
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
Figura 9.23
Figura 9.24
Figura 9.25
Remarci:
9 Deşi disponibil, fişierul sigla.jpg nu este afişat în browser.
9 Pentru afişarea siglei societăţii LUMINA BLÂNDA (sigla.jpg) utilizaţi XSLT.
În figura 9.26 este prezentat documentul sigla.xsl.
174
Figura 9.26
Figura 9.27
Remarcă. SVG (Scalable Vector Graphics) este un vocabular standard XML care permite
crearea imaginilor. Imaginile SVG se integrează perfect în documentele XML.
Pentru crearea şi afişarea imaginilor aveţi nevoie de un soft dedicat (Adobe SVG
Viewer, Adobe Illustrator 9 etc.).
175
Pentru mai multe detalii privind standardul SVG vizitaţi site-ul:
http://www.w3.org/TR/SVG.
9 sunt unidirecţionale;
9 nu pot fi direcţionate decât către documente HTML;
9 trebuie mereu activate manual;
9 nu pot fi obţinute decât cu elementul <a>;
9 nu pot fi direcţionate decât către un document întreg sau către
un punct al unui document sau un reper definit în prealabil.
Poate pentru moment multe dintre aceste limitări nu vă deranjează, dar
cu siguranţă vă veţi schimba opinia atunci când veţi cunoaşte facilităţile
oferite de XLink. XLink a fost creat pentru a permite utilizarea legăturilor
mult mai puternice decât cele HTML.
Exemplu:
<xlink:simple href=”sigla.xml”> Link către sigla.xml
</xlink:simple>.
Exemplu:
<!ELEMENT mail (#PCDATA)>
<!ATTLIST mail
xlink: type (simple) #FIXED „simple”
xlink: href CDATA #REQUIRED
Remarcă. Pentru mai multe detalii consultaţi următoarele resurse:
9 http://www.w3.org
9 http://www.w3.org/1999/xlink
9 Kay Ether, Alan Houser, XML Web Training, OEM, Collection Web Training,
Paris 2002
9 Yannick LEJEUNE, Alexandre PINHEL, XML, e-Poche, Micro Application, 2001,
Paris
9 R. Allen Wyke, Sultan Rehman, Brad Leupen, Manuel de référence XML,
Microsoft, 2002
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.
XML Temă
Testaţi-vă cunoştinţele
1. Ce este DOM-ul?
2. Cum creaţi o pagină Web interactivă?
3. Cum inseraţi o imagine într-un document XML?
4. Care sunt facilităţile oferite de XLink?
5. Care sunt facilităţile oferite de limbajele XML XPointer şi XML XQuery?
Consultaţi site-urile
9 http://www.w3.org/TR/SVG
9 http://users.iclway.co.uk/mhkay/Saxon
9 http://www.w3.org
9 http://www.w3.org/1999/xlink
BIBLIOGRAFIE
1. Kay Ether, Alan Houser, XML Web Training, OEM, Collection Web
Training, Paris, 2002
4. Michael J. Young, XML, Étape par étape, Microsoft Press, Paris, 2001