curs nou xml

Upload: rozalia-lorincz

Post on 15-Jul-2015

205 views

Category:

Documents


1 download

TRANSCRIPT

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