Tehnologii XMLLucian Sasu 30 mai 2007
2
Cuprins1 Introducere in tehnologii XML 1.1 Scopul cursului . . . . . . . . . . . . . . . . . 1.2 Prezentare general . . . . . . . . . . . . . . . a 1.3 Trsturi ale limbajului XML . . . . . . . . . aa 1.3.1 Formatul datelor . . . . . . . . . . . . 1.3.2 Limbaj de marcare specic domeniului 1.3.3 Acces programatic facil . . . . . . . . . 1.3.4 Creare uoar . . . . . . . . . . . . . . s a 1.3.5 Utilizare uoar Internet . . . . . . . s a n 1.3.6 Modelul semistructurat . . . . . . . . . 1.4 Tehnologii nrudite . . . . . . . . . . . . . . . 1.4.1 XSL . . . . . . . . . . . . . . . . . . . 1.4.2 XPath, XLink, XPointer . . . . . . . . 1.4.3 DTD, XSD . . . . . . . . . . . . . . . 1.5 Aplicatii XML . . . . . . . . . . . . . . . . . . 1.6 Tipuri de instrumente XML . . . . . . . . . . 1.7 Compozitia unui document XML . . . . . . . 1.7.1 Declaratia XML . . . . . . . . . . . . . 1.7.2 Elemente . . . . . . . . . . . . . . . . 1.7.3 Atribute . . . . . . . . . . . . . . . . . 1.7.4 Comentarii . . . . . . . . . . . . . . . 1.7.5 Referinte la entiti . . . . . . . . . . . at 1.7.6 Sectiuni de marcare . . . . . . . . . . . 1.7.7 Instructiuni de procesare . . . . . . . . 1.8 Spatii de nume . . . . . . . . . . . . . . . . . 1.9 Buna formare a documentelor XML . . . . . . 1.10 Arborele ataat unui document XML . . . . . s 1.11 Versiunea 1.1 de XML . . . . . . . . . . . . . 3 9 9 9 11 11 11 12 12 12 13 13 13 14 14 14 15 16 16 17 19 22 22 23 23 25 26 28 28
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
4 2 DTD 2.1 Documente valide . . . . . . . . . . . . . . 2.2 Document Type Denition - generaliti . at 2.3 Declaratii DTD . . . . . . . . . . . . . . . 2.4 Comentarii DTD . . . . . . . . . . . . . n 2.5 Declarare de elemente . . . . . . . . . . . 2.5.1 Specicarea de continut oarecare . 2.5.2 Specicarea continutului de tip text 2.5.3 Specicarea elementelor copil . . . 2.5.4 Continut mixat . . . . . . . . . . . 2.5.5 Elemente goale . . . . . . . . . . . 2.5.6 Exemplu . . . . . . . . . . . . . . . 3 DTD - continuare 3.1 Declaratii de entiti . . . . . . . . . at 3.1.1 Entiti interne . . . . . . . . at 3.1.2 Entiti externe . . . . . . . . at 3.2 Declarare de atribute . . . . . . . . . 3.2.1 Generaliti . . . . . . . . . . at 3.2.2 Atribute fr valori implicite . aa 3.2.3 Tipuri de date pentru atribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUPRINS 31 31 32 33 36 37 37 38 39 43 43 44 47 47 47 48 50 50 51 53 59 59 62 62 62 63 63 63 63 63 64 64 64 64 65 65 65 66 66
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 XPath 4.1 Prezentare general . . . . . . . . . . . a 4.2 Modelul de date XPath 1.0 . . . . . . . 4.2.1 Tipul numeric . . . . . . . . . . 4.2.2 Tipul ir de caractere . . . . . . s 4.2.3 Tipul logic . . . . . . . . . . . . 4.2.4 Tipul set de noduri . . . . . . . 4.3 Noduri - caracteristici . . . . . . . . . 4.3.1 Numele nodului . . . . . . . . . 4.3.2 Ordinea documentului . . . . . 4.3.3 Relatia de familie cu alte noduri 4.3.4 Valoarea de string a unui nod . 4.4 Tipuri de noduri . . . . . . . . . . . . 4.4.1 Nodul rdcin . . . . . . . . . a a a 4.4.2 Nodul element . . . . . . . . . . 4.4.3 Nodul atribut . . . . . . . . . . 4.4.4 Nodul instructiune de procesare 4.4.5 Nodul comentariu . . . . . . . . 4.4.6 Nod text . . . . . . . . . . . . .
CUPRINS 4.4.7 Nod spatiu de nume . . . . . . . . Expresii de localizare . . . . . . . . . . . . 4.5.1 Exemplicare . . . . . . . . . . . . 4.5.2 Structura unei expresii de localizare 4.5.3 Axe XPath . . . . . . . . . . . . . 4.5.4 Teste pentru noduri . . . . . . . . . 4.5.5 Predicate XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 66 68 68 69 69 71 71 73 73 74 75 75 77 78 79 80 80 80 81 81 82 82 82
4.5
5 XPath (continuare) 5.1 Functii i operatori XPath . . . . . . . . . . . . . . . s 5.1.1 Operatori i functii pentru tipul boolean . . . s 5.1.2 Operatori i functii pentru tipul numeric . . . s 5.1.3 Functii pentru tipul ir de caractere . . . . . . s 5.1.4 Operatori i functii pentru tipul set de noduri s 5.2 XPath 2.0 . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Expresii primare . . . . . . . . . . . . . . . . 5.2.2 Expresii aritmetice . . . . . . . . . . . . . . . 5.2.3 Expresii de localizare XPath 2.0 . . . . . . . . 5.2.4 Expresii secvent . . . . . . . . . . . . . . . . a 5.2.5 Expresii de comparare . . . . . . . . . . . . . 5.2.6 Expresii logice . . . . . . . . . . . . . . . . . . 5.2.7 Expresii for . . . . . . . . . . . . . . . . . . . 5.2.8 Expresii conditionale . . . . . . . . . . . . . . 5.2.9 Expresii cuanticate . . . . . . . . . . . . . .
6 XSLT 83 6.1 Generaliti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 at 6.2 Mecanismele XSLT . . . . . . . . . . . . . . . . . . . . . . . . 84 6.2.1 Template-uri . . . . . . . . . . . . . . . . . . . . . . . 86 6.2.2 Elementul xsl:value-of . . . . . . . . . . . . . . . . . 89 6.2.3 Procesarea mai multor elemente cu xsl:for-each . . . 89 6.3 Regulile de template implicite . . . . . . . . . . . . . . . . . . 91 6.3.1 Regula de template implicit pentru elemente . . . . . 91 a 6.3.2 Regula de template implicit pentru noduri text i atria s bute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.3.3 Regula de template implicit pentru instructiuni de a procesare i comentarii . . . . . . . . . . . . . . . . . . 93 s 6.4 Template-uri pentru valori de atribute . . . . . . . . . . . . . 93 6.5 Specicarea ieirii la runtime . . . . . . . . . . . . . . . . . . . 94 s 6.5.1 Inserarea de elemente documentul de ieire cu xsl:element 94 n s 6.5.2 Inserarea de atribute documentul de ieire cu xsl:attribute 94 n s
6
CUPRINS 6.5.3 Inserarea de PI documentul de ieire cu xsl:processing-instruction 95 n s 6.5.4 Inserarea de comentarii documentul de ieire cu xsl:comment 95 n s 6.5.5 Inserarea de text documentul de ieire cu xsl:text 95 n s Moduri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 97 99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 . 101 . 101 . 101 . 102 . 102 . 102 . 102 . 102 . 103 . 104 . 108 . 108 . 108 . 108 . 109 . 109 . 110 . 111 . 111 . 111 . 111 . 111 . 113 . 113 . 114 . 114
6.6
7 XSLT (2) 8 XSL-FO 9 XML Schema 9.1 Introducere . . . . . . . . . . . . . . . . . . 9.2 Minusuri ale lui DTD . . . . . . . . . . . . . 9.2.1 Lipsa tipizrii . . . . . . . . . . . . . a 9.2.2 Sintaza non-XML . . . . . . . . . . . 9.2.3 Scalabilitatea redus . . . . . . . . . a 9.2.4 Nesuportarea spatiilor de nume . . . 9.2.5 Structura inexibil . . . . . . . . . . a 9.2.6 Alte limitri . . . . . . . . . . . . . . a 9.3 XSD . . . . . . . . . . . . . . . . . . . . . . 9.4 Tipuri complexe . . . . . . . . . . . . . . . . 9.5 Grupare . . . . . . . . . . . . . . . . . . . . 9.5.1 Grupul xsd:all . . . . . . . . . . . . 9.5.2 Grupul xsd:choice . . . . . . . . . . 9.5.3 Grupul xsd:sequence . . . . . . . . 9.6 Tipuri simple . . . . . . . . . . . . . . . . . 9.6.1 Tipuri numerice . . . . . . . . . . . . 9.6.2 Tipuri pentru reprezentarea timpului 9.6.3 Tipuri de date XML . . . . . . . . . 9.6.4 Tipuri de date ir de caractere . . . . s 9.6.5 Tipuri binare . . . . . . . . . . . . . 9.7 Derivare de tipuri . . . . . . . . . . . . . . . 9.7.1 Derivarea prin restrngere . . . . . . a 9.7.2 Reuniuni . . . . . . . . . . . . . . . . 9.7.3 Liste . . . . . . . . . . . . . . . . . . 9.8 Elemente goale . . . . . . . . . . . . . . . . 9.9 Atribute . . . . . . . . . . . . . . . . . . . . 10 API-uri pentru XML: DOM 10.1 Introducere . . . . . . . . 10.2 DOM: XML arborescent . 10.3 SAX: XML cu evenimente
i SAX s 115 . . . . . . . . . . . . . . . . . . . . 115 . . . . . . . . . . . . . . . . . . . . 117 . . . . . . . . . . . . . . . . . . . . 121
CUPRINS
7
10.4 DOM sau SAX? . . . . . . . . . . . . . . . . . . . . . . . . . . 124 11 XLink i XPointer s 11.1 Generaliti . . . . . . . . . . . . . . . . . at 11.2 XLink . . . . . . . . . . . . . . . . . . . . 11.3 XPointer . . . . . . . . . . . . . . . . . . . 11.3.1 Termeni pentru localizare absolut a 11.3.2 Termeni pentru localizare relativ . a 11.3.3 Subiruri de caractere . . . . . . . s 12 Baze de date i XML s 12.1 Extragerea de date format XML . . . n 12.1.1 FOR XML RAW . . . . . . . . . 12.1.2 FOR XML AUTO . . . . . . . . 12.1.3 FOR XML EXPLICIT . . . . . . 12.1.4 FOR XML PATH . . . . . . . . . 12.2 Utilizarea de document XML ca surs de a 12.3 Lucru cu XML ca tip de dat . . . . . . a 12.3.1 Metoda query . . . . . . . . . . . 12.3.2 Metoda value . . . . . . . . . . . 12.3.3 Metoda exist . . . . . . . . . . . 12.3.4 Metoda modify() . . . . . . . . . 12.3.5 Metoda nodes() . . . . . . . . . 12.4 Indexare pe XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 127 127 130 133 133 135
. . . . . . . . . . . . . . . date . . . . . . . . . . . . . . . . . . . . .
137 . 137 . 139 . 143 . 144 . 146 . 147 . 148 . 149 . 150 . 150 . 151 . 151 . 152
8
CUPRINS
Capitolul 1 Introducere in tehnologii XML1.1 Scopul cursului
Cursul de Tehnologii XML are drept scop introducerea att a limbajului a XML, ct mai ales a tehnologiilor conexe; intentionm de asemenea s trecem a a a revist domeniile de utilizare a acestor tehnologii, strns corelatie cu n a n a a tipurile de aplicatii care folosesc XML. Cursul contine o prezentare a: limbajului XML modului de validare a unui document XML modurilor de procesare a unui document XML adresrii portiunilor din XML a transformrii documentelor XML a legturii dintre XML i serviciile web a s suportul XML oferit de ctre sistemele de baze de date de generatie a nou a
1.2
Prezentare general a
XML (Extensible Markup Language) este un metalimbaj propus de ctre a World Wide Web Consortium (W3C) care are drept scop depirea unor as A probleme legate de limbajele de marcare existente (HTML, LTEX, RTF). XML este un limbaj de marcare, insemnnd c folosete niste constructii a a s 9
10
CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII XML
specice - elemente - ce precizeaz modul de structurare a datelor. Spre a deosebire de elementele folosite limbajul HTML, ele nu precizeaz nimic n a relativ la modul care sunt prezentate datele continute. n Limbajul este extensibil; asta nseamn c el permite crearea de elemente a a cadrul unui document XML, dup dorinta programatorului; mai mult n a dect att, un document XML poate include referinte la alte resurse, sau a a alte tipuri de continut. Un exemplu de document XML este dat listing-ul 1.1: n Tabela 1.1: Document XML pentru modelarea unei colectii de cursuri Tehnologii XML Sabin Buraga Polirom Beginning XML David Hunter Kurt Cagle Chris Dix Wrox Press Observm ca elementele (biblioteca, titlu, editura) sunt denite in mod a convenabil de ctre noi. De asemenea, documentul este evident structurat: a biblioteca detine mai multe crti, care prezint drept caracteristici titlul, a a autorul/autorii, editura. Tot acum remarcm c elementele denesc i sea a s mantica datelor din document. Unul din aspectele remarcabile ale limbajului XML este c el permite sea pararea continutului, a prezentrii i a interactiunii. Aceasta este o diferent a s a major fat de un document HTML de tipul: a a Exemplu de HTML
1.3. TRASATURI ALE LIMBAJULUI XML Document HTML Acesta este un document HTML
11
Remarcm c documentul de mai sus este de asemenea structurat, dar
para a tea de continut este mixat cu partea de prezentare: de
exemplu tag-urile a i se refer la modul de aare i nu au rol de
structurare s a s s a continutului documentului; schimb, elementele
, , n se refer la structura documentului HTML. cazul documentea In
lor de tip XML, a, formatarea este precizat separat (documente CSS
sau ns a transformri XSLT). a1.31.3.1Trsturi ale limbajului XML a
aFormatul datelorUn document XML este reprezentat ca un ir de
caractere; s-a depit s as astfel bariera reprezentrilor binare care
de cele mai multe ori sunt elese a nt i produse de un set restrns
de aplicatii. Accesul la un document XML s a nu depinde de nici o
aplicatie particular parte. Este o situatie total a n diferit de
cea a unui ier .mdb, care dei contine aceleai date, nu poate a s s
s interpretat dect de Access. a Altfel spus, semantica datelor nu
mai este continut doar de codul care a prelucreaz datele, ci este
dat chiar documentul XML. Aceast facilitate a a n a este cunoscut i
sub bumele de auto-descriere, fcnd din documentul XML as a a un tip
de date auto-continut. 1.3.2Limbaj de marcare specic
domeniuluiOricine poate deni propria structur de document XML in
acord cu a propriile interese; un astfel de document poate creat
pentru reprezentare de continut matematic, al datelor unor
tranzactii imobiliare, formule chimice, descrieri de obiecte grace,
datele pentru apelul unei metode, descriere de circuite
electronice, etc. Versatilitatea limbajului i faptul c permite
cuiva s a s se concentreze pe structurarea continutului este unul
din atuurile care l-a a 12CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII
XMLfcut s e rapid acceptat i folosit. Dei cele din urm un document
XML a a s s n a este destinat unei aplicatii, alegerea adecvat a
elementelor poate facilita a dezvoltarea de programe care s
foloseasc un asemenea document. a a1.3.3Acces programatic facilUnul
din scopurile declarate de la nceput a fost crearea unui mod de
comunicatie care s e uor de integrat orice limbaj de programare;
aceasta a s n face uoar comunicarea s a ntre productorii de date i
aplicatiile de prelucrare a s sau prezentare a lor. Mai mult dect
asta, comunicarea a ntre aplicatii devine mult mai simpl, chiar dac
se folosesc platforme diferite. Avem aici vedere a a n nu doar
aplicatiile create cu ultimele tehnologii, ci i cele de tip motenit
s s (engl: legacy) care de cele mai multe ori folosesc protocoale i
tehnologii s proprietare, greu de extins si de interfatat. Datorit
caracterului structurat al unui document XML procesarea lui a este
mult uurat. Regulile care denesc buna formare a unui document s a
XML fac parcurgerea unui asemenea document mult mai facil dect a
unui a a document HTML, de exemplu.1.3.4Creare uoar s aPentru ca
XML s cunoasc o adoptare pe scar larg a fost nevoie de a a a a
crearea unui tip de document care s nu necesite un timp mare de
acomodare a sau de creare. Regulile care se folosesc pentru crearea
unui document XML corect sunt uor de eles; un ier continnd un
document XML se poate s nt s a scrie cu orice editor de texte
standard; din punct de vedere programatic, APIul pentru producerea
unui document XML este uor de utilizat bibliotecile s n care esc
limbajele de programare. nsot1.3.5Utilizare uoar Internet s a
nDesignerii limbajului XML l-au vzut ca un standard de
interoperabilia tate, care s poat folosit peste infrastructura de
comunicatie existent a a a (Internet). La ora actual, XML
interactioneaz mod transparent cu proa a n tocolul HTTP sau alte
protocoale majore de comunicare utilizate curent. Un alt motiv
pentru care XML este considerat prietenos fat de Internet este a
faptul c poate utilizat majoritatea limbajelor folosite dezvoltarea
de a n n aplicatii Web; pe lng suportul oferite de limbajele
server-side, amintim i a a s de AJAX - care se bazeaz pe o
comunicare cu serverul folosind JavaScript a i XML ca mod de
transmitere al mesajelor. s1.4. TEHNOLOGII INRUDITE131.3.6Modelul
semistructuratStocarea datelor este o problem rezolvat de ctre
sistemele de gestiune a a a a bazelor de date. Dar modelarea
relational a datelor impune un model rigid, a specicat apriori i
asupra cruia este greu de intervenit ulterior. XML-ul, pe s a de
alt parte, este mai adecvat utilizrii a a ntr-un mediu
descentralizat, cu surse de date multiple i cu date a cror structur
variaz. Desigur, exist trucuri s a a a a prin care un SGBD
relational suport structur variabil, dar rezolvrile nu a a a a fac
dect s simuleze abilitile intrinseci ale unui document XML. La ora
a a at actual se remarc tot mai mult folosirea unor SGBD-uri cu
suport nativ a a pentru retinerea documentelor de tip XML.
1.4Tehnologii nruditeXML vine it de o familie de standarde nsot
nrudite ce asigur o utilizare i a mai uoar contexte diferite.
Tehnologiile majore care se folosesc context s a n n XML sunt: 1.
XSL: eXtensible Style Language 2. XPath, XLink, XPointer: limbaje
de legare a XML-ului 3. DTD, XSD: scheme XML Ele vor detaliat
prezentate pe parcursul cursurilor urmtoare.O prezentare a succint
este dat cele ce urmeaz. a a n a1.4.1XSLUn document XML poate s e
preluat i transformat a s ntr-un alt continut A - e el HTML, L TEX,
RTF, alt document XML sau chiar continut binar. Aceste tipuri de
transformri se a zona a dou aplicatii: a a n a XSLT = XSL
Transformations XSL-FO = XSL Formatting Objects XSLT este un limbaj
de tip recursiv, care specic transformrile ce trea a buie aplicate
diferitelor sectini de document XML pentru a obtine alte rezul
tate. Pe lng partea de formatare vizual a datelor, XSLT poate s fac
i a a a a as schimbarea ordinii elementelor sau combinarea datelor.
Este folosit special n pentru obtinerea de documente HTML sau XML.
14CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII XMLXSL-FO este un document
care descrie layout-ul unei pagini. El specic a unde anume ntr-o
pagin se plaseaz un anumit text relatie cu alte elea a n mente de
pe pagin. De asemenea poate ataa stiluri i fonturi elementelor a s
s dintr-o pagin. Este folosit deseori pentru producerea de
documente PDF. a1.4.2XPath, XLink, XPointerXPath este folosit la
adresarea elementelor dintr-un document XML, pe baza relatiilor
ierarhice existente. Poate folosit att limbajele de proa n gramare
clasice (de exemplu pentru selectarea unor noduri care satisfac un
anumit crieriu) ct i de ctre alte tehnologii (de exemplu XSLT,
pentru a s a identicarea abloanelor). s XLink permite unui element
s devin o legtur ctre un alt document. a a a a a Mai mult, ea
permite denirea de legturi extinse (de tip bidirectional i a s ntre
mai multe documente). XPointer permite adresarea de continut din
interiorul altui document XML; astfel, se poate face referire la un
continut particular al unui document (al 4-lea element, de exemplu)
sau la un domeniu ntreg dintr-un document, fr ca aceasta s impun
modicarea intr-un fel anume al documentului aa a a ctre care se
face referire. a1.4.3DTD, XSDDTD (Document Type Denition) i XSD
(XML Schema Denition) pres cizeaz care este structura acceptat
pentru un document XML. Se specic a a a astfel ce elemente pot
aprea a ntr-un document XML i ce pot contine acess tea. timp ce un
document DTD are un format aparte, un document XSD In este de tip
XML, deci poate procesat cu unelte dedicate XML.1.5Aplicatii XML
Pentru a da o idee despre paleta larg de aplicatii care XML este
implia n cat facem o enumerare (incomplet) a principalelor directii
i implementri: a s a prezentarea ctre utilizator a continutului a
formatare de continut pentru browsere: XHTML - Extensible HTML
formatare de continut pentru browsere din mediul mobil: WML
Wireless Markup Language1.6. TIPURI DE INSTRUMENTE XML grac
vectorial: SVG a a formulare electronice: XForms reprezentarea
tipurilor de continut expresii matematice: MathML formule chimice:
CML - Chemical Markup Language notatie muzical: MusicML a
reprezentarea unor cuvinte ce sunt pronuntate: VoiceXML 15
prezentri multimedia pentru Web: SMIL - Synchronized Multia media
Integration Language componente pentru interfata grac cu
utilizatorul: XAML (Ex a tensible Application Markup Language)
stocarea documentelor de tip oce: OpenDocument folosit in OpenOce
descriere de resurse Web: difuzare de continut Web: RSS, ATOM
exprimare de ontologii: OWL - Web Ontology Language descriere
servicii Web: descriere de servicii Web: WSDL (Web Service
Description Language), DISCO descrierea modului de mpachetare a
mesajelor pentru comunicare servicii Web: SOAP - Simple Object
Access Protocol n procese de afaceri: BPEL4WS - Business Process
Execution Language for Web Services, ce denete procesele de afaceri
care s interactioneaz cu procese exterioare a1.6Tipuri de
instrumente XMLPentru a putea folosi tehnologia XML au aparut o a
ntreag coletie de a unelte i tipuri de instrumente: editoare,
parsere, vizualizatoare. s editoare - dei un document XML poate
creat folosind un editor text s standard, mod clar este util a se
considera editoare structurale, care n veric dac documentul respect
un set de canoane, precum i ofer a a a s a un suport pentru
scrierea rapid de XML. a16CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII
XMLparsere - numite i procesoare sau analizoare; sunt nite
componente care s s folosesc structura intrinsec a unui document
XML i permit operatiile a s pe elemente (gsirea unui element anume,
inserarea sau modicarea de a elemente, etc). De asemenea parserele
sunt folosite pentru a determina dac un document este bine format
(vezi sectiunea 1.9) sau valid (vezi a sectiunea 2.1). Scopul lor
este de a folosit de ctre aplicatii. a aplicatii de vizualizare -
din aceast categorie avem browserele (Firefox, a Internet Explorer)
sau aplicatiile de desenare (SVGViewer) care dau o viziune asupra
documentului XML; se bazeaz pe parsere incluse. a1.7Compozitia unui
document XML Un document XML este compus din: 1. declaratie (sau
prolog) 2. elemente 3. atribute 4. comentarii 5. referinte la
entiti at 6. sectiuni de marcare 7. instructiuni de procesare
Inainte de a trece la detalierea acestor constituenti, facem
precizarea c a limbajul XML este de tip case-sensitive; astfel, nu
este echivalent cu .1.7.1Declaratia XML Este indicat ca un document
XML s a nceap cu o declaratie XML a care specic versiunea de limbaj
XML folosit document. O asemenea a a n declaratie arat astfel: a
1.7. COMPOZITIA UNUI DOCUMENT XML 17Nu este permis omiterea
numrului de versiune, scrierea de spatiu a a ntre . Declaratia de
XML, dac este prezent, s a a trebuie s e prima entitate din
document, nu poate precedat nici mcar a a a de spatii. Drept
valoare pentru version se poate specica 1.0 sau 1.1. Documentul
trebuie s respecte intern canoanele versiunii precizate, altfel se
va declara a eroare de ctre parser i orice actiune pe document este
a s ntrerupt. a Alte pseudo-atribute1 care se pot specica pentru
acest preambul sunt: 1. encoding - specic un subset al setului de
caractere Unicode care a este folosit pentru scriere documentului.
Valorile UTF-8 i UTF-16 s sunt cele mai des alnite i suportate de
ctre toate procesoarele de nt s a XML, dar se mai pot specica i
ISO-8859-1 sau ISO-8859-2 sau altele s valide. Dac nu se specic
nici un tip de codicare, implicit se va a a considera valoarea
UTF-8. UTF-8 se va folosi un singur byte pentru In caractere ASCII
(cu numr de ordine cuprins a ntre 0 i 127), 3 octeti s pentru
seturi de caractere mai putin folosiet (silabe hangul i caractere s
Han) i 2 octeti pentru majoritatea altor caractere. s 2. standalone
- atribut optional binar (cu valorile yes i no) care spe s cic dac
acest document face referire la alte documente care contin a a
denitii ale unor alte elemente, atribute sau entiti. De exemplu,
dac at a un document XML depinde de un alt document DTD extern,
atunci se va specica valoarea no. Prin lips acest atribut va avea
valoarea a yes.1.7.2ElementeUn element este unitatea structural a
unui document XML. Datele sunt a scrise sub forma unor perechi
etichet de deschidere - etichet de a a nchidere ntre care se a text
sau alte sub-elemente. Relatia este deci de continere. a Intr-un
document XML exist un unic element care nu are nici un element a
printe, numit element rdcin. a a a a S considerm un exemplu de
document XML: a a Acestea nu sunt propriu-zis nite atribute,
deoarece declaratia de XML nu este un s element.118CAPITOLUL 1.
INTRODUCERE IN TEHNOLOGII XML Introducere Scopul cursului
Prezentare generala Definirea tipului de document Necesitatea
definirii tipului DTD Elementul cursuri denete rdcina documentului;
el contine un element s a a copil (sub-elemente) curs. Elementul
curs contine dou elemente copil a numite capitol, .a.m.d. Observm c
ecare astfel de element este denit s a a printr-o etichet de
deschidere i una de chidere care are exact acelai a s n s nume i
mod de scriere a literelor, precedat de caracterul /. s Numele unui
element poate s contin litere, cifre, minus, dou puncte, a a a
caracter de subliniere; trebuie s a nceap cu liter sau cu caracter
de sublia a niere; nu se permite s a nceap cu irul xml (indiferent
de modul de scriere a s al literelor) deoarece acest identicator
este rezervat. Intre numele propriuzis al elementului i caracterul
< nu se permite spatiu. Nu se accept spatiu s a interiorul
numelui unui element. n Continutul unui element poate s e orice ir
de caractere care respect a s a codicarea dat atributul encoding.
Dac continut avem caracterele &, a n a n atunci ei trebuie
substituiti cu referinte la entitate (vezi 1.7.5) sau cu sectiuni
CDATA (1.7.6). Eticheta de chidere trebuie s e scris cu aceleai
caractere ca i n a a s s eticheta de deschidere (XML este
case-sensitive). Eticheta de nchidere se scrie sub forma ; nu se
admite spatiu imediat nainte sau dup simbolul slash. a Un element
poate s nu contin nici un text - acest caz este un elea a n ment
gol; de exemplu, pentru situatia de mai sus putem considera c ecrui
a a capitol putem ataa optional o sectiune de exercitii; pentru
cazul care i s n nu avem o sectiune de acest tip, putem simboliza
prin: sau echivalent: 1.7. COMPOZITIA UNUI DOCUMENT XML 19Nu se
admite ca ntre simbolul / i > sau s e spatiu; ultimul s a n caz,
se poate lsa un spatiu a nainte de caracterul /. O alt regul de baz
pentru scrierea elementelor este c elementele se a a a a pot
imbrica, dar nu se pot suprapune; altfel spus, daca elementul a
contine elementul b, atunci b trebuie s se a nchid a naintea lui a.
Este permis ca s mixm textul cu alte elemente continutul altui elea
a n ment, atta timp ct regulile de mai sus nu sunt alcate: a a nc
The company is centered on... 1.7.3AtributeAtribute denite de
utilizator Un atribut permite declararea unei proprieti at mpreun
cu valoarea asoa ciat. Ele se denesc pentru elemente, doar
interiorul etichetei de deschia n dere; au forma: nume="valoare"
sau nume=valoare Spre deosebire de atributele din limbajul HTML,
valorile trebuie s e delia mitate de apostroafe sau ghilimele. Un
element poate avea oricte atribute, a dar un nume de atribut nu
poate s apar de mai multe ori cadrul aceluiai a a n s element.
Valoarea atributului trebuie precizat (chiar dac e stringul vid). a
a Plecnd de la exemplul 1.1 de la pagina 10, putem rescrie precum a
n listing-ul 1.2. Numele atributelor se d dup aceleai reguli ca la
elemente. a a s Remarcm c unele cazuri, atributele i valorile lor
pot prelua rolul elea a n s mentelor. Pe lng cele denite de
utilizator, XML pune la dispozitie a trei atria a nc bute
predenite: xml:space, xml:lang, xml:id. Atributul xml:space cazul
care exist mai multe spatii albe consecutive, acestea pot In n a
considerate redundante sau pot avea o semnicatie special i ar
trebui a s pstrate ca atare. Atributul xml:space poate avea dou
valori: default i a a s preserve.20CAPITOLUL 1. INTRODUCERE IN
TEHNOLOGII XMLTabela 1.2: Rescriere document biblioteca folosind
atribute Tabela 1.3: Includere de cod surs a public class
HelloWorld { public static void main (String[] args) {
System.out.println("Hello World"); } } 1.7. COMPOZITIA UNUI
DOCUMENT XML 21Un procesor (parser) XML pstreaz spatiile i le d mai
departe aplicatiei, a a s a indiferent de valoarea atributului
xml:space. Aplicatia este cea care va in terpreta acest atribut;
dac este default se va considera c spatiile multiple a a adiacente
nu sunt relevante i de obicei aplicatia va face colapsarea lor la
unul s singur. Pentru valoarea preserve parserul comunic faptul c
spatiile ar trea a bui pstrate, altfel spus, c spatiile sunt
semnicative. Relevanta spatiilor a a depinde de aplicatia
destinatie sine: pentru un compilator ele nu sunt im n portante,
dar au relevant pentru un editor de cod surs. Deoarece un broa a
wser colapseaz automat spatiile, atunci cnd un document XML se a a
ncarc a browser atributul xml:space va ignorat. n Elementele care
sunt descendenti ai unui element care are precizat acest atribut
vor moteni atributul cu tot cu valoare, dac nu cumva se face o s a
precizare explicit pentru un element anume. a Atributul xml:lang
Atributul xml:lang descrie limba (i optional de ara) care este
scris s t n continutul elementului. Codurile limbii sunt e pe
stringuri de 2 caractere (conform standardului ISO639) (de exemplu
en sau ro ), e cele dou a plus un calicator (en-US). Tabela 1.4:
Exemplu de specicare de limb pentru continutul elementului a This
is the color This is the colour Utilitatea acestui element apare
din faptul ca o aplicatie (de exemplu un motor de cutare) ar putea
folosi i raporta doar elementele al cror continut a s a este scris
ntr-o anumit limb, conform preferintelor utilizatorului. a a
Atributul xml:id Exist o propunere de permite specicarea unui
identicator unic pentru a ecare element. Pentru aceasta s-ar folosi
atributul xml:id, iar pe baza valorii lui s-ar putea face referinte
(din interior sau din exterior) la elemente din document. Trebuie a
inut cont de faptul c este doar o recomandare, iar la ora ns t a
actual parserele de XML nu suport toate acest atribut; altfel spus,
pua a tem scrie un document in care noduri diferite s aib aceeai
valoare pentru a a s xml:id, iar arcarea nc ntr-un browser larg
utilizat s nu duc la raportare a a de conicte.22CAPITOLUL 1.
INTRODUCERE IN TEHNOLOGII XML Tabela 1.5: Exemplu de folosire a
atributului xml:idThe given result is ...1.7.4ComentariiUn
comentariu XML este o zon ce va ignorat de ctre un procesor a a a
XML. Ea este delimitat de i se poate scrie pe mai multe linii. a s
s Comentariile se folosesc pentru scriere de documentatii sau
pentru eliminarea temporar a anumitor zone. a Tabela 1.6:
Comentariu XML n continutDeoarece comentariile nu sunt elemente,
ele pot aprea i a s nainte de deschiderea elementului rdcin, ct i
dup el. Totui nu se pot pune a a a a s a s naintea declaratiei de
XML. Un parser de XML poate s dea mai departe unei aplicatii
continutul a unui comentariu, dar nu este obligatoriu s o fac. a
a1.7.5Referinte la entiti atDup cum se vede, exist anumite
simboluri (mai mic, mai mare, apostrof, a a ghilimele) care au deja
o semnicatie cadrul unui document XML: ele sunt n folosite pentru
elemente sau valori de atribute. Dac se dorete folosirea a s
acestor simboluri continutul textual al unui element sau ca valoare
de n atribut, vor aprea erori de interpretare; spre exemplu, cnd un
procesor a a XML gsete un simbol < va considera c urmeaz o
etichet. a s a a a Ca atare, ele trebuie s e substituite i acest
lucru se face cu nite a s s referinte la entiti (aliasuri). O
astfel de referint are forma &entitate;. at a Deoarece simbolul
& este folosit pentru referinte la entitate (deci este i el s
un simbol rezervat XML), pentru gurarea lui se va folosi o alt
referint. a a Tabelul 1.7 contine referintele la entitate
predenite. Exemplul 1.8 arat a cum se folosesc cadrul unui continut
de document. n Mai mult dect att, exist posibilitatea crerii unor
componente care pot a a a a reutilizate interiorul unui document
XML. Aceste componente (numite n1.7. COMPOZITIA UNUI DOCUMENT XML
Tabela 1.7: Entitile la referint predenite at a Simbol Entitate
< < > > " ' & &23Tabela 1.8: Folosirea de
referinte la entiti at for (int i = 0; i de procesare.
Instructiunile de procesare pot avea drept efect lansarea unei
aplicatii auxiliare, care este determinat de ceea ce urmeaz imediat
dup a a a Singura combinatie care nu se poate folosi interiorul
unei instructiuni n rest pot de procesare este ?>, care semnic
sfritul instructiunii. In a as folosite orice caractere, chiar i
cele care mod normal ar produce probleme s n unui procesor de XML:
Tabela 1.11: Alt exemplu de instructiune de procesare 1.8. SPATII
DE NUME 251.8Spatii de nume Dnd posibilitatea de a crea un element
sau atribut cu orice nume, exist a a o mare ans ca acelai nume s e
folosit locuri diferite (din acelai docus a s a n s ment sau nu) cu
semnicatii diferite. Avem a posibilitatea de a deni nite ns s
spatii de nume (eng: namespaces) care s permit precizarea
contextului a a n care este folosit un anumit element sau atribut.
Exemplu: s presupunem c se concep documente XML pentru cataloage a
a de muzic; sunt dou tipuri surse de provenient a pieselor muzicale
- soliti a a a s sau grupuri, respectiv dou tipuri de creatie
muzical - respectiv cntece a a a individuale i albume; pentru
primul caz vom folosi elementul artist, iar s pentru creatie -
titlu. Problema apare dac vrem s tratm diferentiat a a a cazurile
respective, de exemplu vrem s selectm doar titlurile care apartin a
a grupurilor. Tabela 1.12: Utilizare de elemente cu spatii de nume
Compact Fata din vis Nicu Alifantis Decembrie Atributul xmlns este
folosit pentru a deni spatii de nume (grup i s solist), crora li se
ataeaz un URI. Dac URI-ul este un URL, atunci a s a a nu este
obligatoriu ca acesta s corespund unei locatii zice. a a Un astfel
de spatiu de nume poate specicat i pentru un atribut; de s
asemenea, spatiul de nume se poate deni chiar elementul pentru care
se n specic spatiul de nume, dar nu mai tarziu. a a Calicarea
numeDeSpatiu:element sau numeDeSpatiu:atribut se numete s nume
calicat (engl: Qualied Name, QName). Declaratiile de spatiu de nume
care dup xmlns urmeaz dou puncte i titlul unui spatiu de nume n a a
a s 26CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII XML Tabela 1.13:
Spatiu de nume folosit specicat pentru atribut se numesc explicite.
Un spatiu de nume poate i implicit, dac nu se specic titlul
spatiului s a a de nume. Tabela 1.14: Declaratie de spatiu de nume
implicit ... ... ... exemplul 1.14, spatiul de nume implicit este
cu adresa http://discografie.com, In denit att pentru elementul
contacte ct i pentru elementele nume i a a s s adresa. Elementul
furnizor a nu mai face parte din acelai spatiu de ns s nume.1.9Buna
formare a documentelor XMLDup cum s-a vzut pn acum, XML d
posibilitatea crerii propriului a a a a a a limbaj de structurare a
datelor; cu toat aceast exibilitate, trebuie s resa a a pectm un
set minim de reguli care asigur buna-formare a documentului. a a
Aceste reguli (de bun simt, cele din urm) permit unui procesor XML
s n a a proceseze documentul; este total opusul a ceea ce se ampl
nt a ntr-un document HTML scris cu un anumit grad de
incorectitudine, care interiorul n1.9. BUNA FORMARE A DOCUMENTELOR
XML27unui browser este completat automat pentru a putea
reprezentat. Altfel spus, un parser de XML nu are voie s aduc
corectii asupra documentelor a a XML, aa cum se ampl cazul unui
browser. s nt a n Scrierea unui parser de XML devine acest caz mult
mai uoar dect a n s a a unui parser de HTML; plus un asemenea
procesor de XML poate folosit n pe orice document care respect
regulile de bun formare. a a Pentru ecare constituent al unui
document XML regulile de scriere au fost prezentate la momentul
introducerii lor. Cele mai importante sunt: orice document trebuie
s aib un singur element rdcin a a a a a orice etichet de deschidere
trebuie s aib o a a a nchidere asociat; elea mentele goale trebuie
s aib o a a nchidere corect a elementele trebuie s e imbricate
corect a valorile atributelor se delimiteaz prin ghilimele sau
apostroafe a numele de elemente i atribute trebuie formate cu un
anumit set de s caractere Remarcm c nu se cere prezenta declaratiei
XML. Toate regulile enua a merate denesc un document ca ind bine
format - deci, de fapt, ca ind un document XML. Este destul de uor
de gsit ratiunea aceastor cerinte; de exemplu, pentru s a cea de a
doua regul (care nu este obligatorie limbajul de marcare HTML) a n
putem considera situatia: Paragraf 1 Paragraf 2 Aa cum este denit
limbajul HTML, reiese c cele dou elemente paras a a momentul aurii,
graf sunt de acelai nivel, i nu unul continut altul. In s s n s a
un browser adaug el la sfritul ecrui paragraf eticheta de a as a
nchidere . Situatia este cu totul alta ntr-un document XML.
Deoarece XML nu forteaz folosirea etichetelor dintr-o anumit
colectie, parserul va trata neu a a tru declaratia de mai sus i va
elege c al doilea paragraf este continut s nt a n primul (i asta
numai dac am i s a s nchiderile de elemente corespunztoare) a o
interpretare cu totul deosebit de cea de la HTML. a28CAPITOLUL 1.
INTRODUCERE IN TEHNOLOGII XML1.10Arborele ataat unui document XML
sModul de reprezentare a datelor ntr-un document XML element rdcin
a a a care contine elemebnte care contin la rndul lor elemente,
etc, ne duce cu a gndul la o reprezentare des alnit informatic: cea
a unui arbore, a a nt a n a crui rdcin corespunde elementului
rdcin, copii lui sunt elementele desa a a a a a a cendete ale
rdcinii, etc. De exemplu, pentru documentul XML din listingul a a
1.15 reprezentarea arborescent este cea din gura 1.10. a Tabela
1.15: Document XML Tehnologii XML Introducere Scopul cursului
Prezentare generala Definirea tipului de document Necesitatea
definirii tipului DTD 1.11Versiunea 1.1 de XMLVersiunea unui
document XML este denit de valoarea pentru atributul a version
declaratia de XML. XML 1.0 este construit pe baza standardului n
Unicode 2.0, pe cnd XML 1.1 intentioneaz s nu mai e dependent de o
a a a anume versiune de Unicode. Concret, numele de elemente sau de
atribute pot s e scrise cu caractere de alt tip dect cele bazate pe
alfabetul latin a a afar de asta, s-au mai introdus alte tipuri (de
exemplu cambodgian). In a a de caractere pentru care nu exista
suport XML 1.0; dar impactul lor este n neglijabil. Pentru moment
se recomand declararea versiunii 1.0, deoarece a sunt putine
procesoare de XML care pot accept version="1.1". a1.11. VERSIUNEA
1.1 DE XML29Figura 1.1: Arborele asociat documentului XML din
exemplul1.1530CAPITOLUL 1. INTRODUCERE IN TEHNOLOGII XMLCapitolul 2
DTD2.1 Documente valideXML este un meta-limbaj de marcare, care
vine ca un set de reguli despre cum arat un document bine format.
Aceasta d posibilitatea autorilor de a a a-i structura dup dorint
documentele. Problema apare momentul s a a n n care avem de-a face
cu mai multe surse de documente XML, dar care trebuie procesate de
o aceeai aplicatie. s Cum ne asigurm de faptul c o aplicatie va
putea elege de ecare a a nt dat documentele pe care le primete? Dac
documentul provine de la un a s a alt utilizator, cum putem s ne
asigurm c s-au folosit aceleai denumiri a a a s de etichete i
atribute, i c acestea respect un format comun pentru toat s s a a a
colectia de documente? Altfel spus: cum specicm gramatica
documentului? Exact ca i a s n limbile naturale care beneciaz de
seturi de reguli gramaticale care explic a a cum se ajunge la o
form corect de exprimare, la fel avem mecanisme a a n XML care
permit specicarea unor reguli de validitate. Acestea sunt: Document
Type Denition XML Schema Relax NG Schematron Namespace Routing
Language Namespace-based Validation Dispatching Language
3132CAPITOLUL 2. DTDToate aceste mecanisme au ceva comun: denesc
schema pentru un don cument XML; validatoarele de XML pot s
proceseze documentul a mpreun a cu aceast schem i s spun dac
documentul respect schema. a as a a a a Pe lng caracteristica de
bun formare a unui document XML (a se a a a vedea 1.9), mai adugm i
pe aceea de validitate: spunem c un document a a s a XML este valid
dac este bine format i se conformeaz unei scheme ataate. a s a s Un
set de documente valid fat de o schem poate trece mai departe la o
a a aplicatie care s fac uz de datele continute. Lipsa unor scheme
poate duce, a a n schimb, la haos i gestionare greoaie. Este
echivalentul denirii unei structuri s zice ntr-o baz de date,
structur care trebuie s e replicat a a a a ntr-un sistem de tip
distribuit. Document Type Denition (DTD) este cel mai comun mod de
denire al unei scheme. Este (cronologic) primul mod de specicare a
gramaticii pentru XML; dei are destui concurenti, este larg
folosit. s 2.2Document Type Denition - generaliti atO denitie a
tipului de document const a ntr-o serie de declaratii. Aces tea
precizeaz elementul rdcin al unui document, elementele, atributele,
a a a a precum i relatiile dintre ele. De exemplu, se poate preciza
c elementele de s a tip client trebuie s contin un atribut
idClient, trei elemente copil: nume, a a adresa de livrare, adresa
de facturare i optional elemente de observatii. s Fiecare document
XML valid trebuie s specice un document DTD fat a a de care se va
face validarea. Acest document DTD se poate specica e n interiorul
documentului XML, e exterior, folosinduse o referint. De n a cele
mai multe ori documentele DTD se scriu cu set de caractere codicate
ASCII sau UTF-8; dac se folosete o alt codicare, atunci documentul
a s a DTD ncepe cu un o declaratie asemntoare cu cea de la XML: a a
S considerm exemplul unui document XML care contine: a a Vreau o
schema! Schema o putem include ntre declaratia de XML i elementul
rdcin astfel: s a a a 2.3. DECLARATII DTD 33(schema nu este
senzitiv la modul de rupere a rndurilor, dar face distinctie a a
ntre litere mici i mari). s La fel de bine am putea salva schema
ntr-un ier separat (de exemplu s acelai director, cu numele
mySchema.dtd); acesta va contine: n s Referirea la schem s-ar face
atunci prin: a Detaliile de sintax vor lmurite sectiunile urmtoare;
tot ceea ce trea a n a buie eles acum este c am denit gramatica
documentului - acesta trebuie nt a s contin elementul rdcin
helloSchema, iar continutul acestui element a a a a a este un ir de
caractere ce va procesat de ctre parser (PCDATA provine de la s a
Parsed Character Data). Dac a ncercm s adugm un atribut la
elementul a a a a rdcin, atunci se va semnala eroare de ctre un
parser care face i validare, a a a a s deoarece acest atribut nu
este specicat schema documentului. n2.3Declaratii DTD Un document
XML cu pretentii de validitate exprimat form de a n a DTD va
include o declaratie de document dup declaratia de XML. Aceast a a
declaratie poate s includ denitia DTD, s fac referire la un
document a a a a DTD extern sau ambele. O declaratie DTD1 are
forma: Printr-o asemenea declaratie se arat c documentul XML este o
instant a a a a tipului denit de DTD. Un document XML poate s aib
doar o singur a a a declaratie DOCTYPE. Specicatorul SYSTEM se
declar atunci cnd documentul a a XML este inut undeva extern (pe
acelai site de pe care provine documentul t s XML sau un altul, sau
ntr-o locatie specicabil fat de documentul XML), a a i plus dac
este folosit interiorul unei comuniti sau grup restrns. s n a n at
a URL-ul poate s e absolut sau relativ, asa cum se exemplic
listing-ul a a n 2.1. Dac DTD-ul este specicat extern,
pseudo-atributul standalone din a declaratia documentului XML
trebuie s e prezent i s aib valoarea no. a s a aA nu se confunda
declaratia DTD cu denitia DTD i declaratia de element/atribut: s un
document XML va referi un DTD prin intermediul unei declaratii DTD,
un document sau o sectiune DTD contine declaratii care denesc
structura documentului XML. 134CAPITOLUL 2. DTD Tabela 2.1:
Declaratii de DTD extern Se poate opta pentru denirea intern a
DTD-ului, aa cum s-a exema s plicat sectinea 2.2; acest caz,
specicatorul SYSTEM i URL-ul pot n n s lipsi. Aa cum arat sintaxa
pentru declaratia XML, este chiar permis ca s s a a avem ambele
moduri de declarare: att referint extern, ct i continere a a a a s
n interior. O situatie care avem ambele declaratii simultan este
cea care exist n n a elemente comune care se vor trece subsetul
extern, pentru documente XML n nrudite i elemente specice (ce se
vor declara deci intern). De exemplu avem s rdcina contacte care a
a ntr-un caz contine nume i adresa, iar alt caz nume s n n i numar
telefon. Elementul comun (declaratia pentru nume) ar trecut s ierul
contacte.dtd, iar structura rdcinii i elementele specice (adresa, s
a a s respeciv numrul de telefon) vor declarate documentele
corespunztoare, a n a asa cum este dat listing-ul 2.2. n Indiferent
de varianta pentru care se opteaz, nu este permis ca un elea ment s
e declarat de dou ori - altfel se declar eroare de validare. a a a
Cuvntul SYSTEM din declaratia DTD poate substituit cu PUBLIC, pena
tru cazul care documentul DTD referit este disponibil public, nu
doar la n nivel de comunitate. Este cazul care asociatii mari pot
standardiza don cumentele DTD conformitate cu un domeniu de
activitate. Documentele n XML care beneciaz de DTD-uri publice pot
scrise de persoane din afara a asociatiilor respective; este de
asemenea de presupus c documentul DTD a nu va modicat ulterior,
deoarece s-ar ajunge la invalidarea documentelor XML valide pn
atunci. a a Pentru cazul unor DTD-uri publice mai trebuie precizat
i numele DTDs ului: ]> Popescu Ion Bucuresti Documentul
contacte2.xml: ]> Ionescu Maria 0799 1231234 36 nume DTD URL
DTD>CAPITOLUL 2. DTDURL DTD este acelai lucru ca cazul declarrii
DTD-ului ca ind de s n a tip SYSTEM. Nume DTD reprezint numele
public al documentului de denire a a tipului, pe care anumite
procesoare XML pot cuta l a ntr-un depozit de denitii. Numele
DTD-ului poate s contin caractere alfanumerice ASCII, a a spatii,
caractere de rnd nou i caracterele: -()+,/:=?;!*#@$ %. Exist a s a
cteva conventii care se respect pentru scrierea acestor nume.
Prexul nua a melui se formeaz astfel: a dac DTD-ul este un standard
ISO, atunci identicatorul public a ncepe cu identicatorul ISO. dac
DTD-ul este aprobat de o organizatie non-ISO, atunci numele a ncepe
cu caracterul + dac DTD-ul nu e aprobat de ctre nici o organizatie,
atunci numele a a lui ncepe cu caracterul Aceste prexe sunt urmate
de dou caractere slash (//), apoi de numele a entitii care a denit
DTD-ul, dublu slash, tipul de document pe care at l descrie, apoi
de un identicator de limb, conform standardului ISO-639. a De
exemplu, pentru un document HTML se poate s avem declaratia a DTD
astfel: ceea ce arat c este un standard care nu e a ocial acceptat
de o organizatie, a a nc este propus de ctre World Wide Web
Consortium (W3C) i se refer la doa s a cumente XHTML versiunea 1.0
(deci e de ateptat ca documentul s e de s a fapt XHTML). Tot de
aici deducem c elementul rdcin este html. a a a a2.4Comentarii DTD
nEste posibil i chiar indicat s se includ comentarii s a a ntr-un
document DTD. Acestea pot specica scopul care s-a denit documentul,
eventualele n drepturi de copiere, sau pot delimita sectiuni ale
documentului. Includerea unui comentariu se face acelai mod ca la
XML sau HTML: n s 2.5. DECLARARE DE ELEMENTE372.5Declarare de
elementeElementele denesc structura documentului XML. Pentru un DTD
ataat s unor documente valide va trebui s declarm ecare element ce
se poate a a folosi; altfel spus, tot ceea ce nu este explicit
declarat este interzis a se folosi. Pentru ecare element declarm
care sunt atributele pe care le poate avea, a sub-elementele care
compun, care este ordinea elementelor copil, de cte l a ori
trebuie/pot s apr ecare din ele. a aa Cea mai natural abordare este
pornirea de la elementul rdcin (oricum a a a a este specicat
declaratia DTD i trebuie s apar n s a a ntrun document XML) i
dezvoltarea documentului cu elemente aate tot mai adnc arbore. Se s
a n ajunge la un proces iterativ, care DTD-ul este specicat pe msur
ce n a a se adaug date la documentul XML. Mentionm c exist i
aplicatii care a a a a s pornind de la un document XML deduc
(construiesc) mod automat docun mentul DTD asociat. Forma general
de specicare a unui element este: a Declaratia este senzitiv la
tipul caracterelor. Specicatorii de element a vor prezentatti cele
ce urmeaz. Declaratia poate scris pe mai multe n a a rnduri, dar nu
poate s contin comentarii. a a a2.5.1Specicarea de continut
oarecare Cea mai permisiv declaratie DTD este aceea care spune c un
element a a poate avea orice tip de continut, e el ir de caractere,
alte elemente, sau s mixri ale acestora. Acest lucru se face prin
scrierea specificatorElement a ca ind ANY - listing-ul 2.3. Tabela
2.3: Specicare de element de tip ANY textChiar dac specicm ANY, nu
se permite s se foloseasc drept continut al a a a a lui
exempluElement un element care nu a fost declarat. Astfel, dac
pstrm a a a38CAPITOLUL 2. DTD Tabela 2.4: Eroare: includere de
element nedeclarat Document invalid DTD-ul din exemplul 2.3 i
scriem un document XML ca listing-ul 2.4, s n atunci se va raporta
o eroare de validare. Cu toate acestea, este permis a se scrie
precum listing-ul 2.5. n Tabela 2.5: Document valid Document valid
Dei ANY este un mod permis de declarare a unui element, ar trebui
evis tat folosirea lui masiv, pentru c s-ar ajunge la aberatii
semantice prin a a a includerea unor elemente ca i copii ai altor
elemente cu care nu se a s a n relatie. Este a modul care se poate
porni un document DTD, dup care ns n a se pot face ranri succesive.
a2.5.2Specicarea continutului de tip text Elementele pot contine
date dou moduri: ca valori de atribute sau n a direct ntre
elementul de deschidere i s nchidere. Pentru primul caz vom da
modul de declarare sectiunea 3.2. Pentru al doilea caz putem avea n
2.5. DECLARARE DE ELEMENTE39specificatorElement ca ind (#PCDATA)
(Parsed Character Data) - a se vedea exemplul 2.6. Tabela 2.6:
Specicare continut de tip text Document valid Dac pentru documentul
XML de mai jos s-ar folosi acelai DTD, atunci a s am avea eroare:
continutul elementului exempluElement nu poate s e un a alt
element, ci strict numai un ir de caractere: s Document invalid De
notat c specicatorul #PCDATA nu impune nici o restrictie asupra a
textului; nu avem nici un mecanism prin care s specicm c textul dat
a a a trebuie s aibe un anumit format (de exemplu dou cuvinte
separate prin a a virgul i spatiu, sau dat calendaristic formatul
zz/ll/aaaa) sau o lunas a a n gime minim/maxim admis. a a
a2.5.3Specicarea elementelor copilDe cele mai multe ori, un element
contine alte elemente. DTD permite specicarea urmtoarelor detalii
relativ la dispunerea acestor elemente: a care sunt elementele
copil ale unui element care este ordinea care apar elementele copil
n faptul c un element copil este optional sau trebuie s apar cel
putin a a a o dat sau poat s apar de oricte opri, inclusiv niciodat
a a a a a a care sunt subelementele ntre care se pot face alegeri,
la un moment dat40CAPITOLUL 2. DTDPentru cazul declarrii
elementelor copil, specificatorElement se suba stituie cu lista
elementelor copil desprtite prin virgul. Aceast list este a a a a
scris a ntre paranteze: List specic urmtoarele: a a a 1. elementul
numit parinte trebuie s contin toate elementele copil; a a 2.
ordinea elementelor copil este cea specicat - nu se admit permutri
a a ale lor. S presupunem c dorim s declarm un element numit
persoana pentru a a a a care s specicm obligatoriu numele i
prenumele, sub form de elemente a a s a ce contin text: Tabela 2.7:
Element cu dou elemente copil a Ionescu Rafael Declaratia DTD
pentru elementul persoana ar trebui s e: a unde, rete, nume i
prenume se declar ca avnd continut de tip PCDATA: s s a a
Declaratia pentru persoana va invalida un document care contine:
Rafael Ionescu Vom arta ulterior cum anume se specic o list de
elemente care pot aprea a a a a orice ordine. n S considerm c
pentru ecare persoana, mai vrem s permite adugarea a a a a a unor
elemente numite observatie, dup elementul prenume. Vom considera a
cele trei cazuri care pot aprea: a2.5. DECLARARE DE ELEMENTE 1.
avem cel mult o observatie; 2. avem cel putin o observatie; 3. avem
oricte observatii, posibil niciuna. a 41Pentru primul caz vom
specica optionalitatea sub folosind caracterul ? dup numele
elementului observatie: a acest context, sunt valide att ce s-a
scris exemplul 2.7, ct i ce este In a n a s listing-ul 2.8. n
Tabela 2.8: Includerea elementului de observatie Ionescu Rafael
glumet Pentru al doilea caz cel putin o observatie va trebui s
folosim simbolul a + dup cel al elementului observatie: a Pentru
aceast declaratie, exemplu 2.7 devine invalid, dar exemplul 2.8
este a acceptat, precum i elementul persoana din exemplul 2.9: s
Tabela 2.9: Element persoana cu mai multe observatii Ionescu Rafael
glumet optimist Pentru ultimul caz - cel care se permite precizarea
elementului observatie n de oricte ori sau omiterea lui, avem
declaratia DTD: a 42CAPITOLUL 2. DTD Aceast declaratie va valida
exemplele 2.7, 2.8, 2.9. a Se permite folosirea multiplicatorilor
?, +, * pentru mai multe elemente copil ale aceluiai element: s
Notm ca nu avem nici un mecanism prin care s limitm (ca minim sau a
a a maxim) numrul de aparitii ale unui element copil.
Multiplicatorii pot a folositi ca sux i pentru grupri date de
paranteze. De exemplu, dac vrem s a a s modelm o colectie care
ecare intrare este o pereche de elemente, vom a a n folosi
declaratia: DTD permite ca pentru un element, un copil s e o
variant din mai a a multe posibile. De exemplu, putem considera c
pentru a lua legtura cu o a a persoan, putem apela la adres de
email sau numar de telefon; dac una a a a din aceste modaliti este
specicat, ne putem declara multumiti. Alegerea at a se specic dup
schema: a a De remarcat c numai o optiune poate folosit. a a Pentru
cazul nostru avem: S considerm urmtoare declaratie DTD: a a a
Printre altele, aceasta ne permite ca s avem element persoana care
poate a avea dou elemente copil (nume i prenume) specicate orice
ordine. Dar de a s n asemenea ne permite s omitem elementul
prenume, sau s repetm oricare a a a din cele dou elemente de oricte
ori, ceea ce nu e corect. De fapt, declaratia a a de mai sus se
traduce prin: elementul persoana trebuie s contin mcar a a a un
nume sau un prenume, iar ordinea i numrul pentru mai multe astfel
de s a elemente sunt indiferente. Pentru a cere specicarea celor
dou elemente orice ordine vom folosi a n declaratia: 2.5. DECLARARE
DE ELEMENTE43Remarcm gruparea perechilor de elemente prin paranteze
- nivelul de ima bricare al elementelor prin folosire de paranteze
poate orict de mare, cu a conditia ca parantezele s se a nchid i
deschid corect. as a Solutia dat este limitat, a, deoarece dac un
element ar contine n a a ns a elemente copil, atunci declaratia DTD
ar trebui specicate toate cele n! n combinatii, ceea ce e
nepractic. Iat un exemplu mai complex folosind grupri i
multiplicatori, preluat a a s din [1]: 2.5.4Continut mixat Un
element poate s contin att text, ct i elemente. Declaratiile de a a
a a s mai sus nu sunt suciente pentru acest lucru, dar prin
combinarea unor prti a ale lor se obtine efectul dorit: Dat ind
folosirea multiplicatorului *, structura este extrem de ne adia ngr
t: elementul interior poate s lipseasc sau s apar de oricte ori,
continutul a a a a a a de tip text poate s se ae orice pozitie fat
de elementul copil, iar elea n a mentul declarat poate s e chiar
gol. De retinut a c nu putem permuta a ns a #PCDATA i
numeDeElement2 declaratia anterioar. s n a Acest tip de continut se
folosete deseori cnd se introduc elemente ce s a scot evident
anumite portiuni. De exemplu, putem avea: n a Acesta este un text
cu sublinieri si text ingrosat 2.5.5Elemente goaleExist
posibilitatea de a folosi elemente fr continut; e aceste elemente a
aa au datele continute atribute, e au rol decorativ (de exemplu
pentru n ruperea de rnduri sau introducerea unor elemente grace - a
se vedea elea mentele
i din (X)HTML). s Pentru a declara un element care nu are continut
se folosete: s44 CAPITOLUL 2. DTD2.5.6ExempluSe consider documentul
XML de mai jos: a Ionescu Rafael Este de incredere 123123 Ioana
Popescu Cumsecade Vorbeste 8 limbi straine Brasov Documentul DTD
asociat este o concentrare a tot ceea ce s-a exemplicat n
sectiunile anterioare. Vom pune deci preambulul documentului
anterior: n iar ierul contacte.dtd, aat acelai director cu
documentul XML va s n s contine: 4546CAPITOLUL 2. DTDCapitolul 3
DTD - continuare3.1 Declaratii de entiti atAa cum s-a spus partea
de prezentare a continutului unui document s n XML, avem
posibilitatea de a declara nite componente (sau entiti) care s at s
e ulterior referite. Avem astfel de entiti deja denite pentru
anumite a at simboluri: Peste tot unde apare: &semnatura;
documentul XML, parserul va intern veni i va s nlocui cu secventa
de text dintre ghilimele. O asemenea entitate intern poate s contin
chiar i elemente XML, a a a s scrise pe mai multe rnduri; resc,
trebuie ca prin includerea elementului s a a nu se afecteze
validitatea documentului XML. De exemplu, dup procesarea a
fragmentului de document: ]> Salutari si numai bine
&semnatura; va rezulta (fragment): Salutari si numai bine
Lucian Sasu Universitatea Transilvania Brasov 3.1.2Entiti externe
atO entitate extern refer o resurs ce nu este complet denit DTD. a
a a a n Forma pentru entiti externe procesabile este: at3Codul a
fost luat de pe Internet, cutnd dupa ISO entity set a a 3.1.
DECLARATII DE ENTITATI 49Cuvntul SYSTEM poate a nlocuit cu PUBLIC.
URI denete locatia resursei, s iar aceasta se presupune a o
colectie de elemente prin a crei includere nu a se va afecta
validitatea documentului XML. S presupunem de exemplu c a a avem un
ier numit contact.txt continnd: s a Lucian Sasu Universitatea
Transilvania Brasov Notm c acesta nu este un document XML (nu are
element rdcin). Dea a a a a clararea unei entiti care s indice spre
aceast resurs, precum i utilizarea at a a a s 4 ei se poate face
prin : ]> Salutari si numai bine &semnatura; Documentul XML
arcat Internet Explorer5 este (fragment): nc n Salutari si numai
bine Lucian Sasu Universitatea Transilvania Brasov O entitate
extern procesabil poate s e chiar un document XML, dar nu a a a are
voie s posede o denitie de tip de document; validarea ei se va face
la a includere documentul care refer, pe baza DTD-ului
referentului. n l a sfrit, putem declara o entitate extern care nu
este compatibil cu In a s a a continutul unui document XML.
Exemplul clasic este cel al declarrii unei a resurse de tip imagine
care va ulterior referit: a Trebuie spus c documentul XML obtinut
nu este valid dac nu se face declararea a a celor dou elemente aate
ierul contact.txt. a n s 5 Parserul folosit de ctre Mozilla Firefox
versiunea 2 nu face arcarea entitilor a nc at externe.450CAPITOLUL
3. DTD - CONTINUAREEvident, arcarea unui ier binar de tip gif ar
distruge orice pretentie de nc s bun formare a doucmentului XML,
motiv pentru care orice parser va lsa a a aplicatia de care a fost
apelat s proceseze corespunztor resursa. Specica a a torul NDATA
arat c resursa declarat nu este compatibil XML, iar gif din a a a a
nalul declaratiei va precizat ulterior ntr-o declaratie de tip
NOTATION (a se vedea sectiunea 3.2.3). 3.23.2.1Declarare de
atributeGeneraliti atElementele pot contine date sub forma
valorilor de atribute. Pentru e care element ce suport atribute se
poate specica DTD lista numelor a n atributelor i pentru ecare
atribut, tipul valorii i eventuala valoare implis s cit. Declaratia
DTD pentru un atribut este: a unde numeElement determin elementul
pentru care se denete atributul, a s numeAtribut este numele
atributului ce se denete, tipAtribut reprezint s a tipul de date al
atributului, iar optiune specic ce se ampl dac vrem s a nt a a a
omitem atributul din element.Vom considera exemplele imediat
urmtoare n a c optiunea este atribuirea unei valori implicite, deci
optiune se a nlocuiete s cu valoarea implicit, delimitat de
ghilimele sau apostroafe. a a Pentru cazul care un element are mai
multe atribute, atunci e se n va scrie cte o declaratie DTD pentru
ecare atribut, e se combin a a ntr-o singur declaratie ATTLIST.
Exemplu: dac considerm documentul XML: a a a atunci o variant de
document DTD asociat este: a EMPTY> nume CDATA "nume
nespecificat"> prenume CDATA "prenume nespecificat">Pentru
moment, precizm doar c CDATA arat c atributul poate s e un ir a a a
a a s de caractere, ce nu se pot intepreta ca elemente de marcare;
lista complet a a3.2. DECLARARE DE ATRIBUTE51posibilitilor este dat
sectiunea 3.2.3. Aa cum am mentionat, cele dou at a n s a
declaratii ATTLIST se pot scrie astfel: Spre deosebire de
declaratiile pentru sub-elemente, atributele nu sunt obli gatoriu s
apar ordinea specicat. a a n a Aceste atribute cu valori implicite
sunt des folosite XHTML. De exemn plu, pentru un tabel se poate
prevedea faptul c marginea are grosimea 0, a iar distanta ntre
celule este nul. a3.2.2Atribute fr valori implicite a aDTD-ul
anterior are o problem: ne permite s introducem elemente a a
persoana pentru care s nu specicm numele sau prenumele. functie de
a a In natura aplicatiei creia sunt destinate datele, acest lucru
poate acceptabil a i functie de atitudinea noastr fat de acest
aspect, putem apela la sau nu. In a a una din urmtoarele
posibiliti: a at 1. #REQUIRED 2. #IMPLIED 3. #FIXED Unul din cei
trei specicatori se va situa locul valorii implicite. n
Specicatorul #REQUIRED Pentru cazul care vrem s cerem specicarea
unei valori a atributului. n a Nu se admite astfel nici o valoare
implicit. Pentru cazul care dorim a n s specicm c att numele ct i
prenumele din exemplul anterior sunt a a a a a s mandatorii, vom
scrie: Solicitm astfel celui care creeaz documentele XML s dea o
informatie a a a minim. Mai trebuie s sperm c aceast valoare de
atribut este i adecvat a a a a a s a din punct de vedere
semantic.52 Specicatorul #IMPLIEDCAPITOLUL 3. DTD - CONTINUAREExist
cazuri care am vrea ca un anumit atribut s e prezent; dar a n a dac
nu este precizat, atunci nu avem cum s furnizm o valoare implicit a
a a a care s e bun pentru toate cazurile. Pentru aceasta se
folosete cuvntul a a s a #IMPLIED. S presupunem de exemplu c pentru
o persoan vrem s permitem spea a a a cicarea sub forma unui atribut
a unei adrese de email pentru contact. In acest caz vom specica
atributul astfel: Specicatorul #FIXED alte situatii se cere ca un
atribut, dac este prezent, s nu poat avea In a a a o alt valoare
dect una aprioric specicat. Sintaxa general este: a a a a De
exemplu, s presupunem c pentru ecare judet avem un document a a XML
cu contacte; pentru elementul rdcin vom avea un atribut numit a a a
judet care s e xat, functie de provenienta documentului. Pentru
Braov a n s am avea: Aceasta va permite scrierea de elemente
precum: ... sau ... dar nu si: ... sau ... 3.2. DECLARARE DE
ATRIBUTE533.2.3Tipuri de date pentru atributePentru atribute, putem
apela la o palet de tipuri de date mult mai boa gat dect cazul
elementelor. Sunt 10 tipuri de date care se pot specica a a n
pentru un atribut: CDATA, NMTOKEN, NMTOKENS, ID, IDREF, IDREFS,
enumerare, ENTITY, ENTITIES, NOTATION. Tipul CDATA De departe cel
mai popular (i permisiv) tip de atribut, tipul CDATA (chas racter
data) este precizat pentru cazul in care valorile pot orice
caractere, mai putin semnele de mai mic, ampersand i simbolurile
folosite pentru deli s mitarea valorii acelui atribut. Aceste
caractere se vor scrie folosind entitile at la referint predenite
(a se vedea sectiunea 1.7.5). a Tipul NMTOKEN Tipul NMTOKEN (name
token) restrictioneaz valoarea unui atribut: aceasta a trebuie s
respecte urmtoarele: contine doar cifre, litere, caracterul minus,
a a caracterul de subliniere, punct, dou puncte. Principala
restrictie resimtit a a este c nu pot contine spatiu. a Exemplu:
pentru declaratia urmtorul element este valid: a pe cnd: a nu e
acceptat. a Tipul NMTOKENS Pentru a accepta drept valoare de
atribut mai multe valori de tip NMTOKEN separate prin spatii s-a
introdus tipul NMTOKENS. Astfel, exemplul anterior este valid dac
tipul pentru atribut este NMTOKENS. a54 Tipul IDCAPITOLUL 3. DTD -
CONTINUAREUn atribut declarat de tip ID va trebui s aibe o valoare
unic acel a a n document. Valoarea pentru un asemenea atribut
trebuie s a nceap cu liter a a sau caracter de subliniere i poate
contine litere, caractere de subliniere i s s cifre. De cele mai
multe ori pentru un astfel de atribut se specic #REQUIRED, a
niciodat #FIXED. a Tipul IDREF Valoarea unui atribut declarat de
tip IDREF este un ID care se regete as s acelai document. Este des
folosit pentru a simboliza legtura de la copii n s a a la printi.
Exemplicm aceasta prin modelarea listei de personal dintr-o a a
fabric, care orice angajat (cu exceptia unora, e) este subordonat
unui a n s unic angajat. Vom conveni ca pentru cei care nu sunt
subordonati nimnui a s modelm ca ind proprii lor e. a i a s ]>
Am modelat astfel o relatie de tip multi la unu. Mai adugm c
situatia a a a celor care nu sunt subordonati nimnui poate
reprezentat i altfel: se cere a as ca atributul idRef de tip IDREF
s e nu #REQUIRED, ci #IMPLIED; acest a n caz ei cei mari nu vor
avea atributul idSef. s Tipul IDREFS Pentru cazul care valoarea
unui atribut poate s contin mai multe n a a valori de tip ID
separate prin spatii. Pentru exemplul precedent, putem vedea
relatia invers: un angajat are un atribut cu valorile continnd
identicatorii a3.2. DECLARARE DE ATRIBUTE55celor pe care are ca
subordonati directi. Atunci documentul de mai sus i s-ar putea
rescrie astfel: ]> Am modelat deci o relatie de tip
unu-la-multi. De asemenea acest tip ne permite s modelm relatii de
tip multi la a a multi. Exemplicm mai jos pentru cazul relatiei
dintre entitile crti i a at a s autori: o carte poate scris de mai
multi autori, un autor poate s scrie a a mai multe crti. a ]>
56CAPITOLUL 3. DTD - CONTINUARE Tipul enumerare Exist situatii care
vrem ca valorile unui atribut s e alese dintr-o list a n a a
prestabilit. DTD d posibilitatea enumerrii valorilor eligibile, din
care se a a a poate specica doar una. Formatul general este:
Exemplu: .... pentru care declaratia DTD ar : Tipul ENTITY Pentru
atribute putem da valori specicate ca entiti. S reconsiderm at a a
declaratia de entitate extern: a acest context putem cere unui
atribut s aib drept valoare o entitate In a a declarat: a i atunci
e valid a se specica: s Parserul va nlocui logo cu calea denit
anterior pentru entitate. Este a responsabilitatea aplicatiei care
preia rezultatul parsrii s manipuleze a a n mod adecvat ierul
images/logo.gif. Modul de manipularea tipului de s entitate (gif,
precizat nalul declaratiei de entitate) trebuie s e precizat n a
ntr-o declaratie DTD de tip NOTATION - a se vedea prezentarea
dedicat. a3.2. DECLARARE DE ATRIBUTE Tipul ENTITIES57Un atribut de
tip ENTITIES poate avea drept continut mai multe valori ENTITY
separate prin spatii. Exemplu: vom construi un document XML pentru
modelarea unui album de fotograi: DTD-ul asociat ar putea
(fragment): Ca i pentru tipul ENTITY, trebuie precizat prin
declaratie de tip NOTATION s formatul datelor de tip gif. Tipul
NOTATION Pentru cazul care documentul XML refer entiti externe
incompatin a at bile cu canoanele formatului XML, ar de dorit s se
precizeze aplicatiei care a apeleaz parserul cum anume vor
procesate entitile. Aceasta se poate a at face de exemplu prin
precizarea tipului resursei (majoritatea browserelor tiu s s
manipuleze continut de tip jpg, gif, pdf) sau prin precizarea
aplicatiei care a se va folosi pentru procesarea lor. Forma general
este: a unde numeTip apare nalul unei declaratii de tip ENTITY
pentru entiti n at externe neprocesabile, iar idExtern d o
indicatie despre modul de procesare a al entitii. Exemplu: at unde
image/gif reprezint descriere MIME standard. a Se poate folosi
identicatorul PUBLIC loc de SYSTEM (discutia ind n asemntoare cu
cea de la referirea la un DTD extern); astfel, putem avea: a
a58CAPITOLUL 3. DTD - CONTINUARECapitolul 4 XPath4.1 Prezentare
general aXPath (XML Path Language) este un limbaj utilizat epntru
adresarea portiunilor unui document XML sau pentru efectuarea de
calcule pe baza continutului XML. Ca functionalitate este asemntor
cu instructiunea a a SELECT din limbajul SQL. Dup cum se va vedea,
limbajul nu este de tip a XML i se bazeaz pe structura de arbore a
documentului (a se vedea arbos a rele din gura 4.1 asociat
documentului XML din listing-ul 4.1). Acest arbore este format din
noduri, care includ: comentarii, instuctiuni de procesare, sectiuni
CDATA, elemente, atribute, chiar i declaratia de XML. s Avem un nod
rdcin a a a naintea oricrui continut al documentului; plecnd a a de
la acest nod se poate regsi orice nod sau grup de noduri, pe baza
caraca terizrii lor. Selectarea nodurilor se face pe baza unor
expresii de localizare. a Mai general, se pot deni expresii care s
e evaluate de XPath. a XPath are dou utilizri majore: regsirea
nodurilor (ulterior acestea vor a a a procesate afara XML-ului, de
ctre cod scris n a ntr-un limbaj de programare oarecare) i ca
auxiliar pentru XSLT unde precizeaz abloanele i s as s permite
adresarea diferitelor prti dintr-un nod. a Exist dou versiuni de
XPath: 1.0 publicat ca recomandare W3C a a n noiembrie 1999 i
versiunea 2.0 dat tot ca recomandare 23 ianuarie 2007. s n Un
exemplu simplu de expresie XPath pentru listingul anterior este:
/curs/capitol/nume care va returna o colectie format din dou
noduri: a a Introducere Definirea tipului de document 5960CAPITOLUL
4. XPATHTabela 4.1: Document XML Brasov engleza franceza
Programarea extrema 2 Brasov franceza germana Arhitectura 3 4.1.
PREZENTARE GENERALA61Figura 4.1: Arborele XPath pentru documentul
din listing-ul 4.1.62CAPITOLUL 4. XPATH4.2Modelul de date XPath
1.0XPath const dintr-o serii de expresii care sunt evaluate; dup
evaluare a a trebuie s se returneze un rezultat de un anumit tip,
specic XPath. Exist a a 4 tipuri de date denite pentru versiunea
1.0 de XPath: numeric ir de caractere s logic set de
noduri4.2.1Tipul numericExemplu: expresia /studenti/student[2] care
se refer la al doilea elea ment student aat sub rdcin folosete
expresia XPath 2 pentru precizaa a a s rea numrului de ordine.
Aceast expresie se evalueaz la valoarea continut. a a a a Un tip
numeric reprezint numere virgul mobil, conform standara n a a dului
IEEE 754; ca atare poate reprezenta numere ntregi i rationale, NaN
s (Not-a-Number), , 0. Nu se poate folosi notatia tiintic, deci
2.0E +3 s a nu este recunoscut ca 2000. Numerele pot folosite ca
argument pentru functii matematice predenite XPath sau combinatii
cu operatori ma n n tematici.4.2.2Tipul ir de caractere sEste un
alt tip de dat, prin care se reprezint orice ir de zero sau mai a a
s multe caractere Unicode. Un astfel de ir de caractere se
delimiteaz prin s a apostroafe sau ghilimele. Exemplu: pentru a
determina toti studentii care sunt din Brasov vom folosi:
/studenti/student[adresa="Brasov"] Aici am folosit tipul ir de
caractere pentru a specica literalul Brasov. s Pentru cazul care se
folosesc interiorul irului de caractere delimitaton n s rii de ir,
se pot substitui cu referintele la entiti predenite introduse s at
n sectiunea 1.7.5. 4.3. NODURI - CARACTERISTICI634.2.3Tipul
logicExpresiile pot contine conditii care sunt evaluate la
true/false, de tip boolean; de exemplu, pentru ecare element
student din documentul XML dat expresia logic adresa="Brasov" are
valoarea true. a4.2.4Tipul set de noduriSeturile de noduri
reprezint punctul de interes major XPath. O exprea n sie XPath
poate evaluat la o multine ce contine 0, 1 sau mai multe noduri; a
procesarea acestei colectii poate fcut apoi dintr-un alt limbaj.
Putem a a folosi expresii care se evalueaz la setul tuturor
nodurilor de un anumit tip, a sau un set de noduri poate s rezulte
urma unei operattii de ltrare. De a n exemplu expresia //hobby va
produce o list de dou hobby-uri declarate. a a4.3Noduri -
caracteristiciFiecare nod din document are proprietile: nume,
ordine document, at n relatia de familie cu alte noduri i valoarea
de string. s4.3.1Numele noduluiCele mai multe noduri (dar nu toate)
au nume. Exist trei feluri de nume: a numele calicat: este de fapt
QName, sau Qualied Name aa cum s e denit sectiunea 1.8 - numele
elementului eventual prexat de n numele de spatiu; de exemplu
contracte:persoana, unde contracte reprezint un spatiu de nume. a
numele local este numele calicat fr prexul dat de spatiul de nume;
aa pentru exemplul anterior este persoana. numele expandat - dac
nodul este asociat cu un spatiu de nume, atunci a numele expandat
este o pereche, constnd din URI-ul ataat spatiului a s de nume i
numele local al nodului. s4.3.2Ordinea documentuluiNodurile din
document au o pozitie relativ fat de altele. De exemplu a a
elementu rdcin este a a a naintea elementelor copil. ce priveste
atributele, In se specic faptul c ele sunt a a naintea elementelor
copil continute. Datorit a a faptului c atributele pot permutate
(chiar prezenta unui DTD), nu ns a n 64CAPITOLUL 4. XPATHexist nici
o ordine presatbilit a acestora, ordinea de raportare depinznd a a
a de implementarea aplicatiei XPath. 4.3.3Relatia de familie cu
alte noduri Pe lng ordinea dat de document avem relatii complexe a
a a ntre noduri: unele noduri sunt copii ai altor noduri, altii
sunt vzuti ca frati, sau ca a strmoi - toate derivnd din
structurarea documentului. a s a4.3.4Valoarea de string a unui
nodOrice nod are i un text asociat; de exemplu, textul unui nod de
tip s comentariu este ceea ce urmeaz dup . s s Nu au nici un fel de
nume. Aducerea tuturor comentariilor din document, indiferent de
nivelul la care se a se face cu //comment(). a4.4.6Nod textXPath
aloc noduri continutului de tip text al elementelor. De exemplu, a
pentru primul element adresa din listing-ul 4.1 avem un nod text:
Brasov. Dac elementul contine sub-elemente, instructiuni de
procesare sau comena tarii atunci pot rezulta mai multe elemente
text pentru un singur element. De exemplu, dac avem: a text 1
text 2 atunci vor rezulta dou noduri text continnd text1 i text2.
Multimea a a s nodurilor text din document se obtine cu: //text().
Un nod text nu are nume local, QName sau nume expandat. Valoarea
lui string este irul de caractere continut. s 4.4.7Nod spatiu de
nume Nodurile spatii de nume nu sunt direct vizibile precum
nodurile ante rioare. Fiecare element are un set de spatii de nume,
cte unul pentru ecare a prex de spatiu de nume care este accesibil
elementului. Chiar i pentru ele s mentele pentru care nu se
folosete un spatiu de nume avem implicit declarat s xml, conform
XML Namespaces Recommendation. Un element are cte un a nod spatiu
de nume pentru: 1. ecare atribut care declar un spatiu de nume a
Dar se pot folosi functii care lucreaz pe iruri de caractere pentru
a face parsarea a s irului s14.4. TIPURI DE NODURI672. ecare
atribut al unui element contintor al crui nume a a ncepe cu xmlns:
3. ecare atribut numit xmlns denit pentru element sau un element
printe a Exemplu: Prexul xsl este asociat cu URI-ul
http://www.w3.org/1999/XSL/Transform i orice element care are
prexul xsl va avea un nod spatiu de nume cu vas loarea
http://www.w3.org/1999/XSL/Transform. Avem i spatiul de nume s
implicit cu URI-ul http://www.w3.org/1999/xhtml care se folosete
pentru s sfrit, mai avem un spatiu de nume, orice element care nu
are prex. In a s anume cel implicit din XML care afecteaz toate
elementele; acesta are URIa ul
http://www.w3.org/XML/1998/namespace. Numele local al unui nod
spatiu de nume este prexul su (posibil vid). a URI-ul spatiului de
nume pentru un nod spatiu de nume este ntotdeauna vid.68CAPITOLUL
4. XPATH4.54.5.1Expresii de localizareExemplicareExpresiile de
localizare reprezint partea de interes maxim din XPath. Pe a baza
lor se pot selecta diferite continuturi din document (noduri,
elemente, comentarii, etc). De exemplu, pentru a determina adresa
primului student din documentul XML dat listing-ul 4.1 se poate
folosi expresia XPath: n /studenti/student[1]/adresa/text() sau
echivalent /child::studenti/child::student[position()=1]/child::
adresa/child::text() Interpretarea primei ci de mai sus este
urmtoarea: a a se pornete de la nodul rdcin XML; acesta nu are
nume, se res a a a fer prin / i are drept descendenti toate
nodurile din document: a s declaratia de XML, instrunctiunea de
procesare, etc, aa cum se vede s gura 4.1; n se coboar elementul
studenti aat sub rdcin; a n a a a din acest element se coboar la
nivelul urmtor, de unde se alege primul a a copil de tip element,
numit student; din acest element se caut elementul copil numit
adresa; a din nodul de adresa se preia continutul de tip text. Alte
exemple: Expresie XPath /studenti /studenti/student //limba straina
//@nivelRezultat selecteaz elementul rdcin a a a a selecteaz cele
dou elemente student a a toate elementele de tip limba straina,
indiferent unde se a a toate atributele nivel, indiferent unde sunt
precizate4.5. EXPRESII DE LOCALIZARE694.5.2Structura unei expresii
de localizareO expresie de localizare este format din pai (mai sus:
studenti, stua s dent[1], etc); ecare pas are forma general: a axa
:: test-nod [predicat1][predicat2]... De exemplu, pentru
child::student[position()=1] axa este child, testul de nod este
student iar predicatul este position()=1. O expresie de localizare
poate pleca de la nodul rdcin, iar acest caz a a a n calea ncepe cu
/ sau // i spunem c avem de-a face cu o cale absolut. s a a Dac nu
se a ncepe cu aceste caractere atunci avem de-a face cu o cale
relativ, a care pleac de la nodul curent - numit nod context. Dup
cum se observ, a a a am folosit ca separator de pai caracterul /,
care leag un printe de nodul s a a continut; se mai poate folosi //
care se refer att la descendeti directi, a a ct i la cei indirecti.
a s 4.5.3Axe XPathExist 13 axe XPath 1.0: a n 1. axa ancestor este
referint la toti ascendentii unui nod. Aceti ascendeti a s pornesc
de la printe i includ i nodul rdcin; aduce tipurile de noa s s a a
a duri: rdcin, elemente; a a a 2. axa ancestor-or-self este
referint la colectia format din nodul cona a text i toti ascendetii
si; aduce tipurile de noduri: rdcin, elemente. s a a a a 3. axa
attribute refer lista atributelor unui element; aduce doar noduri a
de tip atribut; 4. axa child reprezint lista tuturor elementelor
copil; este axa implicit; a a va aduce noduri de tip: elemente,
comentarii, PI-uri, text 5. axa descendant d acces la lista tuturor
descendetilor (directi sau a indirecti); aduce tipuri de nod:
elemente, comentarii, PI-uri, noduri text 6. axa descendant-or-self
reprezinta lista format din nodul curent a precum i descendetii de
orice nivel ai nodului curent; aduce tipurile de s noduri: orice
afar de atribute i spatii de nume. n a s 7. axa following reprezint
toate nodurile din document care apar dup a a nodul context; aduce
tipurile de nod: orice afar de rdcin, atrin a a a a bute sau spatii
de nume 70CAPITOLUL 4. XPATH 8. axa following-sibling d acces la
lista urmtoarelor noduri frate, a a adic noduri aate la acelai i cu
acelai printe nivel cu contextul a s s s a curent, care urmeaz
ordinea de document; tipurile de nod aduse i a n sunt: orice afar
de rdcin, atribute sau spatii de nume; n a a a a 9. axa namespace d
nodurile spatii de nume pentru nodul context; aduce a doar noduri
de tip spatiu de nume; 10. axa parent d nodul printe pentru nodul
context; tipurile de nod a a aduse sunt: rdcin, elemente a a a 11.
axa preceding d toate nodurile care preced pe cel curent; aduce a l
a tipurile de nod: orice afar de rdcin, atribute sau spatii de
nume; n a a a a 12. axa preceding-sibling d nodurile frate pentru
nodul curent i care a s l preced; tipurile de nod aduse sunt: orice
afar de rdcin, atribute, n a a a a sau spatii de nume; 13. axa self
este referint ctre nodul curent a a Fiecare pas dintr-o expresie de
localizare trebuie s specice o ax; prin a a lips, aceasta se
consider a axa child. a a Pentru aceste axe se pot folosi
prescurtri, care duc la exprimri cu mult a a mai compacte - vezi
tabelul 4.2. Axa child::numeCopil parent::node() self:: attribute::
Prescurtare numeCopil .. . @Tabela 4.2: Prescurtri pentru axe a
Referirea se poate face relativ la: nodul rdcin, dac expresia XPath
a a a a ncepe cu / nodul curent, dac se a ncepe cu altceva dect / a
Atunci cnd / (un caracter) se folosete ca separator de pai este
folosit a s s a legtura printe-u; astfel, studenti/student se refer
la descendentul dia a a rect student al nodului studenti. Dac se
folosete // ca separator, (stua s denti//student) atunci se refer
la orice descendent student al lui studenti, a indiferent c este
descendent direct sau tranzitiv. a4.5. EXPRESII DE
LOCALIZARE714.5.4Teste pentru noduriO ax specic directia care va
face cutarea. Suplimentar se poate a a n a preciza care noduri
trebuie s e selectate. Un rol special are *, care a l reprezint un
substituent pentru orice nume de element sau atribut. Specia carea
nodului se face prin: nume i are ca efect specicarea elementului
sau al atributului cu acel s nume; e.g. student specic selectarea
elemntelor ; respeca tiv, @nivel specic selectarea unui set de
atribute cu numele nivel a (de cele mai multe ori se refer la un
atribut din contextul curent; dar a poate s reprezinte i un grup de
atribute) a s comment() este folosit pentru obtinerea nodurilor de
tip comentariu node() d lista tuturor nodurilor a
processing-instruction() selecteaz instructiunile de procesare a
text() selecteaz nodurile text a4.5.5Predicate XPathUn predicat
permite ltrarea nodurilor care se returneaz de ctre o exa a presie
de localizare. Un predicat se include ntre paranteze drepte c si
reprezint o expresie logic a crui evaluare decide dac se va returna
nodul dat a a a a de expresie sau nu. De exemplu, dac dorim s
returnm toate elementele student pentru a a a care elementul adresa
are continutul text Brasov, vom folosi:
/studenti/student[adresa=Brasov] care folosind axele se scrie
echivalent: /child::studenti/child::student[child::adresa=Brasov]
iar pentru detectarea limbilor strine cunoscute de ctre toti cei
care se nua a mesc Popescu se folosete: s
/studenti/student[@nume="Popescu"]/limba_straina Pe lng
posibilitatea de a compara continutul unor elemente sau atribute a
a cu iruri de caractere sau continutul altor noduri, este posibil s
folosim s a functii XPath; de exermplu, pentru selectarea primei
limbi strine pentru cel a de-al doilea student se poate
folosi:72CAPITOLUL 4.
XPATH/studenti/student[position()=2]/limba_straina[position()=1]
formul care se poate scrie ca a
/studenti/student[2]/limba_straina[1] O list a functiilor
disponibile XPath 1.0 va dat a n a ntr-o sectine viitoare. Pentru
cazul care se dorete precizarea mai multor predicate, acest n s
lucru se poate face prin scrierea lor unul dup cellalt. De exemplu,
dac a a a ne intereseaz toti studentii care tiu limba german la
nivel bine putem a s a scrie:
/studenti/student[limba_straina/text()=germana][limba_straina/
@nivel=bine] Acelai efect se obtine prin unirea predicatelor
folosind operatorul and: s
/studenti/student[limba_straina/text()=germana and limba_straina/
@nivel=bine] Se pot combina cile de localizare folosind caracterul
| (pipe). Rezultatul a este reuniunea nodurilor care satisfac
oricare din ci. Se pot conecta oricte a a ci, iar evaluarea uneia
nu afecteaz niciun fel evaluarea celorlalte. a a n Este de asemenea
permis imbricarea predicatelor. De exemplu, putem a selecta toate
elementele student care au element hobby pentru care exist un a
frate precedent numit adresa:
/studenti/student[hobby[preceding-sibling::adresa]]Capitolul 5
XPath (continuare)5.1 Functii i operatori XPath sReamintim c exist
4 tipuri de date XPath 1.0: a a n numeric ir de caractere s logic
set de noduri Pentru ecare exist un set de operatori i functii
dedicate. Vom considera a s cele ce urmeaz urmtorul document XML: n
a a Popescu Rafael Ionescu Maria 7374CAPITOLUL 5. XPATH
(CONTINUARE)5.1.1 != < >=Operatori i functii pentru tipul
boolean s Operatorii logici booleeni sunt:avnd semnicatiile
cunoscute. De exemplu, dac dorim s selectm studentii a a a a care
au luat cel putin nota 9 la examen, vom folosi:
/studenti/student[examen/@nota>=9] Functiile booleene sunt:
boolean() care convertete argumentul la o valoare boolean; astfel s
a avem cazurile: 1. dac parametrul este de tip boolean atunci se
returneaz exact a a valoarea lui 2. dac parametrul este de tip
numeric, atunci dac numrul este 0 a a a atunci se returneaz false,
altfel pentru numr nenul true a a 3. dac parametrul este de tip ir
de caractere, atunci dac este irul a s a s vid se returneaz false,
altfel true a 4. dac parametrul este de tip set de noduri atunci se
returneaz a a false dac setul este vid, true altfel. a true(),
false() sunt functii care nu primesc parametru i returneaz s a
valorile de adevr omonime. Sunt folosite de exemplu XSLT, unde a n
valorile returnate pot date unor variabile lang() returneaz true
dac valoarea atributului xml:lang pentru a a elementul curent este
setat la parametrul trimis functiei. a not() este folosit pentru a
produce negarea parametrului de tip boolean transmis functiei. 5.1.
FUNCTII SI OPERATORI XPATH 755.1.2Operatori i functii pentru tipul
numeric s Exist urmtorii operatori care se pot folosi pentru tipul
numeric: a a + pentru adunare - pentru scdere a * pentru nmultire
div pentru artire mp mod pentru restul artirii mp ntregi Functiile
care lucreaz cu numere sunt: a floor() - d partea a ntreag
inferioar a unui numr; de exemplu a a a floor(3.14)=3,
floor(-3.14)=-4; ceiling() - d partea a ntreag superioar a unui
numr; de exema a a plu, ceiling(3.14) este 4, ceiling(-3.14)=-3;
pentru a obtine lista studentilor care au luat note cu valori
ntregi la examen se poate folosi:
/studenti/student[floor(examen/@nota)=ceiling(examen/@nota)]
round() rotunjete nota la cel mai apropiat s ntreg; e.g. round(3.1)
produce 3, round(3.5)=4, round(-3.1)=-3 sum() determin suma
numerelor care sunt date ca argument; de exema plu, suma notelor
obtinute la examene este: sum(/studenti/student/examen/@nota)
number() produce o valoare numeric pentru argumentul care i se d; a
a number(3.14) va produce numrul 3.14. a5.1.3Functii pentru tipul
ir de caractere sXPath 1.0 nu are operatori care s functioneze cu
iruri de caractere, dar a s posed functii: a concat(string string1,
string string2, ...) este folosit pena tru concatenarea irurilor de
caractere transmise ca parametri. De s exemplu pentru concatenarea
numelui i prenumelui celui de al doilea s student, cu spatiu
desprtitor vom folosi: a76CAPITOLUL 5. XPATH (CONTINUARE)
concat(/studenti/student[2]/nume, " ",
/studenti/student[2]/prenume) contains(string string1, string
string2) - returneaz true dac a a string1 contine string2; de
exemplu, pentru a gsi studentii al cror a a nume contine particula
escu putem folosi: /studenti/student[contains(nume, "escu")]
normalize-space(string string1) - aplicat unui string va duce la: a
eliminarea spatiilor de nceput i de sfrit, colapsarea mai multor s
as spatii a