sabin buraga: 'tehnologii xml

416
Sabin Buraga Tehnologii XML

Upload: sabin-buraga

Post on 13-May-2015

1.177 views

Category:

Technology


21 download

DESCRIPTION

Varianta electronică a volumului "Tehnologii Web" de Sabin Buraga (416 pagini, ISBN 973-46-0249-7) prezentând cele mai importante tendințe în utilizarea, proiectarea, procesarea și conceptualizarea datelor prin suita de tehnologii XML (Extensible Markup Language). Subiectele atinse includ diverse aspecte ale familiei XML și soluțiile pentru modelarea și stocarea conținutului semi-structurat. Alte detalii la http://profs.info.uaic.ro/~busaco/books/xml/

TRANSCRIPT

Page 1: Sabin Buraga: 'Tehnologii XML

Sabin Buraga

Tehnologii XML

Page 2: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 2

Seria Web ���� ��������� �� �� �� � ���� �������� �� ������� ��� �� ���� ��� ���� ����� ��

Sabin Buraga ���� ������ ������ � ������� �� ������� �� �� ���� ��� ���� ���� � ��� � � �� � ������ ������ ��� �!�"����� #���� ������ � #���� �������� ��� ��- -��������� � �$����� �� ���������� %��� ����� � &��� ��� �'"����"� �(�� ��� ������ � $��(�� �)**+ , ����� ������� -� � ���� � �� � ��� �� ��� ����disponibile pe Web la adresa http://www.infoiasi.ro/~busaco. La Editura Polirom a mai publicat: ������� �� �������� � ������ �� ����������� (în colaborare, 2001), Programare Web în ���� �� ���� (în colaborare, 2002), ���������� �������� ���� ����� �� ������������te + CD (2002), ��������� ��� �� ����� (coord., 2003), Utilizare Linux (în colaborare, 2004), Situri Web la cheie. ������ ���������� �� ������������ (coord., 2004), ���������� �������� ���� ����� ���������������� . �/ ��� � ��0� )**+ � Primi� ���� � ����� (în colaborare, 2006).

����� ��

��� ���� ���� ���� �� ���� ���� ������� �� ����� �� �� ��������

� ���� �� � ����� �������� �� ����� � � � ��

© ���� �� ����� ������

��������������

����� ������

����� ���� ����� � ��� �� ��� ��� ���� ������

� �!��� ���� ���� ��"��� ��� �� !� �� �#� $$� �� � $�% ��� ��� &���'� �$�&��

������ ��� � ���������� �������� � ��������

������� ���� ��� ��

���������� �� � ����� ����� ! "�#�$ � ��� �� %&&�

����� �'

�(�)*&�+ ,�$�������,��% �(�)*&$+ ,�'�,�$�������,��

�����$ ���

������� �� ()�*"

Page 3: Sabin Buraga: 'Tehnologii XML

3

�������

���

Page 4: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 4

Page 5: Sabin Buraga: 'Tehnologii XML

5

Cuprins

Prefa�� ......................................................................................................................9

Capitolul 1 – Calea de acces la Web .................................................................11 1. Preambul.......................................................................................................11 �� ������� ������� � ���� � �� � �������� ����....................................12

2.1. Preliminarii...........................................................................................12 ���� ������� � ������ � ......................................................................12 2.3. Mesajele HTTP.....................................................................................18 2.4. Atributele HTTP..................................................................................22

�� ����� ���� � � ������ � ������� ��� ............................................26 ���� ��............................................................................................................28

Capitolul 2 – Modele de date semistructurate. Familia XML.....................29 1. Introducere ...................................................................................................29

1.1. Formate de date...................................................................................29 1.2. Modele de date ....................................................................................30 1.3. Date semistructurate...........................................................................31

2. XML pentru reprezentarea datelor semistructurate...............................33 2.1. Precursori .............................................................................................33 ���� ������� �� ����� �� ���� �� � � � ����� ...................................34 ���� ��������..........................................................................................37 2.4. Familia XML.........................................................................................44 �� � ������ � �� �!��� "#� ............................................................45 2.6. O privire de ansamblu........................................................................47

�� ��!����� �� ���� ��� ��!�� "#� ....................................................49 3.1� $����� �� �!� "#� ........................................................................49 3.2. Modelul de date XML: XML Infoset.................................................52 3.3. Transformarea documentelor XML..................................................54 3.4. Validarea documentelor XML.........................................................102 �� � %&� !� �� ��'��� �� �� "�( ...................................................137

4. Limbaje bazate pe XML. Exemple...........................................................143 )�*� +�� ��������� �� ������� ��� ,�� � "��#� ��- � ",� !�....144 4.2. Specificarea structurii hipertext a unui sit Web............................150 )��� � �������� �� ��!����� ������ �� .���� ..................................150

� +�� �'� "#� ..........................................................................................153 5.1. Preliminarii.........................................................................................153

Page 6: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 6

5.2. Baze de date native XML..................................................................153 ��� #������� �� ����� � � �� �'� �� ...........................................157 �)� +!���!��� � ������...................................................................163 5.5. Studii de caz.......................................................................................164

/� 0������ �� � ����� � "#� ....................................................................177 6.1. Punerea problemei ............................................................................177 /��� �� ���� � �����1 .............................................................................178 /��� ����'� �� ������� �� � ����� � "#�......................................178

���� ��..........................................................................................................189

Capitolul 3 – ��������� � ............................................................................193 1. Preliminarii.................................................................................................193 2. Modelul DOM............................................................................................194

2.1. Caracterizare ......................................................................................194 ���� +�� ���� � !���!��� ..................................................................196 ���� ,��������� �� ����2 DOM Core .................................................197 2.4. Extensii oferite de DOM nivelul 2...................................................202 2.5. Extensii oferite de DOM nivelul 3...................................................206 ��/� +!���!��� ......................................................................................207 2.7. Exemple ..............................................................................................209

�� +�� ���� $�" ..............................................................................................240 3.1. Caracterizare ......................................................................................240 3.2. Maniera de procesare........................................................................240 ���� +!���!��� ......................................................................................244 3.4. Exemple ..............................................................................................244 3.5. DOM versus SAX ...............................................................................251

)� ���� !������� �� � ����� � "#� ..........................................................253 4.1. Preliminarii.........................................................................................253 )��� � ����� �� �!������� � ����!����� "#�...............................254 4.3. Consultarea documentelor XML prin XMLReader .......................255 4.4. Generarea documentelor XML prin XMLWriter...........................259 )� � ���� ������� ��� �� �� .NET Framework .....................................260 )�/� 3 ���� ���� �� 43# � "3# ....................................................266

���� ��..........................................................................................................266

Capitolul 4 – XML pentru servicii Web: SOA, REST, AJAX .....................269 1. Preambul.....................................................................................................269 �� � ������ � � ����� �� � �� vicii Web .................................................270

2.1. Introducere.........................................................................................270 ���� ������' �� � �' �!� � � �������� ��� ...............................271 2.3. Un studiu de caz................................................................................285

Page 7: Sabin Buraga: 'Tehnologii XML

7

3. AJAX (Asynchronous JavaScript And XML) .............................................299 3.1. Context................................................................................................299 3.2. Caracterizare ......................................................................................302 3.3. 5 � ! �&�!���2 �� ��� �� �&����� �� �!�

de cont de utilizator..........................................................................304 3.4. Al doilea exemplu: jurnalizarea pe partea de server

� �&������ ��� ��� � � �' �!��� .���$� �� executate în cadrul browser-ului......................................................312

�� � ������� !�� ���� � ��'��� � �� ����� �� �� ������ �.�"...............................................................................320

3.6. AJAX în contextul REST...................................................................322 ��6� 5���� � �� ���� �� � �' �!� � �.�" .....................................323 ��7� ����� �� � �� ���� ����� �������� ������ �.�" .......323 3.9. În loc de concluzii…..........................................................................325

���� ��..........................................................................................................327

Capitolul 5 – ����� ��-ul semantic .............................................................331 1. Introducere .................................................................................................331 2. Spre Web-ul semantic ...............................................................................334

2.1. Punerea problemei ............................................................................334 2.2. Niveluri ale Web-ului semantic ......................................................335

3. Specificarea meta-datelor prin RDF........................................................337 ��*� �� ���� �� � '�� ��� ......................................................................337 ���� #������ �� ���� ................................................................................339 3.3. Vocabulare de meta-date..................................................................342 3.4. Sintaxe alternative.............................................................................346 �� � +!���!��� � ����� ...................................................................349 ��/� �4, � !� ��� !�����......................................................................351

4. De la Web 1.0 la Web 2.0 (Data Web).......................................................352 4.1. Preliminarii. Caracteristici ale „noului” Web................................352 )��� #� ��8� 9����� : ����� �� ������� ........................................354 4.3. Participare, nu doar publicare a datelor ........................................355 4.4. Descentralizare radica�� ...................................................................356 )� � ;� ��� � ������� ,���� �� ����� ���� ....................................357 )�/� +�� ����� ��'��� �� ������� ��..................................................358 4.7. Spre Web-ul social? ...........................................................................359

5. Ontologii .....................................................................................................361 5.1. Ontologia cu „O” mare sau mic? ....................................................361 5.2. Scopuri ................................................................................................362

Page 8: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 8

6. Tipuri de ontologii ....................................................................................362 /�*� ������� ............................................................................................362 6.2. Specificarea taxonomiilor.................................................................364 6.3. Tezaure ...............................................................................................369 /�) #����� �� ��������� � 3����' ��!���&�...............................370

7. Specificarea unei ontologii .......................................................................371 7.1. Specificarea categoriilor ...................................................................372 6��� $������ �� � �� ������ ................................................................373 6��� $������ �� ������ ........................................................................374 6�)� %&�!����� ......................................................................................375

8. Formalisme.................................................................................................377 8.1. Punerea problemei ............................................................................377 8.2. Spre un model formal .......................................................................377 7��� ��'��� ���� � � 3 � ����� � ������ ......................................378

9. Proiectarea (ingineria) ontologiilor.........................................................381 9.1. Preliminarii.........................................................................................381 9.2. Metodologii de proiectare a ontologiilor .......................................381

10. Specificarea ontologiilor prin OWL......................................................385 10.1. Caracterizare ....................................................................................385 10.2. Sintaxa OWL ....................................................................................386 *-��� 4�� ��� �� � ���� �� 3�� .....................................................392

**� ��� � ����!�� ����!�� ....................................................................393 11.1. Ma� � �� ����!�� .................................................................393 **��� 4� �� �����' �� ����!�� ����!�� .......................................394

12. „Concluzii”...............................................................................................403 ���� ��..........................................................................................................404

������������ �������� ........................................................................................409

Page 9: Sabin Buraga: 'Tehnologii XML

�������

„+!�� ��� ���� � ��� ���< � ���� � �� �� ����” Oliver Wendell Holmes Jr.

�� ��� �� ���� – parte a seriei Web a Editurii Polirom – are drept principal ���� � ����� �� ���� !� !�� ���� ����� � ����� ��< � ����� ��<� ����� �� � ����������� �� ������ �� ���� �� ������' Extensible Markup Language (XML – acronim explicitat, cu umor, de unii prin Excellent Marketing Language). Al doilea demers este cel de a-l conduce pe cititor spre ��� �� �� ������ �� ������� �� �� ��� ���� $�������� ����< ������� �� ������� �� ��� !����< �� ��� � � ��e-cial la ��� �� ������� ��� ��!�� "#�< ����� ��� � !����� �� � ����� ���������� ��!�� ���� ��� ����� �! �� �� �� �� �� �� ���� � – prin-tre altele – �� ��� ������� ������ �� ���� ���� "#� 9����� �� � �zen-tarea unor limbaje de interogare � ���! "���� � "=�� >:< ��������� ��� ����� � "#� ��� !�� � �� �� ����� ��� �� �.�" 9Asynchronous JavaScript And XML:� ?���!�� � �!�� !��������� �� � ����� � "#�� ��� �� !�����< �� ��� � � �������� �� � ���� !� "$� 9Exten-sible Styesheet Language), de validare a documentelor sau de creare a servi-ciilor Web, punctând cele mai bune practici de utilizare.

4� ���!���< ����! � � ��� � � ����� � ��������� �� ���� � � ���� mai populare tehnologii ale Web-ului, cu reliefarea � ����� �� ���������� � Data Web, Social Web � ���� �� �� � Semantic Web. De la prezentarea modului de acces via protocolul HTTP (Hypertext Transfer Protocol), de-����! ��!������� �� ���� ��� ��!�� �� �!��8� "#�< ��� � � �8�'��� ���� �! – într-un final mereu amânat – meta-������ � �����'��� %x-pune �� ���� ������� �� -� �� ������� � �'!����< �� � �'�8�!!��onarea bazelor teoretice, acolo unde este cazul.

@�!� ������ !���!��� � ������� ��� ' �� ��� �� �� ��'!� �lim��8� �� � �' �!� �< � ���! �AA< �B< .���< .���$� ��< �� � � ���� 4�asemenea, sunt descrise diverse limbaje de marcare bazate pe XML – XHTML 2.0, XForms, RDF (Resource Description Framework), FOAF (Friend Of A Friend: � 3�� 9Web Ontology Language) – � sunt prezentate me-todologiile de proiectare a unora noi.

Page 10: Sabin Buraga: 'Tehnologii XML

������� 10

#��� ���� �� ����� � �� �� � � ������ �� � �� �� ���� �� ����� ��domeniul Web, în special de meta-�!��8�� "#�< ����C� ��-� ��r-meze o privire de ansamblu asupra tehnologiilor actuale � ���� � �������Web-��� � ��� �� �� ����� ?���!�� �� �� ������ ���������� �� �� �ituri � ������ ���< ���������� � ��!� � ���! ������ �� ����< �� ���iunea om-��������� < ���'��� � ������< '� � ����D� � ��� �������� �s-tribuit, � ������� �� !����� �� ���������� � ������ � �� prelucrarea ���&���< ������ � �������� �� ������ !� � ����!����� � Atât stu-��� � !���� �� �� �� ���������� �� �� !���� ��� �� � ��� � ���<�C� � ���� � ������� !� �� '�� �� �� ����� �� !�� �� �� ��referitoare la Web.

4�� ��� � �� �� ���� � ���� ������ �� �� � �� ���� -� ��� � – 27 fe-� �� � �--/< ������� � ������� �&�� ��� ���!����� �� �� �� ��� ���i-!�� � � �� �������< �� -� ��!��!��� �< �� �����a��� ������� ��� ��autor în cadrul unor discipline ca Tehnologii Web, Semantic Web � ��������i-une om-calculator< � ����� �� ,��������� �� +�� !���� � 5�� ���� E�le-&�� � +�� ����F � +���

�� ���! �� ���� � �� 8�� ��� �at de-a lungul anilor de o parte din-� � ������ ��� – ������!��� ��������< !�8� ������ �� ��� � � ��8�� �� �� !� ������� �� � ��� ���< � ��� ��� � ���< �� ��!�� Dr. Cor-nelius Croitoru, Laurian Gridinoc, C������ �����, Dr. Toader Jucan, Manuel �� ���� � ��� ������ �������-Matu� 4� ���!���< � �&� !�! ' ����������� � ���������� %��� ��� �! � �� ��� ��� � @� � ���!��rând, mul��!! � !� $>��3 ��� � ��� �� �� �� ����� �����!�� �editorului XML <oXygen />.

S��� �� � ����� � ������� �� http://www.infoiasi.ro/~busaco/books/xml/. Ma-joritatea surselor incluse în acest volum pot fi preluate direct de pe sit, sub auspiciile pre������ �� ������� G@5 9GNU is Not UNIX). Autorul poate fi contactat via situl personal: http://www.infoiasi.ro/~busaco/.

@� � !� �!C� ���C� �� �� �� ! � 9 �:�� �� '� � ������� � �� � �!��� ������ � ��������� ��!������� � �� – ������� ��� ����� �� – ������H��� �������� � ������'�� "#�I

Dr. Sabin Buraga ����� 27 februarie 2006

Page 11: Sabin Buraga: 'Tehnologii XML

Capitolul 1

Calea de acces la Web

„� ��� ����!� � ����< � ��'� � ����!� � � ���” Stéphane Mallarmé

����� ����� ����� � ������� ��������� ����� �� �������� ����ito-are la protocolul de transfer al datelor hipertext � HTTP (Hypertext Transfer Protocol). Suplimentar, se descriu caracteristicile principale ale identificatorilor uniformi de resurse.

Cuvinte-cheie: protocol, HTTP, adresarea resurselor, URI.

1. Preambul

5�� �� � ���� !� !�� ���� � !� �� ������ �� �� ��e Internetului, World Wide Web-ul – mai pe scurt, Web ��� ������ WWW –, a fost instituit la CERN (Centre Européen pour la Recherche Nucléaire – Centrul European de �� ���� @����� � �� �� G����: � ��� *J7J< ' a�� ��� �� $ �!Berners-Lee. Ace���< �!� ��� �� ���� � ������ � � ����� �� ��������< �propus un sistem informatic dis� ���< ������ � ���� � !� � �� ����-tarea accesului rapid la in�� !���� ����� ��� �� � !������� �� ����� � � ���������� ��� � 4��� !� � ��� � ��� ��� � � ���� !������2

• �������� �� ��� ��&���� 9��� � � ����� ��!���� ���� � ����-mentelor electronice complexe);

• � �' ���� � �'�� �� � ���� �� � ����� � ����� �� � ����� ��� ���������� +�� �� �� � �� ����� ������ ��!��� �� '�������� � ������� �� ���������are.

Web-�� �� ���� � ������ �� ������ ���� ������ ��� ��� ��� � �������������hipermedia (Berners-���< *JJJ:� 4 ���� �� ���� � ����< ������ ������ �� ������� � ����! '����� � ����� ���� �� ��!��are !���!���< �� !���� �� � '����� ������� � �s� ���� � �����

Page 12: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 12

�� �� � �� ������� �� < �����C� ���� ! !odelului client/server. Putem vedea Web-�� �� �� � ��� � �� !����� ��!��� �elemente de interes, denumite resurse, desemnate de identificatori globali ���!� 5�+ 9Uniform Resource Identifiers).

În cadrul acestui capitol, ne vom concentra mai ales asupra celor mai importante detalii referitoare la protocolul HTTP, una dintre componentele �� ���� ��� ������� ����

2���������� ���������������������������������

2.1. Preliminarii

K��� ��!��� �� � �� �� ��� � ���� ���< �� ��� �� ����a��< ������'� ��� �� � �������� HTTP (Hypertext Transfer Protocol), ajuns actu-��!��� �� �� ���� *�* � � ����� �e documentul RFC 2616 (Gettys et al., 1999). Protocolul HTTP este folosit în special pentru hipertext, dar poate fi ����� �� � ��� � ������ '�� �< ���� ��!��� �� -un sistem ��� ��� �� !��'�!�� �� ������ � 3 �� ���� ���� !�� ���� �protoc����� ���� �������� �� ������ !�< ��� ���� ���������� � �� ���!��� � ���� ���C� ����� ���r�� ����!� �� ��� � � � ��������� ��&�� ������� �� �������� � �'��� �� !����� �� �� ����� � ������� �� � � !���� � � � ��!�� � � ���������� !���!��� �� �� �codifica sau deco���� ������� ���� ���� ������ ��� � ��� *JJ-< �� ��începuturile Web-ului.

���� �� ���� � � ������ '�� � ��� � � ��!�� �� �� !���� în format hipertext, el aplicându-�� � �� � ������� � ntermediari pentru alte protocoale mai vechi: SMTP (Simple Mail Transfer Protocol), FTP (File Transfer Protocol) sau NNTP (Network News Transfer Protocol) �detalii în Naik, 1998). Fiind un protocol utilizat în Internet, HTTP este bazat pe stiva de protocoale TCP/IP (Transmission Control Protocol/Internet Protocol), putând fi considerat fiabil (reliable).

������� ���������� ���� ���

� ������� ������� �� �� � ��� ���� � �������� ��� cererea � ���������: un client Web trimite un mesaj (cererea) la un server� #���8�� ����identificatorul resursei dorite, dat sub forma unui URI (Uniform Resource Identifier:< !����� �� ����� �������< �� ���� � ����o����< � ���! � �serie de meta-�� !�� �� � ��� � ���� �� �e ���� �������� �� �� ���i ��� �� � ��� ��C� ��� �� �� �� ��� ���� �� � ��� �� �� � < �

Page 13: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 13

mesaj explicativ pentru codul de stare transmis, meta-�� !���� �� � �� � � ������� �� ��� � ���� �< �������< � ����� 9e.g., ��� �� ��������:�

În general, o sesiune �� ��!��� � ���� ���� ���� �� ��� � ���� ������ � �� � �� �� ��� �� �������� �� �� � �� �� �������������� ���� �!� � server de origine ���� �� ������� �� � ��!��� ���� � ���� � �� �� ��� �� ��� � ��� ��� !� !��� intermediari: proxy 9�!� � server proxy), ������ (gateway) sau tunel (tunnel):

– Proxy-ul este un intermediar care retrimite un mesaj HTTP, eventual modificând o parte a sa.

– Poarta �� ���� � ntermediar care se poate situa înaintea unui server de or'� � �� �� ������ � ��� ������< ������ ���necunoscând acest aspect.

– Tunelul ���� � �� !��� �� � � ���!�� ������� !���8���< ��are rol exclusiv de retransmitere a lui; de exemplu, tunelul poate fi folosit pentru (de)criptarea mesajelo ��������� �� � �� �� � ����<în cadrul unui intranet/extranet.

; ���� !� !���� �� � ���� < �� � ������ � �� �� �� �� � '� ��&��� �� !��� < �� � ������� �������-�� � ���&�� � ���� 9� ������� � �'� � *:�

Figura 1. Modelul client/server HTTP:

�� ����� #�� ��������� � ������ �� ��� � ��� ��� ������� ������ -� �� ������ #�� � -� ����� ���-����� ���� �� �� ��� ������

De asemenea, un alt concept important este cel de cache, desemnând un depozit local de stocare (în memorie, pe disc) a mesajelor (datelor) la nivel de server/client. Un proxy ���� ���'��� � � cache< �� ���!� �sistem de cache 9��� � ������� ��) � ������u�� �� ����:�

Un exemplu tipic de cerere-������� ���� � !��� ��< � �� � �� � �� � �forma:

Page 14: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 14

GET / HTTP/1.1

Host: www.infoiasi.ro

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040115

Accept: image/gif, image/jpeg, */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate, compress, identity

Connection: Keep-Alive

Un p���� ����� � ����� � ��� �� !� 8��2 HTTP/1.1 302 Found

Date: Mon, 02 Jan 2006 13:42:40 GMT

Server: Apache/2.0.40 (Red Hat Linux)

Location: http://www.infoiasi.ro/fcs/index.html

Content-Length: 295

Connection: close

Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html>

<head><title>302 Found</title></head>

<body><h1>Found</h1><p>The document has moved

<a href="http://www.infoiasi.ro/fcs/index.html"> here</a>.</p>

<hr /><address>Apache/2.0.40 Server at www.infoiasi.ro

Port 80</address></body>

</html>

Vom descrie în continuare elementele importante ale protocolului.

Adresarea resurselor Web

Pentru transferul documentelor hipertext, acestea trebuie adresate într-un mod uniform, independent de sistemul de ����� � � �� ������� ������#��������� �� �� ��� � ������� �� ��� ���� �� e������ �� identificatorii uniformi de resurse � URI (Uniform Resurse Identifiers) (detalii în Berners-Lee, ,���' � #���� < �--):.

Ceea ce este deseori denumit adres� ���< �������� ��� ��� ��documente sau localizator uniform de resurse este unificat în terminologia Internet într-un singur concept: ������������� ������� �� ������� � �� ������într-� �� !� ��� � ���������

#���!�� 5�+ ���� �� ������ � ���� ���!���! !�� ����2 URL (Uniform Resource Locator: � URN (Uniform Resource Name).

Page 15: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 15

URL-�� ���� ������ � ������� �� �� ��� �� � ���� 9� ������ �Internet) prin protoculul HTTP. Sintaxa URL pentru Web este:

"http:" "//" server [ ":" port ][ ������������ [ "?" interogare ]]

4��� � ���� �������� �&����< �� ��� ���� ����� �� � � �� ��� 7-(portul implicit standard pentru protocolul HTTP). Semantica unui URL ���� � !���� ��2 ��� �� �� ���� �� � �� �� ������� � server, care „ascul��F �������� �� � �� ������ � �� �� ��� �������� ��� !����Lresursa es�� �������� � ������ ������� ; '�� ��< � ���� ������folosirea drept server a adresei IP (e.g., 193.231.30.225) în favoarea folosirii numelui simbolic asociat acesteia (i.e., www.infoiasi.ro). Parametrul ������������ �� ���� � � �� �!� �� � ����� � ���!���� ���� ���� �� EHF< ������� �� !�� �� �!��� ��� ��� �� � ��������� ��� �� �� ����� � �� !���� 5��-ului. Componenta interogare des�!���� � � ����!��� ��u�C� �� !�� �� � ����� �� ��� ��(de cele mai multe ori, de un script), caracterele „;”, „/”, „?”, „:”, „@”, „&”, EMF< EAF< E<F � ENF �� ���rvate.

� ���� !����� ������ �� ������ �� ���� � ������� ��� ����cate conform unei metode denumite URL encoding, � �� � �� ���� �� � ��������� �������� �� ����� ��� �!� �< � ���� */< � ��&�� �� ��!�� EOF 9���&�!���< EPF ���� EO6%F:� $����� ���� ������ �� EAF�

Câteva exemple de URL-uri: • http://www.linux.org/ • http://students.infoiasi.ro/~lug/ • http://193.231.30.131/~busaco/ � ����! ������ �� � 5�� ����� ���� � ��� ���& � �������� ��

� �'!��< � ������ �� �� ���� �� EBF< �� ������ �� � ���� ��� � � ���� ��� �� �� ��������� � ��� �� �� ����� de acel URL. Drept exemplificare, se poate da: http://www.sit.ro/buletin.html#a2005.

Un URN ����!���� � ������ �� 5�+ �� � �!C� �� !��� � ��<��� ���� ��� �� � ���� �� � � ����� ��������� 5�@-ul se �������� !� ���� ��� � � ����!� ����� 9��� �� ����< ���� �� �!�����: ������� �� ��!�� ������ ���� �� �&�!��� �� 5�@-uri putem da:

• urn:infoiasi.ro:BookInfo – ���� �������� �� � ������� �������!��� �� ��!��� infoiasi.ro;

• urn:mozilla:package:communicator – identific� ��������� ����-ware ale suitei Mozilla;

• urn:schemas-microsoft-com:datatypes – ����!���� ���rile de date definite de Microsoft;

Page 16: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 16

• urn:ISBN:973-681-988-4 – ������� �!� �� +$K@ 9International Standard Book Number) aso��� �� �� �L

• urn:ietf:rfc:2401 – �� ��� � �� ������ �� �� � ������standardizat de IETF (în cazul acesta, IP Secure).

Într-un context mai general, URI-� �� ��� ����!� ��� �� �� � �� ������ �������� � �� !���� � ���������� ���H+�� ������< �� !� '�� �� �unui identifi���� ��� ! �� ��� �� � ���� � !���� ��� ��!�����principale:

schema "://" autoritate cale "?" interogare

Componenta schema ������ !��������� �� ������ � � � ��������� �� � ���� ������ ��� � � ���� ����� �� � ��!�� ��� ��� ��������e elemente sunt similare celor descrise mai sus. Schemele URI se înre-'�� ���� �� +�@� 9Internet Assigned Numbers Authority) – lista schemelor 5�+ ������� ���� ������� �� �� ��� http://www.iana.org/assignments/ uri-schemes.

Ca exemple de scheme se pot enumera: • data:image/png;base64,R101...A7 – schema data �� !�C�

����� �� � !�� � inline � �� �� !�� �� !� �imensiuni; ������� ����� �� �!���� � �������� �������� (Masinter, 1998); ���&� '�� ��� � � �� !�2 "data:" [ tip_MIME ][ ";base64" ] "," �����, în care tip_MIME �� ���� ���� #+#% �� ��� ��(vezi infra), iar ����� ����!���� ������� � �� �-zis al ��� ��< ������� ����/) 9� ����� � �� � � ��������� ������"base64") sau în maniera URL-urilor. Un alt exemplu este data:text/plain;charset=iso-8859-7,%be%fg%be;

• file:///tmp/ – ����!� file �� ����!���� ��� �� �� �� ��� �cadrul sistemului de stocare de la nivelul clientului;

• ftp://ftp.funet.fi/pub/README.txt – ����!� ftp pentru serviciile protocolului de transf� �� ��� � 9,��:L

• https://www.infoiasi.ro/~busaco/teach/ – ����!� https pen-tru serviciile protocolului securizat HTTPS (vezi Rescorla, 2000);

• mailto:[email protected] – ����!� mailto ��� � ���������� ��� 9�� �������� �� ���� � �������� �� � �sfer SMTP);

• news:comp.infosystems.www.servers.unix – ����!� news ��� � ' ��� �� �� �� 5$%@%� 9@@�� – Network News Transport Protocol);

• tag:blogger.com,2006:blog-333 – ����!� tag ������� ��identifice în mod unic – ������ � ��!�� �� – � ��!�� ��� ��<într-� !�� � �������� ��� � ������� 9� ����� ���< ���� �� ��

Page 17: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 17

de subiectele de interes ale unui blog:L ������� ����!� � � ���&�"tag:" autoritate "," ���������� ����� ":" infor-����� ["#" fragm_URI], unde autoritate ����!���� � ��!�u 4@$ ��� � �� ��� �� e-mail, ���������� ����� ������� � ����în forma AAAA-LL-ZZ (doar anul e obligatoriu), iar ��� ����� sunt caractere codificate în stilul URL-� �� < �����C� �!�� componentei interogare � ������� ��� � 9����� � Q��� ' �Hawke, 2005);

• telnet://delta.ac.tuiasi.ro:7777 – ����!� telnet pentru servicii interactive via protocolul TELNET.

������ ����< �� ���� ����� � �������� �� �������� �� ��� ��< ���!� +�+ � Internationalized Resource Identifiers 94R �� � $�'� �< �-- :� ������ ��� ��!���!��� 5�+-� �� < �� !�C� specificarea unor seturi de caractere mai largi decât ASCII (e.g., Unicode). De exemplu, http://color.org/ros&#xE9 este identic cu URI-ul http://color.org/ros&#233 (folosind e������-caracter permise de HTML/XML) sau http://color.org/ros&#xE9 9����C� �������-�� ���� 5���� � "#�: � ����� � �� ������vizual prin http://color.org/rosé� ; ����� ����&�< � ���� !������ ���������� � ���� � �� �!��� �� ��!� �� ������ – IDN (International Domain Names), extinzând sistemul numelor de domenii DNS (Domain Name System).

����������������� ����

��� � �� ������ �� �� �� ��� �� � �����< ��� �� �� ������ !� �� �D� �� ����D� �< ��� � ���� �� ������� ������ ������ � �� ���� %��� ����conceptul de set de caractere, pentru a putea interpreta corect datele ���!���� ����C� � �������� ���� �� � ���� ������ !� ��� ��< �� �� ����� ��� �� ��� ������ � ������< ��r!��� ���� � ��!�� în forma �� � �� �� ���� � � !C� �� ���a��� �� �� �������� �����< ������������ ���� � ����� �� �� ���� �< �� ������� � ���� !� �� � � ������� � � �� �� ���� �� $���� �� �� ���� � !���� ���� +$3-8859-1, dar �&��� � !���itudine de alte seturi (de exemplu, ISO-8859-�< ���!� �Latin-�< �� � ��� � � � � ������ � �� ezentarea diacriticelor din limba �!C�:�

� �������� ���� ������� ���� �� �� �� ���� � ����� �� ����������MIME (Multipurpose Internet Mail Extensions) descrise pe larg în ����!����� �,� �-) � �-)/ ���� , ��� � K� ����< *JJ/�< �< �������<, ��� � K� ����< *JJ/�:� ���� ! ����� ���� #+#%< ��� � ���� � ��� �� �� ������� ���� � ������� �������� 4� �&�!���< text/html pentru un document HTML, text/plain în cazul unui document text neformatat,

Page 18: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 18

image/jpeg pentru o imagine în format JPEG, video/mpeg în cazul unui film MPEG, model/vrml ��� � � ��!� � ����� !������� � ?�#� ���� 9��� �mai multe detalii, vezi Buraga, 2005).

De asemenea, !���8��� ��� � ��������< � ���� �� ��!� !� ��� ��-gu � ������ �H��� ��' ���� 4� �&�!���< ��� �� !�� ������ ��2

• gzip – �� ���� ������ �� ��!���-S� 9�S66: ������� �� ��� �� �' �!�� �� � ��� � �� ������ �!�< ������ în mediile UNIX/Linux;

• compress – �� ���� � ������ � ��!���-Ziv-Welch (LZW) utili-���� �� ��� � ����� �� �� � ��� � �� ������ �!� ��C�� ��platformele UNIX.

2.3. Mesajele HTTP

�� � �� � ������ �� ���� ��� ��������� � �� !���� !���jelor. ������< !���8��� ���� ��� ����� ��� �� ���� ��� 2 cerere de la client ��� � �� �� � ������� �� �� �� ��� ��� � ����� %�� �� ��n�� �������'�� �� � ��!��� �� ����< � !���8 ��C� �� � !� ���� � � !�-��� �� �� !�2

Mesaj HTTP = linie_de_start (atribut_de_antet)* CRLF [ ���inut_mesaj ]

Componenta linie_de_start ���� �!�� linie de cerere sau linie de stare în ����� �� � < ������� ��������� #���-caracterul „*” desem���� �������� �!� �� �� ��� � ����� � ��< �� ��� � �� �< � ���, �� ����������� �� �� ���� � Carriage Return 9����� *�: � Line Feed (codul 10). ���� ���� E[...]F ��� � ��� �� ������� � �&� ��� �� � �� �-tezele drepte.

În descrierea de mai sus, atribut_de_antet �� !���� �� ��� �� ��art a !���8���< ���� antetul (header:� 5 ���� ���� !� !���� �� ���� �� ���� ������� �� ��!����� �� �� �� � ��� � �� ����� �� !���-infor-!��� ����� � �� � ��� �� ���� � !���8��� � ����ilirea unor valori ��������� �� ��� � � otocolul HTTP sau a unor protocoale definite de utilizator (de exemplu, SOAP – Simple Object Access Protocol). Fiecare atribut ����� � ���� ���� �� �� !�2

Atribut de antet = nume_atribut ":" [ valoare_atribut ]

3 ��� ������ � � ���� ��!������< �� ���� ���� �� �� � !�� !���C �� ������ '�� ��� 9�������< �� ����< ��C� ��� � �� � �< �C� � ��� � �����:< ��� �� ������ ������� ����� ������� �� !���8< � �� ��C ������ ������� ����� ��� �� � ������� !esajului.

Page 19: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 19

C� ��� !���8��� ���� ���� ������� ������� �� � ��� ����-sului, de multe ori reprezentând chiar resursa din linia de antet a cererii. �� ��� �� !���8 ����� ��� 9���� !����� � �� � � � mpune, el chiar � ���� �� ��������:� � ����� �� ����i mesajului este, de obicei, ��!������ � � ���n�� � ������ ���� � �� �� ���� ��� ��� � ��acesta: Content-Length sau Transfer-Coding. Lungimea unui mesaj este consi-�� ��� ��'!�� �� �'��� �� �< ���� ����� �� �� ������� ��� � �� eventuale codifi�� �

Mesajul de tip cerere (Request)

,� !� '�� ��� � �� !���8 �� �� �� � � ����2

Cerere HTTP = linie-de-cerere

(antet-general | antet-cerere | antet-entitate)*

CRLF

[ corpul-mesajului ]

�� �� �� � � ��������� �� �!��� !����� �olosite, urmat de �������� �� ��� �� �� �� �� �� ������ �� � �� 95�+: � �� �� ����protocolului (e.g., HTTP/1.1). Linie de cerere = ����� SP identificator- ��� �� SP versiune-HTTP CRLF

� ���� � ����� � ������ �� ������� ���, � ���� �� ��� � ��� �'!�< � � ����� ���� ��� � ��� �� � ����� �� ����C� �� ���LF este in�� ��� �� �� �� ��� �� �� �� � �� $� ����!���� � ����� ���(blank).

#����� �� � ���� ����� �� �������� �� �� �� � � � �� ���������� �� � �� � �� �� �� � ��� � �� ��� �� ��������� �� ��� � 5�+�În general, metoda este case-sensitive 9�� ���� � ������ �� !�8������:<� � � ���� !� ������ !����� �� !�� �� ��������� ����H*�* ��me-rându-��2 G%�< �%�4< �3$� � 3��+3@$ 9G���>s et al.< *JJJ:� %&���< ��asemenea, posibilitatea folosirii altor metode, nestandardizate, atât timp cât ��� ��� � �������� �� ��� � ����� �� ��� ��!�i�� �

���� !� ������� !����� ���� �� ���� � �� � !���� ��� �� ���� ���2 • GET – �� ���� � �� � � �� ������ � � �� �� !�� 9�����:� 5

���� ���� 9��'��� < ����< � �' �! �� ����� �are, agregator de �� ����: ��������� !����� G%� ��� � � ���� � ��!�� ��� ��<�� �� �� �� ���� � ��� 9���ument text, HTML, imagine PNG sa� .�%G< �������< � ���< ����!�� "#� ����:< �� �� ���

Page 20: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 20

�&����� �� �� �� �� ��� � �� � ���� �� � �� � ����� ������dorite (e.g., invocarea unui script CGI);

• HEAD – ���� �!�� � �� !����� G%�< �� �� �� �� �� ��� � �!���8 ��C� �� !�� ��� în antet. Meta-datele din anteturile ���� � �spunsul la o cerere HEAD vor fi identice cu cele din ������� �� � �� � � G%�� 5������� ������ !����� ����� � ���-nerea meta-datelor asociate unei resurse Web f� � � � ���� � ������întreaga entitate, în vederea – de exemplu – � ����� �&����� ��� ��< � ���� ���� ���!� !����� ��� � �� �� � ����-rilor de acces;

• POST – !����� ���� ������� ��� � � ������ ���� �� �� ��������� � ������ �'������ � ��� �� �� � � �3$� ���� � ������� ��!���!����� � !����� ��� !� ��� � ���� � ecum adnotarea ��� ���� < � !�� �� ������ �� �� !��� ��� ��� � �� �� <extinderea unei baze de date printr-� ��� ���� �� �� � � ����

• OPTIONS – �� ���� � �� � � �� �� !�� ���� � ������ �� ��-municare disponibile într-� ����' ���� �� � �H ������ �������!����� � � ���� �� � ��� �� ���� ���������� �� � �����ona �� !�� ���� � � ��� �� �� �� � �� �� ��� ��� ���� � � �� -ver Web sau server proxy, f� � � !���� � ����� � ���� ���� �unei resurse (de exemplu, în vederea negocierii transmiterii de date).

5 �&�!��� �� �� �� �� � � �� � �� �� ������ �� proxy (folosind un 5�+ ��� � �� !� ��������: ���� � !��� ��2

GET http://students.infoiasi.ro/~revista HTTP/1.1

��� !� � ����� !�� �� � ������� � ��� �� ���� � ����� ���������C� �� �������< ��C� 5�+-ul specificat ca valoare a atributului Host. Un �&�!��� �� �� � � � ���� �� ���� �� ��� �� /pub/index.html de pe �� �� �� �������� �� �� ,��������� �� +�� !���� � +�� �� �� �� !������� ����� �� ���&� ��� �� �� ��� 7- �� !�� students.infoiasi.ro astfel:

GET /pub/index.html HTTP/1.1

Host: students.infoiasi.ro

����� �������� � ����� � ���< �� � ���� �� ���� ��� ��� �aracterul EHF< �� � �� ���� ����!���� �����< � �� ���� � � ����� � ��� �� �� ��!����� � � -� ��� �� ��� � �� �������� �

Pot fi specificate atribute de cerere care sunt folosite pentru a transmite �� !�� ����!��� � ���� � ���� �� � � � ���� � ����� $� ����� ���� �����'� �� � � !�� �� �� !����� ���� �� ������ �� ���� �� -un

Page 21: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 21

�!��8 �� � �' �!� �< ��� �� ������ �� ���� �� �!�� �� � � ��Câteva dintre aceste atribute specifice cererii sunt: Accept, Accept-Encoding, Authorization, From, Host, Proxy-Authorization, Referer sau User-Agent (a se ������� � ������� ��) � ��������� �� ����:�

������� ����������Response)

4��� � ! �� � �� � ��� �� �� !���8 �� �� �� � � � �� � ��� �� ��<un serv� ���� ������ �� � !���8 ���!� �������� ,� !� '�� ��� �acestuia este:

������� ���� linie-de-stare

(antet-general | antet-cerere | antet-entitate)*

CRLF

[ corpul-mesajului ]

Linia de stare începe cu versiunea protocolului HTTP implementat de ��� � �� �� � ����� �� � ��� �� ��� � �� ����C� �!� �� ������ ����� � ��������� ���� �� ��!�� ����� � �� �� u�� � � !� � ��� �� �� � � 5 !���� � ��&� �&������ ��� � ����� �� ��� �< �� � �� ���� �� �� �� ��< �� ���C� � ���� ����� �� !���!��� �� � �priu-���<�� ���� ���� �� ��� ��� ������ �x� !��� �� ����� �� ��� �2

Linie-de-stare = versiune-HTTP SP cod-de-stare SP text-explicativ CRLF

Cod-de-stare este format din trei cifre organizate în categorii de ��� <������ ��C� ���� �� � ������ ����'� � �� ��� � �� ��� �!�� �L ��� �������� ���� � !� �� � � !���� � !��� 2

• 1xx: Informativ – �� � �� � ���� � !��< ��!����� �����L • 2xx: Succes – �� � �� � ���� � !��< �� � ����� � ��������� �� ��� �

server; • ���� �������������� – pentru a atinge scopul cererii este nevoie de o

inte �'� � ���� �� �< ������� ��� � � ��� �� �� L • ���� ����� ���!����� �� ����� ������ – �� �� � �� ���� �� ���� �

punct de vedere sintactic, fie nu poate � ����������L • "��� ����� ���!����� �� ����� ���!�� – �� � �� ���� ��� �� �� ����< ��

serverul nu o poate îndeplini din diferite motive. ��&��� �&������ ���� � ���� ��� � � ��� � �� !��� ����!��� �<

putând fi de folos dezvoltatorilor de ap���� ��� ��! � � � �' �!� �� ��nivelul serverului HTTP prin diferite tehnologii, precum CGI, PHP sau JSP 9����� � G���>�< *JJJ< � K� �'�< �-- :�

Page 22: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 22

4� ���!���< � �� !���� �� ������ ������� ������ �� ������ ��� � ��!�� �� !�� �������� �C���� �� � �� ������ ������� ������ �� ��� � !���� ���2 Location, Server sau WWW-Authenticate 9��� ������� � !���� �:�

Jurnalizarea cererilor

5 �&�!��� �� ��� �� 8� ���� � � �� � �� ���� ���� � !��� �� 9�acest caz, este vo �� �� ��� �� '�� �� �� �� �� �� ������: ���� � K� �'�� �����������< �--�:2

dyn419.win.tue.nl – licenta [29/Sep/2005:11:08:04 +0300] "GET /~busaco/teach/bsc2006/ HTTP/1.1" 200 24757

dyn419.win.tue.nl – – [29/Sep/2005:11:07:54 +0300] "GET /~busaco/teach/bsc2006 HTTP/1.1" 401 1283

193.226.24.219 – – [29/Sep/2005:11:06:17 +0300] "GET / HTTP/1.1" 403 1039

83.115.156.9 – – [29/Sep/2005:11:05:59 +0300] "GET /~busaco/paint/days/trio.jpg HTTP/1.1" 304 –

proxy.info.uaic.ro – – [29/Sep/2005:11:05:38 +0300] "GET /favicon.ico HTTP/1.1" 404 1035

rat.cluj.astral.ro – – [29/Sep/2005:11:04:27 +0300] "GET /~linux/ HTTP/1.0" 200 4974

triton.france3.fr – – [29/Sep/2005:11:04:27 +0300] "GET /~acf/ HTTP/1.1" 200 446

triton.france3.fr – – [29/Sep/2005:11:04:27 +0300] "GET /~acf HTTP/1.1" 301 327

crawl.googlebot.com – – [29/Sep/2005:11:03:11 +0300] "GET /~busaco/paint/works/Forms.jpg HTTP/1.1" 304 –

2.4. Atributele HTTP

Vom descrie în continuare o serie dintre atributele vehiculate în cadrul cere �� ��� ������ �� �����

Accept

%��� � �� ��� ������ �� �� � ���� � � � � �� !�� ��� ������ �� ����� �������� � �� !���� �� �'��� ������ ��server. Prin intermediul acestui atribut, clientul are posibilitatea de a s������ ��� �� !��� �� �� � ������ �� �������� � �� ����� �� � ������ ����� ��� �!� ���� �� ������ � ��� ate.

$��&� ���� ���� !� 8��2

Page 23: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 23

Accept = "Accept" ":" ( tip_media [ parametri ] )*

Parametrul tip_media �� ��� � �� ��� �� �� ���� ��������� � � � �� !�2 tip_media = ("*/*") | (tip "/" "*") | (tip "/" subtip)

Componenta parametri are sintaxa:

parametri = ";" "q" "=" valoare_calitate (extensie)*

Caracterul asterisc „*” este folosit pentru a specifica un grup de tipuri folosind con����� #+#% � ������� !� ���2 E*/*F �� ���� �����tipurile media, iar „tip/*F ����!���� ����� ������ �� #+#% ��� ������������� �� ���� ���� tip. Fiecare tip_media poate fi urmat de unul sau !� !��� �� �!�� ����C� �� �� �!�� �� Eq” denumit �������� ������!� (relative quality:< �� � �� !�� ����� �� �� ������ ������ �� � ����� �� ��0 la 1 a acestuia.

Un exemplu: Accept: image/*; q=0.2, image/jpeg

������� ���� ���� ������� � ��� �� ��� � ���� #+#% image/jpeg, � ���� �cest tip nu este disponibil, atunci se poate returna orice tip de imagine.

Allow

$������ !������� ���� �� !�� � � �������� 4� ���� !� !���� � < ��� �într-� ����� �� ����� �� ��� � )- 9Method Not Allowed), indicând ������� �� !����� ����� � ��������

Authorization

5 ���� �� � �� ���� �� �� ��������< � '�� �� ���� � ! �� �� ����� �� �� )-* 9Unauthorized:< � ���� �� ����� � �� � � �� �����Authorization, ��C� �� ����� � �� !��� ����� � �������� �

; '�� ��< ���� �� � ���� �� �������� �� � �� �� � �������� ����� ����� �< ������� � � ��� �� �� ������� � ��� � � !���� ����� � ����� � �� �� '� �� � ����� ��� � � �� ���� �� �!�determina���

Un exemplu efectiv de folosire a metodei de autorizare în cazul �� �� ��� ������ ���� ������ � ��� � �� K� �'�< �--*< � K� �'� ������������< �--��

Page 24: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 24

Cache-Control

Permite controlul cache-ului, de cele mai multe ori la nivelul proxy-ului �� � ���� � �� �� �

Sintaxa acestui atribut ���� � !���� ��2

Cache-Control = "Cache-Control" ":" (directiva "=" valoare)*

Directivele cele mai folosite sunt: • max-age ����!���� �!��� 9!��� �� � ������: � �� � ����!��

de cache �� ���� � � ���� � ��� �� ���L • public ������� ������ �� ������ ��� � ������� �� ��� � � �� ����!

de cache � �������� �� � ��� ��L • private ��!��� ������ �� ������ ��� � !�!� ��� �� ����!�� ��

�����< ��� � �� � �� ��8��� ���� ������L • no-cache ������� ����!��� �� cache �� ��!� �������� �� ���� �

���� esursele solicitate de un client; • no-store ��� ����� �� ������ �� ����� ����!��� �� cache

9����� �������� � � ����� � ���� ��� �� �� !�� ������:L������� � ����� ���� '� ��� �� +�� �� %&��� � < ��� � ����� �������� � � �����L

• must-revalidate ��!��� ������ �� ����!�� �� cache � ���� ��verifice ex� � �� ������ ������ �� ���� � �� � ��

Un exemplu ar putea fi cel de mai jos:

Cache-Control: max-age=600, no-cache="Set-Cookie"

Connection

Este un atribut general f����� ��� � � ������� ��!�� � �� ���� ��'����� ���&�� 9� '�� ��< ���H+�: � �� ����� ��� ��!u���� �� � ���������� ���� � ����� �� �� � ��� ������ �

3 ����� � ������� ������ �� ��� ���� EcloseF � ��!������ ����� �� ���&� ���� � !�� �� !���8���� ����� �� ��� ���� ��� � !���!�-�� �� ���&��� �� ������ � ��� 9�� �� ���� ��� � � �� � � ��� �����: �� � ��� �� ���&� ���� ����� �� ���ului cerere- �����actual.

Content-Disposition

Per!�� � ��!�� ���&������ � � ��!�� �� �� ��� �� ����� � �� �� ����� �� ��� ��� ��� !� ������� �� ��� ���� ��� � �� � ��������� � �' �!��� �� ��'� � �� ������� �� ��� ������ ���������<în lo��� ��� ������< �� � �&�!���� � !��� 2

Page 25: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 25

Content-Disposition: attachment; filename="articol.pdf"

Content-Type

4���!���� ���� #+#% �� �� ����� ��� �� �������� �� � ���� � transmise de server. Acest atribut trebuie specificat obligatoriu în cadrul unui script CGI (Buraga et al., 2002).

From

���� � �� ��� �� e-mail< � '�� �� ��� � ������� ��� ������� ��������� ?���� �� ������ �� ��� ����� � ������� ��� � � �'�� � ���������� � ��� ���-jurnal (log-urile) ale serverului HTTP, în scopul identific� �� � �� ����� ��� ������ � !�� �� ������ �� !�� ����� ����� ��� � � ����!� �� ���� ����< � !� �e' ��� ���� ��� � ��-tec�� �� �� � �� ��������� ��� ��� �!� ��� � ����� ������ ���< ��� ����������� ������� �� ���elor res������� �� ��� �� �� ��!���� ������ � ��� ������ �spectivi.

Host

��� ���� � �� ��� ������ ��� � ������� �� �� ��� +�� �� � ��� ���� � ���� �� ����� �&���� � ������ ��� �� ���� ��� �� �� �� ���� ������ ��rerea. Acest atribut trebuie inclus în orice cerere HTTP/1.1, � ���� �� ������� ����!� �������� �� �� ���-� '� ��� � �� �indicate în URI-�� � '�� � � � ���� ����� �� �o������ �!�'�����

Sintaxa acestui atribut este:

Host = "Host" ":" URI [ ":" port ]

Pentru un URI de genul http://www.infoiasi.ro/fcs.css �� � �� � ���� ������2

GET /fcs.css HTTP/1.1

Host: www.infoiasi.ro

; ����H*�*< � ����� �� ������ Host ���� ���'��� � ��� � �� ������ � ���L � proxy HTTP/1.1 trebu� �� �� ��� �� ���� � �� � � ���������� �� ���� $� �� ��� ����H*�* � ���� �� ������ �� ���� � ���� ��codul de stare 400 (Bad Request) la cererile HTTP/1.1 care nu includ atributul Host.

Location

����� �� ��� ������ ������ �� ���� ���� ������ � ��8���� ��coduri de stare de tip 3xx 9� �� � �� ��� � �� ���� ��� �o���� �� ���

Page 26: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 26

a resursei) sau 201 (Created:� ; �!���� �����< �� ����� ����� �������� ��� ��� � ��� ��� � ��� �� ��� �� !� �� 5�+ ��������

Sintaxa acest� �� ��� ���� � !���� ��2

Location = "Location" ":" URI_absolut

5 �&�!��� �� �� ����� � � ������� 9browser-ului) Web este:

Location: http://www.infoiasi.ro/~busaco/cv.html

Referer

Prin intermediul acestui atribut, clientul poate specifica, în interesul serverului, URI-�� �� �� �� � ��� �� � ���� ������� $� � �&�m���< ����într-� ����!�� "��#� �&��� � ��'��� � �� � ��� ����!��< ������poate include în cererea pentru al doilea document, ca Referer, URI-ul prin �� � � ���� ����� ����!���� ��� 9��� � ���� �������� � ��� ������� ��� � �apitolului 2).

Server

���� �� !�� ���� � ������� �� �� < ��! � � �!���< �� ����<� ������� ��< �������� ��!������� %��� ������ � ����� �� �� �� !�� � ��!��� ������� !� !���� ������ �� � �eservesc cererile la nivelul serverului HTTP (e.g., modulele Apache instalate, �� �� ��� �� ������ ��� ����:�

Un exemplu ar putea fi:

Apache/2.0.48 (Win32) mod_perl/1.99_10-dev Perl/v5.8.0 PHP/4.3.4 mod_python/3.0.3 Python/2.2.2

WWW-Authenticate

Atributul WWW-Authenticate trebuie inclus în orice cerere 401 (Unautho-rized: ��� � � ��� �������-������� �� !�� ����� � ��������rii în ��� � �� ��� �� �� ���� �� ����� ��!���!��� ������� ��� � �� � �este Authorization.

O serie de alte atribute sunt descrise în lucrarea Shiflett, 2003.

��������������� ������������������������

4��� ��! �! ����� �� �������� ���������< ���-ul este compus din ��� �� ��� ����< � ������� ������� �� � � ���� �� �� ����e în vedere fiind identificarea, ������������� � reprezentarea prin diverse formate de date a ������ ��� �� 9���� ! .����� � �����< �--):�

Page 27: Sabin Buraga: 'Tehnologii XML

Calea de acces la Web 27

; ���� �� � ����� ������ �� ��� ���� < ���� � ��� �� � ���� �� �������� ���� ,��� � ��� �� � ���� �� �� ������� � 5�+ �stinct, evitându-�� ������ �!�'������� 4��'� < ���� � 5�+ �� ���� 9�� � ������de) un proprietar – �� ����< � '�����< ��������� ����� �������� ��� ��� ��� �8���� ����� �� � !�� � �������� � 5�+-urilor, pe baza schemelor existente, înregistrate la IANA. De asemenea, trebuie ��� ��� �� ��p��� �� ��� � �� ��� �� � ���� ���� �� �� ��� �< � ��reprezentare – � ����� ���� �� ���� �< � 5�+ � ���� �� �� opac. Pentru a identifica în mod indirect o resur�� ������ � E��'���F 9� E���������F:� ��� �� ����< �� ��� ����� �����atorii de fragment (detalii în Buraga, 2005).

��'� � �� �� ���� �� �������� � �� !���� �� agent Web, �� � ����� � � �� ���� ��� � ������� �oftware ce are acces la Web. � �' �!�� ����C� � �!��� �� ������� �!� ��� �� �!��� ��agent-utilizator. Componentele precum serverele, proxy-� ��< ����< ��-gatoarele, player-ele multimedia, programele de oglindire, agregatoarele de �� etc. se numesc ������ ����#���.

��!��� �� �� � ����� �'�� !���� 5�+-uri (pentru adresare), !���8� � � ����< ����'�� ���� 'C� ���� ! �� � �������� +��rnet precum HTTP, descris în subcapitolul 2. Structura mesajelor interschimbate depinde de protocol, dar din punct de vedere conceptual putem considera �� ��ate mesajele sunt compuse din date 9�� !���� � �� �-���: �meta-date (date descriind datele vehicu����:L ������� � � !� ��� �specificate de atributele din cadrul anteturilor HTTP.

������� �� � ��� �� ��� �� �� ����� �� 5�+ – ����� �!�� ��������������� –< ������� !���C� !� !��� ��� 9�� �&�!���< � �������'��� ��������:< �����C� � �� ����� � � ��� �� ��������� 3reprezentare ����� ������ �� � ������ �� !��� ���� � ��� �� 9�������: ��� ��� ��� ���� ��� ��� ���!��� ���� �� ���������� �� ������� �� ����� � !���-date (de exemplu, meta-������ ��� ���� � �� �� ����� �� �� � ������� � �� !�� ��&����< �� � ������e clientul ���������� ��� �� �� ������� �� -un format binar).

Un alt aspect important este cel de asigurare a ���������� ��������������������< �'���� �� � ��������� � ��� �� � � ���� �� ������� � ������ ������ ��� 9side effect) în cadr�� �� ����� 4� �&�mplu, la ������ �� �� �� ����� � ��� �� �� !����� G%� � � otocolului ����< � � ���� ���� ��� ��� �� ��� �� �� �� 9i.e., incrementarea unui ���� �� �!� ��� �� ������ ��� �� ����!��:� 4� ���!���<proprietarul �� 5�+ � � ��� �� ��� � �� e���� ��� ��� �� ��������într-� !�� � �������� � � ��������

Page 28: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 28

�� ����� ������ ������< � ���� �� � ����! � �� � �������� ����8���� � �� !�� ��� � ��� �� � ������ � ����� �� � �� ��< � '�ne- ��< � �� � �� ���� ���< � ������ – ����� � �������� ) �� �� � �� �����

������ ��

Berners-Lee, T.; Fielding, R.; Masinter, L., Uniform Resource Identifiers (URI): Generic Syntax, RFC 2396, Internet Engineering Task Force (IETF), 2004: http://www.ietf.org/rfc/rfc2396.txt

Bray, T. et al. (eds.), Extensible Markup Language 1.0 (Third Edition), W3C Recommendation, Boston, 2004: http://www.w3.org/TR/REC-xml

Buraga, S., Tehnologii Web� ������ ��� ���������� ����� http://www.infoiasi.ro/~busaco/ books/web.html

Buraga, S. et al., ���������� �� � �� �� ����� ����� ����� ����� http://www.infoiasi.ro/ ~cgi/

Buraga, S., Proiectarea siturilor Web ������� � ����� ����� ����� ��� � http:// www.infoiasi.ro/~design/

����!�� "#$ ������%����� &#� „Administrarea serverelor Web”, NET Report, iulie 2002: http://www.infoiasi.ro/~busaco/publications/articles/admin-web.pdf

Dürst, M.; Suignard, M. (eds.), Internationalized Resource Identifiers, RFC 3987, Internet Engineering Task Force (IETF), 2005: http://www.ietf.org/rfc/ rfc2987.txt

Freed, N.; Borenstein, N., Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies, RFC 2045, Internet Engineering Task Force (IETF), 1996: http://www.ietf.org/rfc/rfc2045.txt

Freed, N.; Borenstein, N., Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, RFC 2046, Internet Engineering Task Force (IETF), 1996: http://www.ietf.org/rfc/rfc2046.txt

Gettys, J. et al., Hypertext Transfer Protocol � HTTP/1.1, RFC 2616, Internet Engineering Task Force (IETF), 1999: http://www.ietf.org/rfc/rfc2616.txt

Jacobs, I.; Walsh, N., Architecture of the World Wide Web, Volume One, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/webarch/

Kindberg, T.; Hawke, S., The ’tag’ URI Scheme, RFC 4151, Internet Engineering Task Force (IETF), 2005: http://rfc4151.x42.com/

Masinter, L., The ’data’ URL scheme, RFC 2397, Internet Engineering Task Force (IETF), 1998: http://www.faqs.org/rfcs/rfc2397.html

Naik, D., Internet Standards and Protocols, Microsoft Press, Redmond, 1998 Rescorla, E., HTTP Over TLS, RFC 2818, Internet Engineering Task Force (IETF),

2000: http://www.ietf.org/rfc/rfc2818.txt Shiflett, C., HTTP Developer’s Handbook, Sams Publishing, 2003 * * *, World-Wide Web Consortium, Boston, 2006: http://www.w3.org/

Page 29: Sabin Buraga: 'Tehnologii XML

Capitolul 2

Modele de date semistructurate. Familia XML

„%������� � ��!C� � � ���� ��� � �� ���� � !�< � ��!��” Antoine de Saint-Exupéry

Capitolul expune cele mai importante aspecte privitoare la meta-limbajul XML, oferind o privire de ansamblu asupra tehnologiilor XML în ��!���# "� ���'���� �������� �� �����(������ ������� �� �����!���a documentelor XML prin intermediul unor limbaje standardizate ca )���%� )"*� )�* "�%���� �+*�) ,- �� ).���/# &� ���������materialul expun� ��������� �� ������ �� ����!����� � ��(���-���� ��������������� ��� 0�'� �� ���� ������ )�*# "��� ������(������� ������� ��0�1� 0�'��� �� )�*# *� (���� ��������� �� (���

���'������ � ��0���� �� ��������� )�*#

Cuvinte-cheie: date semistructurate, XML, meta-��0�1� ��������)�*� ��0��� ����������#

1. Introducere

1.1. Formate de date

�������� �� ���� �� ����� ���� ���� � !������� �� �� ����� � � ��� ���� ���� 4��� ��� � ������ � ���-ul recurge la identificatori unifor! �� ��� ��< ���� � � �������� ��� � < � ��� � �� ����� ����������� � !�� ����� � �������� ����< �� ����� �� ��� ���� �� �������� �� �� !��� �� ����� � ������ � ������� ��� ��� �8����refolosirea formatelor existente, printre aspectele importante legate de aceasta putându-�� ��!� � 9.����� � �����< �--):2

Page 30: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 30

• ������ �� �� !����� ��&����� � ��� ��� �� ���� �� � 9��� �K� �'�< �--)< � K� �'�< �-- :L

• ��� ���� �� ���� 9� ��� �� ����� ������ � �!�< ��� C�necesitatea ������� ��� ���� !����� �� ���� ���< !!��<data ultimei actu���� :L

• �&���������� 9!� ���� � ���� �� � ����� ��� ��&���< � ��� ������� ����� ��� �� �H��� ���� ��� �� �����< !��������� ��extindere fiind, practic, infinite);

• ��!��� �� �� !����� 9� ��� �� ����� � �� ���n���� � � -un format de date care în anumite cir��!����� ��������� �� ������ �� �� �� !��� ��� �'��< ���� � �� ���� � � ������într-un mod specific – de exemplu, un document poate avea „scufundate” meta-���� � ���� � �� � �� ������ �������< ������� �� ����� ��� ��2 !�' ����� ��� ��� ���� < ��! �4<expresii matematice etc.);

• ���� � �� ��������< � ����� � �� ���� 9������ � �aspecte trebuie pe cât pos�� �� �� � ����� �� -� !�� � ����-����:�

4��� �C� � � *J6- �� ���� �� �-au axat asupra modului de procesare 9� ���� �� ����< �� !���� �� ���� � ���u��� !� ���� �� ������ ��� ����� � � ��'� �!�� :< ������ �� !��� !� ���in importante decât codul-�� ��< ������ 7 � J ��� �������� "" �� ����� �� ��� �� �� �� !��� �� ���� � �� ��� �< ������� � ������ �� �������� �� � ��< �������� �� ��� �� !�� ���� �� � ����� 9������ � � !�< �� ���� !� !����ori, p��C� � ������� ��� �� ������� < �� �� ������� � ���!macro-urile). Cu proliferarea serviciilor Internet, mai ales a Web-ului, datele au putut fi publicate liber, folosindu-�� � �� !�� � ��������� ��� ��������� �� ��#�� ;���C� �� ��� mileniu, datele sunt considerate !��� !� !�� ���� ���C� ����� 94�����< 3� �� � $!��< �--�:< ��������C� ���� � !����� �C� !� ������ � �� !��ilor, prin intermediul unui format deschis, extensibil – subiectul acestui capitol. Mai mult decât atât, modelarea datelor nu re������ ��� ���&� – ��������� � � -un set �� ����� �� !� �� � –< � � ��!���� – pâ� ���!< �� ������� ��codul-�� �� �� � �' �!��� �� � elucrau acele date.

1.2. Modele de date

4��� �� !����� �� ���� ������� !�� � ������� �� ����� � � � ����� � ��� !���� < �� ��� ��������� � ���� ������� !��� � !���� ��

Page 31: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 31

�� ����� �� %������ � ��� ���� ��!��������� � ����� � ��adoptarea unor modele de date diferite.

� ������ �� � ��������� ��� anilor ’60-’70 ai secolului trecut se pretau pentru modele de reprezentare ierarhice (arborescente) sau bazate pe grafuri.

3���� �� ��� �� � � T7- � ������� ������ �� ���������are, au fost dez-voltate arhitecturi client/server, punctul central fii� ����� �� !�������rela����� �� �� ����� � � ����� � � ������ � ������ � �� �� !�� �� -� ��� �� ������ < ������ �� ��� �� �� �� < � ��� �� ��!���< ' ���unui limbaj structurat de interogare (SQL – Structured Query Language), u� �� ���� �� � �' �!� � � �������� 9��+ – Application Programming Interface: � �� E���F �� ��'� � � � ��������� 9� ���! 34K� – Open Database Connectivity – sau JDBC – Java Database Connectivity). Apar ��� � ����!� � ���� � �� ��&� �< � !���� �< ��' ���� ��� �����<inclusiv anumite costuri (legate, de exemplu, de optimizare sau denormalizare) (vezi Fotache, 2005).

� ������ ���� E'��� ��F �� � ������ �� ��'������< ������ ����� ��&�< ������� �� � ������ �� ������ve, inclusiv cele mobile. Daum � #� �� 9�--�: ����� � �� !������� �� ���� ���� !� ��� ��� ��� ����recurgând la gramaticile regulate (Jucan, 1999). Astfel, trebuie impuse ce- �� ����!��� � ��� � � !���� �� ���� E����F< ���� � ����� actuale de evo���� � ���-ului:

• asigurarea accesului la meta-date (datele privitoare la date) – � ���� ��� �� ������� ��� � ����icarea, generarea (semi-)auto-!���< � ���� !� �� � ���� �� !��� � !���-datelor;

• adnotarea resurselor, inclusiv a meta-datelor; • ���������� ����� �� �� �'� ���&���L • �� ��� �� ��' ��� – �� ���� ���� �� !��� �� �� ��' ���

��� ����� �� ��� '����� ���� !����i��L • ������ �� ����� �� � ���� !� ��� ������ < �� '�� � �� ��

documente preze�C� ���� �� ���� 9��� � � �� �'� �!���:L • �������� �� ����&��� � ����� �H��� �� � �����rii; • utilizarea de formate standardizate, deschise.

1.3. Date semistructurate

; !�� �����< ���� �� � � ��� � ����!� ����� ������� � �����or în ��� �� �� ���� �� ����< � ���� �� ������! � ��$��� definind structurile �� ��� �� �� !��� �� �� � �� ! �� �� ���� �!� ; ����� !������� �������< ������� ����!� ������� �!� �� � ���� �C!�� �� �� ����<

Page 32: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 32

���� ������ �� �� ��� �� !� �� � ���� ���������< �� �������� �� !������entitate- ����� 9%� – Entity-Relationship:� $���!� ���������� ���� �� ������, � ����� �� ����� ������ ������� � ���� �� �� ���� !��� ��� ���� !���� �� ������� �< !� !���< ����!� � ���� � oiecta�� ���� �� ������� ���� �� ���� �� �� !��� $� �� !�� ����� ����� �� �� ����!larg de date uniforme< �� ���� ��� � !�� � �!�� �� %&��� ��� ����� �C� ������� ��� �� � �������� ; ������ � �����Web-���< ������ ��� ��� �'�� � ��t proveni din diverse surse. Utili-���� ��� �� � ��� �� � �� ����� � � o���� 8������� � ������!� �� ���� �� ����< � !���� ������ !�������� �� !�� �� �evo������ � �!�� ����!C�< ������ �� �� � � !������� ��� � ���� ��-mitate (unbound: � ���������< ��&��C� apriori un vocabular comun. 5 �&�!��� ������� < ��� �� ,�� ���� 9�-- :< ���� ��� �� � �� �������� �� ����� '��� ��!��< � ���� � �� ��'� ��!� � ����C� ������ �� � � ��� � � ����� �� ��� ��� � �� � �'�� �� ��� ���� ���� �� !C�� �� 3 ���� �&�!����� � � � ����� � ����� �� �����' �� ����� 5 ��� ��������8 �� � ��������� !����� �� ���� ���� �� ����� ������� � ���� � ����� �����&������� 9self-explanatory: � � �� !� �� � !����� � � ���� �� � �� ��!� �� ����� 4� �&�!���< � ����� �� �� !�(„Sabin”, „Buraga”, 33), preluat dintr-� ������ � �� ���� �� ���� �����-���< � ��� � � �� !���� �� !�� � ���� � �� ��!���� ������ � ����!presu��� �� � !��� ���� ���!��� ����!���� � ��!��� � �!����� �� ����< ��� ���� ���� �� E'���F �� �� ���� ���!�� �!� < �� �� ���� �� ������� � ����!� �������� � ����� � �� �� �� �C ���< �� �� ����� �� �� �!� �� �� � ����� �������� �� ��� �� ���� �� ���� ���� ������ ��� �� �����8�� ����� �� � 8��� ; ����&��� ���-ului, date�� � � ��� �� �� �����&�������< !� ���� �C� ��� �� ���!������ � �� �� ����� 9�� ����< �� ��< �s��!� ����: �� � � ���� �� �� ��8���� � ����!� �� ���� �o!�� � ������ �� !�� �� �� ����� �� ; ��� ��� �� � ��������� ����!� �� !��'�!�� �� ������ < ��������!�� ���� ��� � ������ � ����� �� ���i� � �� ����!� �� ��������� ! ��������< K��!� � $��� 9�---:< ������ ���� �� � �� ���� �� ���� 9�� � � � ��������� ���� �� � � ����:< ��� � �� '�� � ��� ��!���� ��� ���� ���� ; ����< � �&��� � ����� �&���� � ���� �� �-���!� ���� ��!�� ���� ���� ,�� ���� 9�-- : ����!���� � date ��!�� ���� ��� ����� �� !�� �'���� �� � � ��� � !������� ���� ������ ���� ! !�������'�� < ����!��� � �� umentelor software � �������� #���� �� � � ����!��� �� ���� � ����� ����&� ��� ����privind nepotrivirile dintre in�� !���� �� �� � �� ! �� �� !�����! ���������� ��� �� �� �� �!����� ��������

Page 33: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 33

��� !� � ����� ��� �� �&����� � ������ ��!�� ���� ��� ���� ��� �cadrul paginilor Web formate din text scris în limbaj natural. Un mare � �����8 � �� !���� � ����� �� ��� ���� ����� �� ����!��� �formate precum HTML, PDF, JPEG sau Word. Modelul entitate- ����� ����� ������� ��� � � !����� �!��8�� ��� ��2 ��!� ��!��� � interme��� � ����� � � � ������� � ������ �� � ��� 9�are, din punct de vedere teoretic, trebuie a priori stabilite). Mai mult, popularele limbaje de specificare a schemelor sunt în general prea simpliste pentru a modela �� ���� �� !������ ��!�� � ��� !� ��!���&� �� !��� � �� ���-������� Desigur, �� ���� �� � ������ !� ���< ���� �� �� �� ����� ������ � !����� ����� �� ��!�� �� �!��8� "#�� � !��������� ���� �������<�!��8�� "#� �� !�� !����� �� �� ����� � �� ' �� �� !��< �� �� ����complet structurate (e.g.< �� !�� � ���� � �� ���� ���� �: �C� ����&� � �!��8 ��� ��� 4��� ��! ��! ����� � ��� �� ������ ������<����!����� "#� ��� ����� ������ !&��< ��� � � ���� !��� � ������ !��� �< �� ���!���< ��� � �� ogate.

2. XML pentru reprezentarea datelor semistructurate

2.1. Precursori

��� � ������< � ��! ����� � ��!��� �� ����� ����!����� ����� ���� �� ������� < ������ ��� �� ��� �� ������ ���� ���macro-uri care indicau un anumit mod de formatare a documentelor, într-o m�� � �� ����� � 9�����a �� ������� ����C� �� �� ���� �����hardware sau ale sistemului de operare). Prin contrast, modul de codificare �������� 9��� �� �� ��C ���� ��� T/-: �������� marcatori (tag-uri) des-criptivi pentru specificarea modului de aranjare (structurare) a unui anumit document. Printre sus���� ������ � � !� !����� �-� �!� �� �William Tunnicliffe< � ������ �� G�� 9Graphic Communications Association), �� � � �� � �� !��� ��������� ������������ �ocumentelor de formatul lor.

Tot la finalul anilor 1960, Stanley Rice propune ideea unui catalog ��� ��� �� !� ���� �� �!�� ��� ��� � �� ���u � �� ���� �� �� ���Norman Scharpf �������� ������� ��� � ������ ���� � ��� GenCode, capabil a recunoa�te ce tipuri �� ���� ��� ����� � ���� ���� � ����� ������!�� � �� �� � !odul de includere a documentelor de dimensiuni reduse în unele mai largi. Acest proiect a jucat ulterior un rol important în dezvoltarea standardului SGML, precursor al limbajului XML.

Page 34: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 34

În 1969, Charles Goldfarb< �������� �� � ������� +K# �� �� ���� � �����!��� �� !������ ��' ��� � ��!��� �e'�����< �!� ��� ��Edward Mosher � Raymond Lake, inven����� GML (Generalized Markup Language) pentru a permite editarea, formata �� �� ��&�� � �� ��8� ��documentelor în contextul sistemelor distribuite. GML se baza pe ideile de codi��� � '�� �� ��� �� ��� � ������� � � ������ �������� �� �������� ������� � ��������� �� ��������� prin intermediul unor structuri de elemente recursive.

�� � !�8� � ��� G#� �� ���� !���!����� � ����!��� �� ���� ���!���� ���� �� mainframe-� �� ��� � +K# � ���� �� �� ��� G����� � ��con��� �� ���� ��2 ��� �� �� ������< � ����� � �������< ��� ��documente concure��< �� � � �� ��� �� � G#�< �� �� � ���������� ���� � ��� $G#��

În 1978, ANSI (American National Standards Institute:< � ��!����� ��� �� � ����� � � �� !���� < ����!���� � ' �� �� � �� �� ����� �� � �� ��de limbaje de programare pentru � ���� � �� ����� ��� � ��&���� < ' ��condus de Charles Card, avându-� �� !�!� � �� @� !� $��� �� � ���cooptându-� � �� G����� �� ���������� � ���� �!��8�� $G#�< � �� � � i!�� ����� � � ���� �&���� � *J7-� 4 ��� *J7�< G�� �-a putut recomanda �� ����� � ���� ��< ������ �� #��� �� ��� � �� $������ 5���

În anul 1984, proiectul a fost autorizat de ISO (International Organization for Standardization:� �� ���� �� �� ������ � ��� �� ��!������ �@$+<condus de William Davis, cu ����erea comitetului GenCode al GCA, avându-l la conducere pe Sharon Adler de la IBM.

; ��� *J7 < � ���� �������� � ���� �� �� $G#� �� ���� ����� ��� ������ ��&��� ��� �� ���������� $G#� � ���� �� ���� � �������în anul 1986, utilizându-se un sistem SGML dezvoltat la CERN de Anders Berglund – ISO 8879: Information Processing – Text and Office Systems – Standard Generalized Markup Language (Goldfarb, 1990).

�� ���� �� ����� �������� ""< ���� ��� ��� � �� � � �� �� ��limbaj co!����� �� $G#�< �� �� � �� �� � ����� �� ����� �� � ��� ��Web-ului, operându-�� � �� � �� �!����� � ����� ��� ���������SGML. În 1998, apare prima recomandare a XML (Extensible Markup Language), actualmente fiind în vigoare XML 1.0 – e��� � � �� 9K �> et al., �--)�: � "#� *�* 9K �> et al., 2004b).

������� ���������� ������������ ���������������

����! ����� � "#� �� �� � ����� � �� ����� ��ntru descrierea de marcaje (markups) privitoare la resursele electronice. În fapt, XML reprezin��

Page 35: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 35

un meta-�!��8 9���� � � �� !��� � �� �!��8< ���� ! �� ' �!�tici �������:� �� ������< � ���� ����� �� � �!��8 �� ����� � 9�� �� !�tare) �� ��&��< �� ����� �� ������� �������� ������� �� � ��� � �'�s���

Termenul marcaj (markup: � ���� ������ ��� ��� � � ���� � ��!������� < ��� !� '��� � ��� �� �� ��&� �� ���� �� � ��� ����-redactorului cum trebuie listat un anumit pasaj ori chiar omis. Exemple de acest gen ar fi sublinierea unor anumite cuvinte, folosirea anumitor simbo-luri specia��< ���� �� �� �� � �� ����!�� �� � �� � �� ��� � 9���:�������� ���� ��! �� !��� �� � !� !� �� ��&���� �� ���� ����!������<termenul s-a extins pentru a acoperi toate tipurile de coduri de marcare inserate în textele electronice cu scopul de a indica modul de formatare, ���� � � ���� ���iuni.

Generalizând, putem defini marcajul sau codarea � ��� � �� ����� �� ��� � ��� �&���� � � �'!�� �� ����� �� � ivel superficial, toate textele sunt cod���2 ���!����� �� ��������< ����� �� �� !�8������< ����� ������ �� � ��'�< ��� � ������ �� � ����� ���C� � � ��� � ���!� ��8�� ������ �� �� ��&� ��� � � ����� �� ��!���� ���� ����� ������ ���< � � ���< �� � � ���riere a unui manuscris din scriptio continua într-un format special, intern, dictat de utilizator prin folosirea, expli��� ��� �< � �� � �����H!� ��8� �� � ������ !���� �� �� -� ��� � � �������� ��&����� 4e�'� < ����! '�� ���� ������� ���iune �� � �� �� �� ��� �� ����

Printr-un limbaj de specificare �����'�!< ������< �� ��� �� ���!����� ��marcare utilizate pentru codificarea textelor� 5 �!��8 �� !� �� � � ���� ��specifi�� !���!�� �� !� ��8� ���'��� < �� !��< !�� � �� ���ficare � !� ��8��� � �� � ���� ��!���� ���� � !� ��8 ������ 9�!�� � �-cesului de speci��� � � ���&� � ��!��� �� �!��8 �� � �' �!� �:�

%&��� � !���� ��� �� ���� ��� ����� ��� "#�< � !��� � � !����-nite de la SGML:

• utilizarea marcajelor descriptive (descriptive markups) – se folosesc !� ��8� �� � ��� � �!� ��e���� ��� � � ������� �� � ��document (de exemplu, <para> ����� ������ � �� ��� �� -un anumit document, în cazul nostru început de paragraf). Prin contr���< � �!��8 �� !� �� � � ����� ��� ������� � ����� ��îndeplinit la un moment dat – e.g., move(left_margin, 2cm) ori skip(this.line);

• adoptarea tipurilor de documente – $G#� � ����� ����� ���� �� ����!�� � �� ����� � ��� �� �� ����!�nte: DTD –Document Type Definition. Documentele sunt privite ca având tipuri, ��� ��! �� �������� � ������� �� ���������� �� 5 �� �� ����!��

Page 36: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 36

���� ���� �� !�� �� �� ��� ���� ��������� � �� �� ���� � �� � 4��&�!���< ����� �� ��� � ����� ����� � ���� � �!������� ���< � !��� �� � ���!�� � �� � ������� �� !� !����paragrafe. Documentele având asociat un tip, se poate utiliza un analizor (parser) pentru a le verifica vali������< ���� ��� ����� ��� �� �� ����!�� � �������rea elementelor specificate în DTD. ������< ����!��� �� ������ �� ��� � � ������� �� -un mod ��� !� � �' �!��� ��� �&������ �� !���� ���������� ������� �� �� ���� � ��� ����!�n���� � �� ��� ��!�� �� ���într-� !�� � E���'���F� �ecomandarea XML nu impune în mod obligatoriu �� � ����� �� ����!�� �� �� ����rmeze unui tip de document (vezi mai jos);

• �������� ������ – "#� ��'� � � ������ �� ����!����� ���� �� �� !��� ��� ������ �� �� ���� � 9�� ������ ����� ���U����:< �� ������� �� ������ !� �� �D� �H����D� � ���� � ������� �� �&��� � � !� ��8��� 9���� ��! ��! �����<un document XML poate include elemente provenite din alt document XML);

• case-sensitivity – ���� ����� "#� ��� �������� �� �az, literele mici diferind astfel de majuscule.

������< � � � � ����� �� �� � �� ����� !���-�!��8��� "#� �� ��� �ecou însemnat în industria software, reprezentând o tehnologie sine qua non a prezentului, se pot enumera:

• suport acordat Web-ului, pri ������ �� !���!��� �� � � ��limbaje de programare actuale;

• ������� ��� � ����� �� �� ������ 9���� � ��� � 5���� ��������� �� ������ � � �m��:L

• meta-limbaj (se permite definirea de noi limbaje, într-� !�� ��� �����:L

• s����� ��� � �� ����� �� �������� ��� ���� ��� ���-ficate via URI.

�����C�< "#� �� ���� � !����� �� ���� � � ��� ���� ��� !��� ������ ��C� ��C� ��!���� ���< �C� !� ���� ��!� �� � �������elege. Scopurile limbajului sunt cele legate de utilizarea lui în Internet, ���� �C� � �� ����� �� ������< ���� C� ��!���������� �� ������SGML, dar fiind mult mai flexibil decât HTML. Fiind � !����� ��� ������� � �� ����� �� 9���� � ��: �� !���� ��� ��&�< "#� ����� ������ �� � ������'� ��!���!��� � �!��8ului HTML, nu drept o înlocuire a sa.

Page 37: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 37

������� ����� ��

5 ����!�� "#� ����� ��� �� � !���� ��� ����'� �� ��������(Bray et al., 2004a):

• ����� ��� 9� ���'�� ��� � ��!�����:L • elementele; • atributele; • entit����L • ������� �� !� �� �L • �� ������ �� � ����� ��

������������

4���!����� "#� ��� � � � ��� �� ������ �� � ����� ��� 9� ���': "#��� � ������� �� ���� �!��8��� "#� ���i���� 4���� ��� "#� ����� ��<?xml � �� �� !� �� �� ���� ��� ?>� ; ����� � �� � �&��� � ����!������� ��� "#�< ������� � ���� �� �� � !�� ���!�� �� ����!������4���� ��� � ����� � � ������� �� � � ��� ���!�� � � ���� �� ������ %&��� � � �� ���� �� � ��� �� ��� � � �e��� ��� "#�2

• version – �� ���� �� �� � �� ���� �� ��� ��� "#� 9*�- ���*�*:� ; !�� �����< ����� ��� � � �� !� <?xml version="1.0" ?>. 4���!����� � � �� � ����� ��� �&��� ��������� �� ����� ���� �� �� ���� !��� ������ �� ��< ������ � ������ ��� "#L care vor prelucra acele documente vor genera eroare. Conformarea �� �� ���� ��������� ����!� ����� �� ���� ����� �����în acea versiune sau în versiunile precedente, dar numai în cazul când este specificat acest aspect.

• encoding – atributul poate lua valorile UTF-8, UTF-16, ISO-10646- UCS-� ��� � �� ���� ���� �� � �� ���� ���!���! ��� ������5����� 4��� �� ��������� ���! �� �� !���! �� � � ��������� �� +$3< ���� � ���� ������< �&����< ��� � �� �� ��� ��care se ���� �������� ���� ��� �� �� ���� �� 4��� �� ��C����� � ��&�o en����� �� � � ����� � � ������� � ����� ��� ' ���� �!���! �� �� ���� �< ���� �� '�e ���� � � �� � ������� $���� ���� ���� � �$�++ ���� � ���!���!� � ������ 5�,-8. Un exemplu ��� �� ����� � � � ������ ���� <?xml version="1.0"

encoding="UTF-8" ?>. • standalone – atributul poate lua valorile yes sau no. În

����!����� "#� ��� �&��� ��!�� ��� �� �� � ���� ����!����� � �� ���� ���� ��� �� !� ��8�< �� ���� ��� ����� �

Page 38: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 38

document. Când valoarea este yes< ���� ��� ���� �� � ��������!��� ��� � ������ 4��� ����� �� ���� no, atunci este posibil �� �&��� e�� �� �� � ���� ����!���< �� ���� � �&���< ����folosirea atributului nu are se�� +!����< �� ����� � �� �����!�� � � �� � ����� ��� � ���� �������� �� �����standalone � ���� ��� �� �&��rne.

Elementele

Caracterizare

��!����� �� ���� ��� 9������-text) a unui document XML este elemen-tul. Diferite tipuri de elemente au asociate nume diferite. Fiecare element trebuie specificat explicit prin intermediul marcajelor (tag-urilor). Perechea marcaj de început (start tag) – !� ��8 �� ��C �� 9end tag: ���� ������� ������ � �� ���� � ����� � ���!����� ������iv în cadrul unui text 9�!�� ����� ��� ���� ��� �� �� ����� � ��!� �� ��������L ���&�!���< � �< ������� �� ������ � �� ��C �� �� ���� �� �� ���� ��scriu între {}, iar în limbajul natural folosim ghilimelele pentru a delimita � ����:� ; "#�< �� �������� <element> pentru a specifica un tag de ������ � </element> ��� � ��� �� ��C ��< ��� element este numele unui element oarecare (specificat de utilizator ori de autoritatea care a ������� ���������� �!��8��� ��zat pe XML folosit). Între caracterul „<” � �!��� � �� �-zis al elementu�� � ��� �� !�� ������ �����

@�!��� �� ���!�� ����� � ������� � ��� �< �� � � ��!��� ������(e.g., „_”, „-F< E�F:< � ���� �� ������ �� � ��� � ��� �� �� ���� ul „_”), regulile sintactice fiind similare celor privitoare la identificatorii de variabile. Numele începând cu caracterele „xml” (în orice modalitate de scriere, cu majuscule sau minuscule) sunt rezervate. Numele unui element nu poate con�� ���� ����.

Modele structurale

5 ���!�� ����� � �� 9� ���� !� �� � tag-� �� �� ������ ���C ��: ��� ����� ����� � ��&� 9� �� �� ���� �: � ���� ���!���� #�!���� ���!��� �� ������ �� ��� � ����� !� ����� 5 ������ ������� ��important ���� ��� � ��� �� ������ �� ���!����� � ���� �� �� ����� �imbricate corect. ������� ��&���� �� �� ���!�� ����� � ��!��� � �� ���� ����� !�� �� ������ �� � ������ �� �� ����� encoding � ����� ��� "#�<� �� ��� �� �� ���� ���� !������ �� !���� ����� �� � �'� caracter spa���

Page 39: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 39

������� �� � ���!����� "#� ��� � ������ � �� !� ��2 • ������� – ���!����� ��� '�� � � �������< ���� � �utând avea un

„frate” (sibling: ����!�� �� � !��� �� ���!�� 9����� �� ������nivel, neimbricat);

• ��� �� – unele elemente pot fi obligatorii, pe când altele pot avea � �� ���� ������ 9��� infra);

• ierarhie – un element inclus în altul se va numi copil, iar elementul plasat la nivelul imediat superior este denumit ������� (root); ele-!���� �� � � � � �� �� ����< ��� ��< ���!����- �����< ����� �� � '�� ���� �� ���� � � �� ������ �� ����!����� "#�L

• grupare – mai multe elemente pot fi grupate de un element-�� ��<�����C� �� � ����� L

• incluziune – un element poate include alte elemente; elementele ��� ��� ���!�� � elemente-����%�.

��� � � ���� � !� ������� ����� ������< ����� �! � model structural ��� �� �!���� � ������! �� �� ! �� ����i��! � �����'� � � -o succesiune de poeme, titlurile lor, versurile din care sunt compuse. În termenii XML, antologie �� ���� � �� �� ����!�� � ���� ��!����dintr-o serie de poeme. Fiecare poem ����������� � ���!�� titlu (unic) � �C���� ��� � �� ���!��� ��� �< ���� � �� ��� ���C� � �!� ��elemente vers. Astfel, avem:

<antologie>

<poem> <titlu>...</titlu>

���� ��

<vers>...</vers>

<vers>...</vers>

...

����� ��

</poem>

<poem>

...

<!-- mai multe poeme... (acesta e un comentariu) -->

</poem>

</antologie>

%����< �&�!���� �� !� ��� � � � ������� ��!�� �'�� ����!��� � � �� �����' 9�� �&�!���< � ����! !��� �� � ���� ��� ��� � �� !� !���� � ��� �� �� ������ �� ����� �� ���!:� ����� <vom avem nevoie de un mecanism de precizare a structurii.

Page 40: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 40

�����< ��� � �� ����� ���< ����!���� �� �� �����'� ����� �procesat în anumite moduri, pentru diverse scopuri. Un program de indexare ar putea extrage doar elemente relevante criteriului ales pentru realizarea in��&���2 � ���� �� ���� < � ���� � ���� !� ��� ������� �����dintr-o poezie. Un program de formatare a textului ar putea insera linii �� � ���� � �� ���< � ����� ���� � ���! � ����� � ��� � �' ����< �olosit � �� � �� ��� � ��������� 5 � �' �! !� �!���� ��� � ������'����� ����a�� �� ��������� � ����� ���� !� !�� �� � ���� �� !���� ���� � �oem.

#������ ���� ��� ��!�� ���� ��< ���� ��� �!� �� �� �� ���H�� �� nu este a priori cunoscut, în cadrul documentul� ���C� ��� �� � �������� ��� "#� �� � ��� � � �� �unoscute.

5 ��� �&�!��� �� ��� � �� !�� � �� ����� � � �� !���� � ���� ��� ���� ��� � �� �������� �� � ���� �2

<autori>

<autor>

<nume>Sabin Buraga</nume>

<adresa>http://www.infoiasi.ro/~busaco/</adresa>

<varsta />

�� ��������������� �� �� ������� ��� ������� �������

</autor>

<autor>

...

</autor>

<autor>

...

</autor>

</autori>

4 ���� ���� �� �� �&�!���� ��� � < ���� ��! ����� �� �� ���!ent �� ����� ��< �� � <varsta /> sau <varsta></varsta>, ambele variante fiind corecte.

Atributele

Un atribut ���� ������ �� ������ �� � ���� � � ��!�� � �� ����� � ����� � ������� 9�� ����� �: � �� ���!��� ����! ���� � ����'� �� � �� ���� 9���� � ���!���: � ��8����� 9�� � ���� � ���������:�Atributele sunt localizate în tag-�� �� ��� � �� �� ���!��< !���� �����!��� ���!����� 9���! ���� ����� �� �� � ��� �&��� ���� ���� �numele unui element), sunt urmate de „=”, apoi de valoarea atributului,

Page 41: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 41

�� �� �� � '��!��� ��� ����� ��� � 4��� ����� �� �� �� ��� � ������������� �� � '��!���< �� � ��!����� � � �� �< �� ��� �� � � ����� ��� � ��� � � �� ��� � � � ������� � ����� �� �������� ��ntru un element pot exista oricâte atribute, specificate în orice ordine, atât timp cât sunt declarate corect.

4� �&�!���< � �� �' �� ����� ������� �� �� ��� ������ !���� ��aliniere (la stânga, la dreapta sau centrat), iar alinie �� � �� ��������d��C� ��� � �� �' ���� � ����� � � � � ����� ���� � ���� ����� �� �' ���(context lo���:� @�!��� �� ������ �� ���� !���� ����� �� �'�� �������� ����� ���!����� � �� ������ �� ��� �� ��� � ��� �� tag-ului de start.

Pentru exemplele de mai sus, în cazul antologiei se poate specifica data ���!� �������� � ��� ����� ��< � ��� � ���� ���� �� �utem asocia � �� ��� � ������� ���� 2

<antologie coordonator="Sabin Buraga" data="Oct 2006"> ... </antologie>

<afiliere abreviere="FII���������� �� �� ������� ���������� �������

Atribute XML predefinite

$�������� "#� ��� �� ������� ���� �� ���� � ������� � !�� �� ��� � �� ������� �� �'���� � ���� � �� ������ ����� ;

!����� �� �� ����< ���� ��� ����� � ��� �� ��a��� ���� 9��������� ����< tab-� < � ��� ����:� ; ���� ����&��< � ����� �� � ���� �� �� ������� �� ���� � �� ���s�� ���� ���� 9�� �&�!���< � ����� �&� !� codului-�� �� ��� � ���� �� � ����� � ������� � ��:� 5 �tribut special, numit xml:space, poate fi inserat în documente pentru a specifica faptul ��< � ��� �� ���!����� � �� � ��� � ����� �� ���< ������ ���� �� ��tratate în mod semnificativ. Valorile acestuia pot fi default sau preserve. De exemplu, pentru a specifica un text preformatat am putea scrie: <pre xml:space="preserve">...</pre>.

�� ����� �� ��� �� ����� ��� � ������ �� �!� � �� � ���� � ������ ����� ��&����� 5 �&�!��� ���� � !��orul: <p xml:lang="en-GB">Any colour you like</p> <p xml:lang="en-US">Any color you like</p> <quote author="Sainte-Beuve" xml:lang="fr">Il n'y a que de vivre; on voit tout et le contraire de tout.</quote>

Suplimentar, prin intermediul atributului xml:id, � ����� �� ��������� ���� �� �� #� ��< ?���� � � ����� 9�-- :< ���� � ���!�� "#� �� �����asociat un identificator unic, servind în principal pentru realizarea de

Page 42: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 42

��� �� 9������ ��� �&�� �: �� � � �'!��� �� ������ 4� �&�!���< �contex��� "��#�< � ����! – prin name (din HTML), id (d "��#�: �xml:id – � �������� ��� � � ��'��� � n�� �2 <a xml:id="examen" id="examen" name="examen"></a> ... <a href="#examen">Despre examen</a>

���������� � ���

���� ���� �� ����� ������� �� ���� ���� ��� � ������ ; "#�< enti-����� �� ���� ���� �� ��&�< ��� � ����� ����� ����!� � ��< �� ��� �'� �� ���� �� � �� �' ����!�� ��� ��� � ��� �� �� � ���document.

3 ��� �� �� � ������ � ���� ���� ���� ������� &nume_entitate; (caracterul „&F< � !�� �� �!��� �����< ��� �� �� ���� �� ELF:� 5��� � ���� !� � ������ ����� ��� ��� ���� �� ����� ���� ���� �C��� �� ���� ����� �� �� �� ���� � �� � � ������ �� � � �� � ����� � ���� �� � � � � ��� �� ��� � � �� !� �� � !��� � ��&�� ; !�!���� ��� � �� ��C����� ��� �� �� � ������ � ����!��< ������� �� �� ��������� ������ �� �� � �� ��� � � �� �� ��� � ����!���� �� ����� �� ��cute.

������� �� !� 8�� ���� ���� ������� � ������ �� ��ecifi���� "#�2

!����� 1 %�� ��� �� -����� � �� �� 2,3 ���4 et al., 2004a)

Entitate ��������� �� ��������

< &lt;

> &gt;

& &amp;

' &apos;

" &quot;

���������������

3������< ��!�� �� � ��� ����!����� ������ � � ��ament special în ceea �� � ����� !���� �� � ����� ��

������< �&��� ���������� ����� ����� �4��� 9character data), cu ���� �� ��� � � � ���� � ���� ����� "#�� $�c���� �4��� ��� ��� ��� � ��� ��� ��� �� � ������ �� �� �� ���� � %�� ��� ����ate

Page 43: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 43

��� � � ����� ����� �� ��&� ���C� �� ���� � �� � ������ � �recunoscute ca marcaje. Acest aspect devine important atunci când documentul include, de exemplu, linii de cod-�� �� �� �� �� -un limbaj de pro' �!� � �� � � � � �� �� ����� sintactice. $��&� '�� ��� � ����� �4��� � � �� !� <![CDATA[ ... ]]>. În �� � �� ������� �4��� � � ���� �� ��� � � �� E]]F �� � �� �� � !�� de „>F� 4� ���!���< ������� �4��� � ��� � ����� ���� � �������

Un prim exemplu reprezi�� � � �'!�� � ��� �� inetpref.xml, folosit ��� � ������� �� �� ���� �� ������� �� � ��s������ �� ����� � Search Companion a resurselor Internet inclus de Windows XP:

<Label TopMargin="8" Group="1">

<Text><![CDATA[&Select the default search engine:]]></Text>

</Label>

; �&�!���� � !��� < � �� ! �� � ����� �� "#� �� ��rpreteze codul .���$� �� 9� ��!������ � '�� ��� �� ��� �� ��� ��� ��� e������ EUF:2

<script type="text/javascript">

/*<![CDATA[*/

if (vizite > 10) { // vizitator fidel

document.write ("<p>Salut iar!</p>");

}

/*]]>*/

</script>

��� �����������������

+�� ������ �� � ����� � �� ���� � �� ������ �� !�r��8 �� � ������ !�� � ���� � �� ��!�� ������ �� � !���� � � �&������� ��� �procesa �� ��������� +�� ������ �� � ����� � ��� � ��&��� ������ ���� E<?F � !��� �� �!��� ������� � �� � ������� � � �� ����������� ����� ������< �� ��� �elimitate de „?>”.

@�!��� ������� � �� ������ �� � ����� � � ���� �� �� ��� � ��xml, XML sau orice alt mod de a scrie cu litere mari sau mici termenul „xmlF� 4��� ��! �� ����� �!� ��< ����� ��� "#� ���� ��� � �� �����de procesare, fiind utili���� �� � ����� �� "#��

În exemplul de mai jos, analizorul XML ar putea invoca interpretorul ��� ��� � �&����� � �' �!��� �������� � ��� �� �� ����!��2

<script>

<?php echo "<p>Salut!\n</p>"; ?>

</script>

Page 44: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 44

4� ���!���< �� �� ���� �� � ����� � �� ��� ����� �� �� ���� �$$��� � ��� �� �������� �� ����!�� "#� 9����� � � K� �'�<2001):

<?xml:stylesheet type="text/css" href="stil.css" ?>

5 !���� �� �&�!����� � ������� !���� �� ��� �� �� '�� � codului-�� �� � "$� 9Extensible Server Pages) via procesorul Apache Cocoon:

<?cocoon-process type="xsp" ?>

5 ���! �&�!��� �� ��� � �� ����� �� �� � ����� �� � ����� � �cadrul platformei Adobe XMP (Extensible Metadata Platform):

<?xpacket begin='...' id='W5M0MpCehiHzreSzNTczkc9d'?>

2.4. Familia XML

�!��8�� "#� ��� � !� !��� ���C� � ���&� ��!��� ��� � �� ����� �������� �� ���� ��� ��� ��!�� ���� ���� "#� ����� �� -o familie de limbaje bazate pe XML pentru reprezentarea date�� � ������ �� � ����

������� ��!�� �� �!��8�< !��� � ������ ��������� �� ��� ��stocare, mod��� � � ������ � �� ��� � ������ < ���� ��!���� �2

• XML (Extensible Markup Language) – ������ �� ��������� $G#�<������� ��� � � !���!��� � !� ���� � 9K �> et al., 2004a; Bray et al.< �--)�L K �>< ������� � ��>!�< *JJJ:� #��������� ��validare sunt concretizate de schemele XML, specificate în Fallside � ���!��> 9�--):L

• XLL (Extensible Linking Language) – oferind suport pentru specifi-�� �� �� ��'��� ��� ��&�< ��� ����� � �o�� ��!����� !�8� �2

– XLink – conceput pentru descrierea leg��� �� 9�!��� ���!������: �� � ��� ���� ��� 94�����< #��� � 3 ����<2001; DeRose et al., 2005);

– XPointer – � � �� ���� � ���� �� � !�� � �&������ �unor scheme de adresare a datelor XML (Grosso et al., 2003);

• XSL (Extensible Stylesheet Language) – permite transformarea documentelor XML în alte tipuri de documente (XML, XHTML, WML etc.) – ��� ��� ( 9*JJJ: � Q�> 9�-- : – � ����� �� �� obiecte de formatare (Adler et al., 2001; Berlung, 2006), în vederea ��� �������� "#� � �� !��� precum PDF;

• XQuery – �!� ��� �� �!��8�� "���� 9��� ( � 4�����< *JJJLBerlung et al.< �-- : ��� � ���������� �� �'� ����!����� XML (detalii în Boag et al., 2005).

Page 45: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 45

��!��������������� ���"� ���#$�

Practic, este imposibil de enumerat toate limbajele bazate pe XML existente �� � � �������< ����� ����� ��� �� ?�! � ����� � ������� ����'� <������ �� ���� �&�!���2

• �� !��� �� �������� 9�� !��� �� ��� � � ���elor): – în cadrul navigatorului Web: XHTML (Extensible HTML); – în medii mobi��< �� � � 2 �#� 9Wireless Markup Language); – formulare electronice: XForms; – ' ���� ����� ���2 $?G 9Scalable Vector Graphics); – lumi tridimensionale: X3D (Extensible Three Dimensions);

• �� ����� �� ��� ���� ��� �� �����2 – expresii matematice: MathML; – ����� !���!��� �� ����2 $#+� 9Synchronized Multimedia

Integration Language); – �� !�� ������2 VoiceXML; – ��!����� ��� �� ���� �� ������� ��2 "5� 9Extensible User-inter-

face Language), XAML (Extensible Application Markup Language); – doc�!����2 4��K��( 9Documentation Book); – reguli de realizare a afacerilor electronice: BRML (Business Rules

Markup Language); – ����� �� �� !���� � ���� ��� �� ���� �� � �� 9e.g., Open-

Office): OpenDocument; • descrierea resurselor Web:

– cadrul general: RDF (Resource Description Framework); – exprimarea vocabularelor de meta-date: RSS (Really Simple

Syndication), Atom, DCMI (Dublin Core Metadata Initiative); – exprimarea de ontologii: OWL (Web Ontology Language); – ������ �� �� ���!���� �� ��������2 XMI (XML Metadata

Interchange format); • descrierea serviciilor Web:

– serializarea datelor transmise conform paradigmei RPC (Remote Procedure Call): XML-RPC;

– descrierea serviciilor Web: WSDL (Web Service Description Language);

– exprimarea protocolului de transfer: SOAP (Simple Object Access Protocol);

– �&����� � ������� �� ����� 2 K�%�)�$ 9Business Process Execution Language for Web Services).

Page 46: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 46

Numeroase alte limbaje utile sunt descrise în lucrarea lui Geroimenko 9�--): ��� ��� � �'��ite la adresa http://xml.coverpages.org/.

Figura 1. Editarea unui document XML cu <oXygen />

; ���� �� � ����� ��� �� �� �� �!��� "#�< ��� � �!��� � !�toa-rele categorii:

• analizoare (procesoare, parsers) XML – e.g., Expat, libxml, MSXML, Xerces;

• ���������� � � ����� � �� ���� ��� – Firefox, OpenOffice, <�">'�HU< $�>���< "#� $�>< "#�$�� ��� � !�lte altele;

• formatatoare – FOP, Saxon, Xalan, XEP etc.; • instrumente de convertire/arhivare – e.g., Open SP, Tidy, XMill; • sisteme de gestiune a bazelor de date orientate pe text (native XML

sau doar oferind suport pentru XML) – dbXML, eXist, Mark Logic’s CIS, Xindice etc.;

• ������ ��� ��&� – Annotea, Hyperwave; • biblioteci/sisteme de procesare a meta-datelor – Carp and Spiral,

4 ���@%�< .��< ������ � ���ele; • �� �!��� �� !����� � ���������� – pOWL, Protégé, SWOOP etc.; • ������ � ��!��� ����� 9blog-uri, portaluri, wiki-uri, adnota-

��� � �� �����< !��'� � �� ���� � �� ��� �� ����� ����: – Connotea, del.icio.us, Furl, Spurl.net etc.

Page 47: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 47

2.6. O privire de ansamblu

��� � � ����� ������� � ����� � '�� ��� � ��!�� "#�< ��! ���� �expunere de ansamblu a tehnologiei. ; !��� � � �� � ������ �� �� !��� �� ���� � � ������ � !�� -����< !� ���� � ����&��� ��'� � �� ��� ������ �� � ��������disponibile pe Web, unul dintre a�������� � !� ���� ���� ��� �� � �!��� unei familii de gramatici înrudite. Puterea meta-limbajului XML este ��������� ���!� �� ���&������� � '����� �� ����!����� �� �������� ��< �� �� !����� � ��!����� �� � ��� �C� �� ��� ���� ��'��e, ���� !������ � �������� �� � �����< � �� ���������� ��ti��� ������ � � ���� �� � ����� �� �� �< ���� �� � ��� ����� �nice (pentru CD-ROM/DVD-�3#< ���< �������� !���� ����: �� � �� �� ������izvor de resurse origin� �< ������ !� ��8� ����� ���� ���!����� �� %&��� � ���!� ����!����� � � ��� ���� �� � �� �� !���<������ � ���������� �� ����� � � �� ���'�� �� ������ � ��� ����� ��c�� � ��������� �< �������< �� ��� � �!� ��� �� �� "#� ��������� ������ � ������ �� � ���� ����� ,���� �������� ��� � �! !���� ��������< � � ����� �� ���� �� ��� � !��� !���� ��������L �!����ca���� ����'� ����� � �� !��� � ��������� ������� ����!����� � �!��

Figur ) !�"����� �� 2,3 � ��������� ��� ����� -���� � �� ����5

����������� -������� ������������ � ����� �� ���

Putem considera familia XML ca reprezentând un punct de vedere unificator al unor tehnologii aparent particulare: Internetul, procesarea ��!���� ���� � ����!����� � ��o�� �� � � ����� �� � ������� �datelor.

Page 48: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 48

#������ ����� �� "#� �� � ������ ��� � ����� �� 9 �� ����� ��:������ ��!�� ���� ���� $���!��� � �������< eprezentate de bazele de ���� ��������< ������ ���cificarea unei scheme rigide ������� ��!�!� � �� � ������ �� ������ � ?���� �������� ���� � '�� �� ����� ������� ; �e�� �� � ����� ��� ������ ���< ��� ���� ���descentralizate, cu repre���� ��� �'�� � ��� � – deseori – accesate (chi� !�������: �� ��� � � ��� #� !��� ���C� ��C�< ��� ���� 9����<servicii) disponibile la un moment dat nu sunt a priori cunoscute. Astfel, ��!�� "#� ������ �� ��� �� �� formate orientate pe document, în contrast �� ������ ������< � ����� �e înregistrare (record-oriented). 4 ��� � ��� !�� ���� � ���� � �� ����� �� � ����� � �� !����� "#� ����! !����< ���� ! 4��! � #� �� 9�--�: � 4�( 9�--�:2

• ��!���� � �� ����� – se au în vedere comuni�����person-to-person (de ex�!���< ����!�� �� �� �� ���� ������� �timp real Jabber are protocolul de transfer al datelor bazat pe XML), person-to-computer (amintim aici formatele de mediatizare – syndication – ���! � �$$: �< ���'� < computer-to-computer (drept �&�!����� ��������� �� �!� � �� ���� ��� � ���� ��tehnologii AJAX);

• arhitecturi orientate spre servicii – �!��8��� "#� 8���� � ��!�� ��� � ���� �� � ����� ��'� a �� ��' � �� � ������(EAI – Enterprise Application Integration), flexibil���< ���� ��� ����L

• ������ �� ����� 9loose coupling) – proliferarea dispozitivelor mobile, �� � � < ������ �� ������ �� �� � ����!� � �� ����-������� ��� ���� < ��!���������� �� � ������< �������� ���� � ��� �� ��� ������� ��� � ������< �� ����� ������ �� "#�L

• ����� �� � �'�� �� ��������� 9knowledge retrieval) – asocierea de meta-����< ������ �� �� !������� �� �� ���� � � � ��� ���� <������ �� ��'� � !������ �� �������< �����< �� �����ogiile XML;

• modelarea proceselor – mai ales procesele de afa�� ����������� �� �� �'�� � ������� �� �� ����&�� ��� � ���&�� �� ����(data flow: � �� ������� 9work flow), ce pot fi specificate facil în XML.

Page 49: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 49

�����"� � �������� ��������"������#$��

��%��&���������� �"��#$�

; ���� ����� ��� ��� �� �����< ���� �C� �� �������� ���� ���� �� �� �� 9����!���: "#� �� � ��� ���� ���!���H�� ���� �� ������nu!�< �� �� ��!���� 9��!���: ��� ��� ��� � ���� �� ������ �!�'���� ��� ������� ������ �� �!�< ������ ��C� �!��� �� ���!����H��� �� ���� �� � �������� � !�� ��< ���C��-se conflictele.

@��������� ����� ������ �� �!� �� ����� �!� �� � �&�!����� !��� < � �� � ���! ���� ����!��� "#�< � !�� �� �� !�� ���� �partenerii de afaceri, al doilea – despre numele furnizorilor de materii prime:

<!-- parteneri de afaceri -->

<parteneri>

<partener>

<nume>Marta Gîrdea</nume>

<adresa>...</adresa>

</partener>

...

</parteneri>

<!-- furnizori -->

<furnizori>

<furnizor adresa="http://www.bizbiz.ro/">

<nume>Biz-Biz</nume>

</furnizor>

...

</furnizori>

4���!���� �� � �� �������� �� � ��������� � ��������� ���� �� �!���� � ���� �� �!�'������ 9Enume reprezin�� � �!� �� �� ���� ���� �!� �� ��!���1F: � ����� � � !��� ��2

<comanda xmlns:p="http://www.undeva.ro/parteneri/">

<partener>

<p:nume>Marta Gîrdea</p:nume>

<p:adresa>...</p:adresa>

</partener>

<f:furnizor

xmlns:f="http://www.altundeva.ro/furnizori/"

Page 50: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 50

f:adresa="http://www.bizbiz.ro/">

<nume>Biz-Biz</nume>

</f:furnizor>

</comanda>

���� ! ��������� 9K �>< ������� � ��>!�< *JJJ:< �� ����� xmlns ���� ������ ��� � ����� � �� ������ �� �!�< � ����� �� �� � ���� ���� � 5�+� � �� !���� ������ ���� ���< �� ������� � vocabular, ���!� � ������ �� ���� (namespace:< ��� � ���!����� � ������

4��� ��! �� ���� ��< �!��� �� ���!��H�� ��� ���� � ecedat de un � ��& �� ������� �� �!� ��������� Forma prefix:nume �� �!���� �nume calificat (qualified name sau QName), numele elementului neputând ���� �� ���� �� E2F� 3 �� !� �&������ ���� ��� � �� � � ��&�� �substituit de URI-�� ������� �� �!�2 {http://www.undeva.ro/parteneri/} adresa.

S����� �� �!� �� ����� � �� implicit 9� ����� �� �!� ��� � �����elementele domeniului lui de vizibilitate) sau explicit (ca prefix ori substitut ��� � �!��� ��!���� �� �� ����� �� �!�:�

5 �&�!��� �� ����� � � !����� ���� � !��� ��< ��C� în acest caz !����� �� �� !���� � ���� � �� ����� �� �� �� �� �� �������2 <library>

<!-- ���� �������� ��� ��������� -->

<book xmlns="urn:infoiasi.ro:BookInfo" ident="1">

<title>...</title>

<year>...</year>

...

</book>

...

<!-- Totalul general -->

<total>107400</total>

</library>

Elementele <book>, <title> � <year> � �� ����� ident fac parte din ������ �� �!� BookInfo, ������� �� �� ��� ���� �� 5�@-ul infoiasi.ro� ���cum am precizat, atributul xmlns este cuvânt-���� "#� � ������� ������ �� �!� �� � � ����� ��� � �� � ���� �C� �� tag-�� �� ��C ��</book>� ��� �������� �������� � �� <book> �� ����� ���� �C� ������ ����� �� �!�� %��!���� <total> nu face parte din ������ �� �!e BookInfo.

; �&�!���� �� !� 8��< �� ����� � b ca abreviere pentru numele complet �� ������� �� �!� BookInfo. Toate elemen���� � �� ������ � ��&��� �� b –

Page 51: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 51

���!�� � calificate (qualified) – �� � ����� ��� �� ��� �C� �������de nume BookInfo.

<b:book xmlns:b="urn:infoiasi.ro:BookInfo" b:ident="74">

<b:title>Tabloul flamand</b:title>

<b:year>2003</b:year>

</b:book>

4��� ��! �� ����� �!� ��< ������� ����� � � ���� �� �x������ @�!��� �� ���� �� �!� 8���� ���� �� �������� �� � � � ����

�� ������ ��� �� ������� �� � ���������� +�� ��� ��� � �������<fie se folosesc URN-� 9��� ��! �! � ������ � �&�!���� �� !� ���:< ��se recurge în continuare la URL-� � ��� � ����� � � !� ���< ���� ���Web propune un format de genul http://subdomeniu.domeniu.org/concept/ [an/luna][arie], unde „[…]” de��!���� � ���� ���� ��������

; ���� �� � !����< ��! �� �� � �&�!��� ��!����< � �� � �� �� ����� !� !���� �������� �< ���� � ����!�� �� � ����� �� �!� XML. 4���!���� �� ����� ��� � ����� �� ���ltatelor unui chestionar anonim � ��� �� ������� � �� �� �� � 9�� ����� ���� �� � ����� �� ��� ���� �� �����< ���� � �� ������ ������� xml:id � xml:lang).

<feedback xmlns="urn:infoiasi.ro:busaco:feedbacks" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" type="results" xml:id="feedback1-2005" version="0.1">

<meta>

<author uri="http://www.infoiasi.ro/~busaco/">

Sabin-Corneliu Buraga</author>

</meta>

<issue xml:id="i2">

<question xml:lang="ro">

Care dintre aspectele propuse spre expunere

�� ������� ��� ��� ��� �nteresul?

</question>

<response xml:lang="ro">

<rdf:Seq>

<rdf:li>Baze de date native XML

&amp; XQuery</rdf:li>

<rdf:li>Cookie-uri &amp; sesiuni</rdf:li>

</rdf:Seq>

</response>

</issue>

<issue xml:id="i3">

Page 52: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 52

<question xml:lang="ro">

� ��� ������� ��� ���� �� �� ���!����"

</question>

<response xml:lang="ro">

<rdf:Seq>

<rdf:li>Tehnologii WAP</rdf:li>

��� #���$������� ���tru Web</rdf:li>

<rdf:li>E-business</rdf:li>

</rdf:Seq>

</response>

</issue>

</feedback>

3 ������ � �� ������� �� � ����� �� ������ �� �!� ����������� � 3����8� 9�--�:�

3.2. Modelul de date XML: XML Infoset

XML nu � ���� ����� �� � � ��� � !�� � �� � ���� � �� ��������� � �� ���� � �������� �� ��� ��� #� !��� ���C� ��C�< ������ ��� ��� �-a pus problema redact� �� ���!��� �� � ��specifice un model de date (abstract) pentru XML. ������� ���!��� �este XML Information Set – sau XML Infoset 9��D� � ���< �--):�

� �� !���� ������ �������� �� ��� � � ���� �� ���� � ��!�referitor la:

• serializarea datelor semistructurate (vezi infra); • implementarea/folosirea de inte ���� �� � �' �!� � 9��+-uri) pentru

procesarea XML; • ��� �� �� ���� ���!��� �� ��� 9!�: ����< � ���! "����

� "$�� 9��� ������� ���: � "#� $���!� 9� �� ������� �������3.4).

����� !���� �� ���� ��'� � �� ��� �������� ��� ���� �ehnologii, �� ���� �� � �' �!� � � ������ "#�< ������ � �� � ��� � ��!�� �conceptelor folosite.

$�� ����� � !���� ��� ������� �� ���� – conformându-se paradig-mei obiectuale –< �!�� ����� �� �ntreaga familie XML:

• document (document information item) – este considerat a fi un arbore, având nodul- ����� ��� �� � �� ������ [document element]. 4� ���!���< ������ � �� ������ [children], oferind o serie de

Page 53: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 53

„lucruri” de interes (items:< � � ��� ���� �� ��'oritmul de parcurgere DFS (Depth First Search);

• element – ������� � ���!�� "#� � � � ������� � �� ������[parent]< ���C� �� !�� ��spre elementul-�� �� �� �� ���� ��� � � ������� � � �� ������ [children], cu semantica ���� �� !� ���� � �� ������ [local name] spe���� �!��� ������� ���!����� �� �� � ���� 9�����a��: � ���9�: �� � �prietatea [namespace uri], indicând URI-�� ������� �� �!� ������ 9��<���� � �� ������� ���� �� �!�:� � ��&�� ������� �� �!�utilizat este stocat de proprietatea [prefix]� ������< �� �� ����-������ � ���� �������� � �!��� ���!�ntelor. Accesul la lista �� ����� � �� ������ ������� ���!�ntului se face via pro-prietatea [attributes]. De asemenea, proprietatea [namespace attributes] !������� ���� �� ����� � �� ������ xmlns �������L

• atribut (attribute) – ����!���� �������� �� �� ��� "#�� @�!���� ������ �� �!� ������ ��� ��������� �� � �� ������ [local

name] � [namespace name]< �������� %��!���� �� �� � ��� ��este indicat de proprietatea [owner element], iar valoarea e spe-������ �� [normalized value] (valoarea norma�����< ������������ �&���� �� ���� � ��� ���� �� �����:L

• caractere (characters) – �� ����� �� !���� ��&����� ��� ����-turilor elementelor XML. Proprietatea [parent] ��� ���!������ �� � ��� �< � [children] ���� ������-caracter propriu--zise. Setul de caractere utilizat e oferit de proprietatea [character code]� #���� �� � ����� � � ������ ���� 9���� �� �� �����xml:space !����� � ������� ���: ���� �������� �� � �prie-����� ������� [element content whitespace].

4� ���!���< !� ��� � ����� ������� � �� 9��D� � ���<2004):

• �� ������ �� � ����� � 9processing instruction information item); • comentariile (comment information item); • ����� ��� ����� �� ����!�� 9document type declaration item).

4 ��� �&�!����� �< �������! ���� ���� <antologie xmlns= "http://www.infoiasi.ro/antologii" coordonator="Sabin Buraga" />, c�reia îi corespunde infoset-ul din figura 3.

Page 54: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 54

Figura 3. Infoset-�� ��� � ��� ��������� 2,3

%&��� � ���� ���� �� ���� ���� �� !� ���� ������< ��� � � ���� ��Fast Infoset (Sandoz et al.< �--): �� � ������� � �� !�� �� ��� � "#�+�����< �� ������ �� 9��:�� ���� � � ����� !� ���� � ����� !�compacte a datelor XML.

3.3. Transformarea documentelor XML

Preliminarii

4 ���� ���� �� !� ���< �! ����� �� � !�� ����� � ����!�� "#����� � ������� �� !�� � �� �� !��� �H� ����� � 9�������< ����� <�� ��!� ���� �H��� �� ������:�

Page 55: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 55

Pentru a prezenta – într-� !�� � �� �� � ��!��� – datele XML, � ���� ��������� � !�������� �� ��� � �� ���-numita foaie de stiluri (stylesheet:� $������ ������� ��� ���� �� ���� � ��� !�� ���� ���dar-����� �� ���� ��� ��� – a se con����� � ������� �2

• CSS (Cascading Style Sheets) – �������� � ���&� �-"#�< � ���� ����&������ �!���� � � ��� � � ��� � �������� �� ����&� 9K��et al., 1998);

• XSL (Extensible Stylesheet Language) – ad���� � ��a&� "#�< �� ����&������ !� !� �< � � ����� �� �� ����� ���� � ����� ������&�L �� ���!���< �� ��� ��� � !����� �� �� ���� �< ���-rindu-�� ������� ��� � ����� �� �� �� o'� �!����

!����� ) ���-�� � 6���� 2�3 � ��� ���-� ����� )**1

Caracteristica XSL CSS Comentarii

Utilizare cu HTML nu da

"$� ����� � ������ �� ���� ������"#� � "��#�� "$� � �����-���� ��� � ����!�nte HTML care � ������� ����� ��� "��#�� CSS se poate folosi ca modalitate de ����� � �e stiluri inde������ ��documentul HTML.

Suport pentru scripting

da da "$� � �$$ ��� � !����!� ��programare a foilor de stiluri via ECMAScript.

$��&� ������ ��XML

da nu ,��� �$$ � �������� � ' �!����XML, pe când XSL este bazat pe XML.

���� �� ���� !�� "#�

da da Se pot asocia unor documente XML sau bazate pe XML.

Suport al navigatoarelor

�� ��� aproape complet

5��� ��'���� � ��� � ���� �pentru XSL. CSS nivelul 1 este suportat aproape total de naviga-toarele actuale, iar CSS nivelul 2 e ���� ��� �� ����

Page 56: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 56

� ���� !� ���� ���� �

da nu

CSS nu poate modifica structura documentelor, fiind doar o moda-����� �� � ����� ���� �� �� !��� � ��� ���!���� ��� � ��#�< ������!����� �� �� �� ���� � ���� ��� i��de modelul DOM (via ECMAScript).

� ���� !� asupra

�������� da nu

"$� ����� !����� � �������documentelor XML, într-� !�� ������� �� �'�� �� ��� ere, folosind modele/filtre.

Manipularea datelor XML (e.g., ����� �< ��� � �<

sortare etc.)

da nu

"$� ����� � ����� �� �!��8 �!���de interogare pentru documentele XML. De asemenea, XSL este Turing ��!���� 9��� ��� � ������ �&� �-sivitate ca un limbaj de programare). �$$ � ��� � � � �������� � �����sens, nefiind limbaj de programare.

S� ���'�� �� � ��� � �������� ��� � !���� ���2 • o foaie de stiluri, N documente – ������ ���� �� ��i�� ���� �������

�� �!� �� ����!���< ���� C��-�� ������ �������� �� !�-���� � !���� �� �� ����� 9look & feel:� $� � ������ ��ntru situri ���< � ��� < � ����� �� ����� ���� %�� ��� �� ������� � !� ����< ���� �� ���� �� ��� �� ���������< ������ � ��� ���� 9�������� �� ���'� in house style);

• N foi de stiluri, 1 document – �� �� !� �� !��� �i�� �� � �����de med�� �� ��� � 9�� �< !� !��� ����: ��� �� � ��� ��9��!� � �!����< � �8�!�� ������ ����:� 4� ���!���< �� ���produce facil documente derivate – de exemplu, cataloage, indexuri etc. – 9�� �� �'� E�����F:2 ������< ��!� �� < ��&� � �ltele.

Page 57: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 57

� ��� 7 ,���� �� ���������� ���� ������ 2,3

%&��� ���� � ��� �� � ���� !� � � �������� "#�� � !� �� � ��� ��� '� �� "���� � "$��< ��� ��-se un limbaj descriptiv bazat pe reguli, � � ���� ������ ����� �� �� � o� ���� �� �� !��� � ������ �� ����unor obiecte de formatare (formatting objects) – XSL-FO.

������'� "$� ��� � � !���� ���2 • �� !��� �� ������ �� !���� � ��� ����&�L • � �� �� �� ���� ��� �� �� !��� � 9����� ��&� � ' ����:L • definirea de template-uri (macro-uri) de formatare; • �������� �� � ���� �� �� � � 9���� � ��� � �� ����-

lizare); • ���������� ����� �� ��� �&����� �� ������ �� �� !��� �L • ������ �� �������� �� !���

Page 58: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 58

Principiile de proiectare a limbajului XSL au fost cele legate de suportul ��� � �������� �� ��'� �< ���� � � ���� � �� �����< ��� � � ����� ������ � �-vizuale de date, de posibilitatea de extindere cu noi ele!��� � ����� ��< �� ��� �� �� �� �� '� � ��C� � ���� �� ���� � ��!��������, �C� � � ���� �� ���� � �!��

���� ���������� ��������������� ��������

; ��� �� ������ �����< ��! ����� ��! ����! ��� '� �� � �� ������CSS (Bos et al.< *JJ7: ��� � � ��� ������� �ocumentelor XML. Vom ����� ��� ��� "#� �� �� ���� �$$ � �� !���� �� ���� ��procesare <?xml-stylesheet ...?>.

����� �! � ����!�� "#� ��� �C� �� !�� � ���� � ��!������ ��������� �� � !���!�< �� �� � ��! ����� ���� �� �� ���� CSS menite a prezenta datele în cadrul navi'��� ��� ��� ���� ! ����teme cromatice:

<?xml-�%���&�� �������� ����� &�� ��������'����

type="text/css" ?>

<?xml-�%���&�� �������� ���(��� &�� ��������)'����

type="text/css" alternate="yes" ?>

<melodii>

<melodie ascultari="33" id="HHPF">

<titlu>High Hopes</titlu>

<artist>Pink Floyd</artist>

<format>MP3 128kbit/s</format>

</melodie>

<!-- �� �����''' -->

</melodii>

������! � �� !��� � ������ � � ��������< � ������ ������ �� � !���� �� 9�! ����� ��< �� � �&�!����� �< ���� �� ���� melodii.css). Codul-�� �� �� ���� ��-�� ����� ��� �$$< ���� ���< ���� �!�� �

melodii {

display: table;

background-color: white;

margin: 1em;

padding: 0.2em;

}

melodie {

display: table-row;

Page 59: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 59

font-family: Arial, sans-serif;

font-size: 14pt;

}

melodie[ascultari="33"] {

background-color: pink;

}

titlu, artist, format {

display: table-cell;

border-bottom-style: dotted;

border-bottom-width: 1px;

border-bottom-color: gray;

text-align: center;

}

titlu, artist {

width: 200px;

}

titlu:first-letter {

color: red;

}

artist {

font-weight: bold;

}

format {

width: 100px;

}

Dup� ��! �� ���� ��< ���� � ���!�� "#� � ��� ������� ��� ��� �� ���� �� ���� ��� � ���!���� <melodie> �����! � ��� �������de valoarea atributului ascultari� #��������� �� ���� � � ������ �cadrul browser-��� ���� ���� ��� � �'� � 5.

Page 60: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 60

Figura 5. Prezentarea via foi de stiluri CSS a datelor XML

�������������������

5 !C� ���� � ������ �� "#� +�����< ��� � ������� �� � ���� !� �� �� ����� � �� ����!���� "#� ���� � � �� � �� !�� � ��� ��diverse tipuri, precum element- �����< ���!���< ����� ��&����<�� ����< ���� �� �!�< �� ���� �� � ����� �< ��!��� ���� ��� �noduri de tip text, caracte ��� ��� ���� � ���� ��� �� �� ������

,��� � ���� �� ���� "$� �����< �!���� �� ��< � eguli compuse dintr-un model (pattern: � � �������, modelul identificând un nod sau grup �� ��� "#� ���� � �� �� �� �� ����� ������� %&� ���� !���������� �&� !��� � �!��8�� "���� 9��� ( � 4�����< *JJJ:< � ������ – � ���� !� �� ��������� ����ra elementelor documentului – sunt specificate în XSLT (XSL Transformations), descris în Clark (1999). Trans-�� !� �� �� ����� ��� �� ���� � ��� �� "#� �� � ������� !���-���H��������� �� �'�� 9pattern-matching).

Page 61: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 61

Limbajul XPath

Vom prezenta în c���� � � ������� � ����� ��� �!��8ului XPath. $����� ������� ���� �� �� ����� �� � �� -un document XML, oferind ������� �� ���� ��� � !����� �� �� ��� �� ���� �!��� 9� � ��ca ���� �< �!� � ����: � ��� C� �� ����� �� ���� i abstracte a documen-tului XML (i.e., arborele).

���� ���� ����!����� ���� �&� ��� "����< ������ �� �������realizându-�� � ����� �� ����&�� ����� ����&� ��ate fi desemnat de:

• un nod al documentului XML; • �����L • � ����� �� ��������L • o decl� ��� � �� ����� �� �!��

; � !� ������ �&� ���< ���� ��� � � �����< ����2 • � !���!� �� ��� 9node-set); • � ����� � ��'�� 9true, false); • � �!� 9float); • � � �� �� ���� ��

���� � ��� �� ��� � ������ ��� ��� ���� � !� 8��2 • / (descendent) – ������ �� �������� � � � �� �� ���!��� 9� ����

de parcurgere a nodurilor din arborele asociat documentului). Câteva exemple: / � /cuprins/capitol/autor (a se vedea figura ur!���� �:L

Figura 6. Utilizarea operatorului „/”pentru selectarea unui element descendent

• // 9� ��� �� � ��� ���: – � ��� ����� � ��C�!� �� �'sub-arborele unui anumit nod; exemple: //capitol � //cuprins;

Page 62: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 62

• * (wildcard) – ������ ����� ��� � ���!��� � �� �u��< ��� � �����elementele/atributele de pe un anumit nivel al arborelui; drept �&�!����� � �� ��! capitol/* � /cuprins/*/nume;

• . (nodul curent) – ��� ��� ����&����< ����!���� ���� �� ��Lexemple: ./capitol � ./cuprins/*;

• @ (atribut) – ������ �� ������� ����� �� �� ��!� �� ���L � ����&�!����� < �� ��! //capitol/@nr � table/@*;

• : 9����� �� �!�: – ������ �� ��������� ���!���H�� ���� �� ������ ����� �� �!� – pentru //html:* ����! ��������� ���� ��de figura de mai jos;

Figura 7. Folosirea operatorilor „//”, „:� � „*”

• [] (filtru/index) – ����� � ��� � ��� ���������� ��� �� �� ����unui index (numerotarea începe de la 1); de exemplu, pentru expresia /cuprins/capitol[2] ��! ���� ���� ���� �� �� �'� � 7 9� �&� ��� �� ������ ������� ���� //capitol[@nr="3"]);

Page 63: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 63

Figura 8. Filtrarea datelor via operatorul „[]”

• : 9����� �� �!�: – ������ �� ��������� ���!���H�� ���� �� ������ ����� �� �!� – pentru //html:* ����! ��������� ���� ��de figura 7;

4� ���!���< ��� � ���� ��'�� � �� �' ��� � ������ ��� ��� uzuali:

• �������2 E� F< E��F< EMF< EIMF< EVMF< EVF< EUF< EUMFL • aritmetici: „+”, „–F< EWF< E��F � E!��F�

��!�� ���� �� � � �� �� ���� � �� �������� � !�� � case-sensitive. Alte câteva exemple sunt furnizate în continuare:

• table/tr[@align="center" or @valign="top"]/* va selecta elementele dintr-un element <tr> având specificate atributele align="center" sau valign="top" din cadrul unui element <table>;

• body[pre != "white"] va selecta toate elementele din cadrul unui element <body> �� � � ��� � ���� ���� �� �� !�<pre>white</pre>;

• carti[@subiect="Web"]/autor[@nume="Sabin"][@adresa="busaco@

infoiasi.ro"] �� ������ �� � ��� �< �� �C� ����� ���-mentele incluse într-un element <carti> care are atributul subiect="Web" � ��re include sub-elementul <autor> având

Page 64: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 64

specificate atributele nume="Sabin" � adresa="busaco@

infoiasi.ro". Filtrele vide nu sunt permise (e.g., autor[]); • capitol/nume | capitol/autor va furniza toate elementele

<nume> � <autor>, descendente ale lui <capitol>.

�!��8�� "���� ������� ��� �� �� ��� � ���-numitele axe, dintre �� � !����!2

• axa nodului curent (context node): self; • axa nodului-�� ��2 parent; • axa nodurilor-copil: child; • axa nodurilor descendente: descendent; • axa nodurilor de tip atribut: attribute; • �&� ��� �� ������ �� �!�2 namespace; • axa nodurilor ascendente: ancestor; • axa nodurilor ascendente, inclusiv nodul curent: ancestor-or-

-self; • axa nodurilor descendente, inclusiv nodul curent: descendent-or-

-self.

Figura 9. Selectarea unor noduri prin intermediul axelor XPath

Page 65: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 65

��� � ������� �� �� �&� �� ��������� ��� ��� �� :: precedat de numele axei dorite. Un exemplu este //child::*[@nr > 2]< �� � ���������� �����nodurile-copil având valori mai mari decât 2 pentru atributul nr, parcurgându-se recursiv întreg arborele XML (vezi figura 9).

; ����� � ���� ��!�� �&�< �� ����� ��� '� �� ���&� � ���� �����Astfel, self se poate substitui cu „.”, parent cu „..”, attribute cu „@F �namespace prin „:”.

$�������� "���� ���� �� � ���� �� ���� �� ���� �� � ��� � �������� ��� �� �� �&� ��� �� !����! �� ���� !� mportante:

• privitoare la noduri: id(), position(), count(), name(), namespace-uri(), last() etc.;

• referitoare la tipuri de noduri: node(), text(), comment(), processing-instruction() � ���ele;

• ��C� � � �� �� �� ���� �2 concat(), starts-with(), contains(), substring(), string-length(), translate() etc.;

• privitoare la valori logice: not(), true(), false(); • referitoare la numere: sum(), floor(), round(), number() etc.

?�! ���� � ��� �� �&�!��� �� ����� � � �� ���� � � !���� ���������

Limbajul XSLT

Limbajul XSLT (XSL Transformations) are drept scop transformarea documentelor XML în alte structuri (tipuri) de documente: XML, HTML, text. A fos� 'C�� ��� �� ���� �� �� � "$� 9"$� M "$�� A "$�A,3:<��� �� ����� ����� ������� �� �������

��� � � ���� ������� ������< ���� ����� "$�� � ���� �� ��� ��������� �� �!� ����!�� �� 5�+-ul http://www.w3.org/1999/XSL/ Transform (Clark, 1999). O foaie de stiluri XSLT are drept element- �����<xsl:stylesheet> sau <xsl:transform> � ����� ��� �� �������(template-� : �� � ���� !� �< !��� � �a��� �� ����� �����

��� � ����� �� � ���� !� �� �� ��� '� �� �&� �� "Path folosite la: • selectarea nodurilor dorite a fi procesate; • ������� �� ������ �� � ����� � 9����&���:L • '�� � �� ��&���� �� �� � 9e.g., un alt document XML, o pagi�

��#� � ��&� �����:� &������ ���������� ����� � �� � ���� �� ��� -su �� 9input) este

� ���� ��� ��� � � �� '�� � � � �'!�� �� � �� � �� ��� �� �������(output:� +���< �� � �������� ����- �����< �� �� � �� �� ���� ��� -copil

Page 66: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 66

'�� ��� �� ������� ������� � pattern-matching unei liste de noduri selectate (în manie � ��� ���: – via expresii XPath. �������� �� �������� ������ ��� ���� � �� � � �� �� �����

� ���� !� < ������� �� ��� �� ����C��-�� � "����� 5 ����� ��defi���� � ���!���� <xsl:template>< � ����� �� �� ����� se �������� �� ���!���� <xsl:apply-templates>.

� �� �� � �� ��� �� �� � �� �������� �C� ��� �� ������ �� �� -un ����� � �� ���!�� �� � ��� � ������� �� �!� "$�� �� ������< �� �� � ��� ��� !����� < � � �� e�� �� �� �� 4� ���menea, pot fi generate diverse tipuri de noduri: <xsl:element>, <xsl:attribute>, <xsl:text>, <xsl:comment> etc. Pentru a avea acces la rezultatele expresiilor XPath implicând valori ale documentului-�� ��< ��! ��� '� �� <xsl:value-of>. 4�� � �� �!�� �� ��� �� �� !����� �� '�� � � � �� �� ��� �����via <xsl:output>.

Activitatea de transformare recurge la un procesor XSLT (figura 10).

Figura 10. Maniera de transformare a documentelor XML

Foile de stiluri XSLT pot fi considerate programe, per!�C��-se exprimarea de:

• ���� ��� �������2 <xsl:for-each>;

Page 67: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 67

• ���� ��� �� ����2 <xsl:if>, <xsl:choose>, <xsl:when> �<xsl:otherwise>;

• copieri de noduri: <xsl:copy> � <xsl:copy-of>; • �� �� �� ��� 2 <xsl:sort>; • includerea de alte foi de stiluri: <xsl:include>; • ����� �� �� ������ � �� �!�� �� 2 <xsl:variable> � <xsl:param>.

,���! ���� ���� ��< �� � ������ � �� �!��8��� �� � �' �!� � ������<variabilele (declarate via <xsl:variable>) au valori imutabile: valoarea ������� � �� ���!�� � !�!�� �� � ���� ��������� ������< ���� ����� ���� �� '��� <xsl:variable name="ani" select="21 + 12" />, � ��� �� � �� � �� �� � ���� ����� � �� ���� ani ������ �� ��� �� ��� � � �� �!�� 9�������� � <xsl:param>: �� ��� !����� ulterior ����� ��� ����� �� 9���� ��: �� ����� �� ����� ����� �� ���� �� ��valori parametrilor via <xsl:with-param>.

Tabelul 3. Principalele elementele XSLT

Element Descriere

xsl:stylesheet

Utilizat ca element- ����� �� �� �� �� ���� <poa�� ���� ��������� �� � �� � �������pentru generarea altui document XML ori a unui ��� ������

xsl:template

4������ � �� � �� � ����r!� H�� !��� �� �vor fi aplicate pentru un anumit model particular.

xsl:apply-templates +���� �������H�abloanele definite, pe baza unei potriviri implicite sau explicite.

xsl:comment +�� ���� � ��!��� � � ��� �� ����!�-tului generat.

xsl:pi +�� ���� � �� ����� �� � ����� � � ����men-��� "#� �� �� �� ��

xsl:element +�� ���� � ���!�� "#� în documentul generat de foaia de stiluri.

xsl:attribute �������� �� ���!�� � ��!� �� ibut.

xsl:value-of +�� ���� � ��� �� ����!����� �� �� �� �rezultatul unei expresii XPath.

Page 68: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 68

xsl:for-each ��������� � ����� �� ����� � � �� ����� !�multor noduri respectând un model XPath.

xsl:if 5����� ��� � ����� �������� �� ����if-then.

xsl:choose

,����� ��� � ���� !������ 9�� �ipul switch din limbajul C), în conjunc�� �� ���!�����xsl:when � xsl:otherwise.

xsl:copy Copie co����� ���� �� �� ��� � ����-mentul (arborele) rezultat la ie� ��

$���!��� < ��� ���� �� ������� ��� �� ���� �� �a��2 • ����!���� ���� �� ��2 current(); • �� ������ � ��� ����!�� "#�< ��� � �� ��� �� ��2 document(); • accesarea nodurilor pe baza cheilor specificate via XML Schema –

��� ������� ��)2 key(); • �� ��� �&����� �� ���� 9���� � ��� � �&��nsii): function-

available(); • �� !������ ���� �!� ��2 format-number(); • ��� � �� !�� � ���� � �� ����!�� �� � ����are: system-

property(). ?�! ���!��� ���� ���� �� �C� ���! � �� !���� �� ��� ��

�&�!���� ��� � ������< ����� �! ����!���� projects.xml, care sto-������ � ���� �� � ����� � ����� �� � m���!��� � � � � �� ���� �2

<?xml-stylesheet href="projects.xsl" type="text/xsl" ?>

<projects update="16 octombrie 2006">

<project class="A">

<title>...</title>

<desc>...</desc>

<stud>...</stud>

<url>...</url>

</project>

</projects>

@� � ����! �� '�� �! � ����!�� "��#� ��� � redarea, în ��'��� < � ������ ����� 4��� ��! �� ����� �!� ��< ������ �� ������ de procesare <?xml-stylesheet ...?> ata��! � ���� �� ���� "$���!�� projects.xsl � ��C� � !��o �� �����2

<xsl:stylesheet version="1.0"

Page 69: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 69

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- ��������-�������� -->

<xsl:template match="/">

<html>

<head>

<title>Proiecte</title>

</head>

<body>

<!-- ������� �������� ����� ��!����!���� �����ctelor -->

<div id="listing">

<xsl:apply-templates />

</div>

</body>

</html>

</xsl:template>

<!-- �������� ����� ������� -->

<xsl:template match="projects">

<ul>

<!-- ���� ���������� ��������� ���

despre fiecare proiect -->

<xsl:for-each select="project">

<li>

<h5>

<!-- titlul proiectului + clasa -->

<xsl:value-of select="title" />

(<xsl:value-of select="@class" />)

</h5>

<p><!-- descrierea proiectului -->

<xsl:value-of select="desc" />

</p>

<div>Resurse suplimentare:

<!-- �������� � ��(���� -->

<a>

<!-- ������� ������� *&�� * -->

<xsl:attribute name="href">

<xsl:value-of select="url" />

</xsl:attribute>

Page 70: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 70

<!-- ������� �����tul 'title' -->

<xsl:attribute name="title">Mai multe

detalii</xsl:attribute>

<xsl:value-of select="url" />

</a>

</div>

</li>

</xsl:for-each>

</ul>

<p>Ultima actualizare:

<xsl:value-of select="@update" /></p>

</xsl:template>

</xsl:stylesheet>

����� '�� �� ���� "��#�< ��� � �� ���� �� �� ����� ��� �����!�� "#� �� �� !����� $�� ��������� ���� �������< � !��construind scheletul general al paginii Web, iar al doilea generând lista � ���� � �� � ������ �� ����� ����� �� � ��cat la potrivirea cu succes a ��� �� ���!����� <projects>. Similar, <xsl:for-each> va furniza ���� �� ��� �������� � � !� ������ �&� ��� "���� project 9������efect îl avea expresia abso���� /projects/project).

� !�� ��� �� � ���� !� �� ������ �� ���� �� ��������- �����<în urma potrivirii cu nodul- ����� ����!�� �� ��� ��� �� E/”. Toate ��� �� �� � � ��� � ������� �� �!� xsl �� � ������ �� �� � 9������<�� ���� ����� �����-�� �� �� ��' ���:< �C� �� ��� �ia elementului <xsl:apply-templates />. Acest eveniment va conduce la invocarea �������� ��� �� �� �&� ��� project, în cazul nostru <xsl:template match="projects"> ...</xsl:template>, care va genera lista nenume- ����� � � ������� 9������� �������� � �� � �� � �'� � *-< ���C�captu � �� �� � � ������� ��� �� � ���� !� "$�� ��� � �� �������oXygen). Cele specificate în cadrul <xsl:for-each> vor fi repetate de ��C��� � �C�� ��� ��� ��� ��� �� �&� ��� ��������� �� �aloare a atributului select al elementului <xsl:for-each>.

$� ���� �� '�� � �� � !�� � ��!�� � �� ��'��� <a

href="..." title="...">...</a>, pentru aceasta recurgând la <xsl:attribute> ��� � � ����� ���� ���� �� ���� – href � title – elementului <a> al limbajului XHTML.

Page 71: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 71

� ��� 11 !���� -� �� -� -������� �� ��� ��� ���������� ��� 2�3!

?�! ��� ��� ���� �� �� !� ���< ��� �� � ��ctele propuse sunt de diverse clase de dificultate, indicate de valorile atributului class al elementului <project>� +�����! �� ����! � !�� ��� � ���� � ��� �������< ���� ! ����� ����� ��� � �������< ��! ��� '� �� ���� �����de test (omitem restul foii de stiluri): <p>

<!-- +� ������ �� ����� ����������,

��� � ��� �� ��� descrierea lui -->

<xsl:choose>

<!-- proiect de clasa 'A' -->

<xsl:when test="@class = 'A'">

<span style="color: darkred">

<xsl:value-of select="desc" />

</span>

</xsl:when>

<!-- ������ �� ����� 'B' sau 'C' -->

<xsl:when test="@class = 'B' or @class = 'C'">

Page 72: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 72

<span style="color: navy">

<xsl:value-of select="desc" />

</span>

</xsl:when>

<!-- ������ �� ����� ���������� -->

<xsl:otherwise>

<span style="color: black">

<xsl:value-of select="desc" />

</span>

</xsl:otherwise>

</xsl:choose>

</p>

4� ���!���< ����! �� ��� ���� <url> �&��� ��� � � � ����� � ����<pentru a nu insera inutil le'��� � �� � ��� ���� ����!��� � � ���� � ��un proiect:

<!-- ���� �� �-��� �������� �����,

�� � ���� ��(���� ���� ������� ����������� -->

<xsl:if test="url != ''">

...

</xsl:if>

5 !��� �� ��� ���� �� � ���! ���� � ������� ���� ! �� � iterii. Pentru aceasta, folosim o con�� ���� �� '���2

<!-- ���� ���������� ��������� �����

despre fiecare proiect -->

<xsl:for-each select="project">

<!-- ����� +� ������� ������������� � �����ului

de stu����� .������� � ��-���(�� ���/ -->

<xsl:sort select="stud" order="descending" />

<!-- ���� �� ����� ���� ���� ���������� -->

<xsl:sort select="title" />

<li>

<h5><xsl:value-of select="title" /></h5>

</li>

</xsl:for-each>

?�! ��� '� � �� �� ���e, calculând valoarea RGB a culorii de fundal, �� �� � � ��! ����� � ����� �� �!� �� !�&! �� ������ � ����unui proiect – se uti������ ����� concat() ���� �� ������� �� "����2

Page 73: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 73

<xsl:for-each select="project">

<xsl:sort select="title" />

<li>

<!-- +� ������ �� ������� �� �������,

(������ � ������� �� ����� -->

<xsl:variable name="fundal"

select="concat('rgb(',stud*90 ,',', stud*90,

',', stud*30, ')')" />

<p style="background-color: {$fundal}">

<!-- � ���� ��!����, ��������� �� �� ��oiectele -->

<xsl:value-of select="(position())" />.

<xsl:value-of select="title" />

</p>

</li>

</xsl:for-each>

4��� ��! �� ����� �!� ��< ����� �� �� �� ���� �� ���������prefixând numele variabilei cu semnul „$”.

Un exemplu relativ mai complex este cel în care vom scrie o foaie de ���� "$�� �� � ����� � ������� � �� � ����!�� "#� � ���� ��'�� � �� �� ����� "��#� ��C� ��� �� ������ �����< ������ �� ���� ������ � 9syntax highlighting).

Codul-�� �� ��!���� ���� �� ��� � ����� � 9����� �� ���� �� � ����� ���� �� ������� ������� �� #����� , ���&:< �� nspirat de un exemplu preluat din MSDN:

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0"> <!-- sablonul-radacina -->

<xsl:template match="/">

<html>

<head>

<title>XML2XHTML</title>

<style type="text/css">

.element { color: #909; font-weight: bolder }

.atribut { color: black; font-weight: bolder }

.text { color: black }

.valoare { color: blue }

.coment { color: green; font-style: italic }

Page 74: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 74

.instruc { color: pink; font-style: italic }

.sursa { font-family: monospace;

font-size: 10pt }

.prefix { color: navy; font-weight: bolder }

.delim { color: black }

</style>

</head>

<body class="sursa">

<xsl:apply-templates />

</body>

</html>

</xsl:template> <!-- ��� � ���� ����� ���� ������������ �ncluse

în elementul <exemplu-xml> -->

<xsl:template match="exemplu-xml">

<dl>

<xsl:apply-templates mode="xmlsrc" />

</dl>

</xsl:template> <!-- ������ �� � ����� � ����������� ���� ��� �- -->

<xsl:template match="text()" mode="xmlsrc">

<xsl:if test="normalize-space(.) != ''">

<dd>

<xsl:value-of select="."/>

</dd>

</xsl:if>

</xsl:template> <!-- ������ �� � ����� � ���� ������' �� ����esare -->

<xsl:template match="processing-instruction()"

mode="xmlsrc">

<dd class="instruc">

&lt;?<xsl:value-of select="." />?&gt;

</dd>

</xsl:template>

<!-- ������ �� � ��are a comentariilor -->

<xsl:template match="comment()" mode="xmlsrc">

Page 75: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 75

<dd class="coment">

&lt;!-- <xsl:value-of select="." /> --&gt;

</dd>

</xsl:template>

<!-- ������ �� � ����� � ������� ��������� -->

<xsl:template match="@*" mode="xmlsrc">

<!-- �� ������ ���������� +������

numelui de atribut -->

<xsl:text> </xsl:text>

<!-- � ���� ������ ���������''' -->

<xsl:choose>

<!-- �� ��� ��� �-� �� ����� ������ �� �ume? -->

<xsl:when test="not (namespace-uri (.) = '')">

<!-- este, deci vom scrie separat prefi-�� ��

numele elementului -->

<span class="prefix">

<xsl:variable name="nume" select="name (.)" />

<xsl:variable name="prefix"

select="substring-before($nume,':')" />

<xsl:value-of select="$prefix" />

</span>

<span class="delim">

<xsl:text>:</xsl:text>

</span>

<span class="element">

<xsl:value-of select="local-name (.)" />

</span>

</xsl:when>

<xsl:otherwise>

<span class="atribut">

<xsl:value-of select="name (.)"/>

</span>

</xsl:otherwise>

</xsl:choose>

<span class="delim">="</span>

<span class="valoare">

<!-- �� �������� ��������� -->

Page 76: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 76

<xsl:value-of select="."/></span>"

</xsl:template>

<!-- ������ ���� � ����!� ��������� ������elor -->

<xsl:template match="*" mode="xmlsrc">

<!-- început de marcator -->

<dd>

<span class="delim">

<xsl:text>&lt;</xsl:text>

</span>

<!-- ���� ���� ���� � ��� �-�

�� ����� ������ �� �ume -->

<xsl:choose>

<xsl:when test="not (namespace-uri () = '')">

<!-- este, deci vom scrie separat prefixul

�� ������ ��ementului -->

<span class="prefix">

<xsl:variable name="nume" select="name (.)" />

<xsl:variable name="prefix"

select="substring-before($nume,':')" />

<xsl:value-of select="$prefix" />

</span>

<span class="delim">

<xsl:text>:</xsl:text>

</span>

<span class="element">

<xsl:value-of select="local-name (.)" />

</span>

</xsl:when>

<xsl:otherwise>

<span class="element">

<xsl:value-of select="name (.)" />

</span>

</xsl:otherwise>

</xsl:choose>

<!-- � ���� �� �������� -->

<xsl:apply-templates select="@*" mode="xmlsrc"/>

<xsl:choose>

Page 77: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 77

<!-- ���� ���� ���� � ������ �� ��� ��� ������ -->

<xsl:when test="*">

<span class="delim">&gt;</span>

<dl>

<xsl:apply-templates

select="node()" mode="xmlsrc" />

</dl>

<span class="delim">&lt;/</span>

<xsl:choose>

<xsl:when test="not (namespace-uri () = '')">

<!-- ��� ����� ������ ��� �-�� ��

numele elementului -->

<span class="prefix">

<xsl:variable name="nume"

select="name (.)" />

<xsl:variable name="prefix"

select="substring-before($nume,':')" />

<xsl:value-of select="$prefix" />

</span>

<span class="delim">

<xsl:text>:</xsl:text>

</span>

<span class="element">

<xsl:value-of select="local-name (.)" />

</span>

</xsl:when>

<xsl:otherwise>

<!-- � ���� ��������� �- -->

<span class="element">

<xsl:value-of select="name()" />

</span>

</xsl:otherwise>

</xsl:choose>

<span class="delim">&gt;</span>

</xsl:when>

<!-- final de marcator -->

<xsl:when test="text()">

<span class="delim">&gt;</span>

Page 78: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 78

<span class="text">

<xsl:value-of select="text()" />

</span>

<span class="delim">&lt;/</span>

<span class="element">

<xsl:value-of select="name()" />

</span>

<span class="delim">&gt;</span>

</xsl:when>

<xsl:otherwise>

<span class="delim">/&gt;</span>

</xsl:otherwise>

</xsl:choose>

</dd>

</xsl:template>

</xsl:stylesheet>

� ��� 1) $�-�������� ������� � ������� ��� �������� 2,3 � ���������� 2�3!

������ �� � ���� !� �� �� ����� ���� � ��� � ��� �� �� ��'�tor ��� �� ���!� '�� ���< � ���! #����� , ���& * � +�� �� %&��� � /��� � �� ��� ���� �� � 9��� �'� � *�:�

Page 79: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 79

; ��!�� � ��!�����< ����� �� !� ��� � ���������L �!C� ��� �� ���� ���< � ��� �&� ���< �� �!����� – acolo unde e cazul – foaia de stiluri prezen�����

; ����� �< � � ����! �� �����! � � ����� � �������� ���!������� �� ���� � ����� � ���ularului program Winamp. Specificarea skin-� �� �� �������� �� ��� � "#�< ����� ���� � ���C�asupra documentului system-colors.xml ���� �� ��!� !��� � � ��!� � Vom scrie o foaie de stiluri XSLT care va genera un tabel privind valorile � �!���� ��� ���� � � �� ���� ��������� �� ����!���� "#� �� ���� �����! ��� ���� ���� ������� !�� ���e, întregul cod-�� �� ��disponibil pe situl de���� ������ �� ��

<!-- �������� ����� �-��(���� ���������� -->

<xsl:template match="elements">

<table align="center" width="600" border="1"

summary="Lista de culori">

<xsl:apply-templates>

<xsl:sort select="@id" />

<!-- am sortat in ordinea valorii atributelor 'id' -->

</xsl:apply-templates>

</table>

<!-- Afisam unele statistici... -->

<p>Am gasit <xsl:value-of

select="count(/elements/color[@value='255,255,255'])" />

elemente albe din

<xsl:value-of select="count(/elements/color)" />

de elemente.</p>

<!-- ...plus informatii privitoare la procesorul XSLT -->

<p>Procesorul XSLT folosit este produs de

<xsl:variable name="sp"

select="system-property('xsl:vendor')" />

<xsl:value-of select="$sp" />,

fiind disponibil la URI-ul

<xsl:value-of

select="system-property('xsl:vendor-url')" />.</p>

</xsl:template>

<!-- �������� ����� ��!����!���� ��������r -->

<xsl:template match="color">

Page 80: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 80

<!-- ����� ������ ������ *�����* (���''' -->

<xsl:for-each select=".">

<!-- ������� �������� ������� -->

<xsl:variable name="culoare" select="@value" />

<tr>

<td width="60%">

<xsl:value-of select="@id" />

</td>

<td width="40%" align="center">

<!-- ������� �������� �������� ��� ����� ���

componente RGB -->

<xsl:variable name="rosu"

select="substring-before($culoare,',')" />

<span style="color: red">

<xsl:value-of select="$rosu" />

</span>,

<xsl:variable name="verde"

select=

"substring-before(substring-after($culoare,','),',')" />

<span style="color: green">

<xsl:value-of select="$verde" />

</span>,

<xsl:variable name="albastru"

select=

"substring-after(substring-after($culoare,','),',')" />

<span style="color: blue">

<xsl:value-of select="$albastru" />

</span>

</td>

<!-- ��������� �� �� ��������� �� ������� �� (����,

���� �-��� -->

<td align="center">

<xsl:variable name="gamma" select="@gammagroup" />

<xsl:choose>

<xsl:when test="$gamma">

<xsl:value-of select="$gamma" />

</xsl:when>

<xsl:otherwise>

Page 81: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 81

<span style="color: red">

&lt;unknown value&gt;</span>

</xsl:otherwise>

</xsl:choose>

</td>

</tr>

</xsl:for-each>

</xsl:template>

5 ����� �� � ���� !� ��������� ���� ������ � �'� � ����� ����

� ��� 18 ������� -� � �� -��������� 2�3! ����� �

5 !��� �� �&�!��� ���� ���� ���������� ������� �� � ���� !� "$�� �� � �� '�� ��� �����-�� �� �� �� � �' �! .���$� ��� @� �����!� ��� �� � !��� ��� ���� � � ��� �� �� ������� �� �������� �#���8��� ������ �� ��'��� �� � ������� �� -un document XML de genul: <?xml version="1.0"?>

<?xml-stylesheet href="xsldoc.xsl" type="text/xsl" ?>

<mesaje>

<mesaj xml:lang="en">Good evening!</mesaj>

<mesaj xml:lang="ro">Buna seara!</mesaj>

<mesaj xml:lang="fr">Bon soir!</mesaj>

Page 82: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 82

<eticheta xml:lang="en">Say greetings</eticheta>

<eticheta xml:lang="ro">Saluta</eticheta>

<eticheta xml:lang="fr">Emettre un salut</eticheta>

</mesaje>

4� ! �� �� ����� �� �� ���� ��C� � ��&� ��� �� ���!����<eticheta> �� �� �!� � !���8 ������ �� � ���!�� <mesaj>< � ������� � ��� ���� �ngvistice ale utilizatorului. Documentul xsldoc.xsl va avea în responsabilitate generarea unui script �� � �� ������ ������ �� ���� !�!� �� �� 9�����! ��� �������- �����:2

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<!-- ����� ����� -->

<xsl:variable name="limba" select="'ro'" />

<html>

<head><title>Salutari</title></head>

<body>

<script language="javascript" type="text/javascript"

defer="true">

������ �����./ 0 �� ����� ����!�����

<xsl:text>alert("</xsl:text>

<xsl:value-of

select="//mesaje/mesaj[@xml:lang = $limba]" />

<xsl:text>"); }</xsl:text>

</script>

<!-- construim elementul <input> în mod "dinamic",

+� ������ �� ����� -->

<xsl:element name="input">

<xsl:attribute name="type">button</xsl:attribute>

<xsl:attribute

name="id">buton_de_salut</xsl:attribute>

<xsl:attribute

name="name">buton_de_salut</xsl:attribute>

<xsl:attribute name="onclick">saluta()</xsl:attribute>

<xsl:attribute name="value"><xsl:value-of

select="//mesaje/eticheta[@xml:lang = $limba]"

/></xsl:attribute>

Page 83: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 83

</xsl:element>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

Un ultim exemplu � ���� !�� � �� ����� � � !� !���� �� ������ < !�� ����< � ����� �� ��������� �� �!�� ����� +�����! ���������! !�&!�� �� -� !���!� �� ���� �

��� � �������< ��! �� � � ���� '�� �� maxim.xsl care va determina recursiv maximul unei mul�!2

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- ������� ��!���� �� � +� ���� ��1� -->

<xsl:output method="html" />

<!-- ������ ���� �������� �������� ��-����

dintr-� ������� �� valori -->

<xsl:template name="furnizeaza_maxim">

<!-- ���� �� ������ ��� �� �������� �� �ntrare -->

<xsl:param name="lista" />

<!-- elementul considerat maxim (o valoarea care nu face

parte din intervalul de valori considerat) -->

<xsl:param name="maximul" select="'100000'"/>

<xsl:choose>

<!-- ���� ��� �-��� ������� +� �������''' -->

<xsl:when test="$lista">

<!-- pastram lista într-� ���������, ��� ����

extragem primul element -->

<xsl:variable name="lista_r"

select="$lista[position() != 1]" />

<!-- �������� ���� ������� � ��-������ -->

<xsl:variable name="maximul_nou">

<xsl:choose>

<xsl:when test="$lista[1] &gt; $maximul">

<xsl:value-of select="$lista[1]" />

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="$maximul" />

</xsl:otherwise>

Page 84: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 84

</xsl:choose>

</xsl:variable>

<!-- ������ �������� ��������, ������� �oile valori

����� ��-�� �� ���� -->

<xsl:call-template name="furnizeaza_maxim">

<xsl:with-param name="lista" select="$lista_r" />

<xsl:with-param name="maximul"

select="$maximul_nou" />

</xsl:call-template>

</xsl:when>

<xsl:otherwise>

<!-- am epuizat lista de valori,

întoarcem maximul determinat -->

<xsl:value-of select="$maximul" />

</xsl:otherwise>

</xsl:choose>

</xsl:template>

</xsl:stylesheet>

?�! ������ ��� � ���� '�� ��< �!�� afiseaza.xsl, având rolul de a ����� � �� ���� �$$ ����!����� "��#� '�� �� �� ������� ��� ���� !� 9��'� �! ������ ���� � �� � ����� �� ���� � !�� � ��procesare):

<xsl:template name="afiseaza">

<style type="text/css">

body {

font-family: Arial, Helvetica, sans-serif;

width: 600px;

}

p {

margin-top: 0.1em;

margin-bottom: 0.3em;

}

/* etc. */

</style>

</xsl:template>

; ����� !�!��< ����! ����� ��� ��� "$�� �� !� ��� ��� � � ������� !�&!�� ���������� ������ �� ��!� ������ �� � ��!�� �������Punctajele sunt stocate într-un document XML cu structura:

Page 85: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 85

<?xml-stylesheet type="text/xsl" href="afiseaza_maxim.xsl" ?>

<punctaje exam="...">

<punctaj stud="...">

<nota tip="test">10</nota>

<nota tip="proiect">12</nota>

<nota tip="bonus">1</nota>

</punctaj>

</punctaje>

#� � ���� �� �� �! afiseaza_maxim.xsl, care va recurge la precedentele foi generice:

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="yes" />

<!-- �������� ���� ���� �������� ��-���� -->

<xsl:include href="maxim.xsl" />

<!-- �������� ���� �� ���������� 22 -->

<xsl:include href="afiseaza.xsl"/>

<xsl:template match="/">

<html>

<head>

<!-- ������ �������� �� ������� -->

<xsl:call-template name="afiseaza" />

</head>

<body><xsl:apply-templates /></body>

</html>

</xsl:template>

<!-- � ���� �����3��� ������� �� ������� -->

<xsl:template match="punctaje">

<h1><xsl:value-of select="@exam" /></h1>

��� �� ��� ���� ��� ������� �� ������ � ��#

<xsl:variable name="maxim_proiect">

<xsl:call-template name="furnizeaza_maxim">

<xsl:with-param name="lista"

select="//punctaj/nota[@tip = 'proiect']" />

<xsl:with-param name="maximul" select="'0'" />

</xsl:call-template>

</xsl:variable>

<b><xsl:value-of select="$maxim_proiect" /></b>

Page 86: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 86

<xsl:for-each select="punctaj/nota[@tip = 'proiect']">

<!-- ���� ���� � ��� punctaj maxim la proiect -->

<xsl:if test=". = $maxim_proiect">

<br />Studentul <xsl:value-of select="../@stud" />

este eminent :-)

</xsl:if>

</xsl:for-each>

</p>

</xsl:template>

</xsl:stylesheet>

�� ����� ������ �����< !����! !��������� �� ����� � �� ���� !� �� �� ��� � �' �!��� �� � ������ ��� "$��2

• Apache Cocoon � Xalan (bazate pe procesorul Xerces), cu !���!��� � �< �AA< �� � � .���< �sponibile gratuit la http://xml.apache.org;

• biblioteca open source libxslt pentru C/C++, parte a libxml ������� �cadrul GNOME: http://xmlsoft.org/XSLT;

• platforma Oracle-J; • biblioteca Sablotron 9�� �� � �:< ������� �� http://www.gingerall.

org � ������� � ��� �� ��� ) 9������ xslt_*: � �� !�����l Perl XML::Sablotron;

• procesorul Saxon (pentru Java): http://saxon.sourceforge.net; • MSXML �� �� #� �����< �� � ����� � ����� � �� �3# 9e.g., ca un

control ActiveX în cadrul Internet Explorer); • clasa XslTransform � ������ �� �!� System.Xml al .NET

Framework; • TrAX, parte a platformei de procesare JAXP oferi�� �� .4Q2

http://java.sun.com; • modulul XML::XSLT pentru Perl: http://www.cpan.org;

4� ���!���< �&��� ���� � – uneori limitat – în cadrul navigatoarelor Web actuale, via JavaScript.

Drept exe!��� �� ������ �� � �������� ������'� "$�� �!�!2 • Adobe Help Center – sistem de ajutor utilizat de suita Adobe Creative

$��� �< �� �����C� � �������< ������ ' ����L • Apache AxKit – mediu de publicare a datelor implementat în Perl; • Apache Forrest – mediu de dezvoltare de situri Web; • Microsoft InfoPath – editor/procesor de formulare interactive, parte

a Microsoft Office 2003;

Page 87: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 87

• OpenOffice – ���� �� � �� ������� � �'! open source; • XSLT Debugger – depanator XSLT oferit de mediul KDE.

Extensiile EXSLT

Comunitatea dezvoltatorilor de foi de stiluri XSLT a remarcat lipsa unor ���������� ���� ��� ��������� ������� 3 ����� !�� ���� � ��������� � ����� �� !����� 9�&���: ��� "$��< ��� � �������suplimentare, detaliate pe situl www.exslt.org� +!���!��� �� %"$�� ��� �reali���� � ��� � "$�� � � ���� �!��8� 9�����< �� ������ ����� ��scripting).

%&����� !����� ���� ������ ��� �� ��2 • extensii comune: Common; • ������� ��� � ����� �� �� ���cule matematice: Math; • ��� � �� !���!2 Sets; • ��� �� �� � � �� �� ���� �2 Strings; • lucru cu date calendaristice: Dates & Times; • suport pentru expresii regulate: Regexp; • ���� � ��� � ��� �� �� ���� �&�� �2 Functions; • �������� ��� � ������ �� ��!�� � � � �� ���C� �&� ��

XPath: Dynamic; • generare de numere aleatorii: Random.

Pentru a folosi un modul EXSLT în cadrul unei foi de stiluri, se va ��� '� �� ������� �� ������ �� �!� �� ��������are.

De exemplu, pentru a utiliza m������ ��� �� �� ��� �� �� !���!<vom scrie: <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sets="http://exslt.org/sets"> ... </xsl:stylesheet>

��� � � � ��� ����� �� ���!����� �� ��������� � ����lor de �!� %"$�� � � �� ��� '�� �� �� �� �< ��! ���iza atributul exclude- -result-prefixes< ���� ��! �edea în exemplele de mai jos.

������� ) ��!� ����� !����� %"$�� � �����< ��� � � ���� ���� !� ������ ���� �� ��� � �������� ,����� ����!��� � ��� �� � ��implementate de unele procesoare XSLT.

Page 88: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 88

!����� 7 ����� �� ���� �� �� -� �� -���� ������ %2�3!

Modul URI-�� ��������� �� �ume ������� ��������ile

Math http://exslt.org/math

,��� �� ����2 math:min, math:max, math:highest, math:lowest ,��� ����!�ntare (similare celor ECMAScript): math:abs, math:sqrt, math:power, math:log, math:exp, math:random, math:sin, math:cos, math:tan, math:asin, math:acos, math:atan etc.

Sets http://exslt.org/sets

,��� �� ����2 sets:difference, sets:intersection, sets:distinct, sets:has-same-node, sets:leading, sets:trailing

Strings http://exslt.org/strings

,��� �� ���� 9�!�� � ���� ECMAScript): str:tokenize, str:replace, str:concat, str:split, str:align, str:encode-uri, str:decode-uri etc.

Dates & Times

http://exslt.org/dates-and-times

,��� �� ����2 date:date-time, date:date, date:time, date:year, date:month-in-year, date:month, date:day-name, date:hour-in-day, date:minute-in-hour etc. ,��� ����!��� �2date:format-date, date:add, date:sum, date:difference etc.

Regexp http://exslt.org/regular-expressions

,��� �� ����2 regexp:test, regexp:match, regexp:replace

������!���< � ������ ��� �� � !���!������ ��� 9�� ���� !� !����� < �� ���: !������� %"$�� ��� 4XSLT, libxslt, Saxon � Xalan. Pentru celelalte, se pot folosi sursele modulelor pu�� �� ������� �� ���� �!���

Revizitând exemplul de mai sus privitor la determinarea maximului �����8��� ������ �� � �����< ������ %"$�� ��! �� � � !���� ���2

Page 89: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 89

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:math="http://exslt.org/math"

exclude-result-prefixes="math">

<xsl:output method="html" indent="yes" />

<xsl:template match="/">

<html>

<head>

<title>Maximul punctajului la proiect</title>

</head>

<body>

<h1><xsl:value-of select="//@exam" /></h1>

��� �� ��� ���� ��� ������� �� ������ � ��#

<xsl:value-of select=

"math:max(//punctaj/nota[@tip = 'proiect'])" />

</p>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

Invocând procesorul Saxon din linia �� ��!��� 9��< � ���D�:<��! ����2 D:\saxon>java -jar saxon8.jar -novw punctaje.xml maxim.xsl

<html>

<head>

<meta http-equiv="Content-Type"

content="text/html; charset=UTF-8">

<title>Maximul punctajului la proiect</title>

</head>

<body>

�&4������������ ��-calculator</h1>

��� �� ��� ���� ��� ������� �� ������ � ��# 4)����

</body>

</html>

3 ���� �&�!����� �< ���� C� ����� �� ��� ���� �� !���! ����� < ���� � !���� ��2

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Page 90: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 90

xmlns:set="http://exslt.org/sets"

xmlns:date="http://exslt.org/dates-and-times"

exclude-result-prefixes="set date">

<!-- ������� (������ �� � +� ���� �- ������� -->

<xsl:output method="text" />

<!-- 1�������� �� ������ ���������� ����� �������ile

�� ��������� �� �� ������ -->

<xsl:variable name="a"

select="//punctaj[contains(@stud,'a')]" />

<xsl:variable name="m"

select="//punctaj[contains(@stud,'m')]" />

<xsl:template match="/">

5��� ��������� ��� �� ���#

<xsl:for-each select="set:intersection($a, $m)">

'<xsl:value-of select="@stud" />'

<xsl:text> </xsl:text>

</xsl:for-each>

5��� ��������� ��� �� ����������� ���#

<xsl:for-each select="set:difference($a, $m)">

'<xsl:value-of select="@stud" />'

<xsl:text> </xsl:text>

</xsl:for-each>

5��� ��������� ��� �� ����������� ���#

<xsl:for-each select="set:difference($m, $a)">

'<xsl:value-of select="@stud" />'

<xsl:text> </xsl:text>

</xsl:for-each>

$����� ������� � �� (������ ����,

<xsl:value-of select="date:time()" />.

</xsl:template>

</xsl:stylesheet>

4��� ��! �� ����� �!� ��< �! ��� � �� ������������ � ����module EXSLT: Sets � Dates & Times.

����� ���������� �������������-FO

�C� ���! �! ����� ��! ����! � ���� !� ������� "#� � ��� ���� !���< ������� �� � ����� � � ������ 9"��#�< $?G � ��&� �����:�O necesita�� ���� ����� �� � ������ �� ��!�� ������� �� �� !��� �

Page 91: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 91

������� � �������� ���u!����� "#�< �� �&�!��� � ���� �� ��� conform stan�� ���� � �'�� �� ������ ������� ��� ���� �� ������� ����������� "$�-FO (Adler et al., 2001) �� � �� ����� ����� 9�: � ��8������ � ���� !� �� "$���

Maniera de formatare decurge astfel: dat fiind un arbore de noduri XML, via XSL-,3 �� ��� ����� � �� ���� �� �� !��� � ��'��� – conform unui mediu de redare –, astfel încât infoset-ul re������ �� ����� � � ������utilizatorului pe ecranul unui dispozitiv (calculator personal, handheld, ����� ����� ��� ����: � ����� 9� ��� �� �� !���2 �� ��< � ��� �< ������' �������:� ����� � ���� � ����� � ��� ���� �� transformare, rea����� �� �� ���� !��� H� ����� "$�< � �� formatare, via un formatator XSL. Nu este obligatoriu ca transfor!� �� �� �� � � ���� ���� �� �� ��� ��� ���� !� �� 4��� !� ��� �! �&��� ��������� �� � ���� !� �< � ���� ��� !���� � ��! ����ntra asupra celei de formatare.

���� ! ��D�� 9�--�:< !�������'� �� ��� � �� � ���� �������������� � !���� ��� �������2

• ������� �� �� ���� ����!��u��H����!����� "#� �� ��L • ������� �� ��H�� �� !� �� ��� � 9���� �< ���� � ����: � � ��

format dorit (XHTML, WML, PDF, PostScript etc.); • ������� �� �������� �� �� !��� � � ���� ���� ��!���� �� ��� �L • reutilizarea/conceperea documentelor XSL; • optimizarea foilor de stil XSL folosite; • ��!��� �� ���� �� ��� ��������< � ���� �� ������ � � ����� �

4 ���� �� ���� � ��������� � ����< �� � ��� �� � ����! �� !�2 • Documentul �� ���� ��������� ��� ����� � � !� �� !��� �

� ����� � ���� �� ���� � ��'� � � � �� � !�8� � 9�!�are modelului folosit de LaTeX): – front matter – ����� ��'� �� ����< � ������� 9�������:<

� �����< ��� ���< ���� �'� �� ���� 9�� �� ���� ��� � � �� ��:L – main matter (corpul) – are caracter obligatoriu, reprezentând

������� � ���� �� ����!�����< �iferent de forma sa; – back matter – ���� � ��&< '���� ��< ����' ���< � ������ ����

9�� �� ���� ��� � � �� ��< ���� ��!���n�� �� �������:� • Aranjamentul (layout: ���� �� �������� �� ��� �� ��' �

��������� ��� �� ������� �� �� !��� � 9page templates). • '����� ��������� (page flow: �� ���� � ������ �� '�� � � � ���� �

��'< � ����� �� � �8�!���� �������< �� !���� �� ��� � ��� ����� �� ����!�� ������� 9e.g.< �� ��< � ����< � ��� �< slide-uri etc.). Acest flux are loc în concord��� �� � �� ����ile de formatare

Page 92: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 92

specificate via obiecte de formatare (formatting objects: ��������������� "#� �� ��aia de stiluri XSL.

• Pagina (page: ����� � ����� ���� ! �� � �n�� – e.g., la 90% ��� � � �� '�� � � ��'� �� �� ����8 9landscape) – � � ������ �� !���� ��� ��� �� nteres: – �� ��� ���� �� � 9before) – � '�� ��< ��� ���� ����� �� L – �� ��� �� �� � (after) – uzual, pentru subsoluri; – partea de început (start) – � !�� � !��< �� ��� ��C'� � ��'L – partea de final (end) – � !�� �����< �� ��� � ����� � �aginii; – corpul propriu-zis (body).

Figura 14. Zonele de interes ale unei pagini, conform XSL-FO

• (��������� (content: �� ���� �� !��� � �� � ���� ��!����9E�!�����F: � ������� �� ��'� ����� � �����rat static (folosit

Page 93: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 93

pentru zonele diferite de corpul paginii) sau de tip flux – flow (apare în corpul paginii), incluzând arii (areas: �� �� !���

• Aria (area: ���� � �� ���� � ������� � �� !��� �����< ���C� �'�� ��� �� -< * ��� !� !���� ������ �� �� !��� � � ����C� ���� � ����'���a � � ��� �� !����� �� ��� � 9� �� �����figura 15). O arie poate fi de tip inline – ��� C� � ��� �� �� ����(block: �� �� !��< ��C� ������� � �� ���� ����ilind local !���� �� ��� � � �����ului (e.g., o imagine precedând un titlu, un fragment de text scris înclinat etc.) – sau de tip block – ����!C� �� !�� ���� ��� �� �'�� �� �� !��� �< ���������� � � �� �� inline (exemple tipice: paragrafe, tabele, ���� �!� ����� � �ltele).

� ��� 1+ ���-�������� ��� � 5 ���� ����� -��-� �-zis (content), �-� �� 6����9������ �padding � �"����� �border)

� �� ������ �� �� !��� � �� ������� �� ���� ��������� �� �$$ 9K�� et al.< *JJ7:� $���!��� < ��� ����� !������� !ai sofisticate de formatare (e.g.< '�� � �� �� ��'��� < �� ��� �� < �� ��� �� �� ������< �� ��'� � ����� �������� ����:< ���� ��! �� �� ����� ������ �din exemplele pe care le vom prezenta mai jos.

5����� �� !��� � ��� �!�� � celor de la CSS (cm, mm, in, px, pt, pc �em), valorile putând fi absolute sau relative.

4 ������< ��������� �� !��� ����� �� ���� !� !���� � ��procesorul XSL-FO utilizat, formatele standard suportate în mod uzual fiind PDF (Portable Document Format), PS (PostScript: � ��, 9Rich Text Format).

���� ����� "$�-,3 � ���� �� ��� �� ������� �� �!� ���� ��URI-ul http://www.w3.org/1999/XSL/Format. Un document XSL-FO are drept

Page 94: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 94

����� ���!���� <fo:root>, iar aranjamentul paginilor e specificat de <fo:layout-master-set>� ,��� � ������� �� ��' ���� �����printr-un element <fo:page-sequence> �� � �� ������� � !���� ��'�� � � � �������� – fluxul de date via <fo:flow> � �������considerat static prin <fo:static-content>.

� �� ������ '�� ��� ��� ��' �� ������ � <fo:simple-page-

-master>< � ����� �� ��'�< �� <fo:region-body>, <fo:region--before>, <fo:region-after> ����!��� � �� �� �� ���� �� ����i��� � <fo:block>, iar cele de tip inline cu <fo:inline>.

$� ��� ����� ������ ������ � � �� !���� �� ���!��� ��<fo:table>, <fo:table-column>, <fo:table-row>, <fo:table-cell>, <fo:table-caption> ��� ������ ' ���� � ����� �� <fo:external-

-graphics />� ������ �� �� �� ���� �� ������� � ���!�����<fo:list-item>, <fo:list-item-label> � <fo:list-item-body>. %&��� ���������� �� � �� ��'��� ��� ��&� ��tre alte resurse via <fo:basic-link>. De asemenea, notele de subsol sunt indicate prin elementele <fo:footnote> � <fo:footnote-body>. Specificarea de � �� ���� �� �� !��� � �� ��� �� �� ���� 9e.g., pentru generarea letrinelor) se reali����� �� <fo:character />, iar alte tipuri de ������ 9e.g., SVG) pot fi incluse – da�� � ����� �� � � ���!��� ���� � – via <fo:instream-foreign-object />.

� �� ������ �� �� !��� � �� ������� ' ��� �� �� ���� ������� �� elemente de interes precum <fo:block> ori <fo:inline>.

,� ��! � ����� � �C���� �&�!���2

<!-- specificarea unui element de tip bloc (paragraf) -->

<fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" text-align="justify">Salut!</fo:block>

<!-- inserarea inline � ���� ��������� -->

<fo:inline>Vezi remarca <fo:character character="1" baseline-shift="super" font-family="'Arial Narrow'" /> </fo:inline>

<!-- includerea unei imagini PNG -->

<fo:external-graphic content-height="1cm" content-width="2cm" src="url(images/csb.png)" />

Page 95: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 95

%&��� ������� !� !���� �� !������ � "$�< �� � �� � !����!2 • Antenna House Formatter – www.antennahouse.com; • Apache FOP 9�� � � .��� � ������ � �'! open source) –

xml.apache.org/fop; • Formatting Objects Authoring (pentru Java) – foa.sf.net; • Java XSL-FO for RTF – www.jfor.org; • RenderX XEP (conceput în Java) – www.renderx.com. %&�!����� �� � !���� � �� ��� '� ����� �� ������ ,3� ��� �

'�� � �� ����!����� �4, �������� � � !� �� !��� �� � @� � ����!�� �����! ��� �� �� !��� ��e�C� �� �� � !��� �� ����!�� "#� ��!� ������ ������ � ���� � �� ��� ������� 9E����!C����� �F1: ��examen:

<examen>

<meta>

<desc>Primul test scris la Tehnologii Web</desc>

<autor uri="...">...</autor>

<data tip="actualizare">...</data>

<data tip="creare">...</data>

</meta>

<subiecte>

<subiect punctaj="6" id="1">

<desc xmlns:h="http://www.w3.org/1999/xhtml">

<h:p>...</h:p>

<!-- etc. -->

</desc>

<dep subiect="2" />

</subiect>

</subiecte>

</examen>

Elementul <desc> poate include construc� "��#� 9e.g., <p>, <ul>, <li>, <tt> etc.).

4� ! �� ���! ������� ������ ����!�� ������ ��������� �� ����oferite de obiectele de formatare. Pentru aceasta, vom scrie o foaie de stiluri "$�< �� � �� ��� '� �� "$�� ��� � � ������� �� !���� �� �� � ��XSL-FO pentru a realiza formatarea propriu-���� ������< ��! ������codul furnizat mai jos:

<xsl:stylesheet version="1.0"

xmlns:fo="http://www.w3.org/1999/XSL/Format"

Page 96: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 96

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:h="http://www.w3.org/1999/xhtml">

<!-- (������ �� ������� 61�,

�����!��� �� ������������ 62�-FO -->

<xsl:output method="xml" indent="yes" />

<xsl:template match="examen">

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<!-- aranjamentul general al paginilor -->

<fo:layout-master-set>

<!-- ��(��� ���������� . ���� $7/ -->

<fo:simple-page-master

page-height="297mm" page-width="210mm"

margin="15mm 25mm 15mm 25mm"

master-name="pag_principala">

<!-- stabilirea corpului paginii

.�� ������� ��������� �������-zis) -->

<fo:region-body margin="20mm 0mm 20mm 0mm" />

</fo:simple-page-master>

</fo:layout-master-set>

<!-- ��������� ��������� �� ��(���

pentru pagina principala -->

<fo:page-sequence master-reference="pag_principala">

<!-- crearea obiectelor flotante

�� ��� ������ +� ���� -->

<fo:flow flow-name="xsl-region-body">

<fo:block>

<xsl:apply-templates select="subiecte" />

</fo:block>

</fo:flow>

</fo:page-sequence>

</fo:root>

</xsl:template>

<!-- ������ �� (������!� ���� ����� �� �����cte -->

<xsl:template match="subiecte">

<xsl:for-each select="subiect">

<!-- ����� +� ������ �� ��-ul subiectului -->

Page 97: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 97

<xsl:sort select="@id" />

<fo:block>

<!-- (������ �������� ����� �����e subiect -->

<fo:block>

<fo:inline>Subiectul

<xsl:value-of select="position()" />

</fo:inline>

</fo:block>

<!-- � ���� �� �����3�� ��-�� ������ -->

<fo:block font-weight="bold"

padding-bottom="0.3em">

Punctaj: <xsl:value-of select="@punctaj" />

</fo:block>

<xsl:apply-templates />

</fo:block>

</xsl:for-each>

</xsl:template>

<!-- ������ �� �������� ������������ �� � ��are

pentru <h:p> -->

<xsl:template match="h:p">

<fo:block font-size="12pt" font-family="sans-serif"

text-align="justify" text-indent="2em"

line-height="15pt">

<xsl:apply-templates />

</fo:block>

</xsl:template>

<!-- ������ �������� �������� ����� ��������� �&#�� -->

<xsl:template match="h:i">

<fo:inline font-style="italic">

<xsl:apply-templates />

</fo:inline>

</xsl:template>

<!-- ������ �tabilind stilurile pentru <h:tt> -->

<xsl:template match="h:tt">

<fo:inline font-size="10pt" font-family="monospace">

Page 98: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 98

<xsl:apply-templates />

</fo:inline>

</xsl:template>

<!-- ������ �������� �������� ����� �&#�� �� -->

<xsl:template match="h:br">

<fo:block></fo:block>

</xsl:template>

<!-- ������ �������� ������ ����� �&#�����&#��� -->

<xsl:template match="h:ul | h:ol">

<fo:list-block>

<xsl:apply-templates />

</fo:list-block>

</xsl:template>

<!-- ������ �������� �������� ����� �&#��� -->

<xsl:template match="h:li">

<fo:list-item space-before="0.4em" space-after="0.2em">

<!-- (������ ���&�� �� ������!��� � �����ului

de elemente ale listei de subiecte -->

<fo:list-item-label end-indent="label-end()">

<fo:block text-align="end">

<!-- stabilim modul de numerotare -->

<xsl:number format="1." />

</fo:block>

</fo:list-item-label>

<!-- gene��� ��������� �������-zis

�� ���� ������ +� ���� -->

<fo:list-item-body start-indent="body-start()">

<fo:block text-align="justify">

<xsl:apply-templates />

</fo:block>

</fo:list-item-body>

</fo:list-item>

</xsl:template>

</xsl:stylesheet>

Alte exemple de foi XSL sunt disponibile pe situl dedicat acestui volum.

Page 99: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 99

; � !� ��� � ����� ��� ,3� � � -o linie de forma: D:\fop>fop.bat -xml web-test.xml -xsl test-print4.xsl -awt

vom ����� ���� � �� ����� � � ���! ��� ���� ��� � �'� � */ 9���� ��� �� ���! �� ������� � ������ open source de generare co!��� �� ����!��� �4,< ����C� �� �� ���� ������� � ��� � "#�< �� ��� �� ���� ��� �� �� ���:�

Figura 16. Redarea in����� ��� ������� �� �:&

Page 100: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 100

������ �� ��� !"#$%�����"#$

;����! ����������� �� ���� �� � ���� �� �� � ��� �� ��� � ���� � �� � ���� !� �� � �� !��� �� �������� "#��

; !�!���� �� � ������ !��� ��< �� ���� ��� ��� � � � curs de standardizare varianta XPath 2.0 (Berlung et al.< �-- :� ������� ����� ��� ���� ����� ��� �� �� ���� ��C� ��� � "$��< �C� � ��� �XQuery (a se vedea subcapitolul 5).

%&� ���� "���� ��- ��� ���� ���� � �� �� ���� ��'�� 9���� ���e) a ����!����� �!�� data model – a se vizita www.w3.org/TR/ xpath-datamodel/ pentru detalii. Tipurile de date folosite sunt cele precizate de XML Schema 9�!���� � ����iunea 3.4), iar la traversarea documentului se pot folosi axe suplimentare.

XPath ��- �� !�� ������� �� �� ������� 9����: � �� �� ���� ��valori, precum (8, 10, 1 to 4).

������ �� ������� – de noduri ori de valori – apar noii operatori union (prescurtat prin „|”), intersect � except< �� �� !� ��� �� �� !���!�Este intr���� � ��� ��� �� idiv care va oferi un rezultat întreg al �!�� � � ��!�� ���� '�erale se pot face via operatorii =, !=, <, <=, >, >=, iar cele asupra valorilor atomice – prin operatorii eq, ne, lt, le, gt, respectiv ge 9����� ������ ���� ���� �!�i'���� � ���� !� �� � �� ��cod mai clar).

��� � �� ��< �� ����� ����� �&� ��� for< ��� �C� � ���� ��valori/noduri, ca în exemplul de mai jos: for $i in (10, 20), $j in (1, 2) return ($i + $j)

#� !��� ���C� ��C�< �&� ���� �����ale pot fi exprimate prin if (în �&�!��� � !��� < ���� ��� �� ������'��� ���� !�r���� �� �� final, ���� �� ��� ���� ����� �� ���!����� nota, iar în caz contrar, valoarea elementului prezente):

if (catalog[@stare = 'final']) then student/nota else student/prezente

De asemenea, se permit expresiile cuantificate, precedate de cuantificatorii some 9�&���: � every (oricare):

some $x in (1, 2, 3), $y in (2, 3, 4)

satisfies $x + $y = 4

every $x in (1, 2, 3), $y in (2, 3, 4)

satisfies $x + $y = 4

Page 101: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 101

; ����� ������ ���! �&�!���< � !��� ���� � �� ���� �� ����� ��true< � ���!��� ����< false.

���� ����� �� �� �� ��� � ���� �� ���� ��� ������� � ��� �-rea Kay (2004).

��� � �� � �� ����� ��� � �� ���� � "$�� �.0 (Kay, 2005), care – printre altele – ��� '� �� "���� ��-< ��� � �������� �� ������� � � ������ definite de utilizator, aduce suport pentru crearea de arbori multipli la �� � � �� !�� ����� �� �� ��� ��� � �� ����H�� �!�� � ; ���s, diverse grupuri de noduri pot fi parcurse via <xsl:for-each-group>.

4� ���!���< � ���� ���� �� ���� �� !� ���< ��n�� ����<xsl:for-each> ����� �� � � ������� �� ���� < � ��� �� ��� �Suplimentar, criteriul de sortare poate fi specificat d� � �����-utilizator, ��� � ����� ���� � ��� � �� !��� �� ���� � �� ��� � �� ��� ���� ����� �� �!� �� <xsl:namespace>� 4��'� < ��� � ���� �!��-���� �

�� !�!���� ������< � ����� �� �� � !���!������ ��� !� ����variantele de lucru ale XSLT 2.0 este Saxon.

;� ��! ����� ��� � � �&�� !��� � �� � �� � ��� �������< � �� !���� � !���� � �� �� ���� 9���� ��� ������� �� ���� �scrierea codului):

<xsl:stylesheet version="2.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- �� ������ �� ��!��� �- ������� -->

<xsl:output method="text" />

<xsl:template match="/">

<xsl:apply-templates select="punctaje" />

</xsl:template>

<!-- ������ ���� ���������� ��!����� +� ���� 28 -->

<xsl:template match="punctaje">

<xsl:text>Nume si prenume,Proiect,Test,Bonus</xsl:text>

<xsl:for-each select="punctaj">

<xsl:variable name="punctaj" select="." />

"<xsl:value-of select="@stud" />"<xsl:text />

<!-- ����� ������� �� �����3� ������� -->

<xsl:for-each select="('proiect', 'test', 'bonus')">

<xsl:variable name="tip" select="." />,"<xsl:text />

<!-- ������ ����� �������� ��� (������ *-' -->

<xsl:value-of

select="if ($punctaj/nota[@tip = $tip])

Page 102: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 102

then format-number($punctaj/nota[@tip = $tip],

'00.00')

else '-'" />"</xsl:for-each>

</xsl:for-each><xsl:text></xsl:text>

</xsl:template>

</xsl:stylesheet>

������� ���� �� ���� � ������� ����!����� "#� �� �����8��������� �� � ������ � '�� ���� � �� ����are CSV (Comma Separated Values) a acestora, pentru ca ulte � �� ����� � ������� �� -un program de calcul tabelar.

?�! ����< �� �&�!���< � �� � �� �� !� (care poate fi ulterior �� ������� �� -� ��� punctaje.csv): D:\saxon>java -jar saxon8.jar punctaje.xml csv-xslt2.xsl

Nume si prenume,Proiect,Test,Bonus

"Abageru Stefan","11.00","09.00","-"

"Mocanu Madalina","-","-","01.00"

"Moruz Mihai Alex","12.00","-","01.00"

"Augustin Roxana Maria","10.00","-","01.00"

"Dumbrava Andrei-Liviu","10.50","10.00","01.00"

3.4. Validarea documentelor XML

Punerea problemei

3 � !� �������� � ����� ������ ������'� "#� ���� ����� ���� !���� !� ���� � "#� �� ����� � �'����< �������� � �� ��8��� �� �di�� �� ������� ������< � �� �� !�� ���� ���� �� � �������2

• setul de elemente/atribute ce pot fi specificate; • modul lor de structurare (e.g.< � ���< �!� �� !inim/maxim de

��� �< ����&��� ����); • ���� ��������L • �� ��!� ���� ���� � �� �� ���� � �� ��

$����� ���� ����� �� ��� ��� !� !���� ' ��� �� ��� �� �������!���!�� �� ���!��� � �� ���� �� !�� � �'���� �� !� �� �< ����tocmai modelul structural amintit în cadrul ����� ��� � ��������� ������� ������ ' ��� �� ��� e� ����2

• o companie (e.g., Adobe – ��!��� � ��������� "#� – ori Sun – definind modul de precizare a bibliotecilor de tag-uri JSP);

Page 103: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 103

• o industrie (precum industria dispozitivelor mobile � 8��� �� 3��Mobile Appliance, organismul care a standardizat limbajul WML);

• �� ���� �!�� ���� � ���� ��!� 9�� �&�mplu, dezvoltatori ai �� ������ � ���! .���� ��� 3��3����:L

• � ������� �� �� �!��� ������� 9tool vendors), precum Microsoft ori Oracle;

• � ���� �� ��� � '����� �-� ��� 9���� ��� ��� ��� 3�$+$:� #������ �� ���� �� �� ����� �� ����� �� ����!��� "#�< � ���� ��

�� ��� �� � ����� 9� ����� ��� parser: � �� ������ ������� �� ����!��� ��� �Cnd acelei clase. Se au în vedere aspecte privind:

• modul de numire a elementelor/atributelor; • definirea regulilor de utilizare a acestora; • ������� �� �� ���� � ��������L • precizarea anumitor constrângeri; • ��� �� �� ��� �� ����� �� �! ��

A�� � ����� ��������� ������� �� ��� �� constrângeri asociate ����!����� < ������ ��C� ������ "#� �� �� �� �i���� ���� ��� valide sau nu din punct de vedere struc�� �� ��� �� ����� ���������

���� ! �� �� ?��� 9�--�:< !��������� �� precizare a constrângerilor se pot baza pe:

• descrieri – ��!�� ���� ��� �� ����� � ���� ��� �� �� '���E�&��� � ���!�� <student> având un atribut nume care are �������XFL ������� !�� � � �������� �� ���������� 4�4 �XML Schema, desc �� � ������� � !���� �L

• reguli – se pot specifica, într-� !�� � �� ����� �� "$��< ��� ������ ��� � ���! E� �� ��ement <student> va avea un atribut nume< � ������� ������ �� ��� �� �� ���� !� �'ulii…”; acest ���� �� ���� � � �!�� ���� �� $���!�� �L

• �� ����� – �� � � � ���� � ����� �� �� ������� 9patterns) structurale, pe baza unor potriviri (match); astfel, se pot preciza ���� ��� �� �� !� E� �� �o��!�� � ����� ������ � ���� �� ����� ������ � !��� ��� �����XFL � ���fel de abordare este ������� !������� �%��" @G �� �� � � ������ ���erior.

Document Type Definition (DTD)

4��� ��! �! � ����� � ��� �� ������������ ��� � < ���� � ����!��"#� �� ����� �����< �� �� ���� ������< � ����� � ����� ��d���!��� ������� �����< �!�� 4�4< �� ���� � ������� � �� !���

Page 104: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 104

� �� �� �� ����!��� 4��� 4�4-�� �������< ����!���� "#� � ���� ��respecte un nu!� !! �� ���� C'� < ���� � ���� �� �� ��� bine formatat (well formed).

3 ��������� 4�4 ����� � �� � ��� �&�� � ����!����� "#� ��care-� ��������� ��'���� ������� ������� � �adrul DTD-ului provin de la SGML, adoptându-se definirea unor meta-elemente. Prin intermediul unui 4�4 �� ��� ��� �� ���� � ��������< !���� �� ��� �� � ���!����� �maniera în care sunt imbricate acestea.

4�4 ���� �&� !�� �� � ��� �� �� !�� 9�� ����: ����� ����<����C� � ���&� �!��� � ������ � ��������� K �> et al. (2004). Un 4�4 � ������� � �� �� ����!�� �� � ��nstru��� �� �� !�2

<!DOCTYPE ������ ������ [

����� ���� �� ������� � ����� ���������

]>

Specificarea elementelor

Pentru modelul structural privitor la antologia de poezii, am putea scrie ����� � !���� �2

<!ELEMENT antologie (poem+)>

<!ELEMENT p��� .���", ��� �9/�

<!ELEMENT titlu (#PCDATA)>

�:;�;1;5� ��� � .����9/�

<!ELEMENT vers (#PCDATA)>

,��� � ����� ��� �� ���� � ����� �� !��� � �� ���!��� 3����� ��� 9!���-���!��: ���� ���!���� �� ��!��� EVF � EUF< � !ul �� ���� �� ��!�� �� �&���!���< � !�� !���� �� � ���C�-cheie "#� �� � ����!���� ���� �������� �� �� � ���� 9���!��< ���� ��atribute, en����� ����:� ,��� � ����� ���� ��!���� �� -un nume sau un grup de nume (ne-terminali în ja '��� �!��8��� �� !���: � � ���inut (ne-�� !�� � �� !��:� 4��� ��! �� ���� ��< ���� � ����� ����� �asi!���� �� � � ������ � �� ' �!��� �� !��� 9��� .���< *JJJ:� �� �����!����� ��� �� ����� �� ��� ���� ��� �� ���� ���� 9�����<caractere tab ��� �� ���:�

;��� ��� �� � �� �����< ��� ��-� ���� �� �� � ����� �� �!����model-��������< ������C� �� ���� ���!��� ��� ��� �� � ��� �����!����� ��������� ������� �� ���!�� ����� �2

• � � �� �� ���� � (desemnat de constanta #PCDATA – parsed character data);

• �� 9�� ��������� ���C���-cheie EMPTY);

Page 105: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 105

• � �� ��� !� ��8H� �� �� ���� � 9� ����� �� ANY), facilitând �&��� �� ���� �� � � !������� �� ���ural.

#�� � �� ��� �� � �� ���!�� ���� ��������� �� indicatorii de apa-�����< ���� ! ��� � �&� ���� �'������ ������< � ���!�� ����� ��� ��2

• � �'� � ���� 9�� � ������� �!��� ���!����� �������:L • �� � �C�� � < ����� ������ 9�� ��������� ��mnul „*”); • !��� � ���� 9�� �������� operatorul „+”); • de zero sau unu ori (se recurge la „?”).

3 ��� ��� �� ���!����� ����� � � ������ �� ���-�!� conectori: • �� ���� �� � '��� E<F ��!��� � ������� �� ���!��� –

��!������� � ���� �� ��� � ���'a�� � � � ��� � ������L • ��!�� EYF ����!���� � ���� ���� – doar una dintre compo-

��� ����� ��� �� �� � !�!�� ����

� ��� 1; /�� � � �� /!/ �� ����������� -� � ���� � ������� ���� -�oiecte

5 ��� �&�!���< �� � �� ��� � �� !���� �� �� ���� � � � n�� !���� privi��� � �� � ������� � ����� �� � ������ ���� ���� �� �� �'� � *6�

Precizarea atributelor

�� � ���!�����< �� ����� � � 4�4< �������-�� � ���&� �!i�� �� De exemplu, pentru a specifica atributele asociate elementului- �����

<antologie> vom scrie: <!ATTLIST antologie

coordonator CDATA #REQUIRED

data CDATA #IMPLIED

>

Page 106: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 106

Tipul valorii unui atribut poate fi: • � � �� �� ���� � – desemnat de CDATA – character data; • un identificator unic – precizat prin ID; • � ��� �� �� � ������tor – ��������� �� IDREF; • � ��� �� �� � ������ – ������� � ENTITY; • � � �� �� ���� � �����!� �� – precizat de NMTOKEN; • o enumerare de valori – ����!��� �� ���� � ����� � � �� ��<

���!���� �� �� ���� �� EYF� Un atribut poate fi declara� �� ��� �2

• obligatoriu – �� ��������� ������ #REQUIRED; • ������ – se recurge la #IMPLIED; • fix – �� ��������� ��������� � ����� � a priori ��������� �� #FIXED.

��� � ������� �� �� ������ ��� ��� � �� � ����� ����! ������ ������ din figura 18.

� ��� 1< /�� � � �� /!/ �� �� ������� ����� ���� � -�� ����

5 ��� �&�!��� � ����� ������� �� '�����'� �� �� ����< ��� �fiecare individ putând fi precizate diverse evenimente importante (e.g., ���� ��: – definite via elemente – � ��!�� �� !�� 9� �������� <'���< ������ �� �!� �ixat) – desemnate de atribute. <!ELEMENT person (name | birth | death | note | father | mother)*>

<!ATTLIST person

id ID #REQUIRED

gender (M | F) #IMPLIED

xmlns CDATA #FIXED "http://person.org/gen/"

>

Page 107: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 107

������������������

4��� ��! �! ����� !� ���< "#� ��� � � !����� ���&��� � ����� �������� � � ��� ��� � � ��� ���� �� � ��� ���utului unui document, într-un mod portabil. Cuvântul entitate are un sens special: îns��!� ��� �� �� ��&� �� � � � ��'�� � �!� 9� ������ ����� � � � �� �� ��-tere ori con����� �� ��� ��&�< �&�� :� %������ �� ������� � ������� 2 ����� '�� ��� � ����� �� �� �!�� � %������ '�� ��� ��împart, la rândul �� < � ����� �� � �������< ����� �&�� � �������� ����� �&�� � �analizate.

; ��� �� �� 4�4< ������� ��� ����� � ���� �c�� <!ENTITY. ��������� ������� �����%��� �� ��� � � '�� �� �� � ��&� �� �� � � ���� ��

îl expan���� � ����� �� "#� ���� �C� ��C����� � ��� � �� ���� ������� +��� � �&�!���< � �� � ���! ����� � !���� ���2

<!ELEMENT pictor (#PCDATA)>

<!ENTITY sdali "Salvador Felipe Jacinto Dali i Domenech">

Entitatea sdali � ����� � ������� ������:

<pictor>&sdali;</pictor>

?���� �� �� ����� �� � �� � �&������ �� � ����� �� "#� � � ���� ������ �� ���� ��� EZF< ELF ��� ����� �� � ����� ���� ��� �� �� ���� ������

��������� ������� �����%��� �&� !� � ��&� �� � � ���� �&�����< ��� ��� ���� �� ���� ��� �� � �� ����� �� ��i����� �&�� � �� ���� ��� ��care pot fi utilizate de mai multe documente. Orice schimbare care are loc într-� ������ �� ������ ���� !���� ���������� � ����!����� �� � ���������� %&��� ���� ��� �� ����� �&�� � �������2 ����� � ������ � �� ����� � ������ ���C���-cheie SYSTEM � ����� ������ �eclarate prin PUBLIC� %������ � ���� ��� ���� � ���� �� � �� � � ' �� ���� ���� ��� C� ��������� ������ ������ %nti����� ������ �� '�!� ������� � !��� !� �� '��

3 �&�!����� � � ����� � � !���� ��2

<!ENTITY CapDoi SYSTEM "cap2.xml">

��������� ������� �������%��� �� ��� � �� ����!��� �� � � ��� �� ��"#� � ��� � � ���� �� �� � ���� ��� �� ������rele XML. Analog ������� � �������< ������� �� ����� �� ��� � � ���� ��� �������

��������� ������� �� ��������� pot fi utilizate doar în interiorul DTD-ului, în locul prefixului „&” fiind folosit „%”. Suplimentar, între cuvântul-cheie ENTITY, � ���� � �!��� ����� � ���� �� ��� � ���'��� � ���� �����

5 �&�!��� ���� ��� �� !� 8��< � �� � �� � ������� ��� � ����!�� ������ �� �� ���� � ��� ��< � ��� � � ���� ������ ����2

Page 108: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 108

<!ENTITY % event "(reference*, place?, date?)"> <!ELEMENT birth %event;> <!ELEMENT death %event;>

��������� ������� �� ��������� ��� ���!����� � ������� �&�� �'�� ��� �������< �������� ������� �����-���� � �� ������ ���� �������ile interne cu parametri: <!ENTITY % student SYSTEM "http://www.infoiasi.ro/std.dtd">

�� �� ��� ��������� �&��� ��� �� std.dtd � �� � ���� ����� �������student� ������� ������ ����� � ������� ��� � �� � �� 4�4-ului documentului.

; "#� �&��� ��!�� �� ���� � �� � � � ���� �� ��� � � �� !� �� � !��� � ��!�� ���� � ��&�� �����< ��� � � �� ����� ������� ��folosesc ���������� ����������� �� � ��� � ������ �� ���� �< � ������ � ��� ������� ��� � ������ �������

4� ���!���< �� ��� �����H��� � ��������� �� tip caracter, care � ������� � �� ���� � �� !���� ������ ��� �!� �< � ��&�� ��EZBF � � !�� �� ELF� +��� � �&�!���2

<!ENTITY quot "&#34;">

; ����� �� ������ �����< ���! ������ �� ��!�� ����� ��� �publice, în general înregistrate de ISO sau alte orga���2

<!ENTITY % ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">

<!ENTITY % IBMchars PUBLIC "+//IBM//ENTITIES IBM PC Character Set//EN">

#� �� EAHHF ��!��� ������ �� ������� ��� ��� �� ������� ����înregi�� ���� %������ �� �'�� ��� �� E-//” în compo����

Folosirea DTD-urilor

3 ����� �� ����!�� ����� ���� ������� � ����� ��� � ����� �� �� ���� ��� ������� ����� ��� �� ����� �� <!DOCTYPE ...>.

DTD-ul poate fi specificat chiar în cadru� ����!�����< ���� ��! ��poate re!� �� � �&�!���� � !��� 2

<?xml version="1.0"?>

<!-- ����� �������� �� ������� �� <�< ����� -->

<!DOCTYPE projects [

<!ELEMENT projects (project+)>

<!ELEMENT project (title, desc?, stud, url?)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT desc (#PCDATA)>

Page 109: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 109

<!ELEMENT stud (#PCDATA)>

<!ELEMENT url (#PCDATA)>

<!ATTLIST projects

update CDATA #FIXED "23 octombrie 2005" >

<!ATTLIST project

class (A|B|C) "A" > ]>

<projects>

<project class="A">

<title>Super</title>

<desc>Un super proiect</desc>

<stud>1</stud>

<url>http://www.super.ro/</url>

</project>

</projects>

4� ���!���< ���! ���������� �� ����! ��� � �� � 4�4 �&�� <stocat într-� ��� �����2

<!DOCTYPE projects SYSTEM "projects.dtd">

<projects>...</projects>

$� ����� ����� � � 4�4 ����� �� �����< ������ � �� – în cele de !� 8��< � ����� �� ����!�� ��#� �� ����� � �� ��� �C� ����� ������!�� ��#� )�-* 9� ����� � ���o��: �������� �� ���� ��� ���2

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

4��'� < �� ����� � ���� � 5�+-�� �� �� � �� '������ 4�4-ul documentului: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

?���� �� �� ����� �� ����!�� ���� ! 4�4-ul precizat se poate realiza prin intermediul unui procesor XML cu suport pentru validare (e.g., ��&!�< "� ���< #$"#� ����:L � �� ����� � ���� ���� �� � �������� ��

����! ����� ����!����� "#� � �� ����� �� xmllint rulând sub Linux � �� � ����� � ������ � ��� �� -un editor de text precum Kate. În figura � !���� � �� ���� �� ���� �� � � �� ����� � ��!������ � �' �!��xmllint poate realiza validarea conform mai multor scheme (DTD, XML $���!�< �%��" @G � $����� �:�

Page 110: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 110

Figura 19. Validarea unui document XML direct în cadrul editorului Kate din mediul KDE

Folosind un DTD, avem posibilitatea convertirii documentelor SGML (de �&�!���< ��'�� ��� �� � � �� ���� !���� ���� ����� � "��#�aliniat XML) în format conform speci������ "#� � �'�� �� ; �����sens, putem recurge la programul osx ��� �� ������� �e Open SP, ������ � 4�4 �� � 9� �&�!���� �� !� 8��< �����! 4�4-ul oferit de Screem, un mediu de dezvoltare Web rulând în Linux). De la prompterul

Page 111: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 111

interpretorului de comenzi bash, vom tasta (numele elementelor vor fi scrise cu litere mici, iar tag-u �� ��� �� � ���� ���:2 (infoiasi)$ osx -xempty -xlower \

-l/usr/share/screem/dtd/loose.dtd \

pagina.html >pagina.xml

4���!���� �� ���� ����� ���� � ����� �� '��� 9�� !� �� $G#�<dar incorect din punctul de vedere al XML):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"/usr/share/screem/dtd/loose.dtd">

<!--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

-->

<HTML>

<head>

<title>O pagina de test</title>

<link href=stiluri.css type='text/css' rel=stylesheet>

<body bgColor=white text=blue>

<p align=center>Aceasta este o pagina de <b>test</b>.

<hr size=1>

</body>

</HTML>

���������� ����� ���� ���� � �'� � �-�

Figura 20. Documentul XML rezultat în urma conversiei

Page 112: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 112

Schemele XML

���� ������������������

$��������� XML Schema 9,������ � ���!���>< �--): �� � ��� ���� ��� �� unei sintaxe XML pentru specificarea unei scheme de validare a struc�� ������ �������� ����!����� "#�� O ��$��� �� ���� � ��������� �� !��� � ' �!��� ����iate unui ����!�� "#�< ��� � � ���&������ ��� �� � ��!�� a�� �� 4�4-urile. 3 ������ �� ����!� �� ���� �n document XML stocat într-� ��� �� �de obicei are extensia xsd (XML Schema Definition). �� � � ����!�� 4�4< � ����!� "#� ������� � ����� �� ���������XML conformându-se unui model structural, suplimentar specificând un sistem de tipuri de date în termenii infoset-���� ��� � � ����� � �� ��������������< � ����� � �� ����� �� ����!��� "#� � ���� �� ���������� � ����!� "#�� ������ ������� ��� ���!����� � ���� �� �� �� �-dig!� � ����� �� ������

3 ����!� �� ������� !���� �� ��� �� � ��� �� �� ���� �� �� � �� ������ ���� �� ���� ����� "#�� ���������� ���i�� � � !� �� ����� soldate cu succes este numit PSVI (Post-Schema Validation Infoset).

$���!��� "#� �� '����� �� ��� ����� � ��� �� ��!enii precum: • verificarea tipurilor de date în contextul sistemelor de baze de date

9 ��������:< !���� � ����� 9.?#< ���: ����L • �� ���� �� ����!��� � ������ – vezi cele expuse în capitolul 3; • ���� �� �� ������ � !������� 9�#+ – Remote Method Invocation,

SOAP – Simple Object Access Protocol); • generarea de cod-�� ��L • editoare „inteligente”; • validatoare generale de date (e.g., validarea formularelor electronice). ���� ����� "#� $���!� � ���� �� ��� �� ������� �� �!� ����

de adresa http://www.w3.org/2001/XMLSchema. Atributele privitoare la scheme care apar în cadrul unei instan�� � �� ����� �� ����!��� �� � ��� � ������ �� �!� ����!�� �� http://www.w3.org/2001/ XMLSchema-instance.

������ �����������

5 ����!�� "#� $���!� � � � ��� ����� ���!���� <xsd:schema>. 4�� �� ��� ����� �� �� ���!�� �� �� ���� � <xsd:element>, iar în cazul unui atribut, via <xsd:attribute>.

Page 113: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 113

?��� �� �� !�� ��� � � ���!��H�� ��� ��� � �� �� �� ����(simplu sau complex), specificat prin <xsd:simpleType> �< �������<<xsd:complexType>.

Tipuri de date XML Schema

���!���� ��� �� ��� �� ���� � �� ���� �� -un limbaj de programare, într-� ����!� "#� ���� � ����� �� ���!�� � ���� �� ��� �� �� ����� 9��: �� ���!���� Tipurile simple, predefinite ori derivate din cele predefinite, descriu ������� ������ ��&������ ; ����� ���< � �� !�� �� � ���!�� �� ����� ���� ���!��� � � �� ��� ������� �� ibute. Tipurile simple pot fi folosite � ��� � ������� �� ���inutului atributelor. Tipurile complexe descriu datele (semi)structurate. Se permite ca ���!����� �� ����� ���� ���!��� 9�� �'�� �� ��� ��: � �� ���asociate atribute. Elementele de tip com���& �� ����� ����2

• ����� �� �� ���!���2 <element name="nume" type="tip" />; • ��� �� �� ���!��� ��8� �����2 <element ref="nume"

reguli_aparitie="valori" />; • ����� �� �� �� ����2 <attribute name="nume" type="tip" />. Firesc, tipurile complexe nu pot fi folosite în contextul speci��� ��ului

valorilor atributelor XML. ���� ��� ��� � ��� �� ������� � ������ �� '� �� ��� � ������

9� !�� � �� ����: – ����� � K � � #����� � 9�--):� 3 �� �� �� � ���sunt enumerate în continuare:

• numerice: byte, unsignedByte, hexBinary, integer, positiveInteger, negativeInteger, int, unsignedInt, long, decimal, float, double � �ltele;

• logice: boolean; • � ���� � �� ���� � �!�2 time, dateTime, duration, date, gYear,

gMonth, gDay etc.; • � � �� �� ���� �2 string, token, Name, QName � ��tele; • adrese: anyURI; • ���� ��� "#�2 ID, IDREF, ENTITY etc. +� � �� ��� �� �� ���� "#� $���!� ���� ���� ��� � �igura 21.

Page 114: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 114

Figura 21. Tipurile de date XML Schema

Putem defini tipuri simple derivate din cele predefinite via <xsd:simpleType>. Noul ti� �� ���� �������� ����� � � ��� ��� � �� �� deja existent prin intermediul unor constrângeri (facets). De asemenea, putem recurge la precizarea unei liste de valori (via <xsd:enumeration>) ce va forma tipul sau a unui interval de valori (construc��� <xsd:minInclusive>, <xsd:maxInclusive>, <xsd:minExclusive> � <xsd:maxExclusive>).

Constrângerile (facets) permise vor putea preciza: • lungimea: <xsd:length> • ��'!�� !!�2 <xsd:minLength> • ��'!�� !�&!�2 <xsd:maxLength> • un model (pattern): <xsd:pattern> • ��� ���� ������ ����2 <xsd:whiteSpace> • �!� �� �� �� �2 <xsd:totalDigits> • �!� �� �� �� � ���!���2 <xsd:fractionDigits>

Page 115: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 115

5 �&�!��� ���� � !��� ��< � �� � ��! ������� ���� �ipuri simple. Primul va putea fi folosit pentru a verifica valorile � ���C� �!� �� �������� �� ��� ���� �� �� � 9�� ��� �� �� - �� 7:< � �� ����� ��reprezenta adresa de e-mail � �� �� ���� 9� �� �� ���� � �� � � ���� ��in����� E@F � �� �� �� !� �� � E.F � � ���& �� ����-patru caractere):

<xsd:simpleType name="nrcapType">

<!-- ������������ ���� �� ��!� *���(��* -->

<xsd:restriction base="xsd:integer">

<xsd:minInclusive value="0" />

<xsd:maxInclusive value="8" />

</xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name="addrType">

<!-- ������������ ���� �� ��!� *����(* -->

<xsd:restriction base="xsd:string">

<!-- �-������ ��(���� +� ����� ���� -->

<xsd:pattern value=".+@.+\.(.){2,4}" />

</xsd:restriction>

</xsd:simpleType>

Tipurile �!��� � �� � ������� �� ���� � ���� �� ���!���-�� H�� ������ < ����� �� ������ � �� ���� ��� "#� ���C� ���� ��� ��� ��� �� ����!� �� ����� � �� �� ���!��< �� � ��� �� �����< ��atributul xsi:type.

Pentru primul caz, putem scrie (aici e cazul unui atribut de tip nrcapType): <xsd:attribute name="numar" type="nrcapType" />

; � ���� ������< ��! ����� � – folosim un URI propriu pentru a ������� ������ �� �!� � ��� �� �������� �� "#� � �� ��� ����� �� �< �������� �� �� ����� � ������ ' ��� �� ����!� "#�2

<capitol xmlns:c='http://www.infoiasi.ro/cuprins/'

xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

xsi:type='c:numar'>5</capitol>

4� ���!���< ��! ����� � ���� 9�!����� EYF ��!��� � ���� ��i��:: • �'�� 9 ��� ��: �� ��� �� � �� ����� �� ��ement:

minOccurs="��� " � maxOccurs="��� | unbounded"; • �'�� �� ��� �� � �� �� ���2 use="required | optional |

prohibited";

Page 116: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 116

• ����� �� � ������ � �� �� ��� �� default; • stabilirea de valori particulare pentru elemente sau atribute: fixed.

4 ���� � ������ �C� ���! ������! �� ��� �� �!��� ��� � �������doar pentru a descrie date-caracter. Vom recurge la tipurile complexe pentru a descrie structura unui document, recurgând la <xsd:complexType>. Un �� ��!���& ����� ���� � ����� �!��� 9<xsd:simpleContent>) sau unul complex.

������� �!��� ����!� �� � ���!�� �� ����� ����� �� ����<extinzând astfel modelul-������

3 � !� !����� ���� �� �� �� � �&����< �� ���!�tul <xsd:extension>.

4� �&�!���< �� ! �� �������! �� � ���� �� �� ������ �� �� �� ������ � �� ��� �� e-mail� 4��� ��� ����! <xsd:element name="autor"

type="xsd:string" />, în acest moment vom putea scrie:

<xsd:element name="autor">

<xsd:complexType>

<!-- ������� ����-un tip simplu -->

<xsd:simpleContent>

<xsd:extension base="xsd:string">

<!-- ����� ���� �������� .���������/

a atributului "email" -->

<xsd:attribute name="email" type="addrType" />

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

Atributele vor fi definite prin intermediul <xsd:attribute>, putând fi declarate global (la nivelul schemei) sau local (în cadrul unui tip complex). De asemenea, ele pot fi �������� 9� ��&��� �� ������ �� �!� ����: ��� �� $��� !�� � ������� �� ' ��� �� �� �� ���� �� <xsd:attributeGroup>. 4��'� < ���� ����� minOccurs � maxOccurs nu au sens. Valorile �� ������ � ���� ��������� �� �� ������ �� ��� �mple. Un atribut poate fi specificat, interzis (prohibited:< ������ 9optional) sau obligatoriu (required).

3 � ���� !����� �� ������� � � �� �� ��!���& �� ����� �!������� ��� � �� �� � � ��� ���< ������� � �� !����constrângerilor (facets:� 4� �&�!���< ����! ���� C'� � � �� �� ���� �la o anumi�� ��'!� !�&!� – ��� ���� �C� �� ! �� ������ "#� �� ��stocate ulterior într-� �������

Page 117: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 117

4� �&�!���< ����! !��� �� � ���� �� ������ �� �� �� !�&!�! - �� caractere, având un atribut limba desemnând limba în care e scris textul:

<!-- ������� -->

<xsd:complexType name="titluType">

<xsd:simpleContent>

<xsd:extension base="xsd:token">

<xsd:attribute name="limba" type="xsd:language"/>

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

<!-- acum -->

<xsd:element name="titlu">

<xsd:complexType>

<xsd:simpleContent>

<xsd:restriction base="titluType">

<xsd:maxLength value="50"/>

<xsd:attribute name="limba" type="xsd:language"/>

</xsd:restriction>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

Ulterior, putem declara ca atributul limba �� �� �� ��2

<xsd:attribute name="limba" use="prohibited"/>

Conchizând, derivarea prin extensie este folositoare doar pentru a ����'� �� ���� �� ���!�� 9� ����� ���!�� ���� �� ���� �� ���!����� sau al atributelor deja specificate). Cea prin ��� ��� �� ��������� !����&���< ���C� ��� ���� ������� ��� �� �� �� ��&� ��� ���� ������ � ��!����� �� ���!��� 4� ���!���< � ��� ��� ��pot elimina atribute nedorite.

$������ �� �� �� �� ����� ��!���& ������ ��� �� ���� �ordinii sub-���!����� � �� ������ �����

������� �� ���!�� ����� � �������� �� �� �2 • mixt (sub-elemente sau date-caracter): <xsd:complexType

mixed="true">; • �� 9� �� ���� ���C� ����� �� �� �� ����:�

Pentru a preciza d�� �� !����� ��� ��������< �� ��� '� ������ ��� ��� ��� � ��2

• ���� ����2 <xsd:choice>;

Page 118: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 118

• �������2 <xsd:sequence>; • grupare: <xsd:group>; • ��� �� � ���� � ���!����� < � � �� � ��2 <xsd:all>.

$� �� !�� �� � ������� ��!���& �� ����� � �� ���< � ��� �� ���extensii, dintr-un tip complex.

��� �������������������� ��������� �����

� �� !���� �������� �� � ��� ���� �� �������� < ���!posibili����� �� �����! ��'��� �� � ��� �� ��n�� ��� "#� �� �entifi-���� ��� ������� �� �������� �� �8��� �� ��� �� ID � IDREF speci-����� �� ���!��� �� "#�� ; ��� �� ����!��� "#� ����! � ���� �� ��&�� �� ����� �� �!� ��� � � ���� �!�'������� 4� ���!enea, se permite ca tipul ID �� �� � ����� ��C� ��� � �� ����< �C� � ��� � ���!����

$���!��� < "#� $���!� ��� � ���������� �� ����� �� �����!��H�� ��� �� �� ��� ������ �� ��� � ��� � �'� � ����� �������res� ��� �� !��� �� <xsd:unique>� ������< ����� �� � !���!e de ele-!��� ��������� � �&� �� "����< �� ������ � E�C!�F �� ���!���-lui/atributului a c� � ����� � � ���� �� �� ��� � ��� �� �� ����� de document. În jargonul bazelor de date, acest „câmp” e considerat cheie. Un exemplu tipic este ����� � �� � !���! �� � �� �� �� ��� � �� ���ISBN unic în cadrul unei biblioteci.

În cele de mai jos, în contextul unui catalog de produse, im���! �� ���� �&��� ���� �������'� �� � ����� �� ������ �!� � �� � �� �������� �� 9��� � ��care element <subcateg>< ����'� � �� �� � ��� �� ��!��� � ���� �� �� ���:2 <xsd:element name="subcateg" type="subcategType">

<xsd:unique name="subcateg_unica_nume_id_parinte"> <!-- ������� �������� ������ +� �������

�������� �e unicitate a perechii atributelor 'id_parinte', 'nume' -->

<xsd:selector xpath="./subcateg" /> <xsd:field xpath="@id_parinte" />

<xsd:field xpath="@nume" /> </xsd:unique>

</xsd:element>

Mai mult, un element/atribut poate fi constrâ� �� �� ���� ���� ��!� ���� ����� �� �� �� ���� � !���!�� ���� �� ���� ���!��H�� ����Acest aspect permite specificarea unei rela� �� � ��� �� <xsd:key> �<xsd:keyRef> (vezi exemplul de mai jos).

Alte detalii sunt furnizate în van der Vilst (2002).

Page 119: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 119

Suportul pentru abstractizare

Într-un mod similar paradigmei obiectuale, putem impune – prin atributul abstract="true" – �� ��!�� ���!���H�� ���� �� �� ����� ������� ���� ������ ��C� �� � ��a�� � ������� �� -� ����� �� ����!�nt, ci ��� �� ����� � ��i��� � �� �� � �� � ����!� ����!��� � 9� <xsd:include>). Anumite tipuri, simple sau complexe, pot fi redefinite via <xsd:redefine>.

De asemenea, specificarea unor elemente/atribute generice (ale altor tipuri de documen��: �� �������� � ���!����� <xsd:any> �<xsd:anyAttribute>.

Documentarea schemelor

Suportul pentru documentare recurge la elementul <xsd:annotation>, care poate include <xsd:documentation>< ���C� �� !�� �������������� �� �!�< � <xsd:appInfo>< � ���C� ��� �� �� !�� �����-toare instrumentelor de procesare.

3 ����� � ����� ��� �� �� � ! ���!��-copil al unor elemente ca <xsd:schema>, <xsd:element>, <xsd:attribute> sau <xsd:simpleType>.

Utilizarea unei scheme

; ���� �� ����� < � ����� �� ����!�� � ���� �� �e��� � � ����� ��nume cu un URI desemnând schema utili�����

� ���� �� ������� �� ���!����� � �� ������ ����� �� ����!� ���� ���� � �� ����� �� �!� �� �������� �� �� ����� schemaLocation în cadrul elementului <xsd:schema>� ; ��� �� ����� ����!�< �� ������������ ������ �� ���!�����H�� ������ �� �� � efixate obligatoriu – prin prin elementFormDefault � attributeFormDefault – �� ��� � ��a��� ��nume ales. De exemplu, pentru cuprins�� �� � ��! �� �2

<xsd:schema xmlns="urn:infoiasi.ro:xsdCuprins"

targetNamespace="urn:infoiasi.ro:xsdCuprins"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified"

attributeFormDefault="unqualified">...</xsd:schema>

�� ��� �� ����� �� ����!��< ��! ����� � ���� ���� �� '���2

<s:radacina xmlns:s="uri_schema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="uri_schema doc_schema.xsd">

Page 120: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 120

...

</s:radacina>

4� ���!���< ����! ����� �� ����� � ����!� �� � � � ���� ������ �� �!� "#�� 5 �&�!��� ���� � !��orul:

<cuprins xsi:noNamespaceSchemaLocation="cuprins.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

...

</cuprins>

Folosirea valorilor nule

Valorile nule (nil sau null) sunt în principal utilizate în cadrul modelului �������� ��� � � �� !�� ��� �� �� ����� !o���< ��������� "#�$���!� ��� � ���������� �� � � ���� �� �a��� �� �� ���!�� �� �� nil (i.e. ���: � ��� �� ����� ������� �� �� ����� nillable="true". Acest �� ��� �� ����� ����� ��� � � �� �� �!���< �� ����� !&�< ��� ��com���& ��C� ����� �!���� ��� �� �� nillable="true" are prioritate asupra modelului-����� �� ���mentului în cau���

Atributele nu pot fi declarate ca având valori nule. 4� ���� ������ �� � ���!�� �� 9empty) nu este întotdeauna nul, pe �C� � ���!�� �� � ���� ���'��� � �� �� ��� 5 �&�!��� ���� � !��� ��2 <xsd:element name="project" type="projectType"

minOccurs="1" maxOccurs="unbounded" />

<xsd:complexType name="projectType" nillable="true">

<xsd:sequence>

<!-- �������� �� ������� -->

</xsd:sequence>

<xsd:attribute name="class" type="classType" />

</xsd:complexType>

�� ��� �� ����� �� ����!��< ��! ����� � ���� ��� � 2

<project xsi:nil="true"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

����� ��� � � ����� � ���� ������� �� ��� ���!���� � ��������� ���

���� �� ���� pot parcurge multe alte detalii oferite de van der Vlist 9�--�: � �� ���� ����� �� �� �� ����� www.zvon.org � www.xfront.com.

Page 121: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 121

Exemple

; ����� �< ��! ���� � � �� �� �� � ��������� �� ���� ��� "#� $���!�� ��� � ������< � � ����! �� ����� �! � ����!� "#� �o����� ��� �

����� �� ����!����� ��� ��� � �� � ������� ��������� � ����� �� �������� ?�! !��� �� ���!����� � �� ������ �� �� � ��&��� �������� �� �!� �� � � ��� �L � ����� ��� �< �! ���� � ��� �� ��� �������� de nume URN-ul urn:infoiasi.ro:xsdProjects.

4 ���� �� ���� � ' ���< �� ���� � ����!� ���� ���� ��� �� �'� � ��9'�� ��� �� ���� �� V�">'�HU< �� � ����� � ������ � �� ������� :�

� ��� )) $�-�������� ��� �� ��"��� -� � ���� � -�� ecte

Codul-�� �� �� ����!� ���� � !��� ��2 <xsd:schema xmlns="urn:infoiasi.ro:xsdProjects"

targetNamespace="urn:infoiasi.ro:xsdProjects"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified"

attributeFormDefault="qualified">

Page 122: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 122

<xsd:annotation>

<xsd:documentation xml:lang="ro">

;-����� �� ��&��� ����!�� �� ��������� ������elor

</xsd:documentation>

</xsd:annotation>

<!-- definirea elementului-�������� ����3���� -->

<xsd:element name="projects" type="projectsType" />

<xsd:complexType name="projectsType">

<xsd:sequence>

<!-- ����� � �������� � ���������� ����3��� -->

<xsd:element name="project" type="projectType"

minOccurs="1" maxOccurs="unbounded" />

</xsd:sequence>

<xsd:attribute name="update" type="xsd:string" />

</xsd:complexType>

<!-- tipul complex "projectType" -->

<xsd:complexType name="projectType">

<!-- �������� �� ������� -->

<xsd:sequence>

<xsd:element name="title" type="xsd:string" />

<xsd:element name="desc" type="xsd:string"

minOccurs="0" maxOccurs="1" />

<xsd:element name="stud" type="studType" />

<xsd:element name="url" type="xsd:anyURI"

minOccurs="0" maxOccurs="1" />

</xsd:sequence>

<xsd:attribute name="class" type="classType" />

</xsd:complexType>

<!-- definirea tipului simplu "studType" folosit pentru

specificarea valorilor elementului "stud" -->

<xsd:simpleType name="studType">

<!-- ������� �� ������� �� � +� ��������� =4''>/ -->

<xsd:restriction base="xsd:unsignedInt">

<xsd:minInclusive value="1" />

<xsd:maxExclusive value="5" />

</xsd:restriction>

</xsd:simpleType>

<!-- definirea tipului simplu "classType" folosit pentru

a specifica valorile atributului "class" -->

Page 123: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 123

<xsd:simpleType name="classType">

<xsd:restriction base="xsd:string">

<xsd:length value="1" fixed="true" />

<!-- ��������� ��� � �� ����� $, ? ��� -->

<xsd:enumeration value="A" />

<xsd:enumeration value="B" />

<xsd:enumeration value="C" />

</xsd:restriction>

</xsd:simpleType>

</xsd:schema>

+����� �� � ��� �� ��� �������� ��C� ���!�����< �C� � �� ������ �������� �� �!� stabilit. Un fragment de document XML valid conform ����!� �� !� ��� ���� 9�� ���� �� �� ���!���� <desc> nu a fost precizat, �� �� ������:2 <p:projects

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"urn:infoiasi.ro:xsdProjects projects.xsd"

xmlns:p="urn:infoiasi.ro:xsdProjects"> <p:project p:class="A">

<p:title>Super</p:title>

<p:stud>1</p:stud>

<p:url>http://www.super.ro</p:url>

</p:project>

</p:projects>

�� ����� �&�!��� �� ��� � �� ����� �� ��� ���� �� �� �� ��!��-nentele schemei XML sunt disponibile în figura 23.

� ��� )8 %���������� � -�� �� � �-�� � ���-��=� �-�� � ��� 6� ����� ��� ��"��� 2,3

Page 124: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 124

;� ��C� � �� �� �� � ������ �� ��� �� ���� � ������ !� ��� 9e.g., addrType � nrcapType), nu le vom mai include în codul furnizat în continuare: <xsd:schema xmlns="urn:infoiasi.ro:xsdCuprins"

targetNamespace="urn:infoiasi.ro:xsdCuprins"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified"

attributeFormDefault="unqualified">

<!-- definirea elementului-�������� ��������� -->

<xsd:element name="cuprins" type="cuprinsType" />

<!-- tipul complex "cuprinsType" -->

<xsd:complexType name="cuprinsType">

<xsd:sequence>

<!-- include "coordonator" (care poate lipsi) -->

<xsd:element name="coordonator" type="xsd:string"

minOccurs="0" maxOccurs="1" />

<!-- ������� �� ������ �� �������� ���������,

���� ������ �� ����� ��� ����� � ��� -->

<xsd:element ref="capitol"

minOccurs="1" maxOccurs="unbounded" />

</xsd:sequence>

<!-- ������� ������� ������ -->

<xsd:attribute name="titlu" type="xsd:string"

use="required" />

<xsd:attribute name="editura" type="xsd:string" />

<xsd:attribute name="an" type="anType" />

</xsd:complexType>

<!-- definirea tipului simplu "anType" folosit pentru

specificarea valorilor atributului "an" -->

<xsd:simpleType name="anType">

<xsd:restriction base="xsd:integer">

<xsd:enumeration value="2004"/>

<xsd:enumeration value="2005"/>

</xsd:restriction>

</xsd:simpleType>

<!-- definirea elementului "capitol" -->

<xsd:element name="capitol" type="capitolType" />

<!-- tipul complex "capitolType" -->

<xsd:complexType name="capitolType">

Page 125: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 125

<!-- ��������� ��� ������ +� ������� ����� ���� -->

<xsd:sequence>

<xsd:element name="nume" type="xsd:string" />

<xsd:element ref="autor"

minOccurs="1" maxOccurs="unbounded" />

<xsd:element name="descriere" type="xsd:string" />

</xsd:sequence>

<!-- ������� �� ����� ����(����� -->

<xsd:attribute name="numar" type="nrcapType"

use="required" />

</xsd:complexType>

<!-- specificarea elementului "autor" -->

<xsd:element name="autor">

<xsd:complexType>

<!-- ������� ����-un tip simplu -->

<xsd:simpleContent>

<xsd:extension base="xsd:string">

<!-- ����� ���� �������� .���������/

a atributului "email" -->

<xsd:attribute name="email" type="addrType" />

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

</xsd:schema>

+����� �� ���� �������� ��� �!��e de elemente. Atribu���� ��� �� ��� � ��&��� �� �� ��� ������� �� �!�� 5 �osibil exemplu este: <c:cuprins xmlns:c="urn:infoiasi.ro:xsdCuprins" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="urn:infoiasi.ro:xsdCuprins cuprins.xsd"

titlu="Situri Web la cheie" editura="Polirom" an="2004">

<c:coordonator>Sabin Buraga</c:coordonator>

<c:capitol numar="5">

<c:nume>Noua provocare în grafica 2D - SVG</c:nume>

��#����� ����� ?����������#�����

<c:descriere>...</c:descriere>

</c:capitol>

<!-- �� �����''' -->

</c:cuprins>

Page 126: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 126

5 !���� �� �&�!����� �< ��C��-l ca autor pe absolventul Daniel 3���< ���� ���� !���� �� ��� � � �� ���� �� � � ���� � !� � � ����� �� �i� �� -un document XML.

����� �! ������ � �� � � ���� �� !�!� �! ���� � �i��� � �� � ������ �� � �� -� �������� �< ���� ��< ���� � ���� �� � ?�! !�����!�� ���� C'� 2 � ���� �� ���� < �!��� ������ � � ���� �� ��� ���� � �'� � ���� 9� � ������ �� ������ ���� �� �� ������ �� !�!���� � : �< � ����< � ���� �� ��� � ��� �!��� �� ���� � �� �� �existen�� � ��������� $���!� "#� � � �� ���� �2

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="biblioteca">

<xsd:complexType>

<!-- �������� �� ������ �� �������������� -->

<xsd:sequence>

<xsd:element name="carti">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="carte" type="carteType"

maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="autoriFaimosi">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="autor" type="autorType"

maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

<!-- �� ���� �&��� ������� �� ���� �� ����

�� ���� ����� ��� ���� �� ����� -->

<xsd:key name="cheiePrimara">

<xsd:selector xpath=".//carte/autor" />

<xsd:field xpath="." />

</xsd:key>

Page 127: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 127

<!-- �� ���� �&��� ������ �� ���� �� autor

��� ���� �� ����� ������ -->

<xsd:keyref name="cheieStraina" refer="cheiePrimara">

<xsd:selector xpath=".//autoriFaimosi/autor" />

<xsd:field xpath="." />

</xsd:keyref>

<!-- ������� �� � �������(��� �� �������

+� ���� �� ����� ������ -->

<xsd:unique name="unique">

<xsd:selector xpath=".//autoriFaimosi/autor" />

<xsd:field xpath="." />

</xsd:unique>

</xsd:element>

<xsd:complexType name="carteType">

<xsd:sequence>

<xsd:element name="titlu" type="xsd:string" />

<xsd:element name="autor" type="autorType"

minOccurs=maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="autorType">

<xsd:sequence>

<xsd:element name="nume" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

3 ����� �� ����!�� ���� ����� � � !���� ��2

<biblioteca xsi:noNamespaceSchemaLocation="biblioteca.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!-- ���� �������� -->

<carti>

<carte>

<titlu>Proiectarea siturilor Web</titlu>

<autor><nume>Sabin Buraga</nume></autor>

</carte>

<carte>

<titlu>Macromedia Flash</titlu>

<autor><nume>Cosmin Vârlan</nume></autor>

Page 128: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 128

</carte>

<carte>

<titlu>Securitatea sistemelor Linux</titlu>

<autor><nume>Drago� $�����&�������������������

</carte>

</carti>

<!-- ���� �������� � ������� -->

<autoriFaimosi>

<!-- corect -->

<autor><nume>Sabin Buraga</nume></autor>

<!-- corect -->

������������<��(�� $�����&�������������������

<!-- incorect:

�� �� ������� �������(���� �� �����ate -->

<autor><nume>Sabin Buraga</nume></autor>

<!-- incorect:

�� �� ������� ������(���� �� �-������ -->

<autor><nume>Octavian Dospinescu</nume></autor>

</autoriFaimosi>

</biblioteca>

5��!�� �&�!��� �� ��� � �� ���������� ������ � ���� ����!��� "#�� #� ��� �! �������� � ����!� � ���� � �� ��� ����� �� �� ; ��� �� ���� � ������< �! �� �� �����! � ��� �� ����� (comentarii). Astfel, ��! �� � � ����!� ����!��� � �� � �� ��� ���� ��� �� �� ����� 9�� �� ����� � ������� � � ��� ����&�:� �����������!� – nu!�� adnotari.xsd – � ��� '� �� ���� �� �!�< � ���!������ �� ������ �� ����� � ������� �� � ������ e.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="unqualified"

attributeFormDefault="unqualified">

<!-- definim doar tipul complex "adnotType" -->

<xsd:simpleType name="adnotType">

<xsd:restriction base="xsd:string"/>

</xsd:simpleType>

</xsd:schema>

#� � ���� �� !�����! ����� ���� � ����� capitolType pentru � ����� ����� � ���!��� �� �� adnotType� ?�! �� � � ����!�cuprins-adnotat.xsd �� � !��� �� �����2

Page 129: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 129

<xsd:schema targetNamespace="urn:infoiasi.ro:xsdCuprins"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="unqualified"

attributeFormDefault="unqualified"

xmlns:c="urn:infoiasi.ro:xsdCuprins">

<!-- importuri -->

<xsd:import schemaLocation="adnotari.xsd" />

<xsd:redefine schemaLocation="cuprins.xsd">

<!-- tipul complex "capitolType" (redefinit) -->

<xsd:complexType name="capitolType">

<xsd:complexContent>

<!-- tipul trebuie calificat,

��� �� ����� ��� +� �uprins.xsd -->

<xsd:extension base="c:capitolType">

<xsd:sequence>

<!-- folosim tipul de date din adnotari.xsd -->

<xsd:element name="adnotare" type="adnotType"

minOccurs="0" maxOccurs="unbounded" />

</xsd:sequence>

</xsd:extension>

</xsd:complexContent>

</xsd:complexType>

</xsd:redefine>

</xsd:schema>

Schema adnotari.xsd ���� !�� ����< � cuprins.xsd ���� ������� ; �������!�< � ����! ������ ����� �� �!� �� ��� � cuprins.xsd� 3 �����de document valid conformându-se noii scheme este:

<c:cuprins xmlns:c="urn:infoiasi.ro:xsdCuprins" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation= "urn:infoiasi.ro:xsdCuprins cuprins-adnotat.xsd"

titlu="Situri Web la cheie">

<c:capitol numar="8">

<c:nume>Hattrick - simularea meciurilor pe Web</c:nume>

<c:autor>Daniel Puiu</c:autor>

<c:autor>Marian Bostan</c:autor>

<c:descriere>...</c:descriere>

Page 130: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 130

<!-- elementul <adnotare> nu trebuie calificat cu nici

un prefix �� ������ �� ����, �������� � �����!�

elementFormDefault="unqualified" -->

<adnotare>Codul-����� � ����� +� @'����������

</c:capitol>

</c:cuprins>

RELAX NG

$� � ������ � �� � ������� !�����< �%��" @G 9Regular Language for XML Next Generation: �� ���� � ����� � 3�$+$ �������� �� ��� ( �#� ��� 9�--*�:� ������!���< �%��" @G ���� ������ ��� � ��� � ���� ���!��� ��� ���� ���� ��� 9�� �&�!���< "��#� ��- � �4,:< �� �pen� � ������� �� � ����� �� ���� ����� �e documente, precum DocBook sau TEI (Text Encoding Initiative).

������ ����� ���� ��� �� ����� �� ���� "#� � !� ��� ��������� ������ �� -� ����!�� "#�� 4��� � ����� ����!��� "#�<exista po�������� ������� ���!����� � �� ��telor pe baza unor tipuri �� ���� � �� ���� �������� < �%��" @G �� ������� �� ���� ��expresiilor regu���� � �� ��!��� �� �� ������� �� ���� ��� �!���� ;plus, via RELAX NG se pot specifica modele structurale nedeterministe. 5��� ������� aduse de RELAX NG nu sunt disponibile în Schema XML.

����������� ����

0�������� 9pattern-� ��: �� ���� ������ �� ��� ��C� � �� ���� ��� � ������� – � �� ������ ���� ���� �� � ������� � ���� � �� "#�+������ $� �� � ����� ��� ��������� �� ���� � ���� � �� ��� �� ��&�9����� � �� �-��:< ���!��� � �� ����� ������ ���� ��� 9�� �� � ������! ����� �� �� ���!��: ��� ��������� �� � !���� ele elemente:

• <text /> ����!���� � ����� ��&���� 9text pattern); • <element name="nume">�����*</element> ��!��� � �����

� ��� �� ��� �� �� ���!�� nume care include 0, 1 sau mai !���� ��� � ��� �� �� ���;

• <attribute name="nume"><text /></attribute> �� ����������� � ��� �� � �� ��� �!� ��C�< ���ral, drept valoare � ����� ��&�����

$������ �� !����� �� ��� �� � ���!����� �� �������� ��elementele <optional> 9��� �� �������:< <oneOrMore> 9!��� � ����: �<zeroOrMore> 9�� �� � ��� !� !���� � :� 3 ���� ���� �� � ������� � <choice>< � � ' �� �� ���!��� 9�������: � �� !���� �� <group>.

Page 131: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 131

4��'� < �� ��� ��� ������� �< �� ���!���� <define> care ulterior pot fi referite prin <ref />. Un exemplu este cel de mai jos, în care �������! ������� elementul-student, care va include elementul <student> �� ����� ��&�< �< ������< ���!���� <adresa>< ��C� ����� ��&�2 <define name="elementul-student">

<element name="student"> <text /> </element>

<optional>

<element name="adresa"> <text /> </element>

</optional>

</define>

���� �� �� ����� ����� �� �� ����� �� <ref name="elementul-

-student"/>. 4����� ���� � ��������� ��� ����� �� -� ' �!���� 9��

elementul <grammar>: ��� � �� � � ���� � ����� � ���!���� �� ��� � ��desem���� ���cina documentului XML specificat.

������< �� ���� � '�� ��� � �� ����!� �%��" @G ���� � !���� ��2

<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<start>

<element name="..."> ... </element>

</start>

<define name="..."> ... </define>

</grammar>

4��� ��! �� ����� ���� �� � ����� �&�!���< � ���� � ����� � ������de nume folosit de RELAX NG.

Un exemplu

În acest moment, putem oferi un exemplu complet. Vom preciza schema �%��" @G ��� � �����'� �� ���� ���� �� � ����������� �2 <grammar

xmlns="http://relaxng.org/ns/structure/1.0"

datatypeLibrary= "http://www.w3.org/2001/XMLSchema-datatypes">

<!-- elementul-�������� -->

<start>

<element name="antologie">

<oneOrMore><ref name="poeme" /></oneOrMore>

<attribute name="data">

Page 132: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 132

<!-- valoarea atributului e tipul string

specificat de XML Schema --> <value type="string"></value>

</attribute>

</element>

</start>

<!-- ����� ������ ��������� �������� -->

<define name="poeme"> <oneOrMore><ref name="elem-poem" /></oneOrMore> </define>

<define name="elem-poem">

<element name="poem">

<!-- (����� � ����� �� �������� -->

<group>

<element name="titlu"><text /></element>

<oneOrMore><ref name="elem-vers" /></oneOrMore>

</group>

</element>

</define>

<define name="elem-vers">

<element name="vers"><text /></element>

</define>

</grammar>

?� ��� ' ���� � ����!� �%��" @G � ���� ��� � �'� � �)�

F ��� )7 ���� ��� �� ��"��� $%3�2 >' -� � ���� � ������ �� -�ezii

������� ���� �

%&��� ���������� ����� �� ���&� ���� ����< ��!��c��< !� ��� ��parcurs de cititorii umani – �!���� � ��� ( � #� ��� 9�--*�: � �� �� Vlist (2003).

Page 133: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 133

Nu vom intra în detalii, ci vom oferi un exemplu din care se poate ������ ��� ����� �� ����� �� ���� ������� ������< ��� � ����!� ��!� ���< ���&� �!������� �� ��������are este:

start = element antologie {

poeme+,

attribute data { xsd:string "" }

}

poeme = elem-poem+

elem-poem = element poem {

element titlu { text },

elem-vers+

}

elem-vers = element vers { text }

&��'������� �����(��� ����

4���� < � ��� �� �� ������< ��� ���� !�� � �� ������� � �modelelor de validare trebuie (re)convertite în alte formate (de exemplu, din format DTD în RELAX NG ori XML Schema), pentru a se asigura interoperabilitatea.

%&��� !� !���� �� �!��� �� ���� �� ����!���< � �'� � � ��� ������� �� ���� ��� ��re cele mai populare: Trang.

4 ��� ����� �� ���< ��! ����� � � !��� �� 4�4< �� � �������< �!�� � ��� ���< ����'� �� �� � ����� ����� � ������'�� �� �� ����!� � ����� ��2

<!ELEMENT catalog (categ+)>

<!ELEMENT categ (categ*)>

<!ATTLIST categ

id ID #REQUIRED

desc CDATA #REQUIRED

>

4��� ��! �� ����� ������ � 4�4-ul prezentat, catalogul este compus din elemente <categ> �� � ��� ���� ���� ���-elemente <categ>.

Page 134: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 134

Figura 25. Conversia cu Trang a unui DTD în formatul precizat de XML Schema

; � !� ���� �� �� � �'< ����!� "#� �������� � � �� !� 9�������� E��������F:2

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="catalog">

<xs:complexType>

<xs:sequence>

<xs:element maxOccurs="unbounded" ref="categ"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="categ">

<xs:complexType>

<xs:sequence>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="categ"/>

Page 135: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 135

</xs:sequence>

<xs:attributeGroup ref="attlist.categ"/>

</xs:complexType>

</xs:element>

<xs:attributeGroup name="attlist.categ">

<xs:attribute name="id" use="required" type="xs:ID"/>

<xs:attribute name="desc" use="required"/>

</xs:attributeGroup>

</xs:schema>

4 ���� �� ���� � ' ���< �� ���� � ����!� ���� ���� ��� �� �'� � �/�

� ��� )? ���� ��� �� ��"��� 2,3 �������� 6� ��� ������� �

G�� C� � ��������� �%��" @G< ��! ���� 9 �� ����� �� ' �������� ������� � �'� � �6:2 <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<define name="catalog">

<element name="catalog">

<ref name="attlist.catalog"/>

<oneOrMore>

<ref name="categ"/>

</oneOrMore>

</element>

</define>

<define name="attlist.catalog" combine="interleave">

<empty/>

</define>

<define name="categ">

Page 136: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 136

<element name="categ">

<ref name="attlist.categ"/>

<zeroOrMore>

<ref name="categ"/>

</zeroOrMore>

</element>

</define>

<define name="attlist.categ" combine="interleave">

<attribute name="id">

<data type="ID"/>

</attribute>

<attribute name="desc"/>

</define>

</grammar>

� ��� ); $�-�������� ��� �� ��"��� $%3�2 >' �������

,� !� �%��" @G ��!����� ���� � !���� ��2

catalog = element catalog { attlist.catalog, categ+ }

attlist.catalog &= empty

categ = element categ { attlist.categ, categ* }

attlist.categ &=

attribute id { xsd:ID },

attribute desc { text }

�� ����� ������ �����< � ����! �� � �� � �� ����� �� � ��compatibilitatea schemelor RELAX NG cu DTD-urile sunt oferite de Clark � #� ata (2001b). Modul de utilizare a tipurilor de date XML Schema în

Page 137: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 137

��� �� �%��" @G ���� ������� � ��� ( � Q�D�'��� 9�--*:� 4� ���menea, se pot vizita siturile de la adresele http://relaxng.org/ � http://dsdl.org/.

��!��'(��"�������)�������������#�� k

Limbajul XLink (XML Linking Language: �� ����� ��� �� �o������ �� ���� ��!���� �� ��'��� ��� ��&�< � ��� ���&� �< � ����C� ������ �� ��'��� �&���< � �� � ��� !������ !� !��� �� ����resurse (nu doar o sin'� � �� �� � � �'� � �������:� "�( � ����� ����� �&�� – via XPointer –< ��� � � !����� ��������� �� � �������resursele.

"�( 94�����< #��� � 3 ����< �--*: �� ����� ����� ��� � �&� !� �� de structuri hipertext bazate pe XML. Un document "�( ��� ��������� �� �!� ��� �� http://www.w3.org/1999/xlink� ����� ��'��� ����������� � "�( �� ��� �� ������ ����� �� �!�< ������� �� ������ ����C� � ����� � � �� ���!��� � �� ���� "�(< �!�� tehnicilor din program� �� ����������

��������� �� ���� ��� � !���� ���2 • traversarea ����!� ����� �� ��� � !� �� �� ��'��� < !���C�

întotdeauna o pereche de resurse sau fragmente de resurse; • arcul ����!���� �� !���� ��� ��� � �� !��������� �� � ��� -

sare a unei perechi de resurse (e.g.< � ���� �� � ��� �� �< ��!�� ��-!���� ������� ���� �C� �� �������� � ��'��� � ����:�

Caracterizare

$� � ������ � �� !����!�� �� ������� � � ��'��� �� ���ptat de HTML, în cazul limbajului XLink se pot specifica:

• �������� ������� – ��� � �� ��'� ����������� � �!��8��� 9i.e., ��'��� �� �� � �� ���� � �!� � �itrar de resurse locale sau ������ �� ������:L

• �������� ������ – ��� ��'��� �� �� �� � �� ���� �!� ���� ��� ��<�� �� ������� 9e.g.< ��'��� ile din HTML clasic).

3 ��'��� � �&��� ����� ���� � !&�� � �� ��� �� ���!��� "�(<în orice ordine, dintre cele descrise în continuare:

• locator – ������� ��� ���� ������ �� ������ �� � �� ���� � ���-�� �� ��'��� L

• arc – o�� � �'�� �� � ��� �� � � ��� ���� �� ��ipante (modul de acces la resursele hipertext);

Page 138: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 138

• title – ��������� � ������� ��&����� ��� � � ��'��� � 9������� �������� �� � ����� � ���� � � � �!��8 ��� �� � ��'��� :L

• resource – ������� ��� ���e locale care pot participa la realizarea leg�turii.

+�� �������� �� � ��� �� �� ���!��� "�( ���� ���� ��� �tabelul de mai jos:

Tabelul 5. Tipurile de elemente XLink

Tip element-p�rinte Tipuri de elemente-copil care pot fi precizate simple -

extended locator | arc | resource | title

locator title

arc title

resource -

title -

Exemplu

� ������! �� � � -� ��'��� � �&��� ��! E��'�F ��� �� ��� �����C� �� !���� ���� � �� �� �� � !��� �� � ��!� ������<profesorii care predau aceste cursuri, despre datele personale ale studentului etc.

������< ����! �� � � !��� �� 4�4 ������� ���� K� �'� 9�--*:2

<!-- cursurile urmate de un student -->

<!ELEMENT cursuri ((desc | pers | curs | gr | go)*)>

<!ATTLIST cursuri -- atributele cursurilor --

xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"

-- obligatoriu --

xlink:type (extended) #FIXED "extended"

-- ��(���� �-���� --

xlink:role CDATA #IMPLIED

xlink:title CDATA #IMPLIED

>

<!-- descrierea cursurilor -->

<!ELEMENT desc ANY>

<!ATTLIST desc

xlink:type (title) #FIXED "title"

xml:lang CDATA #IMPLIED

Page 139: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 139

>

<!-- �� ������� ������ � �������� .�����, ��� esor) -->

<!ELEMENT pers EMPTY>

<!ATTLIST pers

xlink:type (locator) #FIXED" "locator"

xlink:href CDATA #REQUIRED -- URI-ul resursei --

xlink:role CDATA #IMPLIED

xlink:title CDATA #IMPLIED

xlink:label NMTOKEN #IMPLIED -- eticheta --

tip (prof | stud) "prof" -- tipul persoanei --

>

<!-- in ������� ������ �� ���� -->

<!ELEMENT curs EMPTY>

<!ATTLIST curs

xlink:type (locator) #FIXED" "locator"

xlink:href CDATA #REQUIRED -- URI-ul resursei --

xlink:role CDATA #FIXED "http://cursuri.ro/"

xlink:title CDATA #IMPLIED

xlink:label NMTOKEN #IMPLIED -- eticheta resursei –

>

<!-- �� ������� ������ � (���� �� ����� -->

<!ELEMENT gr EMPTY>

<!ATTLIST gr

xlink:type (locator) #FIXED" "locator"

xlink:href CDATA #REQUIRED -- URI-ul resursei --

xlink:role CDATA #FIXED "http://studii.ro/"

xlink:title CDATA #IMPLIED

xlink:label NMTOKEN #IMPLIED -- eticheta resursei --

>

<!-- ������ �� ��������� .��!����/ � ��(����� -->

<!ELEMENT vizita EMPTY>

<!ATTLIST vizita

xlink:type (arc) #FIXED" "arc"

xlink:arcrole CDATA #IMPLIED

xlink:title CDATA #IMPLIED

xlink:show ( new -- ����� �� � ����� � ����rsei --

| replace

Page 140: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 140

| embed

| other

| none) #IMPLIED

xlink:actuate ( onLoad

| onRequest

| other

| none) #IMPLIED -- ������' �������� ��(' --

xlink:from NMTOKEN #IMPLIED -- sursa --

xlink:to NMTOKEN #IMPLIED -- ��������� --

>

5 ����!�� �&�����C� ��'��� � �&��� ����� � � !��� �� 9� �� ������ �'� � �7:2 <cursuri xlink:title="Cursurile urmate de Sergiu Dumitriu">

<!-- �� ������� ������ ����� -->

<pers xlink:href="sergiu.dumitriu.xml"

xlink:label="stud33"

xlink:role="http://students.infoiasi.ro/~sdumitriu/"

xlink:title="Sergiu Dumitriu" tip="stud" />

<!-- �� ������� ��������� �� �� ����� ������� -->

<pers xlink:href="busaco.xml"

xlink:label="prof03"

xlink:role="http://www.infoiasi.ro/~busaco/"

xlink:title="Sabin Corneliu Buraga" tip="prof" />

<!-- ������� �� ��� �������''' -->

<!-- specificarea unui curs -->

<curs xlink:href="courses/web/web.html"

xlink:label="SWeb"

xlink:title="Semantic Web" />

<!-- Mai multe resurse despre cursuri, seminarii etc. -->

<!-- Grupa din care face parte studentul -->

<gr xlink:label="grupa">MSD-1</gr>

<!-- ��(���� �����-(���� -->

<vizita xlink:from="stud33"

xlink:to="grupa"

xlink:show="new"

xlink:actuate="onRequest"

xlink:title="Grupa lui Sergiu Dumitriu" />

<!-- ��(���� �����-curs -->

Page 141: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 141

<vizita xlink:from="SWeb"

xlink:arcrole="http://www.infoiasi.ro/membru"

xlink:to="stud33"

xlink:show="replace"

xlink:actuate="onRequest"

xlink:title="Sergiu Dumitriu, participant la cursul 'Semantic Web'" />

<!-- ��(���� �����-coordonator -->

<vizita xlink:from="stud33"

xlink:arcrole="http://www.infoiasi.ro/prof"

xlink:to="prof03"

xlink:show="replace"

xlink:actuate="onRequest"

xlink:title="Sabin Corneliu Buraga, coordonator" />

</cursuri>

� ��� )< �-�� � ��� ��� ������� �=� ��� 6���� � ����� �������

Page 142: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 142

�� ������ "�( �� � !���� ��� ���� � 94�����< #��� � 3 ����<2001):

• type – ide���� ���� ���!����� "�( � ���� ���'��� �< ���� ��permise fiind simple, extended, locator, arc, resource, title sau none.

4� �&�!���< � ��'��� � �!��� �� � ����� � !�� �2

<!ATTLIST xlink:simple

xlink:type (simple) #FIXED "simple"

>

4��� �� ��������� none< ���!���� � ������ � ��!���� "�( � � ��alte atribute XLink pe care le are nu vor fi luate în considera���

• href – �� ����� ������ �� � �� !� �� ������ ��C� ���� ���� � "�( �� '������� � ���r�� 9��� � � �'!�� �� ��� ��:������ �� ������� ����� � ������ ��� � ��'��� �!��� � � ���� ����� � � ���!��� �� �� locator. Valoarea lui href este un URI;

• atributele semantice role, arcrole � title – ������� ��!����resurselor participante la o le'��� �� �� ������ role � title pot fi utilizate în elemente de tip extended, simple, locator � resource. Atributele arcrole � title ��� �� ��� � � ��emente de tip arc. Valoarea atributelor role � arcrole � ���� �� �� � 5�+< � valoarea lui title va � � � �� �� ���� � ������ ���� ��� �!�9�� �&�!���< ������� � ����� ��� � ��&� �� �8��� :L

• atributele comportamentale show � actuate – ��� ��� �� ������ � ���!��� �� �� �!��� ��� � � � �� !� ��� ���� ��upra comporta-!����� ��'�turii. Atributul show ������� ���� ����!�������� �� � ��'��� � ���� ���� � ����!���� �urent, înlocuindu-l ��� ���C��-l într-� ���� �� ���� � ���� �C� ��'��� � ���� ��������Atributul actuate ���� !� ��! �� � ������� � ��'��� � 9e.g., în mod automat sau doar când este se������� �� ������� :L

• �� ������ � ���� � �� � ��� �� �� ��'��� label, from � to – atributul label �� �������� ��� � ���!��� �� �� resource �locator< ��C� � �������� �� ������ from � to apar în elemente de tip arc � ����!���� �� ��< ������� ������� ��'�turii.

�'� ��������

3 ��'��� � �!��� ����� � �� ������� � �� !���� �� ��'��� �&���< ��!�C� ������ �� ���� ��� ���!����� �� �� extended, locator, arc � resource.

Page 143: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 143

O exe!����� � ���� � !���� �� 9��'��� � �� � � !��� �� �������&����� � ������� ���:2

<a xlink:type="extended">

<resursa xlink:type="resource" xlink:label="local">

Sergiu Dumitriu

</resursa>

<localizator xlink:type="locator"

xlink:href="http://students.infoiasi.ro/~sdumitriu/"

xlink:label="remote" xlink:role="..."

-���A#����8�!���� ���� ��� 2��(��� ��

<vizita xlink:type="arc"

xlink:from="local" xlink:to="remote"

xlink:arcrole="..." xlink:show="replace"

xlink:actuate="onRequest" />

</a>

Acest exemplu în (X)HTML putea fi scris:

<a href="http://students.infoiasi.ro/~sdumitriu/">

Sergiu Dumitriu</a>

4��� ��� � �� ����� show aveam valoarea new, atunci în HTML �������! 9������� ��� ��-������� �� ��� �� �� -� ��� �� ���� � �navigatorului):

<a href="http://students.infoiasi.ro/~sdumitriu/"

target="_blank">Sergiu Dumitriu</a>

,��� �� ��'��� �� �&���< � ��'��� � �!��� � ����� ��� 2 • posibilitatea de a avea resurse multiple (locale ��� �� ������:L • ������� �� �� � � �� �� � ��� �� �� ������ �� � � ��� �� ������L • asocierea unui titlu sau rol unei resurse locale; • ����� �� �� ���� ��� �� ��'��� ����� � ���mblu.

�� ����� ������ �����< � ���� �� � ����! �� "�( �� '����������� � � ���� �� �� ��'��� ��� ��&� � ��� �� �ltor tipuri de documente XML standardizate, precum SVG sau SMIL.

4. Limbaje bazate pe XML. Exemple

În continuare, vom prezenta succint o serie de limbaje bazate pe XML, dezvoltate în vederea îndeplinirii unor diverse scopuri specifice.

Page 144: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 144

*�%��+ ����������������������� ��������,�������#��$����-����#,��"

Viziunea noii versiuni XHTML 2.0 (Axelsson et al., 2005), în curs de ����� ��� � �� ���� ��� ���< ���� ��� �� � �� ��� � ��� � '�� al ��� � ����� �� �� ����� �� �� �� ��!� ���� �� � ����!��(e.g., o foaie de cal���< � ������ �� �� ��< � ���� !������< � � �'!��dintr-un blog< � !�'� ����� ���< � !���8 �� ����� ����� ��� ����:�Acest document poate fi creat, � ������ � ���� �� � ������� +�� ���

$� � ������ � �� ������� ��#�< ����� �� ����� ���� ���� � �� ��-�� < � � � � ����� 9�� � ����� � ������� ' ��� ���� �� ���� :< �� ���� ���������� � ��� �� ���� � ������� � ���� �� � �����accesibilitatea. De aseme��< �� � !� ���2 �!������ �� �������� ���������< � !�� � !� ��� �� �� ����� �� ������� ��< ����� ��������� �� � ����� �� ��� � ��' � �� �� ���� ������' "#��5 !� � ��� �� � ����� � ��� "��#� *�*< ���� ����� ������� ���grupa�� �� !�����< ���� � ��� � � ��!�� ����������� ������� 9��exemplu, modulul Structural � ����� !�� � �� �� ���� � � � �� !���� < iar Tables ��� �� ������� ���� ��� ��� � ������� �� ��������tabelar).

5 �&�!��� �� ����!�� "��#� ��- ���� � !��� ��2 <html xmlns="http://www.w3.org/2002/06/xhtml2/"

xml:lang="ro">

<head>

<title>Fotografii personale</title>

<meta property="dc:creator">Sabin Buraga</meta>

</head>

<body>

<section>

<h>Fotografii personale</h>

<separator />

<p src="foto" type="image/png, image/*">

Fotografia mea</p>

<meta about="#csb" property="title">

Situl personal</meta>

Alte fotografii <p id="csb"

href="http://www.infoiasi.ro/~busaco/">aici.</p>

</section>

</body>

</html>

Page 145: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 145

3 !� ��� �� ���� � � � �� !���� �� ����� ����� �� �� ���� ��� �2 <section> ������� � ������ �� �����< � <h> ������� � ���� 9heading:� $�� ���� ��� � ���!����� <h1>, …, <h6>, pentru compatibilitatea cu versiunile anterioare. Elementul <separator> �� �������� � � ���� � ��'� �����< �� ����� �� �� ��������� �� �������<hr>. Un paragraf, specificat via <p>< ����� ����� � ���� ���� ��� – de exemplu, liste – �� � �C� ���! � � �� �� !��� %��!���� <l> desem���� � �� � ����� � �� ���� �� �$$< �� �C� ������ <br />, nu.

Imaginile nu sunt incluse cu <img />, ci pot fi specificate prin intermediul atributului src � � �� ���� ���� ��� �� �� ����� ������� 9�� ����� � ����< � ����< � ���� MIME al imaginii). Mai mult, atributul href ����� ��� �� � ��� �� !� !���� ���!���< � ���� ��<a>� 4� ���!���< �� ��� � <nl>< �� � � ������� � ���� �� ��'��� ��'������ 9������� �� �� !�� ���������� ������� ����� ��meniu de navigare).

��� � � �� �� !�� � ���� �� �� ���� ��� ��!���� – � �� ����� �capitolul 5 –, elementul <meta> ����� ���� ������ �� ����� property, iar rel ����� ������� ����� ����!����� �� ���� ��� �� 9e.g., glosar, index, ������< ������< ��&�< � ���< ����< ��� �:� ������ �� ���� ��� �� !��� � ��� �� ���� ���� ��� �< ����!��� < ���!���� <meta> ����� ��� ��� � �� ��� ����!������

; ���� �� � ����� ������������< ����� � ������ �� ����� role, care � ������� ���� unui anumit element (de exemplu, rol de navigare printr-o �� ���� � ��� ��&� ��� �� ��� �� ������:� ����� �� ��� ����� � ������ ���� � � ����� ��!��� �i�� ���� ������ �

5 ��� �&�!��� ���� � !��� ��< � �� � �� ���� �� �� ����!����desemne��� � !���8 �� e-mail: <html xmlns="http://www.w3.org/2002/06/xhtml2/"

xmlns:email="http://www.faqs.org/rfcs/rfc2822.html#">

<head>

<meta property="email:From">Sabin Buraga

&lt;[email protected]>&gt;</meta>

<meta property="email:To">Viorel Bunduc

&lt;[email protected]&gt;</meta>

<meta property="email:Subject">Cartea</meta>

<meta property="email:Date">

Fri, 24 Feb 2006 09:55:06-0200</meta>

<meta property="email:Message-ID">

&lt;[email protected]&gt;</meta>

<title>Un e-mail privitor la carte</title>

Page 146: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 146

</head>

<body xml:lang="ro">Salut, cum decurge editarea?<body>

</html>

+�� ������ �� ������� �� �!C� � ������������� ���������XForms (Boyer et al.< �-- :� ���������� �� !��� ��� ��� ������ ���limitate, neputându-se specifica tipuri de date, cauzând probleme de ����������� � ���C��-se pe scripting. De asemenea, formularele sunt � ����� �� � � ����� �< � �� � �� ���� � �� ��'�� � �C!�� �� ��� � � � � �&��� ���� � ��� ��� � ����� �� �� �� ���� � !�!��� ����

Un document XForms va fi compus din trei componente importante: • modelul ��� � � �� ������� �� ���������� ��� �� ���� ��

utilizatorul (datele preluate de la utilizator, constrângerile � ���� � �� ����� �� � � < !���-date privitoare la comunicarea �� �� �� ��:� ������< !������ ������� ���� �� ������r ce vor fi ���������< ������ �� ��������;

• ��������� �� �����%������ �� � ������� �� ���� ��� �bstracte, posibil �' �'���L ������� ���� ��� �� !�� � �� �� ����� � !� ����� !���� �� � ����� � � �� ����� ��� ������ �� �� ���� ���ata���� ���� �� � ��� �� ������� ����� � !����L

• modul de transmitere (submit: ����!���� �� !���� ��� itoare la � ���� �� ������ ��� � �� �� �� ��� �� �� ������� � elucrarea ������� � ������ � 9�� ��� �������< �� ���!���< �� ���� �� ����� � �&������� �� ��� �� �� ����� � �� ��� �� �� ���:�

Modelul apare în antetul unui document XHTML via <model>. ��!������� �� �� ���� ��� ��� �� � ��� � �� ��� ����!�ntului (nu doar în <form> ��! �� ��C!��� �� ��#�:< � !�� � �� �ransmitere a date�� � ����� � ���!���� <submission> (pot fi efectuate mai multe ��� �� �� �� submit). Se permite specificarea câmpurilor ce trebuie completa�� ���'��� � � �������� �� ������ 9���� �� �� �� ����� ��formularul). Accesul � ������� �� ���� �� �� �������� �� "����< � ��� �� �� ���� �� ������� � "#� $���!�� 4� ���!���< ������ ������� � � ���� ���� � �� �� �xterne.

$� ����� �! �� !��� �� ��� �� ����� � � �� � ����< ����� �� �XHTML 1.0 astfel: <html>

�&��������� �������������&����

<body>

<form action="http://www.sit.org/cautare" method="get">

Page 147: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 147

��� ����� %����-� ������������ ��

<input type="hidden" name="linii" value="10" />

<input type="submit" value="!" />

</form>

</body>

</html>

?� ��� ",� !�< ��' ��� �� -un document XHTML 2.0, poate fi: <html xmlns=<http://www.w3.org/2002/06/xhtml2/" xml:lang="ro">

<head>

����� ����������� <!-- ������� �� ����������� -->

<model>

<!-- spre server va fi trimis

���� ������ ���������� ���� --> <instance>

<data xmlns="http://www.sit.org/produse">

<produs />

<!-- un câmp ascuns -->

<linii>10</linii>

</data>

</instance>

<submission action="http://www.sit.org/cautare"

method="get" id="s" />

</model>

</head>

<body>

<p> <!-- ���� ��� �� ����!����� .����� ������,

se va recurge la stiluri) -->

<input ref="produ���������� ������������������

<submit submission="s"><label>!</label></submit>

</p>

</body>

</html>

4����� ���� ��� � � ������ �� -� ��� "#� �&�� 2

<instance src="http://www.sit.org/date/cautari.xml" />

Via atributul ref pot fi preluate date din documente XML cu structuri ��� ��< ' ��� �&� ���� "����� 4� �&�!���< ����! ���� ����� �� �����unei pagini Web printr-� ���� ���� �� �� !�2

Page 148: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 148

<input ref="h:html/h:head/h:title">...</input>

��� ������ ",� !� ��� � ����� ���������� de introducere a datelor din ��#�< ��� � �� ������� �� !�� � ���� � �� !���� �� ��� � �cadrul browser-ului. Astfel, un control XForms de selectare a unei valori dintr-� ���� �� �� !�� ����� � �� ������ �� �� � � !� !����maniere (e.g., folosind butoane radio, printr-� ���� �� �������< ' ��� ��!�� ��� � �� !���� �� !�':< � ����� �� ������� �H���de pro� ������ �� ��� �������� $���!��� < �� ��� � � ��� �� �� ��slider: <range ref="volum" start="1" end="20" step="0.5"> � �control pentru includerea în document a datelor introduse <output>.

��� � � ����� � �� ������ 9wizards: �� �� ����< �� � ����elementele <switch> � <toggle>, iar repetarea unor date se poate realiza via <repeat>. Gruparea unor controale se face prin elementul <group>.

5 ��� ������ !�� ��� �� �� ���� !���� �� ��� �� �� ��!�� ��!�-���� �� !��� ���� 3 ��!�� ����� � � ����� �� ������� ����� � ������� �!� �� -� ����&� ���< ����� � ��� ���������< ����� �i ���'��� � ��������� ��� � ���� �� �� ���� !��� �� �� �� ���� 9i.e., �������� � ���� �� �� � �!� �����:� 4� ���!���< ����� �� ����� ���������� � ���� ���� 9e.g.< ������� �� ����� �� � ������� ��!�����: ���poate avea asociate di�� �� ���� C'� 9�� ����< ���� �� ���� � � ������ � �� ���� �� � ���� �� ���:� ����� ��� �� � � ��� � �� !������ � �� ���� �� �� � ��a���� �� <bind> ������� �

; �&�!���� �� !� 8��< �� ������� ������ �� �!� �� �� � �� � edit va � ������� ��� ���� ������� �� �������� � � ���� ; ����< �� !��� ������� �� ��!� �� �� !� !� � ���C� *-- � �� �� ���'��� � � ������ <model>

<instance>

<data xmlns="">

<suma /><plata />

<card>

<numar /><data_expirare />

</card>

</data>

</instance>

<bind nodeset="card" relevant="../plata='credit'" />

<bind nodeset="suma" constraint=". &gt; 100"

required="true()" type="xs:unsignedInt" />

</model>

Page 149: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 149

�������� �� ���!��� �� �������� � �� !���� !����!���XML Events 9#��� �< ��!�� �� � ��!�< �--�:< ���C��-se realiza un comportament dinamic al formu�� ���� ; �&�!���� �� !� 8��< �� �� ����alternativ „Ascun��F � E�������F �� ����� �� �� ��� �� �� �� ����2 <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:xforms="http://www.w3.org/2002/xforms"

xmlns:ev="http://www.w3.org/2001/xml-events">

...

<xforms:group ref="contractat">

<xforms:trigger>

�- ����#������$ ����!���- ����#��bel>

<xforms:action ev:event="DOMActivate">

<!-- ������� �� �������� �� ������ �� �i��

valoarea 'expandat' -->

<xforms:setvalue

ref="afisare">expandat</xforms:setvalue>

</xforms:action>

</xforms:trigger>

</xforms:group>

<xforms:group ref="expandat">

<xforms:trigger>

<xforms:label>Ascunde</xforms:label>

<xforms:action ev:event="DOMActivate">

<xforms:setvalue

ref="afisare">contractat</xforms:setvalue>

</xforms:action>

</xforms:trigger>

</xforms:group>

...

</html>

Alte detalii privitoare la XForms ��� � �'���� � K�>� et al. 9�-- : �Raman (2003).

; ���� �� � ����� !���!��� ��< ������!��� �&��� ���� ",� !�precum FormsPlayer � XSmiles �� � � �������� �� !��� ��� �� ��� ������� �� ��� �� �� �� < ��� ������� ������ � ���m Chiba, FormFaces � OXF.

Page 150: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 150

4.2. Specificarea structurii hipertext a unui sit Web

#�� � ������ �� � ��� ��� !���� �� ����� �� �� ���� ��� �� ������� �� �� ��� ���� �� ��� �� robots.txt, specificat de standardul de excludere � ������ 9����lii în Buraga, 2005).

Unul dintre serviciile Google recente este Google Sitemaps< �� !�C��� ���������� �� �� ��� �� �&������ � ���ument XML privitor la �� ���� � ��� ��&� � ����� � ���� �� �� ��&� !� ��� ����� � ��������� ������a. Solu�� G��'�� ���� ��!���!��� � ����� ���� ��excludere a ro����� < � �� !���� "#� ���C��-se specifica modul de ���� � � ����� �� ��� � ���� �� ����� ��

5 �&�!��� �� ������ �� ����!�� "#� ���� � !��� ��2

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">

<url>

<!-- ������� �������� -->

<loc>http://www.infoiasi.ro/~busaco/</loc>

<!-- ultima modificare -->

<lastmod>2006-02-19T12:33:03+02:00</lastmod>

<!-- ��������� ��� �� +���( ��������� sitului:

������ +��� B'B �� 4'B -->

<priority>1.0</priority>

</url>

<url>

<!-- ������� ���� ������� -->

<loc>http://www.infoiasi.ro/~busaco/paint/</loc>

<!-- �������� ������!������ -->

<changefreq>weekly</changefreq>

</url>

</urlset>

Serviciul Google Sitemaps ������� �� ������ �� !�� �� �� ���� � � �lte �� !���2 ��&� �����< �$$< ���! ���� ���� ����� ��� ��� �� �� 3'��8(2005).

*��������������������"� �����������������.�����

Jabber repr���� � ����! open source �� ������ � � ���� ����� instantanee, pe baza tehnologiilor Internet actuale.

� �������� �� ��!����� ��� '� �� "#�� ���� ! �����i����� .���� < � �� ��� �� �� ����� � �� ����� � ��� �� ����!��� �� �!����

Page 151: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 151

entitate 9� �� �� < � ��!����� ����D� �< � ������� ����:� ,��� ������� � � ������ � �������� �� 9.+4 – Jabber ID), de forma �����%����)��%��*������� (de exemplu, [email protected]/Laptop).

3 ��� �� ������� ����� ���� � ��!����� ��mite date, specificate tot prin intermediul JID-ului. De exemplu, yak/announce/online desem���������� �� ��� �� announce/online ���� ������� �� �� �� �� yak ���!��� � ��!�� �� �� ��� 9!���8: ��� � ��� ������� ������9����� online) pe serverul indicat. În exemplul [email protected]/ 1.6.0.3 este specificat un JID pe care-l trimite clientul indicat de 959967024 ��� � �� �� �� �� �������� � � ����D� �-���< ���C� �� �� ���� ���� ��� ���� 1.6.0.3.

����� �������� ��� �������� � �� !���� �� ���&� (streams) XML între punctele finale ale conexiunii, pe baza stivei de � �������� ���H+�� $�� ������� ��!�� ���� �� �!� ����!C�clientul (jabber:client), serverul (jabber:server: ��� � ��!����� (jabber:component:accept � jabber:component:exec).

De exemplu, pentru o cerere de conectare din partea unui client la un server Jabber, se va trimite un document de forma:

<stream:stream to="jabber.org" xmlns="jabber:client"

xmlns:stream="http://etherx.jabber.org/streams">

...

</stream:stream>

5 ����� � ��!� �� �� �� � ����� � 9�� ����� id �� ����� ��� �autorizarea accesului):

<stream:stream from="jabber.org" xmlns="jabber:client"

xmlns:stream="http://etherx.jabber.org/streams"

id="3AFD5712">

...

</stream:stream>

Atributele from � to ����!���� ��'� �!��� ���� ���� ����� ������� ���� ����< ���C��-se recurge la alias-uri via <alias>.

������� !���8��� ��������� ���� ��������� �� ���!���� <message>, tipul unui mesaj putând fi un fragment de dialog (chat:< � �������� ��(groupchat:< � ��� 9headline) sau o eroare (error). În cazul în care nu e �������� ����< �� ����� � �� !���8�� ���� � !�� 9� ������ � �����:� 5 �&�!��� ���� � !��� ��< � �� � �� �!� �� � ��� �� ��element op����2

Page 152: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 152

<message to="busaco@yak" from="dragos@yak" type="chat">

<body>Ce faci?</body>

</message>

5 !���8 ����� ����� � !� ��8� "��#� �� � � ���� �� ��� ��������� �� �!� �������� �� ���� ��� ����

De asemenea, se pot grupa prin <thread> fragmente dintr-� ���� ����(set de replici), iar elementul <x> permite specificarea unor extinderi Jabber ��� ��� �� �� �� �� � '��a��

+�� !���� � ���� � �� ����������� �� ����� 9� �����<prioritate etc.) sunt stocate de <presence>. De exemplu, pentru ca un ������� �� ������� ���� � ����� �-� ������� �� ����!< � ���� �� ���acces la in�� !���� ���� � � ����� �������2

<presence type="subscribe" to="[email protected]" />

#���8�� �� ����� � ���ea fi:

<presence type="subscribed" to="busaco@yak/Laptop"

from="[email protected]/firma" />

4����� � ���� � �� �� !�� � �� �'� ��� !�!� ��� � ��� �� ��element <iq> (info/query:< �� !�C� ����� �� �� ���� ��� �� ���� ���înt � ���� ����� .���� � �� ����� type ������ ������ ���!�� ����������� � �� �� �� � �� � � 9get: ��� �� � ����� � � �� �� !�� 9set). În caz �� ������< �� ��� � � ������� 9result), altfel – o eroare (error).

Pentru a solicita accesul la came � �� ���� �� blabla< �� '�� ����2

<iq type="get" id="conf" to="[email protected]">

<query xmlns="jabber:iq:conference" />

</iq>

5 ����� � ����� � � !��� ��< � �� � �� ������� ������ �� ��� � �se permite accesul trebuie furnizate date privitoare la un pseudonim (<nick />: � � �� ��� 9<secret />):

<iq type="result" id="conf" to="busaco@yak/Laptop"

from="[email protected]">

<query xmlns="jabber:iq:conference">

<name>Cafeneaua Blabla</name>

<nick />

<secret />

</query>

</iq>

@�!� ���� ��� ����� � �&�!��� ��� ������� �� www.jabber.org.

Page 153: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 153

!��+ ����)����#$�

5.1. Preliminarii

; ��� ��� C�< � ����!�� "#� ����� � � �� �� �� � ���� 9�������:de date, adoptându-�� � ���� ��� ��� �� �ocumente (document centric). Pentru managementul eficient al datelor XML, trebuie – minimal – �� �&���suport pentru:

• stocare – documente/arbori XML; • scheme – �������� 4�4< "#� $���!�< �%��" @G ����L • limbaje de interogare – "����< "=�< "=�� > � �ltele; • interf��� �� � �' �!� � 9��+-uri) – DOM, SAX etc.

������ ������� �� �'�����< � ���� �� ���� � ��������� � � ����< �în cadrul bazelor de date comune.

Suplimentar, mai trebuie asigurate (Daum & Merten, 2003): • !������� �� ����� � ������L • mecanisme de indexare; • ���� � ��� � ��'� � �� ���� ��� ������ L • ����� �� �� � �����L • integritatea datelor; • accesul multi-user; • suportul pentru trigger-e; • ������� �� �� �� �'� � ����!��� !�������

5.2. Baze de date native XML

Premise

Conform Bourret (200 �:< �&��� ���� ����� �� ���� � � ���� � ������� �� �� !���� "#��

� !�� �� ��� � �� ����!����� ��� ��� �� ���� 9data-centric document) în care XML este folosit pentru transportul datelor. Documentele sunt proiec-tate spre a fi eficient proce���� �� ��� � !���< �� �� ���� ���� �� ��� ���� � �'�����< ����C� �� ����� �� ��� ������ 9������ ���!���������� �� �� !��� �� ������� �� ����� ���� �� �� ��� ��� ���������� �!��� �� �� ���!�� "#�:� ������ �� ���umente se pre-����� ��� � !�!� � �� � � ��� �� ���� �� ��< � ������ ������< �ordi��� �� ����� ���� �� ���� �� �� ���� �� �� ������ ������ �� ����-������ ����� �� -� ���� �� ���� �������� ��� � �� ���!���� ��

Page 154: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 154

�� !�� �� � � ����! �� ���� �� ���� �������� �������� � �������� � i����� �� � "#��

�� ����� ���� �� ���� � �� ��� � �� ���-numitele document-centric docu-ments, adoptându-�� � ���� ��� ��� �� ����!��� ������ ����mente sunt destinate consumului �!�< ���C� ����� � �� � ����� ���< !esaje �� ����� ����� ���< ����!��� "��#� �� �� !����� �� �� !�����Structura in�� � � !� ���� ��C� �� �'�����< !����� �� �� ����!�� ���� ���� ��� !� !�� ����� �� ���� �������� ����� � �������� ����� �� ���!�� ��C� � ����� !&� 9��mpus din sub-elemente � ��&�: ��� ��� �� ����� ����!����� � ���!���� 3 ��� � �� � ��� ���!����� ������ �� ������ ��� 9siblings) este, de cele mai multe ori, !�� ����� ������ ����!��� ��� �������� �� !C� ��� ���� ��� ����� �� !��� 9�4, � ��,:< �� � � � ��� �� -� ���� �� ���� ��a����

; � �����< ������ �� � ���� ���� ����'� �!��� � ���� ����-����� ��� �< �� ��� ��� ��� �� ����� �� � ���� ����� � � ���manierei de stocare a datelor. În general, datele sunt stocate în baze de date ��������< � ����� �� ����� ��� � � ���� �� ���� �� ������� �� �sau a unor programe middleware, aceste date pot fi accesate în format XML. Astfel de si���!� �� ����� � � � XML-enabled. Strategiile de stocare se bazea�� �� ����� �� ����!� �� ����� � "#� 94�4< "#� $���!�<�%��" @G: �� ����!� �� ���� �� ���� � ���-�� ��� ������� ���������� � ������� � !�� ����!��< ��� ������ � � ���� !are XSLT. Schema documentului se asocia�� ����!� ���� �� ���� �� �� ��� ��tabel (table-based mapping), fie conform unui model obiect- �������(object-relational mapping:� ; ����� ���! ���< ����!����� "#� ��� �������unor obiecte – via unor tehnici XML data binding –, care la rândul lor vor ������ ���� � ���� �� ����� 3 ������ � �� ����� �� ����!����� XML în cadrul bazelor de date re������� ���� ������� � K�� ��(2005a). De asemenea, alte detalii de interes sunt prezentate în Katz (2003).

!����� ? : ���-�� � ���� ��� 6���� ����� �� ��� ���� ���� � ���� �� �� 2,3 (conform Harold, 2005)

K��� �� ���� �������� Baze de date native XML

3 ���� �� ���� �������� ����tabele

3 ���� �� ���� "#� ������������

3 ���� �� ���� �������� � ��!-���� � +����������� ��C� ����������!�

3 ������� ���� ����!��� "#� având scheme identice ori diferite

Page 155: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 155

3 � �'�� � � �� ���� � ����� �� ����� �� ���� ��������� �!� � ��C� ��� a priori stabilite

Un do��!�� "#� �� ���� �arbore de noduri, putând include date semistructurate

O interogare întoarce un set neordonat �� � �'�� �

O interogare întoarce o ���!������������ de noduri

� ��� ���< ����!����� 9� � ������: ��� ������� �� � baze de date native XML (native XML database:< ���� ���� �� ���� �������� ��������� � ����� �� �� !���� "#�< �� � sisteme de management al ������������< ������ � ������� �� '������� ����!��� ��� �'�� � �� ��� ������� �� � ���� �� ���� ���� "#��

Încercare de definire

3 ������ ����� � ��������� �� ���� �� ���� ���� "#� ���� ����� ��������� � !���� 9��'�: ��� � � ����!�� "#�< ����!��� �����C� ����� �� � ������ �� ����!��elor conform acestui model. Drept exemplu de mo��� �� ����� �� "#� +������ 5����� ����!����� ������� � 9��'��: ���� ����!���� "#� – � ��� ��� �� ����!�� �������fo������ ���� � � �'�� � 9record, row: �� ������� 3 ���� �� ���� ����"#� � ������ � !�� �� ����� ����� �� �� ����! �� ����� � ����9���� ��� ����!����� "#� ��� � ��� � �� ���� � ��� ���� !�������din alte surse de date, inclusiv tabele comune).

� ������ � �� � � �� ����! �� ���� �� ���� ���� "#� ����� ������� ��2

• text – �� !���� "#� sunt stocate ca text – e.g.< ��� � ��� ���� ����! �� ��� � �����< � �C!� �� �� K�3K 9Binary Large Object) ori CLOB (Character Large Object) sau un format text proprietar);

• model – �� !���� "#� � ��� !�!� ��� �� �ocumente text, ci conform unui model obiectual intern (de exemplu, un arbore DOM).

�����

$���!��� �� ���� �� ���� ���� "#� � ���� �� ��'� � �� n���� ������� ������� ��� � � �< �� � ����� �< �� � ��� ���� ����� �� �� !a��� ��� ��� �� ����!��� � ������ �� managementului datelor semistruc-turate.

Page 156: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 156

� � � ��������� !�� ���� ����� � ���� � ��!� �!2 • normalizarea 9�� � � ����� !������� �������< �� �������

���������� �������� � � ����!��� � i�� ������� �anomaliile cauzate de actualiz�rile concurente ale datelor);

• ������������ ������������ 9��< ��� ���� ��� � �&� !��� �� �� ������ �� +4 � +4�%,< � ��� � ��� �� ����!��� "#�< �olosind XLink etc.);

• scalabilitatea 9��� ���� � ���� �� ��� ��� – în timp rezonabil – �pentru documente XML de mari dimensiuni).

������ ���%�(������

$���!��� �� ���� �� ���� ���� "#� ��� � ��� � ���� �� ��� ��������� ������� � ���! 9K�� ��< �-- �:2

• ����� �� �������� �� ����!��� – � ������� 8���� � �� �!�� celui de ta���� � ��� �� !������� e������ ��� �� � ���� � ������ � ����� ����!�� �� ��� �L ����� ������ ����� ������ � '��� ��documentelor conform unor criterii (unele sisteme ofe � ����-������ !� �� �������� < � �C��-se astfel ierarhii – taxonomii);

• recurgerea la limbaje de interogare – a se vedea sec���� ��L • ��� �� �� ���� � ��� � � �����< ������ 9locking: � ���� ��� –

������ ������� � ���� �!� ���� � ����!� �� �� �� ��� ��� ������ � ��!��L

• ��� �� �� ������� �� �� ���� �� � �' �!� �L • optimizarea accesului (round-tripping); • ������� �� ���� ������ �� ������ 9 �!��� ����: – via servicii Web sau

alte tehnici, pot fi incluse/interogate documente provenind din exterior;

• suportul pentru indexare – sunt disponibile trei tipuri de indexuri: indexuri pentru valori (value indexes:< � �� ���� �� �� ������ �������� ��&� �� ���!����� 9��� � ���� ��� �� �'� � ���!E'������ ����� ���!����� ��� �� ������ � �� � ����� � ���� [+��\F:<indexuri structurale (structural indexes), referitoare la localizarea elementelor/atributelor în cadrul documentului (se pot folosi în ��� �� �� �� �'� �� 'e�� E'������ ����� ���!����� <adresa>”), � ��&� ��&� 9full-text indexes:< �� � ������ ����� ������ ��&tuale (pot avea rol în inte �'� �� E�� ����� ����� ����!����� ��includ cuvintele «Tehnologii Web»”).

Page 157: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 157

Printre principalele beneficii aduse de un sistem de baze de date native "#� ���� �� � ������� �� � !�������� � u!� �� ��� � "#� ����!� � � !���� ���2

• !�� � ����� �� ����� � � ������ – ���� !� !���� �� �� � ��� � �!�� � ��� �� ��!�� �� � ������ �� ���� 9�����< �!�������!��� "#�:< ��� � � �� !���� �� �� ���� ���L

• oferirea unor vederi (views: !������ ��� ����� �� date – folosind "$�� � "$�-,3< ���������� �� �'� ilor pot fi redate în moduri ��� ��< � ����� �� �������L ������< ��������� �� �� �'� ����� � ������ ��� � ���� �� �'� "#�L

• �� �� !��� – � ���� �������!���< �� �'� �� ���!izate ���� � �� ���� �� ���� ���� "#� 8����� � ������� �implementate pot fi realizate mai rapid decât asupra unor ����!��� ��� �'�� ������� � ��� �� �� ����! �� ��� � 9�����aspect e deosebit de important pentru integrarea de resurse multiple în cadrul unui document); de asemenea, se poate recurge la caching, refolosirea/rescrierea „inte�'���F � �� 9� �'!��� ��: ��- �'� ����L

• utilizarea unor date de largi dimensiuni – tehnicile de procesare � �!�����< � ���! $�" � "#� ����� < pot fi folosite la � ���� � �� �� ����! ��� �� !� � �� �� !��< ����!��� ���C� � ��� ��� � ���� !� ��� �� �'� ���������L

• ��'� � �� �� ��� ������ �� �� �� ��� � ������� �� ���� ������ �< ����!��� < ��� �� ���� ���� ��� u implementarea de �� �� ��� 9��� � �����< ��� 3��� � $imeon, 2004).

!����$������������������ ������� ����)������

� !�� ���� � ��!� � �� !���!��� �� ����! �� !��'�!�� �������� "#� ���� � �� �� �� �!��8� �� �� �'� � � ��������i XML.

�� ���� ����� ��� ���� �� ��� � ��2 • ���� �� ���������� �� �'� �� � �� !�� "#�L • oferirea de suport pentru procesarea pe partea de server; • ����� �� �� ��� �� ��!���&� 9������< �&� ���< �����<

��� ���� � � ������:L • alinie �� �� � ��' � �� �� ����� �� "#� ������� 9"����< ����

de nume, XML Schema etc.); • suportul pentru noi tipuri de date.

Page 158: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 158

Limbajul XQuery

Precursori

���� ��� ��� � � ������ � � �������� ��� �� ����� �� � ���� � ��!��������� �� �� �'� � � datelor XML. Ideea de a realiza un limbaj ��������� �� �� �'� � � ����� �� ��� �� �� � ���� � ��� ��� �<� � !� � ����� ��!��� ezultate în cadrul workshop-ului Query Language (QL ’98). Astfel, pe parcursul anilor au fost sugerate limbaje precum WebSQL, XML-QL, XML-GL, XQL, UnQL sau XMAS.

������ � �� � �� ����� ��� �< ��� � �!��� � !���� ��� ��e�����2 • XPath 2.0 (Berlung et al., 2005): www.w3.org/TR/xpath-datamodel/ • XSLT 2.0 (Kay, 2005): www.w3.org/TR/xslt20/ • XQuery 1.0 (Boag et al., 2005): www.w3.org/TR/xquery • "=�� >" *�- 9#���� � #� ����� < �-- :2 www.w3.org/TR/xqueryx

O privire de ansamblu asupra tehnologiei XQuery este dis����� �%���� ' � #���� 9�-- :�

���� ����� ���������������������������

În cele ce urme���< � ��! ����� � ����� ���� � ���� � � ��alelor caracteristici ale limbajului XQuery.

#������ �� ����< ��!� ���� ������ � �� "���� ��- � "$�� ��-<����� � ����!���� "#� �� �� � � �� � ��!��� � ��� 9�����în Fernández et al., 2005). O valoare (value: �� ���� � ���� �� ��� ������� ���!��� 3 ������� �� ��� ���� � �����< �� ����< � � ������ �� ������ � � ��� �� ����!����� 9���� ! ��'� �!��� � ������� ��������� "#� +�����:� ?��� �� ���!�� ��� � ��� �� �� ����� ����� �� ��������� "#� $���!�� 4� ���!���< ����!���� �� �'������� ���� ������� � ����!� �� ����� � �p������

$����� �� �!� �� ��� � ������� � ����&��� "=�� > ��� ���� �� �tabelul 7.

!����� ; �-� �� �� nume utilizate în cadrul XQuery

Prefix Descriere URI

xs ����!� "#� http://www.w3.org/2001/XMLSchema

xsi ����� ������!� "#�

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

Page 159: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 159

xdt tipuri de date XPath 2.0

http://www.w3.org/2003/xpath-datatypes

local ���� "Query locale

http://www.w3.org/2003/11/xquery-local-functions

xml XML http://www.w3.org/XML/1998/namespace

��������������������������

#������ ����� �� �'� �� ���� � !��� ��2 ��� � ������area nodurilor, se recurge la XPath, orice expresie XPath reprezentând un program XQuery, iar rezultatul acestui program fiind o ������ 9������� �� � �� "#�:� �� � la XSLT, intero'� �� ��� � ����� � �� ����� menite a genera rezultatul dorit.

Astfel, în cele de mai jos, avem un program XQuery care include o expresie XPath:

<proiecte>

{ /projects/project/* }

</proiecte>

O expresie de forma $nume ���� � ��� �� �� �� ���� nume. Variabilele ��� � ������� � � ��� �� �&� ���� "����� 4� ���!���< �� ������ ������� ���� ��� �������� ��� �&� esiilor FLOWR. La rândul lor, expresiile FLOWR pot fi imbricate.

4��� �! � ���� �� � !���� �&� ���� ,�3�� ��� �� � ���! �provine de la For, Let, Order-By, Where, Result:

• for �� ����� �� ����� �� �� ���� �� �� ����< � !�� ��� ���� 9�� �� !� � ��� �� �� �� join);

• let ��'���� �� �� ���� ����� �� �� �&� ��L • where �� !�� �� !��� �� �� ���� 9��� � �� ����: ������� ��

���� ��� for; • order by ������� � ��� �� ������� � � ���� ilor/nodurilor; • return întoarce rezultatul unei expresii XQuery, putând include

�������< �&� �� "����< ���-expresii FLOWR imbricate. 4 ��� �&�!����� �< �� ����� �! � ��� select stud.name from

students stud where stud.year = 4, ex� !��� �� -un dialect SQL. În termenii XQuery, interogarea se transcrie prin:

for $stud in doc("students.xml")//student where $stud/year = 4

return $stud/name

Page 160: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 160

$� ����� ������ ��� �� ����� doc() �� ����� � �� ��� �� �������� ��� ��� students.xml, realizându-se evaluarea expresiei XPath //student 9�� ����� � ����� ���!����� <student>, parcurgându-se recursiv � �� ���:< ������� �� � ������� �� ��� -���!��� ������� ������� ��� ��� � for, variabila stud ��C� �� C� ���� � ����� � � �������� $�veri��� � � -� ���� �&� ��� "���� ���� ����� �� ���-elementului year este 4. La final, se întoarce valoarea sub-���!����� �!� �� �������� elementelor <student> ��� � �� � ����� �����i���� �� where este ����� ���� ����� < ��! ���� � ���� � �� ��� ���inând numele �������� � ��� +? ��� �� � �� !�� ��� ������� �� ����!�ntul students.xml.

4� ���!���< ��� � ������ ���ntificatorii all � some, se pot exprima ���� ��� �������� 9if...then...else: � �� ����� ��� '� ����� ��� "���� ��-< ���� ��� ����imentari. În plus, se permite folosirea de ���� 9� ������ ��� ��ecificate de utilizator).

În cadrul unei expresii XQuery, pot fi declarate tipuri de date pentru a ������� �&���� �� ���� �� � ���� �� �H��� ��n� � � �!������ ' ����de lizib����� �� ������� ; � !��� �� �&�!���< �� �� '�� � � ���� ��numere calculate prin program:

for $i as xs:integer in 1 to 5

return $i * 3

Desigur, înlocuind xs:integer cu tip XML Schema incompatibil cu ��� ��� �� �� �!��� � 9�� �&�!���< xs:string sau xs:dateTime), vom ���� � !���8 �� � �� ��

3 �� �� �� � ������ "=�� > ��� �!�� � ���� ���� �� ������� ��!������� %"$�� ���� �� � ������� ��� � ����o���� �� ����� ������< ���������� ���� � ������ ��� �2

• tratarea erorilor � ����� �� � �' �!��� 2 error() � trace(); • accesarea unor date: node-name(), string(), data(); • manipularea valorilor numerice: abs(), ceiling(), round(),

count(), avg(), max(), min(), sum() etc.; • ����� �� �� ��� �� ���� � � � �� �� �� ���� �2 compare(),

concat(), string-join(), substring(), string-length(), upper- -case(), translate(), escape-uri(), contains(), starts-with(), ends-with(), substring-before(), substring-after() � ������L

• lucrul cu expresii regulate: matches(), replace(), tokenize(); • !����� �� ���� � �!���� – e.g., get-year-from-date(); • accesarea nodurilor: name(), local-name(), namespace-uri(), root();

Page 161: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 161

• ��� �� �� �������2 zero-or-one(), one-or-more(), exactly-one(), index-of(), empty(), exists(), distinct-values(), remove(), insert-before(), reverse(), unordered(), deep-equal() etc.;

• precizarea contextului: position(), last(), current-dateTime() � �ltele;

• '�� � �� �� �������2 doc(), collection(). ��� � �����< � �� ������� #����� �< #���� � ����� 9�-- :� De asemenea, ��� � ������� � ���� �&�� �< ��������� �� �������

��� ���� �� ������� �� ����!�� �� � ��esare XML.

!�����������������������

?� ����� !� � ��� ��������� "=�� > �� � ���� ��������� ��� �� !����� �� ����< �� !�C��-se astfel reutilizarea codului-�� ���

$������! �� -un modul utils.xqm � ����� �� ���� �� � ����calendaristice:

module namespace utils="urn:infoiasi.ro:xdb-utils";

.# <������ � �������� �� ���� �� ���� #/

declare variable $utils:months {

("Ian", "Feb", "Mar", "Apr", "Mai", "Iun",

"Iul", "Aug", "Sep", "Oct", "Nov", "Dec")

};

.# ����� ���� ��� +� ���� *�� 1�� %%%%* #/

declare function utils:format-date-RO ($date as xs:dateTime) as xs:string {

string-join ((

day-from-date ($date),

item-at ($utils:months, month-from-date ($date)),

year-from-date ($date)), " ")

};

$� ���� �� ����� � �� �� ����� �� �!� ��� � � ��� �� ������ ������� ������� ���� ,���� � � �� � � � � ����� � ������ ����9��� �C� ����� dateTime ���� �� "#� $���!�: � ���� �� � � ��carac�� �� ; �� ��� ����� �� �������� ������� �� �� � � ��caractere rezultate în ur!� ����� �� ���� "=�� > � �������

+���� �� ����� �� ����� ���� ���� ! !������� � !��� 2

Page 162: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 162

import module namespace utils="urn:infoiasi.ro:xdb-utils";

declare variable $data external;

<data> { utils:format-date-RO ($data) } </data>

Variabila data ���� ����� ��� �� �� �&�� �< ���C� � � e����� �� ��utilizator sau din sistem.

5 !��� �� �&�!��� ���� ���� !�� � �� ����� � � ����n���� ��������� < �� ���� �� ���� � �� ��� �� �� ului eXist:

(: Autentificare prin nume de cont & parola preluate

din se������ ���� ������C +������ � �����&� (user, password) sau o secv���� ���� +� ��! �� ���� #/

declare function main:checkUser() as xs:string* {

let $user := request:get-session-attribute ("user"),

$pass := request:get-session-attribute ("password"),

$login := xdb:authenticate ("xmldb:exist:///db", $user, $pass)

return

if ($login) then

($user, $pass)

else

()

};

,���� get-session-attribute() � ������ �� �!� request ��� �������� �� �� ���� �� �� �����< � ����� authenticate()< ��� �C�������� �� �!� xdb, v� ��� �&����� �� ������� � ���� �� ��������! 9����!��� �� 5�+-ul special xmldb:exist:///db:� ,���� ��� ���� � �!� �� ��� 9����� ��: �� � � �� �aractere.

Alte limbaje

�!��8�� "=�� > � ���� � ������ ��� � ����� �� �� �� �'�ri, fiind similar comenzii select ���� �� ������� �� $=�� %&'����� � �������!�� ��� �� �� ���� � ��� � �������� �� ������ "#� 9�� � <�������� < ��� '� ����:< �!�� ���� ���� ��� � ��� ���� ��54(Create-Read-Update-Delete) în contextul sistemelor de baze de date � ����ale.

3 �� � �� ������ ��8� ��� �� ���� � ��� � �!��8�� "5�����< � �� ��� ����� ��� � �� ���� ��� ���< �����C� �������� �� ������ "#��Viitoarele versiuni ale limbajului XQuery vor include, se par�< � ���������� �������� � 9��� � ���!�� �< ,�� ���� � ����< �--/:�

Page 163: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 163

Pentru tipuri particulare de documente pot fi folosite limbaje de interogare specializate. Un exemplu notabil în acest sens este SPARQL, un limbaj pentru realizarea de interog� ���� � �ocumentelor RDF.

!�*��+"��"� ����������������

)*���������� ���

,� ��! � ����� � � �� � �� �&�!��� �� �� �!���< ������ �!���!��� � ���� � �� "=�� >�

; � !�� C�< � ��� ! �� � ���� �� �� �� � �� ���� �� ���� native XML, precum eXist, Mark Logic’s CIS sau X-���H4K< ��� � � ��� ���� ���� �� � �' �!� � � �!��8� � ���! �B< .��� ��� ���� 4� ���!���<�� �'� �� "=�� > ��� ���� ���� � �� � �� � �� ����!� ��������(XML-enabled: �� 3 ���� � #� ����� $=� $� �� � ; ���� �� � �����serverul Oracle, o serie de exemple sunt oferite de Gennick (2005).

%��� �� � ����� �� �� �'� �� "=�� > ��!���&� �� ��� ����� ��<oXygen/> XML Editor sau Stylus Studio. De asemenea, experimentarea �� �� �'� �� ��� �� �� �� ��!��� ��� �� � �� ���� ��� �' �!� � .��� �� ����� ���� ������ $�&� 9�� ��� ��!� ���� ��� � ����������� ����� �ocumentelor XML transformate ori interogate).

Sisteme XML

�� ����� ���� � !� � � ���� �� � ����� ������� �� !����� �< ����� � �'����� � � �������� "#� ���� !���!��� �� �� ����'� ������!� ������ �� ������'�� "#� � ����� � ���� ��

������< ���� ! 9K�� ��< �-- �:< �&��� � ���� �� ������ ��� �� � „specii” principale sunt enumerate în continuare:

• ������ �� ��� middleware: DB2XML, DBIx::XML, XDBC (XML Database Connectivity);

• sisteme de baze de date native XML: Berkeley DB XML, DBDOM, dbXML, eXist, ozone, Tamino, XDB, Xindice etc.;

• servere (cu suport pentru) XML: AxKit, Enhydra, WebObjects; • servere XML-enabled 9�!�� � ������ �� �� wrapper): DB2

+�� !��� +��' ��� < #� ����� $=� $� �� < 3 ���� � ������L ��<�� ���� !������ ����� $=�H"#� � ���� � �� ����� ��în standardul SQL a suportului pentru XML (o serie de detalii în Gennick, 2003);

• motoare de interogare XML; • conectoare (XML data binding);

Page 164: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 164

• ����!� �� !��'�!�� �� ��������2 �#$< 4�����< 4>�����<Frontier, iENGINE, Mark Logic’s CIS (Content Information Server), Prowler, Syncato, UltraXML etc.;

• �� ���� �� � �' �!� �2 �� ����� 43# 9�43#:< "#�24K<XQuery API for Java (XQJ), XML Database API (XAPI).

+ �������

Unul dintre cele mai importante domenii în care se poate recurge la bazele de date native XML este cel privind integrarea datelor semistructurate.

4���!����� �� �� ���� ��� �'�� � � ���� � �� �� !������ ������� ���� � ���� � �� ����� < �� ����� �� e �� �� �����< �� � �������� �� 9��������� ��� !���!edia), la aspecte din sectorul financiar (e.g.< ����� �� �� ��: ��� ��� �� � ���� �� 9�� ��< ������ � ����:< ����� �� ���� 9!������< �� ��� ��!�� � ������:< �� ���� ��� ��� ��������� 9!� ���� � ����&��� ��# – Client Relationship Management), la ��!�� ����� � ��!��� ��'�� � !��te altele.

����� ������� ����� �� ������� �� �� � �����< !���C� !������� ������� �< !��'�!���� ����� �� !���8�< � ��� �� ������ < ����� �� �folosirea de meta-date, depozitarea pe termen lung a documentelor (eventual, în cadrul depozitelor de date XML).

#� !��� ���C� ��C�< !���� ����!� �� ���� �� ���� ���� "#� �� ��� ������������� �� -� !�� � �!�� � �� �� ��� ���< ��� �� ���C� �integral dezvoltate folosind o asemenea abordare.

4���� � �� �&������ �������< � � �����< ��� �� ���� �� K�� ��(2005b).

5.5. Studii de caz

����������� ��'����������,��'��-����

��� � ������< � � ����! �� �����! � ���� �� ���� ���� "#���� �C� ���� ����!��� "#� ����C� �� !�� � ���� � ��proiectele propuse �� � ������ �< �������< ������ �� � �-au ales un anumit proiect disponibil. ?�! ����� �� �� �� �� !��'�!�� �� �������� #� ( ��'�T� �+$< ��C� ��� ���D� � ����C� � � �� �� ���< ������ ��C� �� �'� ��pot fi realizate direct via un formular HTML, iar rezultatele pot fi redate ca pagini Web.

$� �� �� �� ��!�� ���� ����� � http://127.0.0.1:8001/, iar accesul propriu-�� �� �������� �� �� ��� http://127.0.0.1:8000/. Documentele se

Page 165: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 165

vor plasa în directorul use-cases al directorului Docs 9 �� ����C� �����serverului). Interogarile vor putea fi experimentate accesând adresa http:// 127.0.0.1:8000/use-cases/ 9���� ����� �� �� �� ��� #� ( ��'�T� �+$:�

��� � ������< ��! ��� �� ������ "#� � �� !���� �� ����proprii serverului:

xdmp:document-insert("http://www.infoiasi.ro/projects.xml",

<projects update="16 octombrie 2004">

<project class="A" id="p6">

<title>Super Proiect</title>

<desc>Un proiect super</desc>

<stud>3</stud>

<url>http://www.super.org/</url>

</project>

<!-- �� �����''' -->

</projects>

);

xdmp:document-insert("students.xml",

<students year="2004">

<student>

<name>Mandra Pingo Zuin</name>

<project start="2004-10-07">p6</project>

</student>

<!-- �� �����''' -->

</students>

);

Fiecare proiect va fi identificat unic prin intermediul atributului id care va servi pentru referirea proiectului ales de un student în cadrul celuilalt document.

���� �� � �� �-��� � �������� ���� �� ���� �onstituite se poate ����� �� � �� �'� �� "=�� > � !���� �2

{ doc("http://www.infoiasi.ro/projects.xml")/*,

doc("students.xml")/* }

%&�!����� ��!��� ���� ���� �� ������� ���� ����� � ����������� � �� � �&����� �� �'� �� "=�� > � �� !���� �� �� ������� 9�'� � �J:� 4� ����< �� ��������� ��n�� ���� �� !� 8�� �� � �������� ��� ����� �� ������ � � �������� �� �C!� <textarea> al formularului de in�� ����� �� ������� ��2

{ xdmp:eval(xdmp:get-request-field("queryInput")) }

Page 166: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 166

��� � ������< ��! ���� � ������� �� ����� �< ��� C� � !����� ���� ���� � � ����!����� � '��2 <proiecte>

{

for $proj in

doc("http://www.infoiasi.ro/projects.xml")/projects/*

where $proj/@class = "A"

return

<proiect>

<titlu> { $proj/title/text() } </titlu>

</proiect>

}

</proiecte>

5 !���� �� �� �'� � "=�� > �� �� �� �!� �� �� � oiecte propuse � ���� � �����< ��� C��-�� � ����� "��#�2 for $clasa in ('A', 'B', 'C')

.# ����� ������ �����''. :)

let $proiecte :=

doc("http://www.infoiasi.ro/projects.xml" )//project[@class = $clasa]

.# ������� ���� �� �������''' #/

return

<h:p xmlns:h="http://www.w3.org/1999/xhtml">

{

.# '''�� ���� ���� ���� � ���� #/

if (empty ($proiecte)) then

����� .�5� �-��� ������� �� ����� �, D�����/

else

concat ("Sunt ", string(count($proiecte)),

� ������� �� ����� �, D�����/

}

</h:p>

; ����� �< ��! ���� ��� ������ ��� �� � �!� ��� T�'T � ��term� �� T�T 9� �� ����� �'� � �J:2

<div style="font-size: 14pt">

{

for $stud in doc("students.xml")//student

let $e := $stud/name[contains (string(.), "Ping")

and ends-with (string(.), "uin")]

Page 167: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 167

where exists($e)

return

<p><i>{ $stud/name/text() } </i> cu proiectul

<span style="color: blue">

{ $stud/project/text() }

</span>

</p>

}

</div>

� ��� )@ �������� ,�A 3�� �B� ��� ����� -�� � � ��� �� ��� � �������� ������ �� �

� ������� #��

O in�� �'� � ����� !� ��!���&� ���� ��� �� !� 8��< �� �C� �����!�� "#� ���C� ������ 9�� ��� ���� ������ ���� �!�: �titlurile proiectelor alese de fiecare:

Page 168: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 168

<students>

{

for $stud in doc("students.xml")//student

order by $stud/name descending

return

<student>

{ $stud/name }

{

for $proj in

doc("http://www.infoiasi.ro/projects.xml")/projects/*

where some $projid in $proj/@id

satisfies ($projid = $stud/project)

return

<project class="{ $proj/@class }">

{ $proj/title }

{ $proj/desc }

</project>

}

</student>

}

</students>

����!< �� ���!���< ���� ������ ������� ��� 'C� �� � ��� ��� ��tip join � ����� � "=�� > � 2 <students>

{

for $stud in doc("students.xml")//student,

$proj in doc("http://www.infoiasi.ro/projects.xml" )/projects/project[@id = $stud/project]

order by $stud/name descending

return

<student>

{ $stud/name }

<project class="{ $proj/@class }">

{ $proj/title }

{ $proj/desc }

</project>

</student>

}

</students>

Page 169: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 169

3 ���!� �� �'� � – ero���I – ���� � !���� ��< ��� �����!��������� � ���� � �� � �� �� �� ��� "#�< ��� �� �� �&� �� �'������ ����< ���� ��!i�� ���� � ������2 element studenti {

(: lista denumirilor lunilor anului :)

let $luni := ('Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',

'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') for $stud in doc("students.xml")//student

.# ������� ���� ������ ������, ���� �-��� ��� ���� #/

where $stud/project[position() = 1 and

xs:date(@start) <= current-date()]

return

.# ����� �������� ������� #/

element student {

(: un comentariu generat dinamic :)

comment { concat(' A ales proiectul "',

$stud/project, '" ') },

.# �������� ������� ������� ��������� ��

le transfor��� +� ��3������ #/

for $nume in tokenize($stud/name/text(), "\W+")

order by $nume descending

return

.# ����� �������� ��������� #/

element identitate {

(: ...având atributul 'nume' :)

attribute nume { upper-case($nume) }

}, attribute luna {

.# ������� ��������� ����� #/

$luni[get-month-from-date(

xs:date($stud/project/@start))] }

}

}

Predicatul [position()=1 and xs:date(@start) <= current-date()] � ���������� ��� � !�� � ����< � ��� ������ ��� �� � � ! � ���� �document are data din atributul start !� !�� ���C� ���� �� ���� ������� ����!� �� ��� � ������ �� � �� ������� !� !���� � ���te, dar

Page 170: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 170

��� � �� � � !�� � ���� ������� � �������< �&� ��� $stud/project va ���� �� � ���� �� � �����< ���� �� '�� ���� � � �a � �� ���� �� � � ���� ���� �� � �' �!�� ��������� – de exemplu – �C� ���� ���� ������� �2004, deoarece pentru studentul cu mai multe proiecte, primul proiect din lista este din 2005, deci nodul student respectiv nu va face parte din rezultatul final.

� ��� 8* C ��� ��� ���������� ��� �������� 2D���4

Page 171: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 171

3 ������ �!��� � ���� ����� �� � ������� �&�ct primul proiect: în loc de $stud/project scriem $stud/project[1], respectiv $stud/ project[1]/ @start� ���������� �� �'� ��� � � �igura 30.

$���!�� #� ( ��'�T� �+$ ��� �� ������� � ���� �� �� ���� ��programare pentru realizarea, via XDBC (XML DataBase Connectivity), de �� �'� "=�� > � ��� � ������iile concepute în limbaje precum C#, PHP sau Java.

De exemplu, pentru PHP, situl Mark Logic’s CIS dedicat dezvoltatorilor ��� �� ������� � ��+ �� ������ � � �� �� xdbc de conectare la ���� �� ���� ���� "#�< ������ � ncipale fiind:

• xdbc_query() – �������� � �� �'� � "=�� >L • build_result() – �� ����� ���������� �� �� �'� L • build_error() – ��!������ �������� � � �� ����� 5 ����� �� � �' �! ��� ��� 'C� �� �� �'� "=�� > ����� �2

<?php

require_once ('xdbc.php'); // biblioteca XDBC

D �( 6<? E$��$FC �� ������� �� ������

$flg |= XDBC_XML;

$params = array();

D��� ����#�������C �� ��� �� ����� �����

$host = "localhost:8010";

$query = "..."; // interogarea XQuery

$query = str_replace('\\"', '"', $query);

$query = str_replace("\\'", "'", $query);

if ($flags & XDBC_XML) { // returnarea rezultatului

return xdbc_query ($host, $query , $params, $usr, $flg);

}

else {

print_r (xdbc_query ($host, $query , $params, $usr, $flg));

}

?>

Utilizarea procesorului Saxon

Saxon � ��� � ��� ���� � ��� � ����� �� �� � ���� !� "$�< � ��������� �� �� �'� � �� "=�� > � ����!����� "#�� ;� ����! �����

Page 172: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 172

�� � �� �� ��!���< �� � ��� �� �� ������ .��� � �� !����in�� ���� �� � �' �!� � ��������

; � !�� ���< � � ����! �� �����! � �� �'� � ���� �����!����� "#� � ��� �� �����8��� ������ �� ��!� ������ �� �������� ?�! '�� � � � �'!�� �� ����!�� "��#� ���C� ����� ��!e ����� �� �!��� �������� �� � �� ���� �� proiect punctaj !� !� � ���C� *-< � � ��� ���� ������� � � �����8��� � � ������ ����nume. Pro' �!�� "=�� > �� � �� � � ��� �� punctaje.xq:

xquery version "1.0";

declare namespace h = "http://www.w3.org/1999/xhtml";

<h:ul>

{ for $punctaj as element(punctaj) in //punctaj

let $nota := $punctaj/nota[@tip = "proiect"]

let $nume as xs:string := string ($punctaj/@stud)

where $nota >= 10

order by $nota descending, $nume ascending

return <h:li> { $nume } </h:li>

}

</h:ul>

Am specificat explicit ������ �� �!� �� ���!����� "��#� ������� �tipurile unor variabile.

��� � � ��� �� �'� �� ���� � ��� ��� punctaje.xml vom introduce de �� �� �� ��!��� � !���� ���2 D:\saxon>java -cp saxon8.jar net.sf.saxon.Query

-s punctaje.xml punctaje.xq

<?xml version="1.0" encoding="UTF-8"?>

<h:ul xmlns:h="http://www.w3.org/1999/xhtml">

<h:li>Moruz Mihai Alex</h:li>

<h:li>Abageru Stefan</h:li>

<h:li>Dumbrava Andrei-Liviu</h:li>

<h:li>Augustin Roxana Maria</h:li>

</h:ul>

,� ��! � ����� e scheletul unei metode de invocare a procesorului Saxon dintr-un program Java :

import net.sf.saxon.*;

�� �����!��!� � �����(��� 6G���% ��� �� ��� �� �aractere

public void XQuery (String xq) {

Page 173: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 173

�� ��� �(������� ������������ 2�-��

Configuration config = new Configuration();

�� ������� ����-�� �����(����

StaticQueryContext xquery =

new StaticQueryContext (config);

try {

�� �������� �����(���� 6G���%

XQueryExpression exp = xquery.compileQuery (xq);

DynamicQueryContext dynamicContext =

new DynamicQueryContext (config);

// construim contextul (arborele XML ce va fi interogat)

dynamicContext.setContextNode(

xquery.buildDocument(new StreamSource(

new File("punctaje.xml"))));

�� ������� �������� �� ��� � �����(��

SequenceIterator punctaje = exp.iterator(dynamicContext);

// stabilim documentul rezultat

DocumentInfo rez = QueryResult.wrap (punctaje, config);

�� ������� ������� ���������� ��������� �� �ezultat

Properties props = new Properties();

// i������ �� � �� ������� 61�'''

props.setProperty(OutputKeys.METHOD, "xml");

�� '''�� ����� ������� ��� � �������

props.setProperty(OutputKeys.INDENT, "yes");

�� ����� �����(����

exp.run(dynamicContext, new StreamResult(sw), props); �� �������!�� ��!�����, � ������-� �� ������� ��ndard

QueryResult.serialize(rez,

new StreamResult(System.out), props);

}

catch (Exception e) {

�� ���� �-�������� ��������

}

}

,����� E �����F �� !� ���< ����! ����� � ������� �� � �� ������� �� ����� ' ���� ��� �� ��� �� � ����� u!� ����!� ���!�>� (L-Systems) (detalii în Buraga, 2000). Un sistem Lindenmayer este un tip particular de sistem dinamic simbolic (generat printr-� ' �!����: � �� �������� ����!��� � � ������� � �� � ��� � '��!�� �� ������ �� ' ����turtle� �� � �� �� � � ���< �!� �&�!�< �� � ������� �� �

Page 174: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 174

�!� N �� � ��!�� �'�� �� � ���� !� � ��� � � � ����� � � ��� ���C� ��!�� ��� � �� ezentarea gr���� � � �������� �� ��

Reprezentarea fractalului se va face într-un document XML de forma:

<gramatica>

<initial formula="F" x="100" y="100" iter="4"

unghi="60" unghi-inceput="0" dist="10" />

<regula stare="F" trece-in="F-F++F-F" />

<regula stare="-" trece-in="-" />

<regula stare="+" trece-in="+" />

</gramatica>

�&�!� ���� ��������� �� �� ����� formula< �!� �� �� �� �� – de atributul iter, iar regulile gramaticii sunt definite de elementele <regula>. Restul atributelor sunt folosite pentru a controla modul de reprezentare. Comanda „FF �� ����� � ��� �� �� ��'!�� �� � ����� �� dist pixeli, iar comenzile „+F � E-” vor roti cu unghi ' ���< � ��� � '��!�� � �<respectiv, invers trigonometric dispozitivul virtual de trasare. Orientarea ���� ���� ������� �� ����� �� �� ������ unghi-inceput.

Vom prezenta în continuare un program XQuery care va genera un ����!�� $?G �'� C� � �������< ������ �������� �� ���������� 4 �'��G�� ���� declare namespace math="java:java.lang.Math";

.# ����!��!� ����� ������ � ���� ��(��� #/

declare function local:preiaRegula($r as xs:string) as xs:string {

for $reg in

doc("LSystems.xml")/gramatica/regula[@stare = $r]

return $reg/@trece-in

};

.# ��������!� � ��(���, în mod recursiv :)

declare function local:parcurgeRegula($r as xs:string,

$poz as xs:integer) as xs:string {

for $i in 1 to 1

return

if ($poz=string-length($r)) then

local:preiaRegula(substring($r,$poz,1))

else concat(local:preiaRegula(substring($r,$poz,1)),

local:parcurgeRegula($r,$poz+1))

};

Page 175: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 175

.# ��������!� ������ #/

declare function local:procesFormula($r as xs:string,

$poz as xs:double,$pasi as xs:double) as xs:string {

for $i in 1 to 1

return

if ($poz < $pasi) then

local:parcurgeRegula(local:procesFormula($r,

$poz + 1,$pasi),1)

else local:parcurgeRegula($r,1)

};

.# �������!� � ����� � ���������,

conform graficii turtle, folosind <line> din SVG :)

declare function local:desenLinie

($expr as xs:string,$poz as xs:integer,

$x as xs:double,$y as xs:double,$dist as xs:double ,

$u as xs:double,$alfa as xs:double) as element()* {

for $a in 1 to 1

return

for $i in 1 to 2

return

if ($i = 1) then

if (substring($expr,$poz,1) = "F") then

(: se recurge la metodele Math din Java :)

<line x1="{$x}" y1="{$y}" x2="{$x + round($dist *

math:cos($u * 0.0174)) }" y2="{$y +

round($dist * math:sin($u * 0.0174))}" />

else ()

else for $j in 1 to 1

return

if ($poz < string-length($expr)) then

if (substring($expr, $poz, 1) = "F") then

.# � �����!��� ��H���, ���� ����� � ����� #/

local:desenLinie($expr,$poz + 1,$x + round($dist *

math:cos($u * 0.0174)),$y + round($dist *

math:sin($u * 0.0174)),$dist,$u,$alfa)

else if (substring($expr,$poz, 1) = "+") then

(: rotim în sens trigonometric :)

local:desenLinie($expr, $poz + 1, $x, $y, $dist,

$u + $alfa, $alfa)

else if (substring($expr,$poz,1) = "-") then

Page 176: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 176

(: sau în sens invers trigonometric :)

local:desenLinie($expr, $poz + 1, $x, $y, $dist,

$u - $alfa, $alfa)

else ()

else ()

};

<svg>

<g stroke="black">

{

�� ������� ����� ��� ��������� 61�#

�� ����������� ��������

let $x := round( doc("LSystems.xml")/gramatica/initial/@x )

let $y as xs:double := round(

doc("LSystems.xml")/gramatica/initial/@y )

�� ������� �� ��������

let $n as xs:double := round(

doc("LSystems.xml")/gramatica/initial/@iter )

�� ������� �� ��-��� �� ��(������� �� ������

let $dist as xs:double := round(

doc("LSystems.xml")/gramatica/initial/@dist )

�� ��(&��� ����� ����� ������

let $alfa as xs:double := round(

doc("LSystems.xml")/gramatica/initial/@unghi )

�� ��(&��� ������� �� ��������

let $u as xs:double := round(

doc("LSystems.xml")/gramatica/initial/@unghi-inceput )

// axioma (formula de start)

let $start-formula :=

doc("LSystems.xml")/gramatica/initial/@formula

�� �������� �-������ �� ��������, �������� ��(�����

let $expr as xs:string :=

local:procesFormula($start-formula, 1, $n)

�� ������� ������� ��� ��� ������� (������

for $i in 1 to 1

return local:desenLine($expr, 1, $x, $y, $dist, $u, $alfa)

}

</g>

</svg>

Page 177: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 177

� �' �!�� "=�� > ����� � ���� � � �� �� ��!���< ��� 'C� ��Saxon, rezultatul fiind scris într-� ��� $?G2 D:\saxon>java -cp saxon8.jar net.sf.saxon.Query LS.xq >LS.svg

4 ����� �!� ��� !� � �� ����� ��� ��� � � ������� �� � ����� �� �� ���������� � !�!� �< � �� ����� � ��������� ���C� ���� !�pentru atributul iter. Documentul SVG poate fi vizualizat, de exemplu, cu Adobe SVG Viewer 9��� �'� � � !���� �:�

Figura 31. R�-�������� ��� �� 6� �C' �������� -������ � 2D���4

/��0����� ���������������#$�

6.1. Punerea problemei

Cum s-� ����� ������� � � � ���� �� !����� � "#� �� � ar putea avea ������1 ; � !�� C�< ���� �� ����!��� � ����� tag-uri din zbor, ���� � �� ���� ��� ��� �� � �� �� ���� ���! �� ���!���H�� ����� 3 �� �� !��� ���� !� ����< � ����!����� '�� ��� ��� ��formatate, deoarece tag-urile se închid corect. La urma urmei, oricine poate � �� �!��8� "#�� $� '� � 9����erat?) scopurile pentru care se !�������� �� !����2 ������ ��< ������ �� � �� ���!��� �� �����

� ���� ����� �� ����! � �� � �� ����� �� ��� ��� � �� !�� � ��� ����� � � ����!����� "#�� �� � � ������ �������� �� ����D� �<ap� �������� � ���� �� � ����� � ����� �� �� ����� �� ����!���corespun����� � ����� �� � !� �� �< !� !��� ���C� ��C�< � ����� ��uno � �� � �� �� �������� ���� � � 4 ��� ����� ����� ��� �� ��'� � ����D� � ��� ����� ������ele de proiectare (design patterns: �cadrele de lucru (frameworks).

� ������ �� ����� � � � ����� �� ����!��� "#� E���F 9E�� ����F:���� �!�� ���� �� ����� � � �� 8�� �� ��� ��� '�� ; � !� �����<� ���� �� ������� ! �'���� 8�����< ��� � � ����� ��� �� ��!principiile – ���� ���� �� !� ��� ��� �! �� -�� ��� ���� ��� �� !������ ���� ����� � �� ����� � ;��< ��� � � ���� !���� � � ���< !�

Page 178: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 178

�!C �� ������ �� ����� � ����!��� �� 8�� ��� ���� !���� � �������incl�� �����a� �� ����!��H�� ���'� �� � � � ��� �������< !�!� ���� ������� ������< ����� ��� � ������ $�� ���� ��� ����� ��� ! �������� �� �a����� ��� ��� �� � ��� �� �!�����

��! � ��!�� � ����!� ����� ��� �� � �����< ���������� �� �&�� ��� 9E!���� F: �� '��� ��� �� ����� ��� � � ����!� � �����< ���� �� �������� � ����!� � �� ����'� ������ 9���!�: �� � ����� �������� �� -� ��!� ����&�� 4��� ��! �! �����< ��� � ������ � �����(pattern: �� � ����� � 9�����ionare) a problemelor.

��� ��� �� ��� � � � ��� �� ��� � ���������� �� ���� ��� ��� ������ �� ��� ���� ������� �� � ����� �< ����� ��� ���� ������

/������������ ������ 1

Un pattern ���� � �'��� �� � �&� !� � ����� �� � � ����&�< � � ����!� � � ������ 9�'� � ��:� ����� ������ � ���� � ���� �� ������ � �omeniul � ������ < �� ������ ���� � � � �� !����< � � � ���! ingineria ����D� �< � ����� �� �� ������ �� ������� ��< ���'�� ��� �� ����

Figura 32. R��� � ���� �����=�� -������� � ����� � ������� � �� �����

Un ����� ����� ���� � ��������� �� �&�� � 9�� ���� �&�� ������� �� �����: � ��!��� � ����!� � ���� �� � ����� �������� ��� ����!�< � ����&���� � � ������ �� ���� � ����!�� 5 pattern nu �� ���� ��� � �'��� �� !� 9��� � � ���� ������:� $���!��� < ��������� � ������ �� �� �������� ��!� �� �������� ��!����problemei, re����C� ���-�!��� �!��8 �� ������� 9pattern language).

%&��� !� !���� ��� �� �������< �� � �� � �� ���' ���� �� � ���-�� �< � ������ ���< �� �����< �� � ����< �� ���� ��� � ��!�� ��!������Pentru un pattern< �� � ��� ��������� �� !�� � ���! �!���< � ���� -� �< � ����!�< ����&��� � �� � ��� �< ������ �� � ���� ��������<�&�!����� � ����� �� ��������

/��������)�������������� ���������������#$�

; ����� ��� �< � �� ������ ��������� �� � ����� � � ����!����� "#�� , ���< ��� �� ��� �� '���2 E�� �� ���� � "#� � ���� ��������

Page 179: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 179

pentru a stoca anumite date sau meta-����1F � E��! � ���� � ������� � ������� �� � �������� "#� �� �!��8 �� ������� �< ����� � �H��� prezentare a da���� 1F� ?�! ��� �� !� 8�� �� ������! �� � !�întrebare. 4� !����� ������ �� � �� � �� ������� ��� ��� �� �H��� ��� �aplicate pentru clase de documente XML specifice (e.g.< � ���� !� "$�sau scheme de validare).

Aspecte importante

� ����� �� �� ���� �� ����!�� "#� � ���� �� ��� � ���� � 9�� ��� '� �� ������� �� ���� ���:2

• lungimea documentului; • ��� �� ����� !� ��8��� 9ease of authoring); • ��� �� � ����� 9ease of processing); • ��� �� ����� L • flexibilitatea; • ��������L • gradul de abstractizare.

Clasificare

������< ���! �� ������� ��� �� ������� ' ����� �� ����'� ii: • oportunitatea folosirii tehnologiilor XML: Use XML; • reutilizarea tipurilor de documente existente: Reuse Document

Type; • alegerea elementului/elementelor- �����2 Multiple Document

Types, Multi Root Document Types; • stabilirea gradului de abstractizare: Envelope, Short Understandable

Names, Domain Element, Container Element, Collection Element etc.; • asocierea de meta-date (date descriind date): Separate Meta-data &

Data, Meta-data in Separate Document, Head-Body, Meta-data First; • organizarea documentului:

– ��� ��� �� �� ���� ���< �� � ��C �� �� ����� � � ���se vor folosi: Declare Before First Use;

– ������ �� !��� ��� ����� � ���� !������2 Flyweight; – arbore (ierarhie) versus graf: Marketplace;

• �&��� �� ���� �� �2 Catch-All Element, Role Attribute, Extensible Content Model;

• ��'� � �� ��������2 Common Attributes, Consistent Element Set.

Page 180: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 180

?�! ���� � � ����� � � �� �� �� � ��������� ��!� ��� – detalii la www.XMLpatterns.org.

Adoptarea modelului XML: Use XML

����� ����� ���� !� ������ � �� � "#� ���� ������ ����� �� �� �-���� � � �� !��� 9��!:�� ���� ���� ; ��� �� �������� ���������� ����&��� �� ����� !������ ��� ������ < � �� !��9�: �� 9�:< �$?< ��#�<������ ���� �� ���� ��������< ������ �� ������ �H��� "#��

$� ����� � �� "#� ����� � � ������ �������� ���� �C�2 • ������ 9�������: � ���� ���� ��� �� �� !��� �L • ������ � ���� �� ��8��� �� � ������< � '���� ����L • �� ����� �� � ���� �� ����� � �������� � �� ��!�L • r�� ����� �� � ����� �� �� � ������� ��� �� ��������� < ����-

��� �� ������ !� � �� �!��8� ,���� �� � � ���� ����� �� ������ �!������� 9� �� !�� "#�

excesiv de complicat, „stufos” poate fi inadecvat de cele mai multe ori), extensibilita��� 9�� ���� �� �!� !������< ���� �� ����!��� ����:<�� ��� ��������< �&����� �� �!����� �� � ����� �< � ���� !� ������� � ���� �� ����� < ��� �� ����� � �&����� ����� ��� 9��� ��� � � �!��8 "#� ��8� ����� ��< �ecât unul specificat de la zero).

4� ���!���< "#� � ����� �� � �!��8 ��� � �� ����� �� ��C� ������� < �C� � � !���-������ 9��� �������� :� 5 !��� �� � �'!�� ��docu!�� ��������� ��C� ����< �C� � !���-date:

<rdf:Description rdf:about="studenti.cgi?matricol=33"> <prenume porecla="zmeuldummy">Marius</prenume>

<orar> <zi tip="luni">... </zi> </orar>

</rdf:Description>

����������������� �������%���.����

@�!��� ���!����� � �� ������ � ���� �� �� ��� �� � ��� �� ������ atât �� ���� < �C� � �� ���������� ����D� �-ului de procesat documentul. 0������ Short Understandable Names ����� � ������ ��� � ���� � ����� ������!��� �� �� ! �� � � �����!� 4� �!� ��� �� �!��� � �� ��� ����� ���� �� ������< �� �duc lungimea documentelor (mai ales în cazul � �� � ����!�� �� �� !�� ���� !� �:�

��� � �������� � ��!�� ����� �� �! �< �!�� � ���� ������� �programare. Formele cele mai frecvent folosite sunt <nume_tag>, <NumeTag> sau <numeTag>.

Page 181: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 181

Compa �� ' ���� �� ��!� ���������� �� � !���� ��� �!� �����!��� � �� ����2 <b> � <ul> versus <table> � <img> 9� ��#�: �<DescriereaEchipamentului CodulEchipamentului="" /> versus <desec c="" />.

��������������� �������� Content Element

; !���� ����� ��� �&��� ���!���-copil înrudite ce trebuie grupate într-� ����� '�� �� @�!� ���� ���!��� ��� �� ������ ��� �����!�� � ��� � ������ � ' ��� ������< ���� ! ����� ��� ������� ������

Pattern-ul facilit���� �� ���� � �� ����!�����< �� � ��� �� '�� ��9��� �&��� ������� !� ����������< �� ���� � ������:� $� ����'� ���� �� ���� ����� �< ' ��� �� ���!����� ��� � �� !�� ��!����suplimentare (e.g., asocierea de meta-date unui grup de elemente).

5 �&�!��� � ����� ��� ���� ��� � ��� �� ' ��� �� �� !���� � ���� � �� � ���� �� �� ���� ����D� � � �� �D� � ����� � ��� �rula �� �� ������� 3 � !� ��� �� � ����2

<config>

<ram>512</ram>

<hdd tip="...">180</hdd>

<parser limbaj="C++">Xerces</parser>

<editor>vim</editor>

<parser limbaj="Perl">Expat</parser>

</config>

3 ������ !� ��� ���� �� ' ���! ��'� ���� ���� ����'� �� �e ��2

<config>

<hardware>

<ram>512</ram>

<hdd tip="...">180</hdd>

</hardware>

<software>

<parser limbaj="C++">Xerces</parser>

<parser limbaj="Perl">Expat</parser>

<editor>vim</editor>

</software>

</config>

4 ��� ������� � ���� !����! Head-Body � Collection Element.

Page 182: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 182

Organizarea dat���.�������� Collection Element

$� � ����� � ���!�� �� �� � !���� �� ����� �� !�� ��� ����� ���'� ��� ����� ������ � ������� ���� �C� �&��� � ���!�� �� �� ���� ������ �� ������ ��� �� ����!������

Contextul în care se u������� ���� ��� � ��� �� ' ��� �� �� ����'� ����!����� < �� �&����� !���� E� ��F 9siblings), la asocierea de meta-date ���� $����� ���� �� �������! � ���!�� ���C� !� !���� ���!��� �������� ��< �� ���� � �������� �� !��� !� ��� �� � ������� 4 ������ ���� � ���������< �� ����������� � �� � �� �����

4��� ����!�� �� !���-date este mare, se va putea utiliza pattern-ul Head-Body, �� � ��� � � �� ���� � � ����!����� � ���� ��!��rtimente ������ 9��� ��! �� ��C!��� �� ��#� � �� $#+�:�

����� ����� ��� � � �����< � ��� �&�!��� ���� ���C� � ������� ���� ���� ��� � ����� � "��#�< �4, ��� 4��K��(�

������ ���%��(� ��� ������������ �������Envelope

$� ��� � � �� �� ����!�� �� � �� ����!� � E���F unde se vor putea ����� ���� "#� � �� � �� � ����!� ���� �� ��� �� ���� �� ���� �� ��livrate unui sistem, într-� !�� � ��������< � ����&��� � �� � �� ���� ������� � E���F ����� �� � � � � �������� �� !�!���� � �� ����-mului.

Pattern-�� �� !�� ���� � �� ��� ���� ��� �� ������ < ��� � �!����! �� �� � � � ������ "#�L ����� � �� �� ���� �� �������propriu-zis al mesajului transmis.

5 �&�!��� ������� ���� ��� � �� ��������� $3�� – �!���� �capitolul 4.

���������� ��� Flyweight

���� �C� ������ �� !��� ���� ����� � ��� �� ���� � ����!��<���� �� ����� � ������� � �'� � ���� � ��� �� � ���� !������������ �� ������� � ����� �� ���� � ���� ��� �� ����� ����� � � ��������� � �� ��� �� ����!������ 4� ���!���< � ���� �8�������lungimea documentului.

4 ��� ����� ����� �� ��!� � ����� �� ������� "#� 9�&�� �:<����� �� ������ E���������F �� "�(< ��� '� �� �� �� ������ +4 �IDREF etc.

����� ����� m�re��� ' ���� �� !������ � !����� �� �< �� ����������� �������� �� �����'� � � ����!������

Page 183: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 183

?�! �� � �&�!��� � �� �< �� ��� �� �� �����< �����! � ��� ���� ����!�� "��#� ������ �� !��� � ���� !������ 9� titlu, în <meta> � � �� ��� ��':2

<?xml version="1.0" ?>

<!DOCTYPE Titlu [

<!ENTITY titlu "Situl WebGroup">

]>

<html>

<head>

<title>&titlu;</title>

<meta name="description" content="&titlu;" />

</head>

<body><h1>&titlu; :: Salut!</h1></body>

</html>

��������������������

Modelul de date oferit de XML este unul deosebit de flexibil, ceea ce ������ �� � � ����� � �������� � ����!����� "#�� ��!�� ' ����<de������ � ��� �� ������ �����< � ������ ���� �� � �&� ��������limbajului.

Metodologii

#����� �� ������< � � !�� C�< ����� �� !��� 9information analysis:< � ���� �� ������ � � ��� � � !�� � �� !� �� � � �� ���de date în vederea realizarea unor scopuri specifice. Modul de prezentare a ������ � �� �����re – e.g.< �� ����� – � ������ � �� !���� �� ��� ��� ������ � � �� !��� 9information architecture).

� !�� ��� ���� �� �����! ��!�� �'�� �� � ����� �< �� � ��� �� ��� ���� 9 ��� ����: ��� ���� ���� 9�� !���:< � ����� �� ����� ile ur!� ��� #������� � ��� ���� ��� ������� �� � �� �� �� � �� !��<����C� �'�� ������� ��� � ����� �� ��������< � ��� !���������!��� ���� � ������ ������ �� -un alt context. Cele descriptive ���� � �� !�� ��8a existente, utilizând reguli flexibile (e.g., anumite ele-!��� ��� � ��������� ������< �� -o ordine aleatorie). Astfel, se permite � ����� �� �� ����!��� �� � ��� �� �� �� � ��!� 9�� ���� �: �����

; ���� �� � ����� ����� ��< ��� ��� ����� ��� ���� �� �� !����pentru a putea fi folosit la crearea unei scheme de baze de date sau la ������ �� �� �� �� �� �� ����!�� 9� � ���� �� � �� ���� � �&���< ��

Page 184: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 184

�&�!���:� ��� � ���!��� �� ���� ��� ���� �� ������ � �� � ������<uneori, modelele mai laxe.

3 �� ���� � �� �������� � ������� �� ������ ����� ��< ��C� ��� !���� � �� �-���< �C� � � �� �� ���� �� ����� #� ��8��� ����!������ ������� 9�� ' �!���� ����!C� �� ���� � tag-� �� : �recall-ul (via vocabularul adoptat).

#� ��8��� ��� � �������� � ��� � � � ���� ����&��� ����� <�����C� �� !���� �������< ��������� !�� ���� � �� ����cuprinzând date efective. De exemplu, utilizatori din domenii variate ar �� �� '������� � �&� ��� ���� ������� ��� � �� -unul dintre contextele: ������� �� ������< ��������� ����!�����< ���� ��< ���� �� ����!��� înrudi��< ��������< ������ ����< !������� �� �� !� ��'�

De asemenea, marcajele pot fi utilizate la identificarea info !���� neimportante sau nerelevante într-� ��!� ����&�� 4� ����< �� -o ����� � ��� � �&����� ������� �� ����!�� � ���� � �� ��� ��<�&�� !���< !�������'�< � ����� �< ��� �< � ��� ���� �< �� ���� ���� �� � �� ���� ��� ��� �� ����� ����!���

#� !���< !������ �� ���� �� ������� � ���� �� ��� � ���� � ��� �navigabilitate, exprimând meta-������< ��'��� �� ��� ��&�< �� !����bibliografice, maniera de identificare a altor obiecte, indicii, asocierile de subiecte, URI-urile etc.

?������� �� � ���� �� �� ��� ��� ����< ������ ��!���� �� �����-�� � !������ � �����C� ����� ��� 4� �&�!���< ���� �� �����!��� ��� �� ������!���� ����� � ���� ����'� �� �� �������� !�����H��� �� ��� ��� �����te. Specificarea subiectului unui document poate ��� � ����� ��� ��� �� ����!� �� ������� �� ��'��� �� �����tuale �� � � �'!��� �� �� !�� �� �!������ ������� ����� �� �

În primul rând, analiza datelor ce dorim a fi modelate trebuie s� ��� ��� !�� ��� ��� � �� �� ��!� ���� ������ 9e.g.< �� !��-cheie, �� �� �� �� !�� ��'��� � �����< ����� �� �������� ����: �folosi�� 9� �� ������ ����� ��< ������ ��< !���� �� ������ �:� 4����!���< � ���� �� ��pundem la întrebarea „Ce trebuie identificat în ��� �� ������ �� �� � !�������1F� ����!����� � � �� � �����! !�întâi un cadru de lucru (framework) conceptual, oferind infrastructura de ����< ����'C� ��� E!�����F ����!��� � ������� ��� � � �zentarea ������ < ��� ���� �� ���� < ��� � �������� � !�� � �� ��ociere a meta-datelor.

Mai trebuie stabilite anumite constrângeri – ������� � ��!���� – ��� � � � ��'� � �� ����!����� �� � �������� � 9useful: �corecte/consistente (clean:� #� !���< �� � ���� �� ������ ������� �� �

Page 185: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 185

com������� �� !������ � � �� ������ ������ ��!������$���!��� < �� ��� !��� ��� �� ������� 9e.g.< � '��������<comerciale etc.)

#�������'� �� ����� �� !������ �� ������� ������!��� �� ��� -��� ������� �� ���< �� � ��� ���� � �� !�� ��� � ���� �� � ������&� �'� �� �� !���� < � �� �� �������� � ������ �� ��������� ��modelare (proiectare).

Alegerea elementelor

3 � !� �������� �� � � ���� ������� ��� � � ����� �� �� �!��8 "#����� �� '��! � �� �!! ���!������ � ���� '���� ������ �� �n� ��� precum „Ce sunt «documentele»?”, „Care sunt cele mai largi componente �� ���� ��� ��� �� �����1F< E�� � ��� �� ��� ���!�� � cadrul unora !� ��� ����� �1F�

Din cele de mai sus, vom alege/reutiliza elemente pentru a colecta sau ������ � �'!��� ������� �� �� !���� � ���� �� �����! ���� ������ !�� ��� � �� � ������ � !�!���� � ����� � 4� ���!���<informa��� �� �� ���� H������ ��� �� � ���� �� �� ���������� �elemente (generice).

4� ���� ������ �� � �&��� � !� ��8 E����F� 4��� ���!��! ��� ���� � "#� ��� � � �������� � ��!� ����< �-� ����� �� ������� �� ��to��� �������� � ���� ������� ��� � � ����� ����� ������< ����!���� � ��� '� �� � ���� !� "$��

$� ���'� �� ���'� � � ���!����� E�� ����F ���� � � !� ���� �� ��sus în jos (top-down, outside-in); apoi, putem rafina de jos în sus (bottom-up), via grupare.

Elementele pot stoca: • date propriu-��� 9�����: – �� �� �� �� !��� �� � �������L • blocuri structurale – �� ��!� �� ���� ����!����L • descrieri/moduri de acces – �� �������! despre �� !��L • ���� � ���� � �� ��!�� ��!���

Maniera de str���� � � ����� � ������� ��� � ���� �� ���� � ��� �����'�< � ������� ����� ����!� � ������ 9meaning: � � ����� ���� !�� 9����� � �� �-��:� 5�� � ���� ������ ������ �� ����� ���� ��� �� � %��!����� ���� ���� �� ����< � ����< ����� � ��meta-date (e.g.< ����< !�� �� ����� �< ���� � �< ���� � �� ����: ��� �������� �� !�� � �� !���� �� �����H����� � 9�� �&�!���< �����--����< �� !�< �����' ����:� %��!����� ��!�� ��!����� ���������expri!� �� ��'��� �� ��� ��&�< ������ �� � �' �!� �&�� � ����

Page 186: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 186

3 � !� ' ������ ���� ��� � ���� � �� �!� �� !� � �� ���!���definite (tag abuse), ceea ce conduce la probleme de procesare, portabilitate sc�����< �������� � �����'� � � ����� �� ������ ����� �� ����!���

��� ��! �! � ����� !� ���< �!��� �� ���!��� � ���� �� �� ��!-�� �< ��� �� � ��� �� ��!��� ; ���'� �� �!��� � ���� �� ��! ����� ����&��� ����� 9���� ���!��� � ����� ��� �� � ����� !������:�

4� �!� ��� � ������ �� �!��� �� ���!�� ����!���� ���� �������� � ���� ��������� ������< � ���!�� � � ��� �� �!����� ��� ���� ���� 9� �� �����:< � � ����� �� ��������

Documentul de mai jos e inadecvat din punct de vedere conceptual 9�!��� �� ���!��� ����!���� ���� ��� �� �!� �� �� !��:2

<Pink><Floyd /></Pink>

<Dead><Can /><Dance /></Dead>

3 ���� �� ���< � �� ����������� �< ���� � !���� ��2

<formatie1>Pink Floyd<formatie1>

<formatie2>Dead Can Dance<formatie2>

...

<formatie33>Planet Funk<formatie33>

� ���!��� ��� � ��������� � ������ �� � ��!������� �� ma-����� !�������2

• ierarhii – ���!��� �����C� � ��� ����� �L • ������� – �� ��� !��� � � �� '� ���� ��� � ��� �� ���� -

native; • apa � – �� �� ���� ���'��� � ��� ������ � ��� ��� � ��

repetabilitate; • �!�� ��� – ��� < ' ��� < ��� L • referin�� – �� '��� E��� �XF 9see also) ori „despre” (about).

4�� �� ���� C'� �� � � ����� ��� ����&��� 9��� � ��! va fi ������ � ��!� ���!��:< ������� 9�� �� ��� �� � ���!��: �!���� �� ��� �� 9�� �C�� � �� ��� ��< ������� � ����� �� ����&�:�

4� ���!���< �� ��� ������� � ��!�� ��������< � ���! E�����&��� ���!���� <comanda>, atunci tr���� �� �&��� � <produs>” sau „elementele <credit> � <debit> ��� !����� �&������F� $���������"#� $���!� � �%��" @G ��� �&� !� ���!��� ������n��< ���� ��!se poate remarca din exemplul de mai jos:

<xsd:element name="info">

<xsd:complexType mixed="false">

<xsd:choice minOccurs="1" maxOccurs="1">

Page 187: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 187

<xsd:element name="credit" type="xsd:string"/>

<xsd:element name="debit" type="xsd:string"/>

</xsd:choice>

</xsd:complexType>

</xsd:element>

���� �������� � ��� � actualmente modelate în XML Schema. Un exemplu este cel în care elementul- ����� �� �� ����!�� �� ! ����� �� !� !���� ���� �� �!�� $����� � ��� �� �� �%��" @G2

<element xmlns="http://relaxng.org/ns/structure/1.0">

<choice>

<name ns="http://www.infoiasi.ro/info#">info</name>

<name ns="http://alternativ.info/">info</name>

<name ns="urn:info.ro">info</name>

</choice>

<text/>

</element>

4��� ���������� � ���� C'� �� � ��� � �&� !��� � � �!�� � �� !���, ele trebuie documentate pentru a putea fi rezolvate la nivel de program.

�� ����� ����� � ������ !� ��� � ���� �� �����! !������ � �������$� �������� ����� �� ����!��� �� � �� �� � �� ��C� �� ��������<�C� � �� ��������H��������� !�������� 4� ���!���< �� ����� ����� �� ������� � � !������� �� ��� � ������� � �� ����� ��!� � � �proiect-���� �� !���!��� � � ������

Alegerea atributelor

4�� !���� � ���� � ������ ��� � �� ����� � � ����� �� ������ < ��!���� � �� � �� ����� �� ����!��� ��

�� ������ � � ��� �� ���� � !���� �� �� � ��� � � ���!����� ���C� ���� ��� ��!�� �� ���� ��� 9i.e. meta-date). Se poate recurge �� ������� Role Attribute �� � � ������� �� ��� � � ��!� ���!ent ����� � ������ � �� ��� ���� ��-i rolul (caracteristica definitorie).

4� ����< ����! � ���� ���� �� ���� ��!�� �� -o companie ������C� 9���� �� � ���� �� �� !����� �&������< ���� ��� � �utem ���� ��� � !������ �� �� ���� �� ������ �!�:�

<departament rol="cercetare">...</departament>

$� ����� ������ �!� �� �� ���!��� �� � ���� ����� 9� !� ���!nevoie de un element precum <departament_cercetare>).

Page 188: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 188

#� !���< ����! ����� ������� Common Attributes pentru a recurge la ������ ��� �� �� ���� – familiar deja utilizatorului din alte contexte – într-o ������ ����� 4� �&�!���< ���� �� �� "��#� �� ��� �� style este folosit ��� � � ����� � �� ���� �� ��� �� ���!��< ��� style � ������� � �� ������������ 9e.g., SVG sau XFrames).

%&��� �!� ���� �&�!��� � �� � �� !���� ��� ������� �&����� ���� �� �� ������ < � ������� ���!����� �� � �� ���� ���� ��� 5�&�!��� � � !��� ��2

<preferinte tema="delta" rezolutie="1024x768"

browser="Mozilla 1.5" />

Mai mult decât atât, valorile atributelor rezolutie � browser folosesc o ������ �� �� ����� � �� � � �� ����� ������ �&���� � ����C�����!����� ��� �� ��� H���!� 2 E��! ���� ��8�! �!���������� �� �� ���� ��1F ��� E�� �� ��C!��� ���� �� � !�!�� ���� ���� !�!� ��� � ���� � ��'���� elor preferate?”

3 ������ !� ��� � ����� � 9�&�����! ������ �� !��� � ������� ���� ! ���� � ��� � �&��� �� ���� �� � � ���� �� � ��� ��:2

<preferinte>

<tema>delta</tema>

<rezolutie>

<latime unitate="px">1024</latime>

<lungime unitate="px">768</lungime>

</rezolutie>

<browser versiune="1.5">Mozilla</browser>

</preferinte>

4 ����� �&�!��� �!��� �� ����� ������ ������ �� � ���!�� �� �����util�� ���� �C� �� !���� !� ���� �� ������ ��� �� � ��������� ���unui element-�� ��� 4��� �� !���� �� ��'��� � �� �� ����< �� � �� ���� � �� �� ��������� � �������< �� �������� �� ����� 4� �&�!���<����! ��� �� -un copac o ra!� �< �� �-i putem elimina greutatea. ,��� � �!� � �� ����� � !������� �� � ���!��< � ����� �� ' ������� � ������� �� � �� ����

4� ��< ����! ���� �� �� ���!����� ������ ��� < � �� ������ � �-prie���� ?��� �� �� ������ � ��� �� ���� ���C� � � �� �� ���� �< ���� � ���� � � �� ���� � 9� �� !� "#�:� ; � �����< ����� ����������� ����� ��������< ���� ��� ���� �� � �� ������ ������ �&�����unei anumite structuri – a se revedea exemplul anterior. În acest caz, se � ��� � ����� �� ���!����� � ��� !���� �� ������ � 4� ������< �&��� �

Page 189: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 189

propune �< �!�� Minimal XML, care permite specificarea doar a elementelor, atributele fiind interzise.

Gradul de abstractizare

G ���� ����� ������ � ���� �� ���� actizare folosit într-un document �� ��� � ����� �� ����&�� G ���� �� ���� ����� � ����� ������ �!�� � �� � ����� � � ��������H�� ���� "#�� $����� ������ � �������� �� � � � �� !� �� � �! � ������ ?�!prezenta doar un exem���� ��!�� �� !�� � �� �� ����� � � �� ���������� ���� � � !���� ��� ���� �� !�� �� � �� � ��� �� �� � �������� � ���� � �� � �!�'����< ����� �� �������� ����!��� � � ���� � �� ������� �� ���&� ��������1

<data_curenta>10-11-2006</data_curenta>

<data_curenta>

<ziua>10</ziua>

<luna>11</luna>

<anul>2006</anul>

</data_curenta>

������ ��

Abiteboul, S.; Buneman, P.; Suciu, D., Data on the Web. From Relations to Semistructured Data and XML, Morgan Kaufmann, 2000

Adler, S. et al., Extensible Stylesheet Language (XSL) Version 1.0, W3C Recommendation, Boston, 2001: http://www.w3.org/TR/xsl/

Axelsson, J. et al. (eds.), XHTML™ 2.0, W3C Working Draft, Boston, 2005: http://www.w3.org/TR/xhtml2

Berlung, A. (ed.), Extensible Stylesheet Language (XSL) Version 1.1, W3C Candidate Recommendation, Boston, 2006: http://www.w3.org/TR/xsl11/

Berlung, A. et al. (eds.), XML Path Language (XPath) 2.0, W3C Working Draft, Boston, 2005: http://www.w3.org/TR/xpath20/

Biron, P.; Malhotra, A. (eds.), XML Schema Part 2: Datatypes (Second Edition), W3C Recommendation, Boston, 2004: http://www.w3.org/TR/xmlschema-2/

Boag et al. (eds.), XQuery 1.0: An XML Query Language, W3C Working Draft, Boston, 2005: http://www.w3.org/TR/xquery/

Bos, B. et al. (eds.), Cascading Style Sheets – Level 2, W3C Recommendation, Boston, 1998: http://www.w3.org/TR/REC-CSS2

Bourret, R., XML and Databases, 2005: http://www.rpbourret.com/xml/ XMLandDatabases.html

Bourret, R., Goind Native: Making the Case for XML Databases, XML.com, 2005: http://www.xml.com/pub/a/2005/03/30/native.html

Page 190: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 190

Boyer, J. et al. (eds.), XForms 1.0 (Second Edition), W3C Proposed Recommendation, Boston, 2005: http://www.w3.org/TR/xforms/

Bray, T. et al. (eds.), Extensible Markup Language 1.0 (Third Edition), W3C Recommendation, Boston, 2004: http://www.w3.org/TR/REC-xml

Bray, T. et al. (eds.), Extensible Markup Language 1.1, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/xml11

Bray, T.; Hollander, D.; Layman, A., Namespaces in XML, W3C Recommendation, Boston, 1999: http://www.w3.org/TR/REC-xml-names

Buraga, S., „Reprezentarea sistemelor Lindenmayer ca documente XML”, ��������������� ���������� �� ����������� ��������� �� �� ������� ����������� – CITTI� 2�������� 2000: http://www.infoiasi.ro/~busaco/publications/articles/lsml-pub.pdf

Buraga, S., Tehnologii Web� ������ ��� ���������� ����� http://www.infoiasi.ro/ ~busaco/books/web.html

Buraga, S. et al., ���������� �� � �� �� ����� ����� ����� �����http://www.infoiasi.ro/~cgi/

Buraga, S., �������� ��� ���������� �� ���������� ������ ��� ���������� ���3�http://www.infoiasi.ro/~sweb/

Buraga, S., Proiectarea siturilor Web ������� � ����� ����� ����� ��� �http://www.infoiasi.ro/~design/

Buraga, S. (coord.), ��������� �� �� � ���� ����� ����� ���4� http://www.infoiasi.ro/ ~phpapps/

Buraga, S. (coord.), ������ �� �� � ���� ������� ������������ �� �������ntare, Polirom, ����� ���3� http://www.infoiasi.ro/~busaco/books/webapps/

Chamberlain, D.; Florescu, D.; Robie, J. (eds.), XQuery Update Facility, W3C Working Draft, Boston, 2006: http://www.w3.org/TR/xqupdate/

Clark, J. (ed.), XSL Transformations (XSLT) � Version 1.0, W3C Recommendation, Boston, 1999: http://www.w3.org/TR/xslt

Clark, J.; Kawaguchi, K., Guidelines for using W3C XML Schema Datatypes with RELAX NG, OASIS Committee Specification, 2001

Clark, J.; Murata, M., RELAX NG Specification, OASIS Committee Specification, 2001

Clark, J.; Murata, M., RELAX NG DTD Compatibility, OASIS Committee Specification, 2001

Clark, J.; DeRose, S. (eds.), XML Path Language (XPath) Version 1.0, W3C Recommendation, Boston, 1999: http://www.w3.org/TR/xpath

Cowan, J.; Tobin, R. (eds.), XML Information Set (Second Edition), W3C Recommendation, Boston, 2004: http://www.w3.org/TR/xml-infoset

Daconta, M.; Obrst, L.; Smith, K., The Semantic Web, Wiley Publishing, 2003 Daum, B.; Merten, U., System Architecture with XML, Elsevier Science, 2003 DeRose, S.; Maler, E.; Orchad, D. (eds.), XML Linking Language (XLink) Version 1.0,

W3C Recommendation, Boston, 2001: http://www.w3.org/TR/xlink/

Page 191: Sabin Buraga: 'Tehnologii XML

Modele de date semistructurate. Familia XML 191

DeRose, S. et al. (eds.), XML Linking Language (XLink) Version 1.1, W3C Working Draft, Boston, 2005: http://www.w3.org/TR/xlink11/

Dick, K., XML: A Manager’s Guide ������� � ����� ������ 5���/� ���� Dubinko, M. et al. (eds.), XForms 1.0, W3C Recommendation, Boston, 2003:

http://www.w3.org/TR/xforms/ Fallside, D.; Walmsley, P., XML Schema Part 0: Primer Second Edition, W3C

Recommendation, Boston, 2004: http://www.w3.org/TR/xmlschema-0/ Fernández, M. et al. (eds.), XQuery 1.0 and XPath 2.0 Data Model, W3C Working

Draft, Boston, 2005: http://www.w3.org/TR/xpath-datamodel/ Florescu, D., „Managing Semi-Structured Data”, Semi-Structured Data, vol. 3, nr. 8,

2005 Fotache, M., Proiectarea bazelor de date� ����� ����� ��� Eisenberg, A.; Melton, J., XQuery 1.0 is Nearing Completion, SIGMOD Record, vol. 34,

nr. 4, decembrie 2005 Gennick, J., „SQL in, XML Out”, Oracle Magazine, mai/iunie 2003 Gennick, J., „XQuery Flowers”, Oracle Magazine, septembrie/octombrie 2005 Geroimenko, V., Dictionary of XML Technologies and the Semantic Web,

Springer-Verlag, 2004 Goldfarb, C., The SGML Handbook, Oxford Press, 1990 Grosso, P. et al. (eds.), XPointer Framework, W3C Recommendation, Boston, 2003:

http://www.w3.org/TR/xptr-framework/ Harold, E., „Managing XML Data: Native XML Databases”, developerWorks, IBM,

2005 Jacobs, I.; Walsh, N., Architecture of the World Wide Web, Volume One, W3C

Recommendation, Boston, 2004: http://www.w3.org/TR/webarch/ Jucan, T., Limbaje formal� �� ��������� ������ ��� ���������� �666 Katz, H. (ed.), XQuery from the Experts: A Guide to the W3C XML Query Language,

Addison Wesley, 2003 Kay, M., XPath 2.0 Programmer’s Reference, Wiley Publishing, 2004 Kay, M. (ed.), XSL Transformations (XSLT) � Version 2.0, W3C Working Draft,

Boston, 2005: http://www.w3.org/TR/xslt20/ Le Hors, A. et al. (eds.), Document Object Model (DOM) Level 2 Core Specification �

Version 1.0, W3C Recommendation, Boston, 2000: http://www.w3.org/TR/ DOM-Level-2-Core

Le Hors, A. et al. (eds.), Document Object Model (DOM) Level 3 Core Specification � Version 1.0, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/ DOM-Level-3-Core

Malhotra, A.; Melton, J.; Walsh, N. (eds.), XQuery 1.0 and XPath 2.0 Functions and Operators, W3C Working Draft, Boston, 2005: http://www.w3.org/TR/ xpath-functions/

Marsh, J.; Veillard, D.; Walsh, N. (eds.), xml:id Version 1.0, W3C Recommendation, Boston, 2005: http://www.w3.org/TR/xml-id/

Page 192: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 192

McCarron, S.; Pemberton, S.; Raman, T. (eds.), XML Events, W3C Recommendation, Boston, 2003: http://www.w3.org/TR/xml-events

Melton, J.; Muralidhar, S., XML Syntax for XQuery 1.0 (XQueryX), W3C Working Draft, 2005: http://www.w3.org/TR/xqueryx

Obasanjo, D., XML Namespaces and How They Affect XPath and XSLT, MSDN, 2002 Ogbuji, U., Google Sitemaps, XML.com, 2005: http://www.xml.com/lpt/a/2005/

10/26/google-site-maps.html Onose, N.; Simeon, J., „XQuery at Your Web Service”, Proceedings of WWW 2004

International Conference, ACM Press, 2004 Pawson, D., XSL-FO, O’Reilly, 2002 Raman, T.V., XForms: XML Powered Web Forms, Addison Wesley, 2003 Sandoz, P. et al., Fast Infoset, Sun Developer Network, iunie 2004: http://java.sun.com/

developer/technicalArticles/xml/fastinfoset/ Van der Vlist, E., XML Schema, O’Reilly, 2002 Van der Vlist, E., RELAX NG, O’Reilly, 2003 * * *, Apache XML: http://xml.apache.org/ * * *, Berkeley DB XML: http://www.sleepycat.com/products/bdbxml.html * * *, Café con Lèche: http://www.cafeconleche.org/ * * *, ECMA (European Computer Manufacturers Association): http://www.ecma-

international.org/ * * *, eXists: http://exist.sourceforge.net/ * * *, Expat: http://expat.sourceforge.net/ * * *, FormsPlayer: http://www.formsPlayer.com/ * * *, Jabber: http://www.jabber.org/ * * *, libxml: http://xmlsoft.org/ * * *, Mark Logic’s CIS: http://xqzone.marklogic.com/ * * *, Oracle Technology Network: http://www.oracle.com/technology/ * * *, Oxygen XML Editor: http://www.oxygenxml.com/ * * *, Saxon: http://saxon.sourceforge.net/ * * *, ������� �� ���������� !�: http://www.xmlpatterns.org/ * * *, Trang: http://www.thaiopensource.com/relaxng/trang.html * * *, World-Wide Web Consortium, Boston, 2006: http://www.w3.org/ * * *, XFront: http://www.xfront.com/ * * *, XML Standards Library: http://xmlstds.xemantics.com/ * * *, XSmiles: http://www.xsmiles.org/ * * *, ZVON: http://www.zvon.org/

Page 193: Sabin Buraga: 'Tehnologii XML

Capitolul 3

���������#$�

E��'��� �� �� ���� �� � �&��� �'�� �� �� �F George Bernard Shaw

"� ����'��'� ������� � ������� ������ ��� ��� �������� �������de procesare a documentelor XML, insistând asupra modelului DOM (Document Object Model� �� � �����(���� de programare SAX (Simple API for XML). Sunt furnizate exemple de cod-����� ����� � ��0�1� ������277� 28� 9���� ��� �� �:�� ��0 ���(���� *���� �� 5���;�# &�

��������� �� ���'���� �� ��� ����� �� ��������� ������� (���� ���

asupra celor oferite de .NET Framework.

Cuvinte-cheie: procesare, DOM, SAX, programare, cod-������ ������-(�����#

1. Preliminarii

4���!����� "#� � ���� �� �� � ���� ��� � ��� �� !��� � @� ��� !� � !�� C� �� � ����� �� ��������< �� � �� ��������� � �nd ����� �� �� � ���� !� � ����� "#� � ��� �� �� ������< �� ���destinate Web-ului sau nu.

%&��� !� !���� ����� �� �� � ����! ��� '�< ��������� �� � ����� � �datelor XML putând avea loc:

• manual – �� ����� �� � � � �' �! �� � �� �alizeze prelucrarea documentelor XML prin intermediul unor tehnici inspirate de la ����� ������� � ��&���� < ��� 'C��-se – de exemplu – la expresiile regulate;

• � !�� � ��������� – ���� ! ��������� "#� +�����<� ������� � �������� ��� or, putem considera documentul XML ca

Page 194: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 194

fiind un arbore de noduri, prelucrate cu ajutorul obiectelor. O astfel de abordare este oferi�� �� !������ 43#< ������� � ����������� �L

• pe baza unor evenimente – un document XML poate fi privit ca o succesiune de e��!��� �� ��� �� � �� ���� ��� �������(început de tag< ����� � �� �-��< ��C �� �� tag, comentariu etc.) �� ��� ���� ������� ���� �� � ���� � �� ������� ���� ��!�� ����� �� �� ���� �� � �' �!� � $�" 9� �� �edea subcapitolul 3), �� � �� ���� !���!��� L

• simplificat – fiecare element prezent într-un document XML poate ���� ������� � � �� ����� � �� �����< ������ ��C� � � ���� � ��������� �� ���� �� �� ������� � ���� � ����� "#�� ;cadrul subcapitolului 4 v� � � ������� ������ �� �����L

• în mod particular – � �� !���� �� �� ���� �� � �' �!� �����������< ��� � ��������� � ����� ���� � �� ����� ��documente particulare (e.g., RDF, RSS, SOAP sau SVG).

��������� �� � ����� � ���� ������� ��� �� � � ����� 9parser) XML. Putem încadra un astfel de tip de analizor în do�� !� ����'� 2

• �� � ����� � – � ����� �� �� ��� ��� ���� ����!�ntul este bine formatat. Drept exemple se pot da procesoarele expat, libxml �MSXML;

• cu validare – proc��� �� �� ��� ���� ����!���� ���� ����<������ � ����!� �� ����� � 94�4< "#� $��ema, RELAX NG). În ������� ����� � � ������ � � ecum Apache Xerces, JAXP, libxml �MSXML.

Uzual, API-urile disponibile pot fi folosite pe mai multe plat�� !� �lim��8�� ������!���< � ���� ���� � �!��8 �� � �' �!� � ��� � ����-������ ����� �� � ����� "#��

2. Modelul DOM

2.1. Caracterizare

Modelul obiectual pentru documente – Document Object Model (DOM) – �� ���� � �� ���� �� � �' �!� � � �������� ������� �� � ���� �������!����� "#� � ��#�< ����n���� �� ������ !� � �� �!��8<���� �� ���� � ��'�� � ����!����� � !��������� �� ������ � � ��modificare a lor.

������� �� ���� � ���� �� � �� ������< ���������2 ����!����� ���m������� ����C� ������� #������ � ��� � ��� � ������� � �� ���� ���

Page 195: Sabin Buraga: 'Tehnologii XML

��������� �� 195

� ����!�����< � � � !�e � �� ������� � � ��!�� ��!����� �� � �obiectelor componente. Fiecare element al unui document poate fi privit deci ca un obiect, fiecare obiect ��C� ������� � � �� �� ���� ����������� Similar metodologiei orientate pe obiect, DOM iden����2

• �� ������ � �������� ������� �� �� ���� � �� !������� �document;

• ��!���� ������ �� ���� � ������ 9����� ��!�� ��!���� �atributele lor);

• ������ � ���������� �� � ������ �� ���� � ���cte. ������< 43# �� ���� � !���� �� � ������� �� ���� � �

����!���� � ��� �� �� ���� �� ���� 9�� ��� ���� ���� ��� �:� 4����!���< � ������� � � ��!���� � �toare la XML. Fiind ������� �� �!��8 � �� ������ !�< 43# ����� � !���!���� � � ���!��8 �� � �' �!� �� 43# � ���� � ������� � �� � � � ������� �� �� !� �� �� ��erabilitate la nivel binar, în contrast cu alte tehnologii.

%&��� !�i multe niveluri de specificare: • DOM – nivelul 1 (Apparao et al., 1998) a pus bazele modelului,

� ���C� �&����� �� ����� �� ���������� 9DOM Core) ��� � ����� �� �� � ����� ��u� � ����!����� "#� � � ���&��� ������� � ���� � �� HTML (DOM HTML). O implementare � !������� � ���� �� ��� � ���� � !���!��� �� ���'��� � ����� � �� ������ ����!����� ����� �� DOM Core, conform semanticii DOM;

• DOM – nivelul 2 extinde nivelul precedent, modularizând ������������ � ��� �� �� �������� !���iple. Recomandarea �� ���� ���� �� �� � et al. (2000), suplimentar oferindu-se suport pentru:

– specificarea evenimentelor: DOM Events; – prelucrarea foilor de stiluri: DOM Style; – traversarea documentelor: DOM Traversal & Range; – viz����� �� ��������2 DOM Views; – prelucrarea documentelor HTML: DOM HTML;

• DOM – ����� � ���� �� ��� ����� ����< ��� � !� !����������� � � ������ !� �� '� �� !����� ������izate. Modulul DOM Core este detaliat în Le Hors et al. (2004).

Alte �� !�� � ���� � �� 43# ��� �� ���� �� #� 9�--�:�

Page 196: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 196

�����+ ������������"��"� ����

În cadrul modelului sunt specificate ��������� care pot fi ulterior utilizate în prelucrarea documentelor XML. Aceste inter���� ��� ���� ����� < �!�� �clasel� ���� ���� �� ���� � �!��8�� �AA ��� �� ������ .���< ��� � �!�������� �� ������ � � �� !����� � � �� ����� �� � � ������!�� � ��� �� �� ������� +�� ������ � !���� � !���!��� ���� ���< �� ����� �< � ������������ �� �� � �� ������< ���� � �������43# ���C� ����� ����!����� � � �� � �� ����� � �� ���������< ��C� �!� �C� �� ������ 43# ��� ���� ����� ������< !���������� ������� �� ���� �������� �� !���!��� ��

Maniera de specificare a in�� ������ �� �������� � �� !���� ��limbaj declarativ – IDL (Interface Description Language), folosit în cadrul !������� �� ����� � � ������ilor distribuite CORBA (Common Object Request Broker Architecture:� ����� �!��8 ������� ��� �� de obiecte prin specificarea inter������ ������ � 9����-!�!� � � !����� ������:< ��� ����� � ��� � !���� �� !������ � n�� !���� �� ������ � ��C��� ������� ���� ��� ������� !��� � ���� � !�����< �� ����<metode, tipuri de ����< �� ����< �&���� � �������� 4���� � �����&� � ��!���� +4� ��� ������� � 3#G�

Tipurile de date IDL sunt grupate în tipuri scalare (întregi: short, ushort, long, ulong; reale: float � double; altele: char, string, octal, boolean, enum), compuse (struct, sequence, union, any: � ��� �� �� ������

5 �&�!��� �� ��������� +4� � ���� � �� ����� � �� �� �� ���� – �!�� NodeList –< ��C� � !����� � � �� ��� 9� �� �����:< ����� !��� ��2 interface NodeList {

// metod� ����� �� ��(���� �� ������ Node item (in unsigned long index);

// atribut folosit doar pentru consultare readonly attribute unsigned long length; };

%&�!����� �� �� � !���� ���� ���� !�� � �� �����i�� � � !���� 9�� ���� Attr provine din Node, iar tipul DOMString e definit în cadrul DOM Core � ����!���� � � �� �� ���� �:2 interface Attr : Node {

�� I ���������� .������/, ����� ����� � �o�� ���� readonly attribute DOMString name; readonly attribute boolean specified; attribute DOMString value; };

Page 197: Sabin Buraga: 'Tehnologii XML

��������� �� 197

�����,� ���� ������������� �2 DOM Core

@������ !������� ������� !���!�� !!���< ����!����� � �� ������ ��� � ������ �� � !����� �� �������� �������� -nod ale unui document.

Structura

DOM reprezin�� ����!����� �� �� � � � �� �� obiecte-nod care, la rândul �� < ��� !���!��� ���� �� ����< ������� !� ����������� ��!�� ��� de noduri pot avea noduri-���� 9��������: �� ��� �� ��� � ������ ���fi noduri-� ���< ����� �� ��������i. Accesul la date – liste de noduri, atri����< ���� � ������ – �� �������� �� !������� ���� �� ������� ��obiectele-nod.

Tipurile fundamentale ale nodurilor DOM sunt prezentate în tabelul 1.

!����� 1 ! -�� �� �� ����� � ���������� ������a

Tip 4������� Document Element, ProcessingInstruction,

Comment, DocumentType DocumentFragment Element, ProcessingInstruction,

Comment, Text, CDATASection, EntityReference

DocumentType -

EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection,

EntityReference Element Element, Text, Comment,

ProcessingInstruction, CDATASection, EntityReference

Attr Text, EntityReference ProcessingInstruction -

Comment -

Text -

CDATASection -

Notation -

Entity Element, ProcessingInstruction, Comment, Text, CDATASection,

EntityReference

�� ���������� ��

+�� ������ ���!�� fundamentale trebuie implementate obligatoriu, conform ���������� 43#� �� ��! � ����� �� ���� !� !�� ���� � ��ntinuare.

Page 198: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 198

+�� ���� DOMException ������� !����!�� �� ����� �� ��� ���&������ � %&������ ��� � � ��!����� �������< �� �&�!��� �C� ���� ���� ���� !����� �� �&������ 9�� �� � �� ����< !���!��� ������� ������ ����:� ��!�� �!��8� �� � �' �!� �< � ���! � ������< � �� !���!���� �������� �� �&������ ��� � !���!��� ��43# � ������ �� �!��8�< ��� �� �� �&������ �� �� ����� ������mecanismele native de semnalare a erorilor.

4���� ���� ! ����� ���� +4� ���� � !���� ��2 exception DOMException {

unsigned short code;

};

���� �� �� �&����� ��� umere întregi indicând ce tip de eroare a ��� ��� ��� � ������� � �� � �� ������� � ������< �� � �� � ���� !�importante sunt sintetizate în tabelul 2.

!����� ) ���������� -� � ���� � �=��-� �� �� -�� ������

Constante predefinite Semnific��� INDEX_SIZE_ERR Valoare de index incorec�� DOMSTRING_SIZE_ERR ��'!� ����� � �� � �� �� ���� � HIERARCHY_REQUEST_ERR +�� � � �� ���� � �� �� WRONG_DOCUMENT_ERR Utilizare de noduri într-un alt document,

diferit de cel la care apar�ineau INVALID_CHARACTER_ERR ��� �� �� �� ���� ���� 9�� �&�!-

���< � ��!����� �� �!� ��marcator)

NOT_FOUND_ERR ;�� �� � �� � �� � � �� ��� �� �unui nod într-un context eronat

NOT_SUPPORTED_ERR +!���!��� �� � ���� �� �acilitatea �� ��� �� �������

SYNTAX_ERR % �� � �� ���&� 9������� �������în DOM nivelul 2)

NAMESPACE_ERR $���� �� �!� �� ��� 9�������������� � 43# ����� �:

VALIDATION_ERR %&����� � ���� � �� ���idare (constan-�� ���o��� � 43# ��lul 3)

TYPE_MISMATCH_ERR @���� � � �� ��� �� ���� 9�������disponi��� � 43# ����� �:

+�� ���� DOMImplementation ��� � !����� ��� � �&����� �� ��� ��ilor � !�� � �������� �� � �� ����� �� ����� � � �� �ocument.

Page 199: Sabin Buraga: 'Tehnologii XML

��������� �� 199

În fapt, nivelu� * � ������� � �� !�������� �� � �� � � �� ���������!��< ���C� !���!����� �� ������� �����abilitate. DOM nivelul 2 ��� �� ������� � !����� ��� � � �� �� �� �� �� ����!�� �� 4�4 � ���� ��� � � �� �� �� ����!��< � ���C��-s� � ������ ��� ���!�� 43# ����� � ��� � � ���� � ���������� ������� ��DOMImplementationList � �� ���� �� !���!��� ������< �� ���������� � �� ��������� �� �� ���� DOMImplementationSource.

3 ���� �� ���� ����!����� ���� DocumentFragment, care poate reprezinta un obiect-����!�� !!��� ; !���� �����< � � ���� ��� ��cu întregul document, ci doar cu diverse fragmente ale sale. Arborele de noduri ale unui fragment de document este un subarbore al structurii de noduri a do��!����� ���� � �� �'�� ��� ; ����� �� �������<DocumentFragment poate reprezenta o entitate XML, un element XML sau chiar un grup de elemente:

interface DocumentFragment : Node {

};

4��� ��! �� �!� ��< DocumentFragment � � �� �� ���� �� ������ ���� Node, pe care o vom prezenta mai jos.

+�� ���� Document �� ���� � ����!�� "#�< ������ual desemnând ����� � �� ��� �� ��� -obiecte ale docu!����� � ��� � ������� ���� !���� ������ �� ������� 4 !�!�� �� ���!����� (marcatorii), ��� �� �� �� ��&�< ��!��� ��< �� ������ �� � ����� � � ��� �&sta � ��� � ����&���� �� ����!��< �� ���� Document ���� ��asemenea metodele necesare pentru a crea aceste obiecte. Obiectele de tip Node ������� �� ��ea un atribut numit ownerDocument, care le va asocia do��!���� � �� �� � ����&� �� ���� � �����

+�� ���� Document are ca membri trei atribute: 1. doctype, de tip DocumentType, �� ���� ����� ��� ����� ��

����!�� 94�4: ������� �� ����!�� �� ��ular. În DOM nivelul 1, acest atribut este declarat read-only, deci nu poate fi alterat.

2. implementation, de tip DOMImplementation, ������� !���!��� �� ��� !���!��� �� ������� ��� � � ����area documentului.

3. documentElement, de tip Element, desemn���� ����- ����� ��accesare a structurii arborescente a documentului.

4 ��� !����� !�� ���� !����!2 • createElement() � ����� � ���!�� "#�L • createElementNS() � ����� � ���!�� "#� ��� �C� ��

����� �� �!� 9!����� ������� � 43# ����� 2 sau superior);

Page 200: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 200

• createTextNode(), createComment(), createCDATASection(), createProcessingInstruction() vor genera noduri-obiect de tip ��&�< ��!��� �< ������ �4���< �� ����� �� � ����� �<respectiv;

• createAttribute() � ����� � ����� �� ��� �� � va fi asociat unui element specificat;

• createAttributeNS() � � ������ �� �� !� ���< �� ��� � �uport ��� � ������ �� �!�L

• getElementsByTagName() �� ��� � � ���� � ����� �� oduri NodeList ��� � ����� ���!����� �� ��������� � �� tag, ordonarea nodurilor realizându-se prin parcurgerea în preordine a arborelui;

• getElementsByTagNameNS() 8���� ������ �� �� !� ���< ���� ���� �������� � � ����� �� ume;

• importNode() !�� �� � �� � ���� � ��� ����!��9!����� � ����� �� 43# �elul 2);

• renameNode() �� !�� ����! �� �� �� 9!����� �������în DOM nivelul 3).

+�� ���� Node ������� � �� � !� ��� � �� �'�� !���� 43#<reprezentând un anumit nod în cadrul arborelui asociat unui document. Atributele nodeName, nodeValue � attributes sunt introduse ca !����! ��� � �� �� �� �� !���� ���� � ��� �� � ���� �� ��tipuri (vi������ � E�!�������F< � �� E� ����� �� �����F:� ,��� � ���� ���� ������� � ���� � ����� ���C� �������� ��< ���� �� bute specificând nodul-�� ��< � !�� � ���!�� ��-copil, da�� �&����

�� !����� � ����C� �� �� �� ��� !���� ���� �� � !��������nodurile-copil:

• insertBefore()permite inserarea unui nod înaintea celui curent; • replaceChild()substituie un nod-copil; • removeChild()��!� � ��-copil specificat; • appendChild()����'� � ��� ��-copil; • cloneChild()������� � ��!� ��-copil; • hasChildNodes()întoarce true ���� �&��� oduri-copil; • hasAttributes()întoarce true ���� ���� � � �� ���� 9!��o��

introdu�� � 43# ����� �:L • isSameNode()întoarce true ���� ���� �� �� � ���� �� � �ltul

�������� 9!����� ��� �� �� 43# ����� �:�

+�� ���� NodeList �� ���� � �� ���� �� � ��� � � �� ���� ��� �� �a����� � �������� � ����� �� ��� < �� � � ��� ��� ��� ���� ��! �� �!���!����� ������ ������� �������� ,��� � !���!����� �� ����� ����� �� ���� ��� ��� �� � �������� #�!� ������� �� �� ������ �

Page 201: Sabin Buraga: 'Tehnologii XML

��������� �� 201

intermediul unui index întreg, numerotarea începând cu valoarea 0. De��� +4� � ������ �� ���� � ���� �� ���� !� ����

+�� ���� NamedNodeMap ���� ������� ��� � �� ����� �� ���� ���� ��������� �� ����� �� ��� < � ���� ��� � �� !���� �!����+�� ���� NamedNodeMap � �� �� � NodeList� 4���� ��� IDL este:

interface NamedNodeMap {

Node getNamedItem(in DOMString name);

Node setNamedItem (in Node arg) raises(DOMException);

Node removeNamedItem (in DOMString name)

raises(DOMException);

Node item (in unsigned long index);

readonly attribute unsigned long length;

// Introduse în DOM nivelul 2:

Node getNamedItemNS(in DOMString namespaceURI,

in DOMString localName) raises(DOMException);

Node setNamedItemNS(in Node arg) raises(DOMException);

Node removeNamedItemNS(in DOMString namespaceURI,

in DOMString localName) raises(DOMException);

};

CharacterData est� � �� ���� �� � �&��� Node �� � ��� �� �� ���� �metode pentru accesarea datelor de tip caracter în cadrul DOM.

+�� ���� Attr �� ���� � �� ��� � ��� �� �� ����� �� �� Element. În mod tipic, valorile permise ale atributelor sunt definite în DTD-ul sau ����!� "#� �� ��������� � ����!������ 5 ����� Attr � �� ����� � �� ��� �� �rborelui de noduri-obiect al documentului. Nodurile de tip Attr ��� ������ �� � �� ���� ��� ���!����� 9!� ���� �� :< ���C� �asociate nodurilor Element ������ �� ������ �� �� DocumentFragment. 4���� +4� � �� ���� ���� �r!���� ��2

interface Attr : Node {

readonly attribute DOMString name; // numele

readonly attribute boolean specifiedC �� ���� � ����� ���

attribute DOMString value; // valoarea

// Introduse de DOM nivelul 2:

readonly attribute Element ownerElement; // proprietarul

// Introduse de DOM nivelul 3:

readonly attribute TypeInfo schemaTypeInfo; // tip de date

readonly attribute boolean isId; // de tip 'ID'

};

Page 202: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 202

+�� ���� Element �� �� � Node � ��� � !����� �� ������ � � �����elor Attr, prin nume sau prin valoare: getAttribute(), setAttribute(), removeAttribute(), getAttributeNode(), setAttributeNode(), removeAttributeNode(). Variantele pri���� � �� � ���� �� ������ ��nume sunt disponibile începând cu DOM nivelul 2. +�� ���� Text este o �� ���� �� ����C� ������� ��&�ual (date de tip � � �� �� ���� �: �� �� �� Element sau Attr� 4��� �� � tag-urile de ������ � �� ��C �� � �&��� ���� tag-� < ��&��� �� � ����� �� -un obiect !���!��C� �� ���� Text. DOM nivelul 3 ��� �� ������� !�����replaceWholeText()< �� � ��������� ������� ��&���� �� ����� �� ��� �� ���� � ��� �� -��&� ������� � ���� �� ���� � ��'� 9���� �������� �� � ��� � ������ �������� �� � � ������ � � �� !�� oduri de tip Element, Comment sau ProcessingInstruction). +�� ���� TypeInfo ���� � ����� �� 43# ����� � � ��������� !���� � ���� � �� ���� �� ���� �� �������� �� ���!��H�� ���conform schemei de validare asociate: interface TypeInfo {

readonly attribute DOMString typeName;

readonly attribute DOMString typeNamespace;

boolean isDerivedFrom (in DOMString typeNamespaceArg,

in DOMString typeNameArg,

in unsigned long derivationMethod);

};

�� ���* ���

$��������� 43# � ���� � � �� � �� �� ���� �&���� 4� �&�!���< ������ �� �� ���� ��� ��� � �� ���� ���� ��� "#�2 ����� �4���< ��� �� �� �����< �� ���� �� � ����� �< ���� ����!��ului etc. (detalii sunt furnizate în Le Hors et al., 2004).

2.4. Extensii oferite de DOM nivelul 2

@����� �� ����� �� !������� �� ���� ������� �&��� ��� �� ������ ������ *< ��� � ���������� �< �� ���������� �� � � �� � �����Document sau de a copia un nod dintr-un document într-altul. De ���!���< �&��� !����� ����!��� � ��� �2 ��� ���� ���� �� ���� 9�$$ * � �$$ �:< � ��� �� ���!����� � ������� �� ��� ��� � �� ��� �� (parcurgeri sofisticate de arbori DOM).

Page 203: Sabin Buraga: 'Tehnologii XML

��������� �� 203

Manipularea foilor de stiluri

43# ����� � ������� � ��� �� �� ���� �� ���� ������� �� �� ����foi de stiluri.

+�� ���� StyleSheet ���� � �� ���� ���� ����< �� ����C� � ���� ������ ���< �&�� �< ������� �� ����!�� �� ���� �� �� � �� �����de procesare.

+�� ���� StyleSheetList ��� � � ������� � �����< ���� ����< �� �� ��stiluri, iar MediaList �� ���� � ���� ����� � � �� ������ � ����� ����� �� !�� 9��! � � ��&�< ���� ��� ����:< �� � � ���� C'�implementarea acesteia. De aseme��< �� ��� �� ������� �� ����DocumentStyle, �� � ������� � !����! �� ������ � � ���� �� ���� asociate unui document (pentru detalii, vezi Wilson et al., 2000).

Suportul pentru evenimente

Scopurile modulului DOM Events 9�&��>< �---: ��� � !���arele: • � ����� �� �� ����! '�� � �� ���!��� �� � �� �� !��2

��� �� ��������� �� �� � �&������� �� ��� �� �� ���!��<descrierea fluxului de evenimente printr-� �� ���� � � �� ������ �oferirea unor informa� ����&����� ��� � ���� � ���!�� �parte. În plus, se concepere un set standard de evenimente pentru ��� ���� �� ���� �� ������� �� � ����� �� !����� �� 9���� ���� �: ��� ����!��elor;

• oferirea unui subset comun al evenimentelor utilizate de naviga-toarele actuale.

43# ���� �� !� !���� � ����� �� ������� � � ���!�ntelor asociate �� �� � ��� �� ������� � !����! �� ������� � � ���!����� ���� � ���� �� � !���!��� � 43# � � ������ � ���!��� $�de�����< �� ���!���< � !����! � �' �!��� �� ������� � � !odului �� ������� � � ���!����� 9�� ����! � � ������ �� ������� :� #�������� ����� �'�� �� �� ����� � ���!����� ��������� �� �� �����marcatorilor, fie prin stiluri sau prin intermediul scripturilor.

; ����< � ���� �� �� �� !�� � �� �� �� !���! �� ���!���<��� �� �� ���� ��������� � ��� �� 43#� #������ ��� � ���� � ��� �eveni!��� ��� �� ���� �� ������� �� � ��� � ��� �� �� ��� ��evenimente privind modi��� �� �� �� ���� � ��� �� ��� � �� ����!���

DOM Events ������� � !���� ��� ��� �� ���!���2 • ���!��� � !�� �� �� ���� �� ������� �� 9��'ator Web):

click, mousedown, mouseup, mouseover, mousemove, mouseout, keypress, keydown, keyup, resize, scroll;

Page 204: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 204

• evenimente de modificare a structurii documentului: subtree-Modified, nodeInserted, nodeRemoved, attrModified etc.;

• ���!��� ��#� 9����� �� ���������� ��#�:2 load, unload, abort, error, select, submit, focus, blur � altele.

$�� � ����� �� ������2 • EventTarget – ����!���� ��� �� � �� � �� � �� ����� ���!����L • EventListener – �� ���� !����!�� � !� �� !����� � �

���!����� < ��C� ������� � !����� �� � ��are a evenimentului survenit;

• Event – es�� � �� ���� ������� �� ��� � �� !�� ����xtuale pentru � ���!��< �� !�� ������� �� � � o���� � �� � ��� � � �����eveniment. Tratarea se poate realiza „în jos” (un anume element va � ��� ���!����� � ����� �� �� ��� ��: ��� E� �us” (eveni-mentul va fi propagat spre nodurile aflate pe nivelurile superioare, ������� �C� �� �����:� %&��� �� ���� �� ivate din aceasta: UIEvent (desem���� ���!����� �� �� ����-utilizator), Mouse-Event 9������� ���!����� ������� �� !����: � MutationEvent 9����!���� ��e!����� � ���� � �� !����� �� �� �� ���� �XML).

��� �%�� �� ���

Modulul DOM Traversal & Range (Kesselman et al., 2000) pune la dispozi���� ������ Iterator, Filter � TreeWalker, care permit parcurgerea �!��� ������� � ���� �� �� < ������ �� o�� ��� ���������� �� �'� �� efectuate asupra documentelor.

Un iterator permite ca nodurile dintr-� �� ���� � �� ���� �� �� ��� ���� !�� ��������� 4��� � �� �� �� �� ��� < � !� ����� � � metodei nextNode() �� ��� � � !�� ��� 4��� � �&��� ��� < ��������� �� �null� 5 �� ��� ����� � ���� � �C� � �� ���� � �� ���� ���� ������9��!��:� 0�� '� �� � ����'� �� �� ���� � �� ����� �� ��� �������

Iteratorii se cre���� � !����� createNodeIterator(). Nodurile de �� �� ��� �� � �������� � �� !���� �� ���� NodeIterator, � ������� în continuare:

interface NodeIterator {

readonly attribute Node root;

readonly attribute unsigned long whatToShow;

readonly attribute NodeFilter filter;

readonly attribute boolean expandEntityReferences;

Page 205: Sabin Buraga: 'Tehnologii XML

��������� �� 205

Node nextNode() raises(DOMException);

Node previousNode() raises(DOMException);

void detach();

};

Atributul whatToShow ��������� ���� �� ���ri care vor fi returnate de iterator: toate nodurile (SHOW_ALL), elementele (SHOW_ELEMENT), texte (SHOW_TEXT), noduri-document (SHOW_DOCUMENT) etc.

5 ��� � ���� � ����� �� �� �� ������� �� � ���� !� �� � ���� �� ��� �� 9������: ��� �. Un filtru este utilizat de un iterator care ����� ��� �� ���� � ���

4��� ��� �� ���'� ����< �� ��� �� �� '� �< � ��C� �� � !��� �� ��disponibil. Filtrele sunt facil de conceput din moment ce nu este necesar a �� ������� �� ���� � �� ���� ���� � �� � � �� ��� �� ,�� ��� ��� � �������� �� ������ � � �adrul altor iteratori.

interface NodeFilter {

// Constante returnate de acceptNode()

const short FILTER_ACCEPT = 1;

const short FILTER_REJECT = 2;

const short FILTER_SKIP = 3;

short acceptNode (in Node n);

};

��!���!��� � �� ���� Iterator, TreeWalker ��� � � � ����� �� �� ������ � ��� �� �� -un subarbore. Navigarea prin nodurile unui do��!�� ������ !����� �� ���� TreeWalker poate utiliza filtre. 4���� +4� ���� �� ���� � ����� �2

interface TreeWalker {

readonly attribute Node root;

readonly attribute unsigned long whatToShow;

readonly attribute NodeFilter filter;

readonly attribute boolean expandEntityReferences;

attribute Node currentNode;

Node parentNode(); // nodul-������

Node firstChild(); // primul copil

Node lastChild(); // ultimul copil

Node previousSibling(); // precedentul frate

5��� ��-2�����(./C �� �������� ��te

Page 206: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 206

Node previousNode(); // precedentul nod

5��� ��-5���./C �� �������� ���

};

2.5. Extensii oferite de DOM nivelul 3

Pentru nivelul 3, DOM Core ��� �� ������� � ��� �� �ate: DOMTimeStamp 9�!� �� !�������:< DOMUserData (date ale �������-utilizator), DOMObject 9 ��� �� �� � ��i���:� �� � �� 43#����� �< �� ��� � ���� � ��� � ������ �� �!� – atributele folosite ��� � ����� � �� ������ �� �!� � ����� ��� � 5�+-ului http://www.w3.org/2000/xmlns/. Sunt intr����� �� ���� � 9� �� ��� ������� !� ���: � ��� �&��� ���� �&������

4� ���!���< ��� � ����� !����� ����!��� �< ���������� �� �ele fiind ilustrate în figura 1.

Figura 1. Modulele specificate de DOM – nivelul 3 (Le Hors et al., 2004)

Deja standardizate sunt modulele: • DOM Load & Save 9$�����( � ��'� < �--): – ��� � �����-

����� ��� � ��� �� �� � ����� ��< � !�� � �� �� ������ ��< � � �� �� 43#L �� �� !� � ��!�� ��� � ��!�!���� ��� �� H����� L

Page 207: Sabin Buraga: 'Tehnologii XML

��������� �� 207

• DOM Validate (Chang et al., 2004) – ��� �� ������� � ��� ���� ���� � ���� � �� �������� �� ��!�� � �������� ��� ���� ����!����� < �� ��'� � �� ������� ������ �L ������������� ��� �������� � !� ���� � ����� �������� ��instrumente pentru crea ��H����� �� 9����!���: � ����!����� XML conformându-se unor scheme de validare;

��/��+"��"� ����

#�8� ����� � ������ ��� "#� ��� ������� �� ������� � ���� � ��documente conform modelului DOM. Nivelul 1 este complet implementat, ce�� !� !���� ������ � ��� � ���� � � ��� � 43# �� � ����� ��

?�! ��!� � � �� �� �� � ��������� � �� ������ �� � �' �!� �disponibile în diverse limbaje:

• domxml – extensie PHP 4 pentru manipularea arborilor DOM; PHP 5 ��� � � !���!��� � 43# ����< ������� � ��� � �mbaj;

• JAXP (Java API for XML Parsing) – �� �� ��' ��� � !����� .�$%<��� � � �� ���� ���� ���� �� � ��esare a documentelor XML prin mai multe metode, folosind diverse procesoare;

• JDOM – �� ���� �� � �' �!� � ������ ���� ��� ��ntru Java; • JSXML – �������� �� � ����� � "#� ��� � �!��8�� .���$� ��L • libxml – �������� �� � ����� � ��� �� �� !���� ' ��� G@3#%<

!���!��� �� � '��� �� �� �� � �!�ajul C, dar aflându-se la baza unor API-uri pentru C++, Perl, PHP sau Python; suportul ��� � � ���� !� "$�� � ��� � �� �������� ������� libxslt; de ���!���< ��� � �������� �� ����� � �� 4�4< "#� $���!� �RELAX NG;

• MSDOM – parte din MSXML SDK (Microsoft XML Software Development Kit), ��� � � ����� "#� �� �� ��� �� ����H�� �� ��< �AA< .$� �� � ?K$� ��< �� ������� �� ���D�< ����'��� �� +�� �� %&��� � � �� �� �� �� �� ������ �$�L ��asemenea, sunt oferite o serie de extensii utile (detalii în Buraga, 2001); imp��!��� �� #$43# ���� ������� � �� 4���� 9�!����fiind furnizate de Wood, 2001);

• QDOM – ��!����� � ��+-��� � ��� =�< ������ � �AA � �� ����C� �� �� � �� �!��� �� �� � �� ��� !���� Q4%L

• XDK – ���� �� ��+-uri oferite de Oracle p�� � � ����� �� �validarea documentelor XML în limbaje precum C, C++, Java ori PL/SQL;

Page 208: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 208

• Xerces DOM API – �� ���� ������ !� "#� ��� � �AA � .������� �� ������� �� ������L

• XmlDocument – ����� ������� � .NET Framework, putând fi ������� �� � ice limbaj .NET (C#, J# , VB.NET etc.);

• XML() – disponibil în ActionScript, în cadrul mediului Flash 9�!���� � ?C ��< �--)< � K� �'�< �--):L

• XML::DOM – modul Perl pentru DOM, bazat pe procesorul Expat; • xml.dom – modul Python, parte a PyXML.

Activitatea �� � ����� � ���� ���!��� � �'� � ��

Figura 2. Maniera de procesare prin DOM a unui document XML

Prelucrarea via DOM a documentelor XML se poate realiza direct în cadrul navigatorului Web, folosind limbajul de scripting suportat: ECMAScript (standard), JavaScript (în Mozilla, Firefox sau Opera), JScript/VBScript (pentru Inter�� %&��� � :� $� ��� '� �� � � ����� �� �validare (e.g., expat:� 4��� ��! ��! ����� � �������� � !��� < �� ��� ����� � ��� � � ����� �� ��� �� � �� !���� "#� ��nform AJAX.

#����� ��� �� ������� � ��!����� DOM Inspector< ���� ��� ������� �� ������ � � �� ��� 43# ������ �� �ocument Web – vezi figura 3.

Page 209: Sabin Buraga: 'Tehnologii XML

��������� �� 209

Figura 3. Componenta DOM Inspector

2.7. Exemple

; ��� �� ������ �����< ��! � ����� ��� �� �&�!����� � ���� � ��� ����� �� ������ "#�< �� '�� � �� �� ����� "#� �< ���'� < ��� ���� !� �� � ����� �� ����!����� "#��

Procesarea documentelor XML

��� ����������������� ������������ ������!"����������#

Pentru început, vom scrie un program C# utilizat la parcurgerea unui ����!�� "#�< � ����� ��� � ���C� ������ � ���� � �� � �������propuse spre implementare la un anumit obiect (vezi cele descrise în �������� �:� 5 !� ! �� ����! �� ������ �� !�� � ���� � �� ���� �

Page 210: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 210

� ���� � �� ��� ��� � � ������� �� � � �� � ������ � � ����� � ��� �atributul class, vom insera valoarea „D”.

using System;

using System.IO;

using System.Xml;

namespace csbXMLTools {

class DOMProcessor { // clasa de procesare via DOM

private static XmlDocument doc;

public static void Main() {

try {

�� ��������� �� ������� 61� ���� � � +n�����

doc = new XmlDocument();

doc.Load("projects.xml");

�� ����(�� � ������ �� ����� � ��������ului

// de inserare a unui nod in arborele DOM

doc.NodeInserted += new

XmlNodeChangedEventHandler(NodeInsertedHandler);

�� � ���� �� ������� (������� ������ ���ument

XmlElement root = doc.DocumentElement;

������'J�������.�2������ �� ���� ��� K��-ul {0}.",

root.NamespaceURI);

������'J�������.�;������� �������� ��� �0BL�'�,

root.Name);

�� � ���� �� ������� ��������� �� �������

XmlNodeList projs =

doc.GetElementsByTagName("project");

foreach(XmlElement proj in projs) {

�� ������� ��� 6��& �������� �����

XmlNodeList titles = proj.SelectNodes("./title");

foreach (XmlElement title in titles) {

Console.Write("Proiect: {0} ", title.InnerXml);

}

�� ���� ���� ���� � ����� ����������

if (proj.HasAttribute("class") == true) {

Console.WriteLine("de clasa '{0}'.",

proj.GetAttribute("class"));

Page 211: Sabin Buraga: 'Tehnologii XML

��������� �� 211

�� ���, ��� ����� �-��#

// proj.Attributes[0].Value;

}

else {

������'J�������.��� ����� ��������u�'�/C

�� �� �-��� ������� �������, +� �����

XmlNode attr = doc.CreateNode( XmlNodeType.Attribute, "class", "");

�� �������, �������� � �� ����� < #/

attr.Value = "D";

�� ����� ����� ���� ����� �����elor

// elementului <project>

proj.Attributes.SetNamedItem (attr);

}

}

} // final de "try"

catch ( Exception e ) {

�� � ����� � �-������

Console.WriteLine("Exceptie: " + e.Message);

return;

}

} // final de program 'principal'

// metoda de tratare a evenimentului de inserare

// a unui nod in arborele DOM

private static void NodeInsertedHandler(Object src,

XmlNodeChangedEventArgs args)

{

Console.WriteLine("A fost inserat un nod de tip {0}.",

args.Node.NodeType);

// salvam, indentat, documentul într-un fi����

�� .����� ���� � �� ������ ������� *�����*/

if (args.Node.NodeType != XmlNodeType.Attribute)

return;

try {

XmlTextWriter writer = new

XmlTextWriter("projects2.xml", null);

writer.Formatting = Formatting.Indented;

doc.Save(writer);

Page 212: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 212

writer.Close();

Console.WriteLine("Documentul XML a fost salvat.");

}

catch ( Exception e ) {

�� � ����� � �-������

Console.WriteLine("Exceptie: " + e.Message);

return;

}

}

}

}

�!���� � �� !���� �� � ����� � "#� � �@%� ��� �� ���� ����� � �� K� ��� 9�--�:< ����� 9�--): � �(�< ���!� � �����(2002).

Procesarea datelor XML în PHP

������ �� ��< !���!����� � ��� ) � ��� 'C� �� �&���� 43#< ����� ������� � � !��� �� �����-�� ��2

�� ��� .��$���, **/C �� ������� �����������

�� ��������� (������ �������� ���� ���������

// a fost modificat

$modified = 0;

�� +������� ��������� 61�

if (!$doc = domxml_open_file(PATH . "projects.xml")) {

��&� ����$ ����� � ����������\n";

exit;

}

�� �������� �����������

$root = $doc->document_element();

�� � ���� �� ������� (������� ������ �������

��&� ����;������� �������� ��� M�C� '

$root->node_name() . "&gt;.</p>";

�� � ���� �� ������� ��������� �� �������

$projs = $root->get_elements_by_tagname("project");

foreach ($projs as $proj) {

�� ������� �������� �����

$titles = $proj->get_elements_by_tagname("title");

Page 213: Sabin Buraga: 'Tehnologii XML

��������� �� 213

foreach ($titles as $title) {

echo "<p>Proiect: " . $title->get_content();

}

�� ���� ���� ���� � ����� ����������

if ($proj->has_attribute("class")) {

��&� � �� ����� � '

$proj->get_attribute("class") . "</p>";

}

else {

��&� � �� ����� ����������'�����;

�� �� �-��� ������� �������, +� �����

�� �������, �������� � �� ����� < #/

$attr = $proj->set_attribute("class", "D");

�� ������ ��������� �� ���� ���� ���

$modified = 1;

}

}

�� ���� ��������� � �� ���� ���, +� � ����

if ($modified) {

$xmldoc = $doc->html_dump_mem();

echo "<pre>" . htmlentities($xmldoc) . "</pre>";

}

?>

���� �&�!��� �� ����� � �� � ����� "#� � ��� ��� ������� �K� �'� 9�--*: � K� �'� 9�--�:�

���� ������!"�$�����

În continuare, dorim �� ���� ��! � ������� �� ����� E�F� ��� � ����sta, ������! � !��� �� � �' �! �� � ��� 'C� �� !������ XML::DOM (detalii în Buraga et al., 2002).

#!/usr/bin/perl

use XML::DOM;

$parser = new XML::DOM::Parser;

$doc = $parser->parsefile ('projects.xml'/C @ +���r���

$proiecte = $doc->getElementsByTagName ('project');

$nr_proiecte = $proiecte->getLength;

D�������E�����$ BC @ ������!��!� ��������� *$*

Page 214: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 214

@ ������� ��� ���������

for (my $i = 0; $i < $nr_proiecte; $i++) {

$proiect = $proiecte->item ($i);

@ ������� ����� ����������

$clasa = $proiect->getAttributeNode ('class')->getValue;

$proiecte_clasaA++ if $clasa eq 'A';

}

@ � ���� �� ������� �������

print "Pentru documentul XML de mai jos:\n";

print $doc->toString;

print "\nSunt $proiecte_clasaA proiecte de clasa A.\n";

@ �������� �������

$doc->dispose();

3 ��� �� � ����� !� ��!���&� ���� � !���� ��< � �� � ��! ����� ����������� � ����� �� ����� ���� �� ������� �� �� � ��� � � ����� ��� ��� �� � �� 43# 9����� � ��> �i McIntosh, 2002). Astfel, vom scrie un pachet Perl în������C� ������������ �� ��� ��� � �!�XML::DOMIterator.pm:

package XML::DOMIterator;

sub new { # constructor

my $class = shift;

my $self = {@_};

$self-�05���L ���� C @ ��������!� ���ul curent vizitat

return bless ( $self, $class );

}

@ +������!� +� ������

sub forward {

my $self = shift;

@ +������� �� ������� �� �������� ����� ��� �rbore

if ($self->is_element and $self->{Node}->getFirstChild) {

$self->{Node} = $self->{Node}->getFirstChild;

} else {

@ ������� �������� ��� ��� ������� �� ��elui

while ($self->{Node}) {

if ($self->{Node}->getNextSibling) {

$self->{Node} = $self->{Node}->getNextSibling;

return $self->{Node};

Page 215: Sabin Buraga: 'Tehnologii XML

��������� �� 215

}

$self->{Node} = $self->{Node}->getParentNode;

}

}

}

# merge cu un nod înapoi în arbore

sub backward {

my $self = shift;

@ ������� ����� �������� �� ������� ���� ��imul nod

# în arbore

if ($self->{Node}->getPreviousSibling) {

$self->{Node} = $self->{Node}->getPreviousSibling;

while ($self->{Node}->getLastChild) {

$self->{Node} = $self->{Node}->getLastChild;

}

} else {

@ �����

$self->{Node} = $self->{Node}->getParentNode;

}

return $self->{Node};

}

# întoarce r� ������ ���� ����� �����

sub node {

my $self = shift;

return $self->{Node};

}

@ �������� ����� �����

sub reset {

my ($self, $node) = @_;

$self->{Node} = $node;

}

@ ����!� ���� ����� ����� ��� ������

sub is_element {

my $self = shift;

return ($self->{Node}->nodeType == 1);

}

1;

Page 216: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 216

Vom parcurge, folosind modulul XML::DOMIterator, un document XML, ���C� �!��� ���!����� � ���� �� ��urilor de tip caracter. Procesorul XML va fi furnizat de modulul XML::LibXML, �� � � � �� ���� ���oteca libxml �!��� � ��c���� ��/� use lib '/home/busaco/perl-libxml';

use XML::LibXML;

use XML::DOMIterator;

@ ��������!�� ���������� �� ��������

my $parser = new XML::LibXML;

my $doc = $parser->parse_file (shift @ARGV);

my $iter = new XML::DOMIterator;

@ ������ �� �� �������� �����������

$iter->reset ($doc->getDocumentElement);

@ � ���� ��� �������� ���������, �� �� ������ �� ������

my $nod = $iter->node;

my $ultimul;

print "De la primul la ultimul:\n";

while ($nod) {

afiseaza ($nod);

$ultimul = $nod;

$nod = $iter->forward;

}

@ � ���� ��� �������� ���������, �� �� ������ �� ������

print "De la ultimul la primul:\n";

$iter->reset ($ultimul);

afiseaza ($iter->node);

while ($iter->backward) {

afiseaza ($iter->node);

}

@ � ����!� �� ������� ������ �� ���

sub afiseaza {

my $nod = shift;

if (ref($nod) =~ /Element/) { # nod element

print "<" . $nod->nodeName . ">\n";

} elsif (ref($nod) =~ /Text/) { # nod caracter

print "\"" . $nod->nodeValue . "\"\n";

}

}

Page 217: Sabin Buraga: 'Tehnologii XML

��������� �� 217

În continuare, �� ! �� �����! ���� �� �� ���� �� �� � ���� �< ������ �� ����!�� �� � � � ��� �� �� ���� �2

<a:carti xmlns:a="urn:infoiasi-ro:carti">

<carte>

<a:autor>Sabin Buraga</a:autor>

��#�����<��(�� $�����&��������#�����

<a:titlu>Utilizare Linux</a:titlu>

</carte>

</a:carti>

Programul Perl are codul-�� �� � !��� 2

�% N�����C @ ������� ������� �� �������� ��� ���� ����

@ ��������!�� ���������� �� ��������

my $parser = new XML::LibXML;

my $doc = $parser->parse_file ('carti.xml');

my $iter = new XML::DOMIterator;

$iter->reset ($doc->getDocumentElement);

$nod = $iter->node;

while ($nod) {

contorizeaza ($nod);

$ultim = $nod;

$nod = $iter->forward;

}

foreach $autor (sort keys %autori) {

���� �$����� D���� � ����ut de $autori{$autor} ori.\n";

}

��� ������!��!� 0 @ ������!�� ��������� *�#����*

my $nod = shift;

return unless ($nod->nodeType == 1);

if ($nod->nodeName eq 'a:autor') {

$autori{$nod->textContent}++;

}

}

Un posibil rezultat este ilustrat mai jos: (infoiasi)$ perl numara_autori.pl

$����� <��(�� $�����&����� � ����� �� ) ���'

$����� 2���� ?���(� � ����� �� I ���'

Autorul Victor Tarhon-O�� � ����� �� 4 ���'

Page 218: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 218

Traversarea documentelor XML în Java

��� � � �!� � �� ������ �� ��������� � ���� � ���!�� �������� ���� �� �� ����!�� "#� ��! ������ � ������ �� �� � .��� *� � $�poate observa utilizarea unei maniere recursive de traversare a arborelui DOM:

import org.w3c.dom.*;

import javax.xml.parsers.*;

// clasa de procesare DOM

public class DOM {

�� ��(�=BP �����!��� K��-ul documentului XML

public static void main (String argv []) {

if (argv.length != 1) {

System.err.println ("Sintaxa: DOM <fisier.xml>");

return;

}

try {

�� ����������...

DocumentBuilderFactory dbf

= DocumentBuilderFactory.newInstance();

DocumentBuilder docb = dbf.newDocumentBuilder();

�� ���(��� ���������� �����������

Document doc = docb.parse (argv[0]);

�� �������� �������� �rborele DOM

traverseaza (doc.getDocumentElement());

} catch (Exception e) {

System.err.println ("Eroare de procesare DOM: ");

e.printStackTrace ();

}

}

�� ��������!� �������� �� ������ <O1

static private void traverseaza (Node nod) {

�� � ���� ������ ��������� �� �� ������,

�� ���� ������� �� ������

if (nod.getNodeType() == Node.ELEMENT_NODE) {

System.out.println ("Elementul '" + nod.getNodeName() +

"' are " + nod.getAttributes().getLength() +

" atribute.");

Page 219: Sabin Buraga: 'Tehnologii XML

��������� �� 219

}

�� �������� ����������'''

Node copil = nod.getFirstChild(); // primul copil

if (copil != null)

traverseaza (copil);

����� ���'(�5�-2�����(./C �� �������� * ���*

if (copil != null)

traverseaza (copil);

}

}

5 !��� �� �&�!��� ��� � � ������� � ��� �� � ��'� .$� 9JavaServer Pages: �� � �� '�� � !� ���� "��#� ��� �C� �� !�� ���� �nodul- ����� �� �� ����!�� "#�2

<%@ page import="javax.xml.parsers.*, org.w3c.dom.*" %>

<%

�� +������� �� �������� �� ������� 61�

DocumentBuilder builder;

DocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance();

builder = factory.newDocumentBuilder();

Document document = builder.parse("cuprins.xml");

�� ������� �����-�������� �� ������ ��� �����

Element root = document.getDocumentElement();

Node text = root.getFirstChild();

%>

<html><body>

<p><%=text.getNodeValue() %></p>

</body></html>

Mai multe detalii despre modul de procesar� "#� ��� �&���� � ��� � � ���! #����'�� 9�--/: � ����� et al. (2003).

Consultarea unui document XML via un program C++

,� ��! � ����� � � � �' �! �AA ������ �������� =� � ��&��� � � '�� � � ������� ' ���� Q4% ���C� ���� � �iectelor. Programul principal, numit main.cpp, are forma:

#include <qapplication.h>

#include "projects.h"

int main (int argc, char **argv) { // programul principal

Page 220: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 220

QApplication a (argc, argv);

Projects project ("projects.xml");

a.setMainWidget (&project);

// ���� ������������ ������� ����������

project.setCaption ("XML -- Procesare DOM în Qt");

project.resize (150, 200);

���3��'�&�H ./C �� '''�� � � ����

return a.exec ();

}

,�� �� ���� projects.h ������� � ����� �� ���� �n controlul ListView � ��������� �� � ����� �� ����!����� "#�� %� �� ���� � ���!�����listei, parcurgând arborele DOM:

#include <qlistview.h>

#include <qdom.h>

�� �� ���� ����� ���3���, ������� ��� �������� ���8��H

class Projects:public QListView {

Q_OBJECT public:

Projects (const QString fileName, // constructorul

QWidget * parent = 0, const char *name = 0);

~Projects (); // destructorul

private:

QDomDocument domTree; // arborele DOM

// metoda de � ����� � �� ���������� ������ �����cte

void getProjectInformation (QDomElement & proj);

};

+!���!��� �� ����� � ������� � ��� �� projects.cpp:

#include "projects.h"

#include <qfile.h>

#include <qmessagebox.h>

// constructorul

Projects::Projects (const QString fileName, QWidget * parent,

const char *name): QListView (parent, name) {

�� ���� �� ������ �� �� G���8��H, ��� ����(� � �������

�� ���� �� ������� �� ������� ��������� �� �����cte

addColumn ("Proiect");

�� '''�� +��� ���, specificând clasele proiectelor

Page 221: Sabin Buraga: 'Tehnologii XML

��������� �� 221

addColumn ("Clasa");

setColumnAlignment (1, Qt::AlignCenter);

��$�� ������2&�H����� .���/C �� ������ ����� ����-ul

�� ���� ��������� 61� �� ����� �������� <O1

QFile projFile (fileName);

if (!projFile.open (IO_ReadOnly)) {

QMessageBox::critical (0, tr ("Eroare fata���/,

tr ("Nu am putut deschide %1").arg (fileName));

return;

}

if (!domTree.setContent (&projFile)) {

G1����(�?�-##������� .B, � .�;����� �����/,

tr ("Eroare de procesare %1").arg (fileName));

projFile.close ();

return;

}

projFile.close ();

�� ������� �� ������� ��� <O1

QDomElement root = domTree.documentElement ();

QDomNodeList projects;

�� ������� ���� �� �������

projects = root.elementsByTagName ("project");

for (unsigned i = 0; i < projects.length (); i++) {

QDomElement node = projects.item (i).toElement ();

getProjectInformation (node);

}

�� ���� ������ �� ������ ������ �� �����

setCurrentItem (lastItem ());

}

// destructorul

Projects::~Projects ()

{

}

�� ����!��!� �� ������� ������ �������

void Projects::getProjectInformation (QDomElement & proj) {

�� ��!��� ��������-copil ale elementului <project>

QDomNode node = proj.firstChild ();

while (!node.isNull ()) {

Page 222: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 222

if (node.isElement ()) {

�� ������� ����'''

if (node.nodeName () == "title") {

QDomText textChild = node.firstChild ().toText ();

if (!textChild.isNull ()) {

QListViewItem *item = 0;

item = new QListViewItem (this, item);

�� ������� ���� ���������� +� ����

item->setText (0, textChild.nodeValue ());

�� ���� ���� ���� � ����� ��� ������� �������

QDomAttr attr = proj.attributeNode ("class");

if (!attr.isNull ()) {

item->setText (1, attr.value ());

}

}

}

}

node = node.nextSibling (); �� �������� * �ate'

}

}

Pentru compilare, vom recurge mai întâi la qxml.pro< ��� -proiect generat de Qt Assistant care va folosi la crearea unui fi�� Makefile: (infoiasi)$ /usr/lib/qt3/bin/qmake qxml.pro

���< ��! ��!��� �� ����< ����C� ��� �� Makefile, iar la final vom executa programul: (infoiasi)$ make

(infoiasi)$ ./qxml

5 ������� �� �� ���� �� ������� �� ���� � ezentat în fi'� � � !�-toare.

Page 223: Sabin Buraga: 'Tehnologii XML

��������� �� 223

� ��� 7 $�������� -������� -� � D/:, ��� �������� 2,3

Traversarea unui document XML prin JavaScript

�� ����� ������ �����< ��! �� � ������ .���$� �� � ���� � �� ���area elementelor unui document XML „scufundat” într-� ��'� ���� ��� �������� ��� '�! �� ������������ DOM 2 Traversal & Range implementate de navigatorul Mozilla Firefox. Vom folosi un obiect de tip TreeWalker în ���� �� �� �� '� ����!����� � ���� � �� � �� � �� ���������re�������� �� �� '� � �����! � �� � ��� �< ���� ��� � ��! ���� ���C���� �� �� �� ���!��� #�� � �� � ����� � � �� !���� �� ���� ����� �� � �� ���� �� ��� �$$ – nivelul 2.

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Traversare via DOM2</title>

<!-- ���������� 22 ����� � ������ ��!������� -->

<style><![CDATA[

div#date { display: none; }

tag {

display: block;

Page 224: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 224

margin-left: 1em;

font-weight: bold;

font-family: sans-serif;

}

tag:before { content: '<' attr(nume) '>' }

tag:after { content: '</' attr(nume) '>' }

text {

display: inline;

font-weight: normal;

font-family: sans-serif;

}

text:before { content: attr(valoare) }

]]></style>

<script><![CDATA[

������ ��������!�./ 0 �� ��������!� �� ������

var pieton; // obiect de tip TreeWalker

pieton = document.createTreeWalker(

document.getElementById ('date'), NodeFilter.SHOW_ALL,

null, true);

�� (���� ����� �� �� ������� ��!����� ����������

var rezultat = document.getElementById ('rezultat');

// copiem arborele rezultat

adaugaArbore (pieton, rezultat);

}

�� ������ ������ �������� ����� ������� ��������� ��!���

�� .�����!� ���������� �� ����/

function adaugaArbore (pieton, destinatie) {

� .�����' ��� &��� .// 0 �� +��� ��� ���� ������(�'''

�� 0 �� (������ ��� �� ��� ����� ������ ��� �������

var nod;

switch (pieton.currentNode.nodeType) {

���� 5���';�;1;5�E5O<;# �� ����� �� ������ ��(�

nod = document.createElementNS (null, "tag");

nod.setAttribute ("nume",

pieton.currentNode.nodeName);

break;

�� ���# �� �� ��, ����� ��-� �� ������� *�������*

nod = document.createElementNS (null, "text");

Page 225: Sabin Buraga: 'Tehnologii XML

��������� �� 225

nod.setAttribute ("valoare",

pieton.currentNode.nodeValue);

break;

}

�� ������� ����� +� �����-�� ����� ����� � �����

�� �� ������(�� �������� ������

destinatie.appendChild (nod);

adaugaArbore (pieton, nod);

} while (pieton.nextSibling());

�� �������� ����� ���������

pieton.parentNode ();

}

}

]]></script>

</head>

<body>

����� ������A���������!�./��$ ����!� ����������������

<!-- va include arborele rezultat în urma parcurgerii -->

<div id="rezultat"/>

<!-- date ce vor fi traversate ('scufundate' în XHTML) -->

<div id="date">

<muzeu xmlns="urn:muzeu.ro">

<tablou id="rmud">

<autor>Ren&#233; Magritte</autor>

<curent>suprarealist</curent>

<titlu>Universul demascat</titlu>

</tablou>

<tablou id="hbjda">

<autor>Hieronymus Bosch</autor>

<titlu>Judecata de apoi</titlu>

</tablou>

</muzeu>

</div>

</body>

</html>

Page 226: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 226

Figura 5. Rezultatul travers�� � /:, – nivelul 2

���������� ����� � � !� � ��� �� ���� ����� "#� � ��� ��� � �� !���� ���� � ���!��� ���� � ������ � �'� � �

�������� �����������������

; ��8���� �� � ����� ��< !������ 43# �� !�� � ����area de foi de ���� "$��� ,��� � ������ !� ��� �!��8 � � � �� ���� �� � �' �!� �������� ������ �������� �� ��! ��!� � �� ���� !� � �cvent folosite:

• libxslt – �������� �� ����� � ������� � ��� �� � �' �!��� �� ��în C, Perl, Python sau PHP;

• Sablotron – �� ���� �� � �' �!� � �AA< ������� � �� �&���� ���9������ xslt_*() din PHP 4), plus de modulul XML::Sablotron pentru Perl;

• Saxon – ��� �� ������� � ��+ .���< ��� � ���� � � ��� ��&����� %"$�� � "$�� ��-L !� !���< � � � ������< �&��� �� �� pentru .NET;

• MSXML – ����� � ��' �� � ������ ��� ��' ��� �� �3#(ActiveX);

• XslTransform – ����� � ������ �� �!� System.Xml, disponibi��în .NET Framework 1.1;

• TrAX (Transformation API for XML) – parte din JAXP, oferit de JDK; • Xalan – ��� � ���������� ��� � ����� �� �� � ���� !� "$�

în C, Perl sau Java pe baza Apache Xerces; • XML::XSLT – modul Perl.

Page 227: Sabin Buraga: 'Tehnologii XML

��������� �� 227

4� ���!���< ��� � � ���� !� "$� �&��� ���� � � � ��� ��navigatoarelor Web actuale, prin intermediul JavaScript (o serie de detalii în Buraga, 2001).

Vom prezenta în continuare diverse exemple.

%��������������"�$���#

Un program C# utilizat la transformarea, via o foaie XSL, a documentelor XML are codul-�� �� �� !� 8��� ����� � �' �! ��� '� �� ���� ��� ��erit de .NET Framework versiunea 1.1.

using System;

using System.IO;

using System.Xml;

using System.Xml.Xsl;

using System.Xml.XPath;

namespace csbXMLTools {

class XMLTransformer { // clasa de transformare

// 'programul' principal

public static void Main(string[] args) {

if ( args.Length == 0 ) { // nu sunt argumente

Console.WriteLine("Sintaxa: xml-transformer

<fisier.xml> <fisier.xsl>\n");

return;

}

// o serie de variabile utilizate

XslTransform xslt = null;

XPathDocument xmlIn = null;

XmlWriter xmlOut = null;

�� +������� �� �������� ��������� 61�

try {

xslt = new XslTransform();

�� +������� ���� �� ������ 62�

xslt.Load(args[1]);

�� ����� �� ����� 6��&<������ ���� �� ����ine

�� ������� 61� ���� � � ���� ����

xmlIn = new XPathDocument(args[0]);

�� ����� �� ����� 6����-J���� ���� �� ����ine

�� ��!����� ���� ������� .� ��� �� ����o��/

Page 228: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 228

xmlOut = new XmlTextWriter(Console.Out);

�� �����!�� ���� �������

xslt.Transform(xmlIn, null, xmlOut, null);

} // final de "try"

���& . ;-������ � / 0 �� � ����� � �-������

}

�����% 0 �� �� ����, ����� *(������*

if ( xmlOut != null ) xmlOut.Close();

}

}

L �� ���� �� �����

}

��� � �� ���� ��- � �@%� ��! ����� �� ������ �� !� 8��< �� � ��� '�la clasele XslCompiledTransform � XPathDocument:

�� ������� � ������ �� ���� ������ �����!��

XslCompiledTransform xslt = null;

�� +������� �� �������� ��������� 61�

try {

xslt = new XslCompiledTransform();

�� +������� ���� �� ������ 62�

xslt.Load(args[1]);

�� �����!�� ���� ������� .������� ������ ������ntului

// din linia de c������, ��� ��!����� �� � �imis

�� �� ������� �������/

xslt.Transform(new XPathDocument(args[0]),

new XmlTextWriter(Console.Out));

} // final de "try"

���& . ;-������ � / 0 �� � ����� � �-������

}

���������������������������-����������������������������&�����"� ���'�

; ���� �� � ����� �!��8�� ���< ����! ��� '� �� ������������ ��� ite de extensia Sablotron ������� � �� �u�� ) � !������ ,���� ��transformare XSL are forma:

function xslt_transf ($xml, $xsl) {

D-� -��E�����./C �� ����� ���������� 62��

$rez = @xslt_process ($xp, $xml, $xsl); // trans �����

if (!$rez) { // o eroare

Page 229: Sabin Buraga: 'Tehnologii XML

��������� �� 229

echo "Eroare XSLT: " . xslt_error ($xp) .

" (" . xslt_errno ($xp) . ")";

return 1;

}

e�&� D��!C �� � ���� ��!����� ���� ����rii

-��E ��� .D-�/C �� �������� �������

return 0;

}

?�! ����� ������� E �����F ��� � � � ���� �� !�� �� -� ���� ������ #>$=�< � '�� � � � �� � 43# �� uia îi vom aplica o transformare XSLT pentr� � ���� � ����� "��#� �� ������� � browser. Baza de ����< �!�� pub< �� ���� � ������ volume ���C� ���� � ���� � �� �� ��3 ��! �� �'� ��� � � ���� ���� � ����� ���� ���� � �� ��� disponibile. Pro' �!�� ��� ) ���� � !��� ��2

<?php

������ �����E������ .D����3/ 0 �� �������!� �����

echo '<p class="eroare">' . $mesaj . '<br />' .

mysql_error () . '</p>';

exit();

}

�� �� ������� �� �������� �� ��!� �� ���

$date = @mysql_connect ("127.0.0.1", "busaco", "parola");

if (!$date) raport_eroare ("Eroare la conectare");

� .:Q�%�R�E�����E�� .�����// �� ������� ��!�

raport_eroare ("Eroare la selectarea bazei de date");

�� �-����� �����(���� 2G�

$rezultat = @mysql_query ("select autor, titlu, colectie

from volume order by titlu");

if (!$rezultat) raport_eroare ("Eroare la interogare");

�� ����� �� ������� 61� �� �������� ������

$doc = domxml_new_doc ("1.0");

$radacina = $doc->create_element ("carti");

$radacina = $doc->append_child ($radacina);

�� ������� ����� �� ����� ��������� ��� <O1

while ($carti =

@mysql_fetch_array ($rezultat, MYSQL_ASSOC)) {

�� ����� ������ ����, (������ ��������� 61�

$nod_carte = $doc->create_element ("carte");

Page 230: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 230

$nod_carte = $radacina->append_child ($nod_carte);

foreach (array_keys ($carti) as $cimp) {

�� ����(�� �� ��� �� �� ������

$nod = $doc->create_element ($cimp);

$nod = $nod_carte->append_child ($nod);

�� ������ ��� +� ������� ���� �������t

// valoarea câmpului preluat din baza de date

$text = $doc->create_text_node ($carti[$cimp]);

$text = $nod->append_child ($text);

}

}

mysql_close();

�� � ���� �������� 61� ��!���

echo '<pre>' .

htmlentities ($doc->dump_mem (TRUE)) . '</pre>';

�� � ����� �� � ���� ������ 62�

$proc = xslt_create();

�� +������� ���� �� ������

$xsl = @domxml_open_file ("carti.xsl");

�� ����� �� ����� ���� �� ������� ���������� 61� �� 62��

// preluate din arborii DOM

$argum = array (

'/_xml' => $doc-�����E��� ./, �� ������� 61�

'/_xsl' => $xsl-�����E��� ./ �� ������� 62�

);

�� � ���� ��!����� ���� ������� 62��

$rezultat = @xslt_process ($proc, 'arg:/_xml', 'arg:/_xsl',

NULL, $argum);

echo $rezultat;

?>

Page 231: Sabin Buraga: 'Tehnologii XML

��������� �� 231

� ��� ? $�������� ������� � ���������� ��� ����� /:,

-���(�� �� � ������ �� � ���-� ��� �� �a�� ���� ����

,��� �� ���� "$�� � � � !���� �� �� ���� � �!���2 <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" omit-xml-declaration="yes"

indent="yes" media-type="text/html" />

<xsl:template match="/">

<xsl:apply-templates />

</xsl:template>

<!-- �������� ����� � ������ �������� -->

<xsl:template match="carti">

<table border="1">

<tr><th>Titlu</th><th>Autor</th><th>Format</th></tr>

<xsl:for-each select="carte">

<!-- ����� ���� �������� �� ���� -->

<xsl:sort select="colectie" order="descending" />

Page 232: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 232

<xsl:sort select="autor" />

<tr>

<td><xsl:value-of select="autor" /></td>

<td><xsl:value-of select="titlu" /></td>

<td><xsl:value-of select="colectie" /></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

����� � �� �� � � �'� � / ��� � ��������� �&����� ���stui script. ; ��� < ���� ��� ��� � � ���� !� ���� ��� � � ��� �� �����

��������� �� � ����� �� 43#�

%��������������"�$�����

Pentru Perl, vom utiliza modulul XML::XSLT !����� !� ��� � �adrul � !��� ��� script CGI:

use XML::XSLT;

use CGI;

@ ������� ������ ����������� . ��� �-�����/

$doc = CGI::param('doc')

�� ���.*������� ������ �����������'*/C

@ ��������!�� ���������� 62��

@ .����� �� �� ������� �� ���rtismentele)

my $xslt = XML::XSLT->new ($doc . '.xsl', warnings => 1);

@ ���� �����

$xslt->transform ($doc . '.xml');

@ � ���� ��!����� ���� �������

print CGI::header();

print $xslt->toString;

@ �������� �������

$xslt->dispose();

5 ����� ������� �� � ���� !� ��������� �� ����� �� �erului � ���transmis browser-ului este ilustrat de figura 7.

Page 233: Sabin Buraga: 'Tehnologii XML

��������� �� 233

� ��� ; $�� ��� ���������� ��� 2�3! � �� script CGI scris în Perl

Utilizarea bibliotecii libxslt. O implementare în C

; ���< ��! �� �� � ������ � �� � ��� '� �� �������� libxslt (d������ � ��� ����� ������� �� ��&:� ��� � ��� �� ������!�����< ��! ����� ������ ��� �� �� libxml:

#include <string.h>

#include <libxml/xmlmemory.h>

#include <libxml/debugXML.h>

#include <libxml/HTMLtree.h>

#include <libxml/xmlIO.h>

#include <libxml/DOCBparser.h>

#include <libxml/xinclude.h>

#include <libxml/catalog.h>

#include <libxslt/xslt.h>

Page 234: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 234

#include <libxslt/xsltInternals.h>

#include <libxslt/transform.h>

#include <libxslt/xsltutils.h>

extern int xmlLoadExtDtdDefaultValue;

// trans ���� �� ������� 61� ��� � ���� 62��

void transforma_xml (char *date_xml, char *date_xsl) {

xsltStylesheetPtr xslt = NULL;

xmlDocPtr xml, rezultat;

�S ���� �� �� �������� �������� S�

xmlSubstituteEntitiesDefault (1);

�S ���� �� �� +������ �������� �-���� S�

xmlLoadExtDtdDefaultValue = 1;

�S �������� ���� �� ������ 62�� S�

xslt = xsltParseStylesheetFile

((const xmlChar *) date_xsl);

�S �������� ��������� 61�, ��!����� �� ������ <O1 S�

xml = xmlParseFile (date_xml);

�S ������� ��!����� ���� ������� .�� �� ���ore DOM) */

rezultat = xsltApplyStylesheet (xslt, xml, NULL);

�S ������ ��!����� �� ������� ������� S�

xsltSaveResultToFile (stdout, rezultat, xslt);

�S �������� ������� S�

xsltFreeStylesheet (xslt);

xmlFreeDoc (rezultat);

xmlFreeDoc (xml);

xsltCleanupGlobals ();

xmlCleanupParser ();

}

int main (int argc, char *argv[]) {

if (argc < 2) {

fprintf (stderr, "%s <doc.xml> <foaie.xsl>\n", argv[0]);

return (1);

}

transforma_xml (argv[1], argv[2]);

return (0);

}

Page 235: Sabin Buraga: 'Tehnologii XML

��������� �� 235

� �' �!�� ����� � ��!���� �� � ��� Makefile ���inând:

NAME = xml-transformer

CFLAGS = `xslt-config --cflags`

LIBS = `xslt-config --libs`

all:

gcc $(NAME).c $(CFLAGS) $(LIBS) -o $(NAME)

Validarea documentelor XML

Un ultim aspect care trebuie prezen��� ���� ��� ��� �� �� !��������� ������� �� #�8� ����� !���!��� �� 43# ��� ���������� �� ��� ������� �� 4�4 ��� � ����!� "#�� #� !���< ���� !���!��� <� ���! ��� � ��� 9������ �� libxml:< ��� � ���� � � ��� � �%��"NG. ?�! � ����� ���� �&�!����� < �������� � �!��8��� �B � ����

(���������������!"�$��)*+%����!���

Pentru început, vom utiliza .NET Framework 1.1, scriind un program C# de validare a documentelor XML prin DTD sau XML Schema. Clasa ��������� �� ��lidarea este for!��� � � !���� ��� �2

class XMLValidator { // clasa de validare a documentelor XML

�� ������� ����3���� ����� �� ��������

// (erori, avertismente,...)

private static int validationMessages = 0;

public static void Main(string[] args) {

�� ������� ���� ��������� .61� 2�&��� ��� <�</

string validType;

if ( args.Length == 0 ) { // n-au fost furnizate argumente

Console.WriteLine("xml-validator <doc.xml> [--dtd|-d]");

return;

}

�� ������� �� ���������� �� ������nte XML

XmlTextReader tr = null;

XmlValidatingReader vr = null;

�% 0 �� +������� �� �������� ��������� 61�

�� ��������� ������� �� ������� 61�

Page 236: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 236

tr = new XmlTextReader(args[0]);

�� ��������� ���������� 61�

vr = new XmlValidatingReader(tr);

�� ���� ���� �� ��������

if ( args.Length >= 2 &&

(args[1] == "--dtd" || args[1] == "-d") ) {

vr.ValidationType = ValidationType.DTD;

validType = "DTD";

}

else {

�� ���� ������� �� �������� ������� 61� 2�&ema

vr.ValidationType = ValidationType.Schema;

validType = "XML Schema";

}

�� ���� � ����� �� ��������� � ������������ (enerate

// de validatorul XML

vr.ValidationEventHandler +=

new ValidationEventHandler (ValidationHandler);

// parcurg�� ��������� 61� �� � ���� �� �������

�� ������ ��������� �� �������� ����

while ( vr.Read() ) {

PrintTypeInfo(vr, "node");

�� � ���� �� ������� ���� ����� �������� ��� ��&��� 61�

if ( validType != "DTD" &&

vr.NodeType == XmlNodeType.Element ) {

while ( vr.MoveToNextAttribute() )

PrintTypeInfo(vr, "attr");

}

}

} // final de "try"

���& . ;-������ � / 0 �� � ����� � �-������'''

}

finally {

if ( tr != null ) tr.Close();

if ( vr != null ) vr.Close();

}

Console.WriteLine("Validarea s-a terminat cu {0}.",

validationMessages == 0 ? "succes" :

Page 237: Sabin Buraga: 'Tehnologii XML

��������� �� 237

validationMessages + " erori");

}

�� ����� �� � ����� � ������ ������ �������� ���orelui

// asociat documentului XML de validat

public static void PrintTypeInfo(XmlValidatingReader vr,

string attrInfo) {

�� ������ ������ �� � ������ �� ����

// a datelor despre atribute & elemente

string prefix = ( attrInfo == "attr" ) ? "* " : "";

string leftDelim =

( vr.NodeType == XmlNodeType.Element ) ? "<" : "\'";

string rightDelim =

( vr.NodeType == XmlNodeType.Element ) ? ">" : "\'";

if ( vr.SchemaType != null ) {

�� ���� ���� �� ��&��� ��� <�< ��� ������ .�emodat)

if ( vr.SchemaType is XmlSchemaDatatype ||

vr.SchemaType is XmlSchemaSimpleType ) {

object value = vr.ReadTypedValue();

// tipul nodului, numele, tipul valorii, valoarea

Console.WriteLine(prefix + "{0} " + leftDelim + "{1}" +

rightDelim + " de tip {2} = \"{3}\"",

vr.NodeType, vr.Name, value.GetType().Name, value);

}

// ���� ��� ��&��� ������-� .��� ��� ���������rii W3C)

else if ( vr.SchemaType is XmlSchemaComplexType ) {

XmlSchemaComplexType sct =

(XmlSchemaComplexType)vr.SchemaType;

�� ���� �������, ������ ������� �� �� ������ ��mplex

Console.WriteLine(prefix + "{0} " + leftDelim + "{1}" +

rightDelim + " de tip {2}", vr.NodeType,

vr.Name, sct.Name);

}

}

}

�� ����� �� ����� � �������� �� ��������

public static void ValidationHandler(object sender,

ValidationEventArgs args) {

Console.WriteLine("Eroare de validare:");

Page 238: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 238

// eroare sau avertisment

Console.WriteLine("\tTip: {0}", args.Severity);

Console.WriteLine("\tMesaj: {0}", args.Message);

validationMessages++;

}

}

3 ��!��� � � ���re în Mono – implementare open source pentru Linux a platformei .NET – ���� � !���� �� 9�� ���� ���� �������� � � �� ���idare ce pot interveni): (infoiasi)$ msc xml-validator.cs

(infoiasi)$ mono xml-validator.exe cuprins-invalid.xml

Eroare de validare:

Tip: Error

Mesaj: XmlSchema error: Required attribute titlu was not found. XML URI: file:///home/ubuntu/cuprins.xml .

Line 2, Position 2.

Element <c:cuprins> de tip cuprinsType

Eroare de validare:

Tip: Error

Mesaj: XmlSchema error: Invalid start element: :necunoscut XML URI: file:///home/ubuntu/cuprins.xml .

Line 5, Position 20.

Eroare de validare:

Tip: Error

Mesaj: XmlSchema error: Invalid end element: c:coordonator XML URI: file:///home/ubuntu/cuprins.xml .

Line 5, Position 35.

Exceptie: an attribute value was not quoted

file:///home/ubuntu/cuprins.xml Line 6, position 19.

#�� ��� � � ���� � ���������� ����� � �%��" @G � � ����� unui mini-procesor XML.

Page 239: Sabin Buraga: 'Tehnologii XML

��������� �� 239

� ��� < ���- ��� � �=���� ��� -����� �E 6� �adrul mediului MonoDevelop

��� � �� ���� �@%� ��-< � ���� �� ����� �&��� ����������folosirii mai multor scheme via clasa XmlSchemaSet. Exemple de cod-�� ��sunt disponibile în directorul C:/Program Files/Microsoft.NET/SDK/v2.0/ QuickStart/howto/doc/xml/, creat la instalarea .NET Framework 2.0.

Validarea documentelor XML în PHP 5

; ��� < ��� � ����� �� ����� �� ��! ��� '� �� !��odele puse la ������� �� ����� DOMDocument� ��� � ����� ���� ! ����!��� "#��&��� schemaValidate()< ����� �� �%��" @G se pot realiza via relaxNGValidate(), iar cele DTD, cu validate(). Exemplul de mai jos ���� ���� !���� �� ����� � �� � ����!� "#�2 <?php

$doc = DOMDocument::load('projects-xsd.xml');

echo 'Documentul este ' .

$doc->schemaValidate('http://localhost/projects.xsd') ?

'valid' : 'invalid';

?>

Page 240: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 240

���+ ��������&�#

3.1. Caracterizare

$����� �� ���� �� � �' �!� � $!��� ��+ �� "#� 9$�": ���� ��� �� ���� � ���� ���� � ���� �� � ����� !����� �� �o��!����� "#�< �� �a necesita ca în prealabi� �� �� ���� �� � �� ��� �� ��� -obiect. Astfel, înainte de a fi efectiv prelucrat, documentul nu trebuie integral stocat în !�!� �� 4� ���!���< � $�" �� ��� �� ������� � !�� ��� ����� � "#� ���������< �� �< � ����� �� ���!��� In�� ���� $�" �� ���� � ��� � ������� �� ����r��� ��� ������� ��� � � � ����� "#� ������ �� ���!�nte. În acest moment, $�" ���� �������� �� ����� � ���� ��< �� ������ �� ��� � �� '� �!���� ������< �� � � ���� � ivit ca o înlocuire a modelului DOM, ci drept o abordare com���!��� �� ������!���< ��� ������� ���� �� �� ��� ���������� $�"2 ��- ��� *�- � �� ��� ��-< !� ��!���&�< ��� � ���� � ��� � ���� ���!� � �&����

3.2. Maniera de procesare

În es���< ���� �� �� ��� �� �������� ����!��ului XML dorit a � � ������< ��� � ���� � �� �� ���� ���� "#� ������� 9������ �� tag, ��C �� �� tag< ����� – text –< �� ����� �� � ����� �< ��!��� � ����: se va „aprinde” un evenimen� �� � �� � � ���� �� � ����� ��� !�����(handler:� ,����� 9!�������: �� � ��� � �� ����i��� �� ��� � � �' �!��� <��� � ���� � �� �� ���� ���� "#� � �� ��� ������< � �' �!�� ����!� � � ������ ���!��� � ����� �� � ���-sorul SAX folosit. #!��< � ���� ����� � !���� ��� ����H!�����2

• ����!�E�(E+����� .procesor, elem, atrib) – va fi ������� �� ��� �� �� tag �� ������ � � � � ��� �� �!�� � ���-�� �� "#� ������< �!��� ���!����� �� �������� tag-��� �lista de atribu�� ��� ������� 9���� �&���:L

• ����!�E�(E� ���� .procesor, elem) – va fi invo���� ��apa �� �� tag �� ���< � '�!����� ��C� ��!������ �� !�sus;

• ����!�E���E������� .procesor, date) – �� � ������� ����� �� �� ���� �� ���� 9��n�nut propriu-zis aflat între marca-�� �� ������ � ��C ��:�

Page 241: Sabin Buraga: 'Tehnologii XML

��������� �� 241

#� �!C� �� �����! ��� � ���� � ���!�� �� ��� i�� � tag-ului de început, a tag-��� �� ��C �� � � ������ -����� ������ �� � ��� � ���� �� ��� � � $�" ��� � ��ntru aceasta do�� ����H!����� �� �� !�2

set_element_handler

( ��������������, tratea��������� ��)

set_character_data_handler ( ������������ ��� )

+!���!��� �� �� ��� �� $�" ���� ��� ������ � ����etul Java org.xml.sax< ��!��� � !� !���� ����� � inter���� �� ����< �� �� � ������� � ����� ����!��� � � ��!��� ����< ����� ���C��-se în cinci grupuri:

1. �� ���� !���!����� �� � ����� �� "#�; analizorul XML se mai ���!���� � SAX Driver;

2. �� ���� !���!����� �� ������� �� � �� ���� �� � elucreze documentele XML via driverul SAX: DocumentHandler, Error-Handler, DTDHandler, EntityResolver pentru procesarea docu-men����< ��� �� �� � � �� < ����� ����� ����� �� ����!��� ������ �� ������� "#�< �������� ����� ������ ����� pot fi ������� ������L

3. clase SAX standard 9�� � ��� � ������� ��C� �� � ������ �< �C� � ��������:2 InputSource, SAXException, SAXParseException �HandlerBase, fiind implementate în întregime de SAX;

4. ����� ������� specifice Java, complet implementate: Parser-Factory, AttributeListImpl � LocatorImpl;

5. clase demonstrative 9� ����< ������ .���:2 � ��� �� �� � ����-������ �� ���� ��� $�" � ��� �� � ��� � � !���!��� $�" �alte limbaje.

+�� ���� �� ���� ���� org.xml.sax.Parser, care trebuie implemen������ ����� ������ ��� "#�< �� !�C� �������� �� � �'�� ��� !��ode de ����� �� ��� �� ��� �� ���!��� � �� ������� � ������ ������� � ����!����� "#� ��� ���� �� 5�+ ��� � � -un flux de caractere.

Inter���� org.xml.sax.DocumentHandler repre��� �� ���� � ������� �� � � ���� �� � !���!����� � ������� ����C� $�"� 4��� ��������� ���� �� �� �� !��� ��upra evenimentelor ce pot interveni în procesul �� �����< �� !���!��� ������� �� ���� � �� ����� � ���n�� � � � intermediul metodei setDocumentHandler în cadrul procesorului SAX. ����� �� �� ����� ����� ��� � � ��� �� ��� �� ���!���< � ���!începu���H��C ���� �� ���!�� "#� 9startElement, endElement), al unei ins� ���� �� � ����� � ���� – vezi mai sus. Ordinea evenimentelor va fi,

Page 242: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 242

� ����< ���� �� � ��� �� ��� �� ���� � ��� ���� ���� ��� �������!����� "#� �� � �� �� ���� � � �������

Clasa org.xml.sax.Locator ���� ������� ��� � ������� �� ��cu-!����� "#� � �� !���� �� 5�+� 4��� � ������� � � ���� ���&���� �� ������� �&�� �< �� ����� ����� �� ������������ ��� �� ��EntityResolver.

?�! ���� � � ����� � � � �� ���� !�� ���� � ������ ��vedere al implementa�� ���� ������ �� ���� ��� ���� �� ������� ��implementarea Apache Xerces.

� !� �� ��� � �� !��������� �� �� � � � ����� � "#�2

public interface XMLReader {

�� ����!��!� ��� ������ ������� �� ����� �� inite

public ContentHandler getContentHandler();

public DTDHandler getDTDHandler();

public EntityResolver getEntityResolver();

public ErrorHandler getErrorHandler();

�� ����!� ������� �������������#

�� ������ �����������

public void setContentHandler(

ContentHandler contentHandler);

// tratarea DTD-ului

public void setDTDHandler(DTDHandler dtdHandler);

�� ������ ���������

public void setEntityResolver(EntityResolver resolver);

// tratarea erorilor

public void setErrorHandler(ErrorHandler errHandler);

// procesarea propriu-!���

public void parse(InputSource in)

throws java.io.IOException, SAXException;

public void parse(String uri)

throws java.io.IOException, SAXException;

}

� ���� �� ���� �� � � ���� �� �� ��� � � �' �!��� ���� ���� ���� � �� !����� �� �������� "#�2

public interface ContentHandler {

public void setDocumentLocator(Locator locator);

�� ������ �� +������� ����������

public void startDocument() throws SAXException;

Page 243: Sabin Buraga: 'Tehnologii XML

��������� �� 243

�� ������ �� ������ ����������

public void endDocument() throws SAXException;

// asocieri de evenimente

public void startElement(String uri, String localName,

String qName, Attributes attributes) throws SAXException;

public void endElement(String uri, String localName,

String qName) throws SAXException;

public void characters(char buf[], int offset, int length)

throws SAXException;

public void processingInstruction(String target,

String data) throws SAXException;

�� �� ������� �����������#

�� ������ ���� �(��������

public void ignorableWhitespace(char buf[], int offset,

int length) throws SAXException;

�� �������� �� ��� �-��� �� ������ �� ����

public void startPrefixMapping(String prefix, String uri)

throws SAXException;

public void endPrefixMapping(String prefix)

throws SAXException;

�� ����� ���� ���� � �(�����

public void skippedEntity(String name) throws SAXException;

}

Cea de-� � �� �� ���� ������ !����� �� �� ����lor:

public interface Attributes {

public int getLength(); // nr. de atrib.

public String getType(int index); // tipul

public String getValue(int index); // valoarea

�� ����� �� �� ��������� ��������� �� ����

public String getQName(int index); // nume calificat

public String getLocalName(int index); // nume local

������ 2���( (�K��.�� ����-/C �� K�� ������ �� ����

�� ����� ��� ������ �� ���� 61�

public int getIndex(String uri, String localName);

public String getType(String uri, String localName);

public String getValue(String uri, String localName);

// acces via nume calificate (ns:nume)

public int getIndex(String qName);

Page 244: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 244

public String getType(String qName);

public String getValue(String qName);

}

3.3. Implemen����

?�! �� �� � ����� � � ���� �� !���!��� $�" ������� �diverse limbaje:

• libxml – ��+ � ������ � !� ���< ��� � ���� � � ��� � $�"L ���� � �� �< �&��� !���!��� � �� �< ��� ��� �>���L

• MSSAX – �� �� � #$"#� $4Q< ��� � � �����ri XML pe partea de �� �� � �< �AA< .$� �� � ?K$� ��L

• org.xml.sax – !���!��� �� .��� �� ��� �� � �� �e�� $�"L • QSAX – parte a API-ului Trillian Qt, disponibil în C++; • SAXDelphi – !���!��� �� ������� � !���� 4���� –

�!���� � 9����< 2001); • Xerces SAX API – �� ���� ������ !� $�" ��� � �AA � .��� ����

�� ������� �� ������L • XML::Parser – modul Perl pentru SAX, bazat pe procesorul Expat; • xml_*() – ���� ��� ������� ��� � � ����� �� � $�" 9����� �

K� �'�< �--*< � K� �'�, 2003); • xml.sax – modul Python, parte a PyXML.

3.4. Exemple

������� ������ �� �� �� � �� � �� �&�!����� �� � �' �!� �� �� ��!��8��� .���< �>��� � �AA� ��� � �� �< ���!���! ������� ����� � K� �'� et al. (2002), iar pentru PHP se poate parcurge Anghel (2005).

O exemplificare SAX în Java

� !�� �&�!��� �� ���� ���� �� � �����< �� �� 'C� �� $�" ��- -cunoscutul document projects.xml. Pentru a memora proiectele deja � �������< ��� '�! �� � ����2

import java.util.Stack;

import java.io.IOException;

import org.xml.sax.*;

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.helpers.XMLReaderFactory;

Page 245: Sabin Buraga: 'Tehnologii XML

��������� �� 245

// clasa de tratare a evenimentelor de procesare SAX

class ProiecteSAX extends DefaultHandler {

private Stack stiva = new Stack (); // stiva de elemente

// metoda de tratare a evenimentului 'început de tag'

public void startElement (String uri, String local,

String qName, Attributes atts) throws SAXException {

stiva.push (new 2���(.R5���//C �� ��������� +� ����

� .R5���'�R���� .����3���// 0 �� � �� ����� $"

System.out.print ("<proiect");

2���( �����C �� � ���� ����� $

clasa = atts.getValue ("class");

if (clasa.equals ("A")) {

System.out.print (" clasa='A'");

}

System.out.print (">");

}

}

�� ����� �� ����� � ������������ *� ���� �� �(*

public void endElement (String uri, String local,

String qName) throws SAXException {

if (qName.equals ("project"))

System.out.println ("</proiect>");

����'��� ./C �� �������� �������� ��� ����

}

�� ����� �� ����� � ������������ *������� �-*

public void characters (char buf [], int offset,

int length) throws SAXException {

O�3�� �� ����'���A ./C �� ������� ��� �� �����

if (!top.equals ("title")) // nu e element 'title'

return;

�� � ���� ��������� �-

for (int i = 0; i < length; i++)

System.out.print (buf[offset + i]);

}

}

// clasa de procesare SAX

public class SAX {

�� ��(�=BP �����!��� K��-ul documentului XML

Page 246: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 246

public static void main (String argv []) {

61������� ����C �� ����������� 2$6

ProiecteSAX cons; // consumatorul SAX

if (argv.length != 1) {

System.err.println ("Sintaxa: SAX <fisier.xml>");

return;

}

�% 0 �� ��������� ���������� 2$6

prod = XMLReaderFactory.createXMLReader ();

L ���& .2$6;-������ �/ 0 �� �-������'''

return;

}

try {

�� �������� ��� evenimentele SAX

cons = new ProiecteSAX ();

�� ������� ������� �� ����� � �����������

prod.setContentHandler (cons);

// stabilim maniera de raportare a erorilor

prod.setErrorHandler (cons);

} catch (Exception e) { // �-������

return;

}

�� ����� ���������� 2$6 .���������� �� ����imente)

try {

prod.parse (argv [0]);

L ���& .�O;-������ �/ 0 �� ���� �-��������

System.err.println ("Eroare I/O: ");

e.printStackTrace ();

} catch (SAXException e) {

System.err.println ("Eroare de procesare: ");

e.printStackTrace ();

}

}

}

Page 247: Sabin Buraga: 'Tehnologii XML

��������� �� 247

3 ������ ��� � � ����� ���� � ��� ������� � !���� ���2 jdk1.5.0>java SAX projects.xml

<proiect>RFCnetS</proiect>

<proiect>RFCnetC</proiect>

<proiect clasa='A'>NetChatS</proiect>

<proiect clasa='A'>CVSnet</proiect>

<proiect>SBiblionet</proiect>

<proiect clasa='A'>Super Proiect</proiect>

Validarea documentelor via SAX. O implementare Python

5 !��� �� �� �� �>��� �� ����� $�" �entru a realiza validarea unei liste de documente XML preluate dintr-un fi�� ��&�2

#!/bin/python

import urllib

import xml.sax

# clasa de tratare a erorilor de procesare

class ErrorReporter(xml.sax.handler.ErrorHandler):

def error(self, exception): # eroare

���� *;����� ������ +� * 9 ��� 9 *# * 9

exception.getMessage()

raise exception

�� ���;����.��� , �-������/# @ ������ ����

print 'Eroare fatala aparuta in ' + url + ': ' +

exception.getMessage()

raise exception

def warning(self, exception): # avertisment

print 'Avertisment aparut in ' + url + ': ' +

exception.getMessage()

@ ������� �������� ����������� �� ������ ����-�� �����

try:

urls = open('uri_de_validat.txt').readlines()

except IOError:

���� *;-������ �� ����&������ ��������� .�-�s�"/*

raise

@ ������(�� ������ K�� (��� +� �����

for url in urls:

url = url.strip()

Page 248: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 248

���� *T������� �� ������� ��������� �� �� ������ * 9

url + '...'

# înc����� ���������

doc = urllib.urlopen(url)

try:

xml.sax.parse(doc, xml.sax.handler.ContentHandler(),

;�����������.// @ ��������'''

except xml.sax.SAXException:

pass

Indentarea unui document XML folosind Qt

Ultimul exemplu va ���� � ��� ���� ����� �� �� ���� $�" ��� � ��-tarea unui document XML. Vom recurge la o implementare C++ folosind �������� =� 9�� ���� �: � ��&� � �' �!�� � ���� � � � !��orul cod:

#include <qfile.h>

#include <qxml.h>

#include <qwindowdefs.h>

#include "xml-indenter.h"

#include "xml-error.h"

int main( int argc, char *argv[] ) { // programul principal

if ( argc < 2 ) {

fprintf( stderr, "Sintaxa: %s <doc.xml>...\n", argv[0]);

return 1;

}

�� ������� ���� ��������� 61� ��� +� ����� �� �������

for ( int i=1; i < argc; i++ ) {

XMLIndenter xmlIndenter;

QFile xmlFile( argv[i] );

QXmlInputSource source( &xmlFile );

QXmlSimpleReader reader;

XMLError error;

reader.setContentHandler( &xmlIndenter );

reader.setErrorHandler( &error );

reader.parse( source );

}

return 0;

}

Page 249: Sabin Buraga: 'Tehnologii XML

��������� �� 249

,����������� �� ���� � ����� � ����� XMLIndenter< �� ���� �QXmlDefaultHandler (prototipul ei este dis���� � ��� �� xml-indenter.h):

class XMLIndenter:public QXmlDefaultHandler {

public:

�� ����!� ���������� �� +������� � ����������

bool startDocument ();

�� ����!� ���������� *+����� �� �(*

bool startElement (const QString &, const QString &,

const QString &, const QXmlAttributes &);

// tratea!� ���������� *� ���� �� �(*

bool endElement (const QString &, const QString &,

const QString &);

�� ����!� �������� ����������� �� �� �-

bool characters (const QString &);

�� ����!� �������� ��������� ���� �� �� ��t ignora

bool ignorableWhitespace (const QString &);

�� ����!� ���������� �� �������� � ����������

bool endDocument ();

private: // date private:

long counter; // contorul de elemente procesate

G2���( �����C �� ����� �� ��������

};

Imp��!��� �� ����� � � ��� � ��� �� xml-indenter.cpp:

�� ����� ���� ����!� ���������� �� +������� � ����������

bool XMLIndenter::startDocument () {

counter = 0; �� �������, ���� �� ������ ��ocesat

indent = "";

return TRUE;

}

�� ����� �� ����!� ���������� *+����� �� �(*

bool XMLIndenter::startElement (const QString &,

const QString &, const QString & qName,

const QXmlAttributes & attrs) {

printf ("%s<%s", (const char *) indent,

(const char *) qName.simplifyWhiteSpace ());

counter++;

indent += " ";

�� � ���� �� �������� .���� �-���/

Page 250: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 250

for (int i = 0; i < attrs.length (); i++) {

printf (" %s=\"%s\"", (const char *) attrs.qName (i),

(const char *) attrs.value (i));

}

printf (">\n");

return TRUE;

}

�� ����� �� ����!� ���������� *� ���� �� �(*

bool XMLIndenter::endElement (const QString &,

const QString &, const QString & qName) {

indent.remove (0, 2);

printf ("%s</%s>\n", (const char *) indent,

(const char *) qName.simplifyWhiteSpace ());

return TRUE;

}

�� ����!� ���������� �� �������� � �����������-text

bool XMLIndenter::characters (const QString & chars) {

printf ("%s%s\n", (const char *) indent,

(const char *) chars.simplifyWhiteSpace ());

return TRUE;

}

// trate�!� ���������� �� �������� � ��������� �lbe

bool XMLIndenter::ignorableWhitespace (const QString &) {

return TRUE;

}

�� ����� �� ����!� ���������� �� �������� � ��o�������

bool XMLIndenter::endDocument () {

���� .�����, �5������ ��� �� ����ente procesate a

fost %d.\n", counter);

return TRUE;

}

#� � ���� !���!����� ����� ��������� �� � ��� �� � � �� <�� ���� � QXmlErrorHandler: �� ����� �� �������!� ������������

bool XMLError::warning (const QXmlParseException & except) {

�� � ���� �� ����� �� ������� ���� � ������� �x������

fprintf (stderr,

"Avertisment '%s' la linia %d (coloana %d).\n",

Page 251: Sabin Buraga: 'Tehnologii XML

��������� �� 251

(const char *) except.message (), except.lineNumber (),

except.columnNumber ());

return TRUE;

}

// ����� �� �������!� ������� �� ���������

bool XMLError::error (const QXmlParseException & except) {

fprintf (stderr, "Eroare '%s' la linia %d (coloana %d).\n",

(const char *) except.message (), except.lineNumber (),

except.columnNumber ());

return TRUE;

}

�� ����� �� �������!� ������� ����

bool XMLError::fatalError (const QXmlParseException & except) {

fprintf (stderr,

"Eroare fatala '%s' la linia %d (coloana %d).\n",

(const char *) except.message (), except.lineNumber (),

except.columnNumber ());

return FALSE; �� �� ����� �� �������� ������area

}

�� ����� ���� �������!� �� ��� (������ �� ������

QString XMLError::errorString () {

return "Eroare de procesare SAX.";

}

3.5. DOM versus SAX

; ��� �� ������ ����� ��! ������ �� �� ��� � ���! E�C� � ebuie ������ $�"1F< E�C� � ���� ������ 43#1F � E�� ������ � ���!�� ��� �� � ���� ���� !�� � �� � ocesare?”.

+�� ���� $�" �� � ������ �� � ���� � �� �� ����!��� �� !� dimensiuni, deoarece arborele asociat documentului nu trebuie construit în me!� �� � ����� �� ����� � �������� � �C� � �� ����� ������� � � �����&��� �� ��� �� ��!��������� ����� 9!�!� � �������< �� '!��� ���� �'���� � ������:� � $�" �� ����� ����� �&� �'� ea de (fragmente de) infor!�� �� !� �!����

#������ 43# ��� � ����� � ��� �� ������ �� -un document XML (de exemplu, pentru a prelua a N-� ��� �� � �� ���!��< � $�" � ������ �� �� ������� ��� �� � ��� ���!�����: � �� � ������ ��tru

Page 252: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 252

����� �� �� ����� ��!���&�< �� � ���� !� �� "$� ��� �� ��� � � � "����� 43# � ���� ������ �C� ��� � ��������� !����� � ����� documentelor XML. De asemenea, DOM poate fi utilizat în contextul � ����� �irect în cadrul navigatorului Web.

��!�� ���< 43# ������ ��� �� �� ��!����� � ����!�ntului XML în ���� �� � ����� ���� �� � �� � �� �� � ��n� ���< $�" ������ ��� �� ���� � � ��� �&����� �� � �'!��� ����� � ����!��< ������ându-se o parcurgere li� � 9� �� ���!���:� +�� ���� $�" ����� � ���������� � '�� � �� �� � �� 43# �< �� �< � �� 43# ��� � � ��� ���pentru a se emite evenimente SAX. În cazul unor structuri XML sofisticate, !���� �� � ����� � $�" ����� � �������� 4��� ��! �! ��zut, unele !���!��� $�" ��� � ���� � ��� � ������� �� �� ����� � � ��-�� !� �

Practic, uzual, se folosesc ambele maniere de procesare XML.

!����� 8 ! �- ��� ��� � -������� ���-�� �� ������������ 2,3 6� � ������ ��9� � -� -����rme diferite

WWiinnddoowwss LLiinnuuxx

DDOOMM SSAAXX DDOOMM SSAAXX

PPyytthhoonn JJaavvaa CC## PPyytthhoonn JJaavvaa CC## PPyytthhoonn JJaavvaa CC++++ PPyytthhoonn JJaavvaa CC++++

1100 mmiiii

44,,8855 226611,,99 00,,6611 11,,1166 00,,6600 00,,2277 66,,1111 227777,,0077 00,,9999 00,,9999 00,,7700 11,,0055

5500 mmiiii

3333,,5588 66220055,,0044 22,,8844 55,,7700 11,,3399 00,,9977 3355,,1111 77447700,,2277 44,,9933 44,,8866 11,,4411 55,,2266

550000 mmiiii

3300665588 EErrooaarree 3377,,5566 5511,,5500 1100,,1188 88,,9911 3322448833 EErrooaarree 5544,,6633 5500,,8811 99,,8888 5522,,8888

Vom oferi în continuare rezultatele unui test comparativ privitor la SAX versus 43#< ���� �� � �-� � ���� ���� �� �� �!� ��� �� ��� � ���unui anumit element în cadrul unui document XML cu structura:

<exemplu> <element id="e1">Elementul 1</element> ... <element id="eN">Elementul N</element> </exemplu>

Am considerat drept valori ale lui N �!� ��� *-�---< -�--- � --�---�

Page 253: Sabin Buraga: 'Tehnologii XML

��������� �� 253

���������� �������< ����� �� ��������� 3�� �� ��< ���� ������� ��tabelul 3 – ��� �� ��� �!� �� �&����� � �� � �' �!� �� �� � !�multe limbaje de programare, rulate pe pla��� !��� ��& � ���D�< ��� 'C� �� � ����� 43# � $�"� � ����� �� 43# � .��� �-a soldat cu � �� � ���� �� ����� �������� �� !�!� � � �� � � �rborelui.

*�������"���������������������#$�

4.1. Preliminarii

%&��� ���� ���� �� ����� � � � ����� ������ �� ���imente: • push – � ����� �� "#� ������ ���� "#� � ����� ���i���� ���� �

evenimentelor survenite (parsing events:� ������� � ���� �� � �����!���< ��� ��� C� ��� ��! ��� � !�� 9E�!���F M push) de ��� � � ����� ;

• pull – ������� ��� ������ !�� � �� � ����� � � ��ate solicita („trage” = pull: �� �� � ����� � !��� �� ��eniment XML. Structura codului-�� �� �� � �' �!��� ������� �� ���� � ����!����� "#�procesat.

+�� ������ � ����� push ��� � � � ����� � read-only (doar pentru consul-tare) a documentelor XML, prelucrarea realizându-se rapid, prin fluxuri de date, eficient din punctul de vedere al memoriei consumate. În acest caz, codul-�� �� �� � �' �!��� ����� � ���� �� ������< ���� �� �&����������� �� � ��� � � ���!����� � +�� ������ �� � �' �!� � � ����� pull �� ���� � �� ������� � �� ����< ��� � �' �!���-client au o struc�� � !��!����

+�� ���� $�" �� ������� �� ����� push< ��� � ���� ���a� � � �� �� ��� ����! ��urge la stilul pull� $����� ���� ��� �� �� ���� �� ���� ��programare, denumite generic XPP (XML Pull Parsing).

4 ��� �&�!��� �� !���!��� "�� ����! !���� kXML 9�����-���� � � ����&��� .�#%:< BEA WebLogic XML Streaming, NekoPull (bazat pe ������ "� ��� � ���!�< !� ��< CyberNeko), XPP (sunt disponibile � � �� ��< ��� � �AA � .���:< XmlPull 9� �� ���� '�� ��< ���� �������� "� ���: � StAX (Streaming API for XML).

; ���� �� � ����� !�� � �� � ����� � � ���!����� < �&��� � ���� �� 2

• cursor – ���!����� ��� ������� � ���< �� � �� ����< � �este creat nici un obiect pentru reprezentarea evenimentului XML ��� ��� +!���!��� �� "!�����< "���< ("#� �< $��" 9�����

Page 254: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 254

�� �� :< �@%� "!���&������ ��� � ����� !�� �e procesare. Se �������� � �� �� '� � ��������� � ����!�����< �� ���� ��cursor ce in��� ����� �� ���L

• iterator – fiecare eveniment XML e reprezentat de un obiect 9!�����< ����� :� �� �� '� �� �� � ������� a�� �� ����� �� ��� L

• ����� – în acest caz, obiectele-���!�� ��� � �������� ����� �� �� 3 ������ �� ��� �� � ���� ��� �� �� @�(�����< "��* � "����

����!C�< � ������ ������� � � � ����� �� "#� ���� � !���� ��2 • modul de accesare: ���!������ sau direct (random); • controlul fluxului: pull sau push; • managementul arborelui: ierarhic sau imbricat.

4 ���� ������ !� ���< 43# ��� � ����� � ���< � ����� pull, iar SAX ��� � ����� ��������< � ����� push. Clasa XmlTextReader � �@%� ��� ���� "�� �� �� �����i�� � ����� �� �� ����� ��������< � ����� pull.

4� ���!���< � ���� !�� � �� � ����� � ���� ��� � E�egarea” (binding: ������ "#� �� � ���� �� �� �� ���� 9�� ���� !� !���� � < � ������ ���� ��������: – ���� �� ���� � �!�� ���� �� framework-uri sau in�� ���� � ���! ����� < S��� � .�"K ��� �� ����� XmlDataDocument oferi�� �� �@%�� +�� ������ �� � �' �!� � �� ����� �� ������� ������ "#�claselor dintr-un limbaj de programare orientat pe obiect (C#, Java, Perl sau ��� :< �� !�C� ��C� ������� ��< �C� � !����� �� ������ �

Conform lui Harold (2005), ele ascund detaliile privitoare la structura ����!����� "#� � � ����� ������ �� ����!��e�� �� ������� ����!��� ����� � � ��� �����< ������ � �� �c�� � � ��� ���< � �� �����mixt, iar ordinea elementelor nu are rele�����

*���������������"���������������"� ������#$�

; ���� �����< � � �� �� � �� � ����!�� 9�� !� �!���: ������� � � ������ � ��� � !�!� �< �� -� !�� � ���������< �� ��� ���� ��� ��� �� �� !������ 43#� ������< ���� � ���!�� "#� � �����corespunde o proprietate a unui obiect, iar atributele asociate pot fi memorate într-un tablou asociativ.

3 ������ �� ��� �� � ���� ���� �� ������� �� !������ XML::Simple ��� � �� � � �� �� ���� Simple XML � ��� < �� � ��� � � !���������� ������� � ���� � �����ului.

Pentru Perl, un exemplu e disponibil în Buraga et al. (2002), iar pentru PHP vom scrie script�� � !��� 2

Page 255: Sabin Buraga: 'Tehnologii XML

��������� �� 255

<?php

$xml = simplexml_load_file( 'http://www.infoiasi.ro/projects.xml');

�� � ���� ����������� ���������� �� ����� $

foreach ($xml->project as $proiecte) {

if ($proiecte['class'] == 'A')

echo '<p>' . $proiecte->desc . '</p>';

}

// similar, dar folosind expresii XPath

foreach ($xml->xpath("//project[@class='A']")

as $proiecte) {

echo '<p>' . $proiecte->desc . '</p>';

}

?>

4.3. Consultarea documentelor XML prin XMLReader

�� �� '� �� �!������� � ����!����� "#� ����� ���� ��� � ��� 'C��� � ���-numit cititor (reader: "#�< ����� ��u!�� � XMLReader – sau XMLTextReader.

Utilizarea din C a bibliotecii libxml

3 !���!��� � ���� ������� � ��� �� ������� libxml< ���� ��! ������� �!� �� � � !��� �� � �' �! �� ������ �� ����� � ����� ����������� � ����!����� "#�< ���C� ��� �� �� ��� 9� ��! !�recurge la tratarea evenimentelor).

#include <stdio.h>

#include <libxml/xmlreader.h>

�S ����!��!� ������ ���� ���, ������� ���� ��� S�

char * furnizeaza_nod (xmlReaderTypes tip) {

switch (tip) {

case XML_READER_TYPE_NONE: return "";

case XML_READER_TYPE_ELEMENT: return "element";

case XML_READER_TYPE_ATTRIBUTE: return "atribut";

case XML_READER_TYPE_TEXT: return "text";

case XML_READER_TYPE_CDATA: return "CDATA";

�S '''�� ���� ����� S�

default: return "?";

Page 256: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 256

}

}

�S ��������!� �� ��� .� ��� �� ������� ������ �� ���/ S�

static void proceseaza_nod (xmlTextReaderPtr procesor) {

xmlChar *nume, *valoare;

nume = xmlTextReaderName (procesor);

if (nume == NULL)

nume = xmlStrdup (BAD_CAST "--");

valoare = xmlTextReaderValue (procesor);

�S � ���� ��� ������ ��� .����, �� �� ���� � ���/ S�

���� .�5���� *N�* ��� �� �� N� �� ��� N�'\n", nume,

furnizeaza_nod (xmlTextReaderNodeType (procesor)),

xmlTextReaderIsEmptyElement (procesor) ? "vid" :

"nevid");

xmlFree (nume);

�S ���� ����� ��� �������, � � ���� S�

if (valoare == NULL) printf ("<fara valoare>\n");

else {

printf ("Valoare: '%s'\n", valoare);

xmlFree (valoare);

}

}

�S ��������!� �� ������� 61� S�

int proceseaza_xml (char *fisier) {

xmlTextReaderPtr procesor;

int ret; /* codul returnat */

�S ��������!�� ������� 61� S�

procesor = xmlNewTextReaderFilename (fisier);

if (procesor != NULL) {

�S �������� +���( ������� S�

ret = xmlTextReaderRead (procesor);

while (ret == 1) { /* mai avem de procesat */

proceseaza_nod (procesor);

ret = xmlTextReaderRead (procesor);

}

�S �����!�� ���������� S�

xmlFreeTextReader (procesor);

if (ret != 0) /* a intervenit o eroare */

Page 257: Sabin Buraga: 'Tehnologii XML

��������� �� 257

fprintf (stderr, "Eroare la procesarea %s.\n", fisier);

}

else

fprintf (stderr, "Eroare la deschiderea %s.\n", fisier);

}

int main (int argc, char *argv[]) {

if (argc < 2) {

fprintf (stderr, "Sintaxa: %s <fisier.xml>\n", argv[0]);

return (1);

}

proceseaza_xml (argv[1]);

return (0);

}

Parcurgerea unui document XML în C#

Implementarea .NET pune la dispozi�� ����� XmlTextReader, ale c�rei metode importante pot fi deduse din fragmentul de program C# furnizat în continuare. Vom realiza indentarea unui document XML:

�� ������ �� ��� ��� �� � ������ ����� �� ��������

private static int indent = 0;

// repr�!��� ����� �� ��������

private static string indentStr = " ";

// cititorul XML

XmlTextReader reader = null;

try {

�� +������� ���������, �(������ �������� ����

reader = new XmlTextReader(args[0]);

reader.WhitespaceHandling = WhitespaceHandling.None;

�� �������� ������� �� � ���� �� ������� ������ ���,

�� +� ������ �� ���� ���

while (reader.Read()) {

switch (reader.NodeType) {

case XmlNodeType.Element: // element XML

WriteIndentStr();

Console.Write("<{0}", reader.Name);

�� � ���� ���������� ������ ��� ������ului

WriteAttributes(reader);

Console.WriteLine(">");

Page 258: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 258

indent++;

break;

���� 6��5����%��'��-# �� ������� �-

WriteIndentStr();

Console.WriteLine(reader.Value);

break;

���� 6��5����%��' <$�$# �� �������� <$�$

Console.Write("<![CDATA[{0}]]>", reader.Value);

break;

case XmlNodeType.Document:// început de document

break;

case XmlNodeType.EndElement:

indent--C �� � ���� �� �(

WriteIndentStr();

Console.WriteLine("</{0}>", reader.Name);

break;

�� �� ���� �����'''

}

} // while

} // final de 'try'

catch . ;-������ � / 0 �� � ����� � �-������'''

}

finally {

if (reader != null) reader.Close();

}

#����� �� ���� � � �� ������ �� ���!�� � � �����2

public static void WriteAttributes(XmlReader reader) {

if (reader.HasAttributes) {

for (int i = 0; i < reader.AttributeCount; i++) {

������'1�����$�����.�/C �� ������� �����ele

Console.Write(" {0}=\"{1}\"",

reader.Name, reader.Value);

}

reader.MoveToElement(); // întoarcere la nodul-element

}

}

Page 259: Sabin Buraga: 'Tehnologii XML

��������� �� 259

Metoda WriteIndentStr() �� ���� ������ � �� �� ���� � ����!����� < ����� � �!CC� �� �&� ��� �mplu pentru cititor. Programul integral e disponibil pe situl dedicat acestui volum.

4.4. Generarea documentelor XML prin XMLWriter

����� �@%� ��������� ��� � '�� � ��< � !�� � ���������< ������� "#� ���� XmlTextWriter 9������������ � ����� ��C� ��� ��� ���� *�*< �C� � ��� � ��-:�

; �&�!���� �� !� 8��< � � ����! �� ���� �! � ����!�� "#�� ��� �� ��!�� ����� �� �� ���� 2

using System;

using System.IO;

using System.Xml;

class XmlWriter {

public static void Main () {

// valorile elementului 'cadou'

string[] cadouri = { "stilou", "obiect>50000" };

StringWriter scriitor = new StringWriter();

XmlTextWriter scriitorXML =

new XmlTextWriter(scriitor);

// stabilim modul de formatare

scriitorXML.Formatting = Formatting.Indented;

// început de document

scriitorXML.WriteStartDocument();

scriitorXML.WriteComment(" Generat de XmlWriter ");

�� �������� � ����������� �� ���������

// pentru foi de stiluri

scriitorXML.WriteProcessingInstruction( "xml-stylesheet", "type='text/xsl' href='cadouri.xsl'");

�� ������� ��������� �����

scriitorXML.WriteStartElement("cadouri");

scriitorXML.WriteStartAttribute("persoana",

"http://undeva.ro/persoane/");

scriitorXML.WriteString("Adria");

scriitorXML.WriteEndAttribute();

Page 260: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 260

foreach (string cadou in cadouri) {

// includem cadourile

scriitorXML.WriteElementString ("cadou",

"urn:mag.ro:produse", cadou);

}

�� ������� �� �� ����� ������!�

scriitorXML.WriteStartElement("cadou");

scriitorXML.WriteCData("<surpriza>");

scriitorXML.WriteEndElement();

scriitorXML.WriteEndElement();

// am terminat

scriitorXML.WriteEndDocument();

�������61�'����&./C �� �������� �� ��-ul intern

�� � ���� �� ������� �������

Console.WriteLine(scriitor.ToString());

scriitorXML.Close();

scriitor.Close();

}

}

+�� �� � �' �!��� ���� 9� ��&�� ������� �� �!� � ecizat se gene- ���� ����!��:2 D:\dotnet>xmlwriter

<?xml version="1.0" encoding="utf-16"?>

<!-- Generat de XmlWriter -->

<?xml-stylesheet type='text/xsl' href='cadouri.xsl'?>

<cadouri d1p1:persoana="Adria"

xmlns:d1p1="http://undeva.ro/persoane/">

<cadou xmlns="urn:mag.ro:produse">stilou</cadou>

<cadou xmlns="urn:mag.ro:produse">obiect&gt;50000</cadou>

<cadou><![CDATA[<surpriza>]]></cadou>

</cadouri>

������ ����������� ���� ��� �� ��� � �� � �� ��� � !odulul XML::Writer 9� �&�!��� �� �'�����e în lucrarea Buraga et al., 2002).

*�!���������������������������� .NET Framework

; ��� �� ������ �����< ��! ��!� � � �� �� �� � �������ile furnizate de clasele .NET privitoare la documentele XML.

Page 261: Sabin Buraga: 'Tehnologii XML

��������� �� 261

; �� ���� ��- ��� ������� � !���� ��� ����� � �����< ��� �C� ������� �� �!� System.Xml � ���� !C��-�� ���������� ���� -���� ��� 9����� � #$4@:2

• XmlTextReader ��� � �� �� '� �� ��������� � �atelor XML (vezi supra);

• XmlNodeReader �� ���������� �� �� '� �������� unui subarbore DOM;

• XmlValidatingReader ���� ��������� �� ���idarea via DTD sau "#� $���!� 9�� ������� � �echiul XDR – XML Data Reduced);

• XmlTextWriter ��� � ���������� '�� � ��������� �� �����XML;

• XmlDocument !���!������ DOM Core – nivelu �� * � �L • XmlDataDocument ��� � � !���!��� � 43# ��ntru un arbore ce

poate fi asociat unui set de date (DataSet) provenind dintr-� �� ���� ���� �������� 9� �&�!��� ���� ������ � K� �'�< �--):L ��facili����� ������ ��' � �� �� �43�@%�L

• XPathDocument ��� � � '� �� cache pentru realizarea de � ���� !� "$�� ���� � �� ����!�� 9� �� ������ �������2.7);

• XPathNavigator ��� � � !���!��� � "���� *�- ��� � �� �� '� ���� ����!�� "#� � ����� �� �� L ����!��� < �� �� �������tea ���� �������� "#�L

• XslCompiledTransform �� ���� � � ����� "$��L • XmlSchema ��� � � ��� �� ����� � ���� � �� ����!��� "#�L ��

��� � ���������� '�� � � � �' �! � �� ����!� "#�L • XmlSchemaSet ��� �� ������� � ����� �� scheme XML

������� � !�!� � � ���� �� ����� �ccelerate via XmlValidatingReader;

• XmlSerializer �� !�� �� ���� �� � ���� ���� �� �������� �XML.

?�! ���� � !�� � �� �� ���� � � ���� ���� � � � -un exemplu. Ne � ����! �� ���! � ����� ���!�� Cadou ��� �� � ����-membre (pro-� ����: �� � �� ������ � �� !�� "#�� ���< �� !���� �� � ���� �-lizate.

using System;

using System.IO;

using System.Xml;

using System.Xml.Serialization;

Page 262: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 262

[XmlRootAttribute("Cadouri",

Namespace="http://www.mag.ro/produse", IsNullable = false)]

public class Cadouri : Object {

public Cadou cadou;

}

������ ����� ���� 0 �� ����� �� �� ������� ������ �������

�� �� � �������!�, �&��� ���� ��� �������� *����*

[XmlElementAttribute(IsNullable = false)]

public int bucati;

�� �� �������!���, �� �� ���� *������* �� �� *�ume'

[XmlElementAttribute("produs")]

public string nume;

// va fi serializat ca un atribut, nu ca un element

[XmlAttribute]

public double pret;

}

class SerializareXML {

public static void Main () {

Cadou unCadou = new Cadou();

// unCadou.bucati = 1;

unCadou.nume = "stilou";

unCadou.pret = 100.50;

Cadouri cadouriAdria = new Cadouri();

cadouriAdria.cadou = unCadou;

SalveazaCadouri (cadouriAdria, "cadouri-adria.xml");

unCadou.bucati = 2;

unCadou.nume = "o carte cu <poze>";

unCadou.pret = 30.25;

Cadouri cadouriMihai = new Cadouri();

cadouriMihai.cadou = unCadou;

SalveazaCadouri (cadouriMihai, "cadouri-sammy.xml");

�� ���������!�� �� �����

XmlSerializer ser = new XmlSerializer(typeof(Cadouri));

�� ������ ������� ���(����

cadouriMihai.cadou.nume = "ceva";

Console.WriteLine("Mihai va primi {0}.",

cadouriMihai.cadou.nume);

Page 263: Sabin Buraga: 'Tehnologii XML

��������� �� 263

// vom citi documentul XML prin XmlReader

Stream flux = new FileStream ("cadouri-sammy.xml",

FileMode.Open);

XmlReader cititor = new XmlTextReader (flux);

// datele deserializate vor fi stocate

// tot de 'cadouriMihai'

cadouriMihai = (Cadouri) ser.Deserialize(cititor);

Console.WriteLine("Mihai va primi {0}.",

cadouriMihai.cadou.nume);

}

�� �������!��!� �� ����� �� ������� 61�

static void SalveazaCadouri(Object obiect, string fisier){

Stream scriitor = new FileStream (fisier, FileMode.Create);

try {

XmlSerializer ser = new XmlSerializer (obiect.GetType());

ser.Serialize (scriitor, obiect);

}

���& .;-������ �/ 0 �� � �-������:

}

finally {

scriitor.Close();

}

}

}

4��� ��!��� �< ��C� � �' �!��< ��! ����2 D:\dotnet>xmlserializer

Mihai va primi ceva.

Mihai va primi o carte cu <poze>.

4���!���� "#� ���C� ������ �� ������ � ���� � �� ����� �� ��#�� �� ���� � !��� �� �����2

<?xml version="1.0"?>

<Cadouri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.mag.ro/produse">

<cadou pret="30.25">

<bucati>2</bucati>

Page 264: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 264

<produs>o carte cu &lt;poze&gt;</produs>

</cadou>

</Cadouri>

De asemenea, cu ajutorul utilitarului xsd.exe putem genera automat codul .NET (în limbaje precum C#, C++ sau JavaScript) al claselor corespun-����� � �� ����!� "#� ���� �� � � �� $� �� !�� � ��� ����� �� ��2pornind de la un assembly ���C� ��� �� ���� � �� �� � ����� ������!�� "#�< �� �� ����� � ����!� "#��

������< ��C� ����!���� �� !� ���< ����!� "#� �� ���� �� xsd.exe ���� � !���� ��2 <?xml version="1.0" encoding="utf-8"?>

<xs:schema id="Cadouri" xmlns="http://www.mag.ro/produse"

targetNamespace="http://www.mag.ro/produse"

xmlns:mstns="http://www.mag.ro/produse"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"

attributeFormDefault="qualified"

elementFormDefault="qualified">

<xs:element name="Cadouri"

msdata:IsDataSet="true" msdata:Locale="en-US">

<xs:complexType>

<xs:choice minOccurs="0" maxOccurs="unbounded">

<xs:element name="cadou">

<xs:complexType>

<xs:sequence>

<xs:element name="bucati" type="xs:string"

minOccurs="0" msdata:Ordinal="0" />

<xs:element name="produs" type="xs:string"

minOccurs="0" msdata:Ordinal="1" />

</xs:sequence>

<xs:attribute name="pret" form="unqualified"

type="xs:string" />

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

Page 265: Sabin Buraga: 'Tehnologii XML

��������� �� 265

; ����� !�!��< ����! ��� '� �� ��������� �� ����� � ���� ��������� �� �@%� ��-< �� � � !��� �� � �' �! �B2

using System;

using System.Xml;

using System.Xml.Schema;

using System.Xml.XPath;

class XMLValid {

static void Main(string[] args) {

try {

XmlReaderSettings setari = new XmlReaderSettings();

�� ��������� � ��&��� �� ��������

setari.Schemas.Add("http://www.mag.ro/produse",

"cadouri-sammy.xsd");

�� ������� �� ���� �� �������� �� �� 61� 2�&���

setari.ValidationType = ValidationType.Schema;

�� +������� ���������, �� ������� �����ului

XmlReader cititor =

XmlReader.Create("cadouri-sammy.xml", setari);

XmlDocument document = new XmlDocument();

document.Load(cititor);

�� ������ ��������� ��� ����(���� 6��&

XPathNavigator nav = document.CreateNavigator();

Console.WriteLine("Validare fara erori.");

}

catch (Exception e) {

������'J�������.�;-������# 0BL�, �'1����(�/C

}

}

// m���� ������������ �� ������� �� ��������

static void SchemaValidationHandler(object sender,

ValidationEventArgs e) {

switch (e.Severity) {

case XmlSeverityType.Error:

Console.WriteLine("Eroare: {0}", e.Message);

break;

case XmlSeverityType.Warning:

Console.WriteLine("Avertisment: {0}", e.Message);

Page 266: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 266

break;

}

}

}

*�/��3������ ���������43$��� �#3$�

%&��� ���� � �� ����� !������� 43#� %&����C� ������ �� ����-!����� � ������� � ���� �� �� ��' �� ��� ���� � !�!� � � ���� ��construirii arborelui (infoset-ului) asociat, alte inconveniente sunt cele ��� ��� � �� ���� ���������� �� ��� ���� �� � � !������� < ����suportului în DOM Core ��� � ��� �� ��< ����� ��< �� ���� �� ���elor XML, la permite �� � �� �� ����!��� � ��� �� !����� � �� �&�����doar a unei singure cla�� � ���� � �� �&����� 4� ���!���< ������ ����� ��� � !������� �� !�!���� �� � < �� � � �&��� ���� � ��� � �interzice alterarea.

Motive�� �&����� ������ ������� ��� ������� �� ������ ��API-�� ���� ������� �� �!��8 9�� ��� � ��� �� ���� ��������� �+4�:< � ���� �� �������� ��C� ��� � "#�< �C� � ��� � ��#�< ��� �� �!��8� �� � � ��� � � ���� � ����� ��tru tipuri de date (e.g., JavaScript).

3 ��� �� � �� �!����� � � �� � !��� � � !������� �� � ������ �.��� '�� ��� ���� ��� ������ �� JDOM, extins apoi de dom4j.

3 ���� ���� �� ���� � ������� �C� ���! ���� "3# 9XML Object Model), o implementare open source .���< ��� �� ������ � �� �������Principiile de proiectare s-�� �&�� �� ������ �� �������� �� ����� ��� ������� �� ��&� "#�< ��������� �� �� !���� �� ��������<!���!��� �� �� �� !i!��� 9���� � < ������ �&��� ��� conduce la ����� �� �� �����a���� ����!��� �:� $�� � ��� ��� ������� � ��� ������� ��� � ����� � �&�!����� < �� ��� ������� �&�!����� ���� ��������� �� "3# � � ,��'� ��� 9�--�:�

������ ��

Anghel, T., Programarea în PHP. Ghid practic� ����� ����� ��� Apparao, V. et al. (eds.), Document Object Model (DOM) Level 1 Specification, W3C

Recommendation, Boston, 1998: http://www.w3.org/TR/REC-DOM-Level-1 Bornstein, N., .NET and XML, O’Reilly, 2003 Buraga, S., Tehnologii Web, Matr�� ��� ���������� ����� http://www.infoiasi.ro/

~busaco/books/web.html

Page 267: Sabin Buraga: 'Tehnologii XML

��������� �� 267

Buraga, S. et al., ���������� �� � �� �� ����� ����� ����� �����http://www.infoiasi.ro/~cgi/

Buraga, S. (coord.), ��������� �� �� � ���� ����� ����� ���4� http://www.infoiasi.ro/ ~phpapps/

Buraga, S. (coord.), ������ �� �� � ���� ������� ������������ �� ���������are, Polirom, ����� ���3� http://www.infoiasi.ro/~busaco/books/webapps/

Chang, B. et al. (eds.), Document Object Model (DOM) Level 3 Validation Specification, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/ DOM-Level-3-Val

Fitzgerald, M., Getting Started with XOM, XML.com, 2002: http://www.xml.com/ pub/a/2002/11/27/xom.html

Harold, E., „XOM Design Principles”, Javapolis 2005 Conference Talk, decembrie 2005: http://cafeconleche.org/slides/javapolis/xom/

Kesselman, J. et al. (eds.), Document Object Model (DOM) Level 2 Traversal and Range Specification, W3C Recommendation, Boston, 2000: http://www.w3.org/TR/ DOM-Level-2-Traversal-Range

Le Hors, A. et al. (eds.), Document Object Model (DOM) Level 2 Core Specification, W3C Recommendation, Boston, 2000: http://www.w3.org/TR/ DOM-Level-2-Core

Le Hors, A. et al. (eds.), Document Object Model (DOM) Level 3 Core Specification, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/ DOM-Level-3-Core

Marini, J., The Document Object Model: Processing Structured Documents, McGraw-Hill, 2002

McLaughlin, B., Java & XML (edi��� � ���-a), O’Reilly, 2006 Pixley, T. (ed.), Document Object Model (DOM) Level 2 Events Specification, W3C

Recommendation, Boston, 2000: http://www.w3.org/TR/DOM-Level-2-Events Ray, E.; McIntosh, J., Perl and XML, O’Reilly, 2002 Robinson, S., Professional C# ������� � ���-a), Wrox Press, 2004 Stenback, J.; Heninger, A. (eds.), Document Object Model (DOM) Level 3 Load and

Save Specification, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/ DOM-Level-3-LS

<������ =# et al., Java de la 0 la expert, Po���� ����� ���4 Vârlan, C., Macromedia Flash� ����� ����� ���3 Wike, A.; Rehman, S.; Leupen, B., XML Programming (Core Reference), Microsoft

Press, 2002 Wilson, C. et al. (eds.), Document Object Model (DOM) Level 2 Style Specification,

W3C Recommendation, Boston, 2000: http://www.w3.org/TR/ DOM-Level-2-Style Wood, K., Delphi Developer’s Guide to XML, Wordware Publishing, 2001 * * *, Apache XML: http://xml.apache.org/ * * *, Comprehensive Perl Archive Network (CPAN): http://www.perl.com/CPAN/ * * *, JDOM: http://www.jdom.org/ * * *, kXML: http://www.kxml.org/ * * *, libxml: http://xmlsoft.org/ * * *, Microsoft Developer Network (MSDN): http://msdn.microsoft.com/

Page 268: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 268

* * *, MSXML: http://msdn.microsoft.com/xml * * *, Object Management Group (OMG) IDL Syntax and Semantics: http://www.omg.org/

technology/documents/formal/corba_2.htm * * *, Proiectul Simple API for XML (SAX): http://www.saxproject.org/ * * *, Sablotron: http://www.gingerall.org/ * * *, Streaming API for XML (StAX): http://jcp.org/en/jsr/detail?id=173 * * *, Sun’s XML Technologies: http://java.sun.com/xml * * *, World-Wide Web Consortium, Boston, 2006: http://www.w3.org/ * * *, XML Object Model (XOM): http://www.xom.nu/

Page 269: Sabin Buraga: 'Tehnologii XML

Capitolul 4

XML pentru servicii Web: SOA, REST, AJAX

„Un om nu ��'� ������� �� ���C� �� �8��� �� ���� �� � � �������” P.D. Uspensky

2����� �� (��� �� �� ��� � �������� �� ���'������ !��e��� �AJAX (Asynchronous JavaScript And XML�� ����� �� ��%�!�� �������(�� ������� �� ��(������ )�*� � ������� ���'�������

aspectelor fundamentale referitoare la serviciile Web. Se vor ilustra, de asemenea, o serie de exemple practice de implementare a scripturilor �9�) ������ �0���������� ������������� �� ����'����# ,� �������� �� (�� ������� � ������� ���� �������� �� ��������� ��������

�� ����������� �� ������� � ��������� 5�0� �� ������ ������ �

lim0�1�� 28� ��� �� �:�#

Cuvinte-cheie� )�*� ������������� �������� 5�0� scripting.

1. Preambul

În prima parte, capitolul expune principalele concep��< �� ���� ��� ��!��8� ������ �� ��!�� "#� � ���� �� �������� �� �� �� ���� $��prezentate premisele instituirii arhitecturii orientate spre servicii, deta-liindu-�� !��������� �� !���!��� � ������� �� �� �� ��� � ��� ��platforme �@%� � !�� � �� ���� � � ������ � �� -un client conceput � �!��8�� �� �� 4� ���!���< �� ��� � �� � �� �� !�� � ���� � ��paradigma REST.

#��� ���� ����� �� � ����'��� � ��������� ��� �� �� ���� ��tehnologii AJAX (Asynchronous JavaScript And XML:< ����� �&��� �� ����� �� �&�!��� ���������< �� � �� ���� ����� � �� !�� � ��

Page 270: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 270

� ����� � � !���!��� � � �������� ����� !������� �.�"� 4����!���< �� �������� � ��!�� ��� �� � �.�" � � ���ctura REST.

������������������� �������������������

2.1. Introducere

Web-�� �� ������� �� !������ �� � �' �!� � ����H�� �� < �are divide �������� �� ���� � ���� !� ����'� 2 �� ��� �� ���� � ��� �� �� �� �� �����< clientul (în cazul nostru, d��!� � ��'��� ��� �'��������� ���: ������ �� �� 9�� !��: �� �� ��!����� server. $� �� �� ������ ����� �� � �� ������ < � �������� ������ ��< �����<HTTP – � �� ������ ���� ���� �� � � !�� ������ �� �� � �� �����

Cal������ �� 9����!�� ��!��������: �� �� � ������ � �� �� ��� ��� � '�������� � �� � �� ��' 9����!���: ��� � ���� – ale unei � '����< ��!�� ��� �� ���� – �� !� �!���� � sit (site:� �������������� ���� � �����< �� ����< ��� � ��!�� �� !�� ��� � ��� ���-puri comune. Mai mult, un server Web poate gestiona simultan mai multe ��� < ��� � ���-numita ��%����� !�r����� (virtual hosting).

4 ������ �� ���� � �� �������< � �� ��� ����� � �sponibil doar în cadrul unui intranet 9 ������ �� � � �� � �� ��!�� ���� '����: �H��� � extranet 9�&��� � � ��������� � ������ � !8��� �� ��!������ �� � � ���� �� � ���� ��� !� !����� '����: 9���alii în Buraga, 2005).

O ��������� ,� �� ���� � ������� �� �������� �� ��' ��� ������� ��!� !��� � ��� � ����������� ������� ������� �� �@��� ��< �� ������ �� � ������� � ���izatori are loc prin intermediul �� �� ���� ���� 4���� < �� !� �� �� � ������� ��� ��� ��������� � ����� ��������< ��� � � ����!� ������ ������� 4 ��� �&�!��� ��apli��� ��� ��� � ��!� ���2 �!���< %&����< G#��< Q� ���<PHPMyAdmin, Wikipedia etc.

� ������ � '�� �� � �� ������ ��� ���� � ������� �n figura 1.

Page 271: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 271

� ��� 1 ���-�������� -� �� -�� �� ��� -� �� #��

�������� ���)��������)��"���������������������

; ���� �� � !����< ��! � ��� � ����� !��������� �� � �' �!� �< ���� ��� �� �� �� < � �������� ����

Standardul CGI

Din punct d� ���� � ��� �< � !� !����� �� '�� � � ��!i�� �� �� �� � �� ����� �� �� ��� �� �������� �� � ���� ��� ������standardul de facto CGI (Common Gateway Interface) (detalii în Buraga, 2001, � K� �'� et al., 2002). Principalele dezavantaje sunt cele privitoare la ���� �� ���� ��� � !� !���� �� ��� �G+< � ����!��� �� ����fiind asi'� � �� ����������< � ��' � �� ���� ������< �� ������ ���-&� � ����&��� ���� 9 ��� :� 4 ��� ����� �� ��� ������ ���� �� caching, includerea suportului pentru CGI di ��� � �� �� �� ��� ������ �� ���-numitului FastCGI.

��������������/(

%������ � ������ �� ��� �� ���� �� ���� �� � �' �!� � ��� ���� ��� �� �� �� � ������< ��� � !������ mod_perl pentru Apache, NSAPI (Netscape Server API: � +$��+ 9Microsoft Internet Services API:< �����C�intern conform modelului CGI.

4� � ������ �� ' �� ���� � ��� �� �� ��� �� ������ ���< � � � ����!� ������ � �!� C��-se ASP (Active Server Pages), ASP.NET (parte ��' ��� � .NET Framework), PHP (PHP: Hypertext Prepocessor: � .$� 9Java Server Pages:� � ������� �����8� ��� ������ � ���� �� ������< �� ����������� �G+< ��� � !���� ���2

• suportul pentru sesiuni; • asigurarea load-balancing-ului;

Page 272: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 272

• conexiunile persistente cu sistemele de baze de date; • suportul pentru template-� �� �� ���� 9�������< ��!�����

Web, skin-� ����!���:L • ��������� ��C� !����� �����L • securitatea.

Vom descrie în continuare caracteristicile comune serverelor de apli������< �� � � � � � �!���� � �� !���� �� � �' �!� � � �&������ �(cititorul interesat poate consulta bibliografia).

5 �� �� �� ������ ��� ��� � ���������� �� � ����� ��� 9�� ��:direct în cadrul documentelor Web, cod invocat pe server. Astfel, se '�� ���� ����� ��!� �� �� ��� �� ��rver, eventual procesându-se un �!� �� �� �� �� ���� – e.g.< ��� � ��&�< ���� �� ����< ����!��� "#�<multimedia etc. – disponibile pe acel server sau pe alte calculatoare. Maniera de includere a ������ !�� �� � ������� ������ � �� '�� ��� �� ����� ������� ������� ����� �� �� �e �� �� ������ �������Drept exemple, putem da <% ... %> ��� � �$�< �$��@%� � .$�< <?php ... ?> în ca��� ��� �< !� '�� ��< <script language= "...">...</script>.

5 �� �� �� ������ ��� ��� �� ������� � ��� � �� �ucru oferind � !���� ���2

• ���������� ����� �� �!��8 ��� � ���� �� �!��8� �� � �-gramare – pentru ASP, se poate recurge la JScript (un dialect %�#�$� ��: � ?K$� ��< �� pretate pe partea de server, iar în cazul ASP.NET, la limbajele .NET oferite (ASP.NET este independent de limbaj, programarea putându-se realiza în oricare dintre limbajele suportate de .NET Framework2 �B< .B< �� ��@%�< ?K�@%� � !����altele). De asemenea, se poate folosi Java (via servlet-� � .$�: ����>��� 9��� � S���:� 4�� ����� ��� ���� �� ��������� � ivind: – tratarea tipurilor de date (strong typed versus weak typed): unele

�!��8�< � ���! ���� �@%� � .���< �� ��� �� �� ��� ����� ��un anumit tip a variabilelor, pe când altele nu (cazul JScript, PHP etc.);

– ����� �� ������ �� �!� � � ������� �� �����L – maniera de raportare a erorilor (ASP, PHP4) în contrast cu

!����!�� �� � ��� � � �&������ 9�$��@%�< .$�< ��� :L – folosirea de �!��8� �� ��������� 9�@%� � .���: ��� ���

��� � ���� � ��� � �� ��'!� � ����� �� ����� 9���:L – maniera de procesare (interpretare sau compilare) – de cele mai

!���� � < �� � ��� � '�� � �� �� ��� �� !��� L

Page 273: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 273

• ��� '� �� �� ������������ ��erite de API-�� �� ���� – aceasta are ��'��� � �� ����� �� E���� F �!��8��� � � ��� ��� �� ��� � 9e.g., ����� �� �� ����H����� � ������:� ; ����� �� !���< �� �����asigura mi' � �� ����� ����� �� �� ������ ������ �� ���� ������� Web-���� ; ����< ��� � ���� �� ������� ������� ��� ��� � ��������� �� ��� ��< �������� � �'� ���� 5 ��� ������ !�� ������� ��� �� ��'� � �������� �� ������ !�� ,���i��������incluse în API-�� �� ���� � � � ��� �� ��esite recompilarea �� �� ��� �� ������ 9����� ��� �� �����:� %&��� ���� !� puncte de vedere: – �&����� �� ������ !� ������ �� ���� � ������

9����� ���< �� �&�!���:< ����� �� ����� �� �! � ��-sistente;

– ��� �� �� �����i de ierarhii de clase, uneori chiar indepen-dente de limbaj (vezi ASP.NET CLR – Common Language Runtime);

• suportul pentru bazele de date – �� ��� � ����� ����� �� ��� ��servere de baze de date, eventual folosindu-�� �� ���� ����� -dizate, precum ADO (Active Database Objects) sau JDBC (Java DataBase Connectivity:� ��� � ���< �&��� ���� � ������ ��� �� ������ �� �� �� � �� ���� �� ����< !�8� ����� ��������< ��biblioteci încorporate (e.g., SQLite � mysqli în PHP5) sau extensii, în plus putându-�� ����� �� ���� 34K�� E�egarea” datelor de codul-program (data binding: ����� � ������� ����!�� 9e.g., ASP.NET) sau manual (PHP). Eventual, se pot folosi framework-uri ������� 9��� � .���< � �&�!��� �� Hibernate);

• suportul pentru �� ������ ��� – pot fi utilizate controale Web disponibile pe server, fie emulând câmpurile din formularele HTML, fie oferind elemente interactive noi (e.g., calendarul). Unele medii, ca ASP.NET – vezi <asp:control> – sau PHP5 via PRADO, permit astfel '�� � �� �� ��� ��#� 9���� .���$� ��: � ����� �������� ���� �$��@%� ��� � � � !���� �� � ����� � ����!����� � ���� �� �� ����< �� !�C� �� � �� �������� ������ �� ���!��� 9event driven Web applications). Pe acest model se baz���� � ���43< !���!���� � ��� � 4�asemenea, se pot folosi unele framework-uri suplimentare oferind suport pentru AJAX;

• ��������� ��� ���� � ����� �� ����!��� "#� – în mod natural, � ���� ���� �� ������� !��������� �� � ���� ��� �� 43# �

Page 274: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 274

SAX, eventual folosind o interfa�� �!������� 9�$��@%� � ��� :���� � ���� ���� � �l�� ��� �� � ����� < � ���! "�� ��� � .������� � � �� �� �� � �� �� �< �� ����� ����� � ����� �� 9��$��@%� � .$� �&��� ����� �� ����� � � ����!� "#� � 4�4:�De asemenea, se pot efec��� � ���� !� "$� � E��'� F ��� ������ (XML data binding:� 3 �� �� �� �� ������ ��� �� !�!���������� ��� �� ���� � ��� � !���!��� �� � ���area de servicii Web;

• recurgerea la medii de dezvoltare – unele sunt deosebit de sofisticate, încadrându-se în una dintre categoriile: comerciale (Delphi, Visual Studio.NET, JBuilder, Zend etc.), gratuite (Eclipse, NVU, WebMatrix � ������:< �� ������ �H���������� 9Q>�&< ?���� ��� 4������� Express etc.). De asemenea, pot fi utilizate diverse depanatoare, ����� � �� ������ �� �&����� 9profilers: � ���!����� � �� ���� $����� ���� � ������� ��� � ���������� �� �� �� ���< ���� ��� �������� �����< ��!����� � ������� �������< ������� în regim comercial, gratuit sau open source;

• suportul acordat inginerilor software – �������� ��� ��� �� ����mai multe ori structurate pe mai multe niveluri (N-tier), unele framework-� ��� �8C� ����� �� ��������� �� � ����� � 9design patterns)L � � � ���� !� ��� ������� ������� �� � ����� � ���!� � Container, MVC (Model-View-Controller), Proxy, Configuration Parameters, Invocation Context ���� 9����� � ���< �--�< ����� �3�� �< �-- < � ?]��� < $��!� � �����< �--�:� 4� ���!���, se poate ��� '� � �� ���� �� ����� � ����!��� 9e.g., JUnit, PHP Unit etc.) 9��� ���< �--�:< � ���� !�� � ���� !������� �� '�� � �����!��� �� ����!����< � ��� �� �� !���L

• �&������ �� ���� ������� – se poate oferi suport pentru dezvoltarea �� ������ ��� ��!���&�2 ���� � �� �� ibutelor unei pagini sau ale unui sit (vizând limbajul, importul de resurse, sesiunile Web, � ��� �� ���!����� < ���� �������� ����:< !���� ���������� �< ��!� ������ 9skin:< ������� �� ��� � (template-uri) ���� �������� ��� ��� ����� � ����� � �� ��!�����< � ���!(Enterprise) Java Beans.

Page 275: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 275

Servicii Web

Premise

4��� ��! �! !� !�����< � '�� � ����� �� ���-ului iau în ����� ��� ������ �� �� ����� �� ��!��� � �� �!�� � interme��� �� ��8� ��������� � �&������ �� ���� ��!������������� �� ������� �� ���������� ��� �� ��������� $� ����� �!� �� ��� ��inter������ �� � �! � ��� �� ������ � �� !���� �� !��� ��� ���< � �� ������ �� � !�� �� �������� � �� ��� �� -� !�� �limita���

4��������� �� ������ ��� �-�� ��� ���!� �� ����� ���� � ��profil au crescut, dorindu-se:

• �&����� �� ����� !���-������ !�< ���� �������� – acestea conduc �� ��' � �� �������� < �� ���� � ����!��� < � ����� ��������'�� ��� ������� 9��� � �����!< *JJJ:� ������� ��' � �� ���� �� �� ������� �� -un mod flexibil, ad-hoc< � ����� ��necesi���L

• ��'� �� �� ' �� ���� �� �� �� !��� � ��'� area scalabi-����L

• � �� �� � �&������ �� �� �� �� �������� 9pluggable: �„inteligente”, software-�� �� ����� � �� !� �� �� ��� � �� ��� ������� !�!�� 9Esoftware as service”) – ��� ����� ���� �capitolul 5. Aceasta pune premisele c����� �� ��� ��� ��servicii de aplica� 9application service provider);

• � ����� �� � 9 �:����� �� �� ����� �� ��� � ����� ���� ���� ��'��� �� ������� ��< �������a���< !������< ����-ri����� � �'�� �� ������ �

Necesitatea unei arhitecturi orientate spre servicii. Caracterizare

Trebuie puse bazele constituirii unei arhitecturi desti��� �������� �������� ��� ���� � ����� �� � ���� $���D� �-ul trebuie divizat în servicii care se pot compune, menite a se conect� � � ����� � � !��spontan în cadrul proceselor de afaceri sau din alte medii (Erl, 2005; He, 2003; Guruge, 2004; Weerawarana et al., 2005). Este o viziune a software-ului bazat pe componente Web (component-based software). 4��'� < �������� ����� � 9E����F< ������: � ���� ��' ��� � ���������� � ������ � ��� � � �� � ���8� n������� �������

$����� ���� ���� �� � !����< ������� ��� �!��� �� � ������ � � �-���� �� � �� �� 9$3� – Service Oriented Architecture). Arhitectura SOA

Page 276: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 276

imp�� ������ �� �� ��� �� �������� � �� ������ ����� ��� � ���servicii ce vor fi invo���� �� ���� ������ 9��� � K���� et al., 2003).

�� �� ��C� � ���'�< ����! ����� � �� ���-�� �� ���� �!�!���� �� ���� ��!���� �� 9EThe Web is the computer”).

������� � ������ � � ����2 • �� ���� �� �� ��'!� �� ��!��� � ������ �� ��� �n� � ������L • �� ��� � � ������� � � ���� ��� � �� ���� L • �� �� !�� ����'� ��< ����� ��< ��!� �� �� ���� � !��

dinamic; • �� ������ ���������� ��� �etaliile de sistem.

Astfel, Web-ul poate fi considerat din acest punct de vedere ca o tehnologie middleware, extensie a unor modele precum CORBA (Common Object Request Broker Architecture) sau DCOM (Distributed Common Object Model) – vezi figura 2.

Figura 2. Conceptele de broker, proxy� �� ��� � ���� � � �� �������� � 6� ���� #��-ului

; !�� �����< ����! !���!��� ������ �� �� ��� ecurgând la script� �G+ ��� ��� �� �� �� � �� ������� +�� ������ � ������������ ���� '� � � !���� ��� ���� !��� 2

Page 277: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 277

• ������� 9�� � �H �����: – ������� �� 9� ���� �� �!�:������� � ��'� � �� !������ � �� � �< �� � ��� �C� � ��'��� �hipertext, fie prin intermediul unui formular; serviciul întoarce un �����< ���� � �� ����� � – �����< !� ���� � ��#� – a resursei solici����� ������< �� ��������� �� �� ����� ������� � ��!������������� ������� ���� �� ������� �� � �� �� ���L

• ���� ������ 9������ �H �����: – ����!��� < �� �� ���������� �&� !� �� �� ��� ����!��� � � ���� �� ��� cererii: �� ���� ������ ���� �� �� ��i����� ��� � � ��� � � �����mai bun.

$� ����� ���� �� �� �� ���� ���< ������C� E� ����F< �&��� ��� ���� �� ������� �� 9�������� � ��#�< � !� �� !�8� ���� � ���� �� : prin in�� !���� �� �� � � ��� �� ������� �� � �� ��� ������� � �� !��� �< ������� �!� � ���� �� �� � ����� ��������� 9labels) ������� �C!�u �� �� ����' ��� � � �� �� ���� ��� � � ����� – se ��'� � �C!�� �� ��&�< ���� �� ����< ������ �� �ip checkbox � radio etc. De ase!���< ������� �!� � ���� �� �� � ����� ������� ��� � ��servi�� � �� �� '� �� ���������� ��� �� ��� � browser a repre-���� 9��#�: �&������ �� �� �� �

��� � � ��������� < ��������� �&���� !� sus sunt dificil de realizat, deoarece programul de interpretare a rezultatului depinde, în mod fragil, de succesiunea de tag-� ��� ��' ��� ���������� 3 �� !����� �<!� � ��� �< � !� ��8elor conduce la rescrierea scriptului de prelucrare a �� ��� �� �� ���� �� �� �� �� ��� 9����� ���!�� � Web/HTML scrapping).

Conceptul de serviciu Web bazat pe XML

$� ���� ��� ������ �� "#� ��� �&����� ���������� !���ite, putând fi ������� � ��� �� �� ���� �� � !��� #� !��t decât atât, pot fi ������ � � ����� �������� a priori � �� ���� �� ���� ������H�� �� Web.

@� �&��� � ����� ��! ��������� � ��������� �� �� ��� �������� ! +K#< �� ���� � ������� !����� � ������ �� ������'��Inter�� !��� � ����� ������� ������� � ���� !C��-se unui �� !�� ���� ������� �� �� ��� $� !������� �� �� ���� ��� ���compo��� �������� ���� �� � ��� ������� � �'�8� ���� �� �� ��������� ��� ��� � � �&����� task-uri complexe peste Internet. Microsoft ����� � �� ���� ��� �� �� �� ��� �� � ����� � � �a���� �� ������(application logic: ������� �� ��� �� � �' �! � ������ �� �����-������� ��� ite de Internet.

Page 278: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 278

Putem vedea serviciile Web ca ansamble complete de tehnologii Web, !���C� ����� �� �� � �������� �� ��!�����< ��C� ������� ��scrieri ��� ������ � ������� � ���� �� ���u �� ���� ������� +���ficarea unui �� ��� ��� �� �������� � �� !���� 5�+-urilor, transferul de date ��� '� � !�� ����� �� ����< � ��� �� �� ���� ��� � ������ ���������se face via XML. Un serviciu Web poate fi considerat ca fiind compus dintr-� ������� �� ���� �!���������< ������ � ��� ������ ��� ��������� � ����ul WWW cu scopul de a fi folosite de alte programe.

4 ��� � ����� �� ���� ��� ��� �� ���� ���!��o�! 9��>��< �--�:2 • ������ ��< � !�� � ������< �� �������� � � -� �� ���L

serviciile Web pot fi considerate ca reprezentând puncte finale (end points: ��� ��!��� �� � !��< �!�� !������� ������ ��protocoalele de transport TCP (Transmission Control Protocol: � 54�(User Datagram Protocol) ale stivei TCP/IP;

• abilitatea de a prelucra orice tip de date, din moment ce datele de intrare sunt documente XML (conforme unei scheme de validare);

• ���������� �� �������� � �� ���� ������ !��� < � ������ �� �limbajelor existente;

• adaptabilitatea (un serviciu Web poate fi extins, utilizând eventual, � !�� � ���� ��< ���� ������ sau in���C� �� C��� ��� ����servicii Web).

$� ���� ��� ��� �� �!��� ��� � � �� �� �� ����!� ��� �����������< �� !�C� � '������ � ���������� �� n������� ��-� ����disponibile pe Web bunurile digitale într-� !�� ��� � ���l (Buraga, 2003b).

+!�� ���� �� ���� ��� ��� � ��' � �� �������� �� ����� �� ���� ���� ���� �� � #��!��� 9�-- :� 3���� �� � ���� � �� � ������ SOA, vor fi disponibile servicii specifice mediului enterprise, privitoare la aspecte legate de:

• ����� – ������� ��< ������� �� � � '��� �� ��������� ���� �� � '�����L

• acces – utilizatorii, via un portal/desktop ��� �� ���� �� ���!C�!8������� �� � �� � � �� �&������ � � �� ���� ��� �������� compuse;

• integrare – ������� �������� �� ������H��!� �� ����� �� ���� !�� ' ��� �� ����� ����D� � ���'���L

• procesare – se vor putea specifica reguli pentru managementul traficului de date (rutare, caching< ��� � � ����: � ����� ��specificul afacerilor întreprinse;

Page 279: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 279

• analizare – ��� �� �� �� ���� � ������ �� ��� � 9���'���: �deciziilor;

• colaborare – �� ����� � ������ � ������ ��� � !��'�!������ ������ � ��!������ �� � ������� 9�!� ��� �: – un exemplu în acest sens este enterprise wiki.

4� ���!���< �� ���� ��� ��� ����� ��� � � �� �!��� �� ����pentru sistemele de tip grid 9��� � ,���� � ����(�< �-- < � $� �'< �-- :�Conceptul de grid � ��� �� � ��!��� ����!��� ��� ���� �� ��a � �� '�� ����!���� � ������ ��� � �� �� �� ������ ��� �� ����� �� ���� ��� ��!���� � !� !���� ��!���� � � ��� �� � '���� +�� �� ����+��� �� ����C� � � ���� � �� � ��� ���� � �� ������ ��� �uit ������� � ������� ������ � ����riale, ulterior tehnologiile grid au ��� � ���� � ��� � ����� �� � �'�� �� �� !���� < ��� �� ��������� �� �� ����� ; � ����< ����� �� ����� ���� ���� � ��� ��dispo��� � �� �� �� ������� ������� �� ������ ������ pe arhitectura grid, recurgându-se la tehnologiile Web actuale. Arhitectura OGSA (Open Grid Service Architecture) extinde serviciile Web pentru a se ����� ������� �� �� �� ���� � ���������� – ��!�� � �������<constituite ad-hoc, disponibile pe ��� � �� '� � �� �� !� ��' – pentru grid. ���� ����� � ����� 9�--): � .���� > � Q����( 9�--):�

XML pentru servicii Web

Vom puncta în continuare principalele componente folosite în invocarea, ��� �� � �'�� �� �� ���� ����

În primul rând, ��� � ��������� �������� �� protocol de comunicare (transport: �� � !�� ��� �'�� �� � �� �������� ������� �� �� !���8��� !�C� �� ������ ��!��e&� �� � ���������� � � ��C� � �����oricât de complex. Mai mult decât atât, trebuie oferit suport pentru asigurarea extensibilit��< ��C��-se în calcul problemele de securitate, �������� � �� �� !��� �� ��� �� ��� ����� � ������ �� � ��� �� ��� ��������� � !����! �� invocare � �� transmitere �� ���� ��� � ������ �

Tre���< ������< '��� � �!��8 ��� � � ��!�� � �� !�� "#� ��� �!�� �� �� � � � � ���� �� �� �������� � !� �� �� �� ����Web invocat.

Principalele protocoale de comunicare utilizate în prezent sunt: • XML-RPC – ��� � � ��������� � � ��� de implemen�� ��� �

����� �� �� ����� �� � ����� �� ������< � �� ���mecanismului RPC – Remote Procedure Call. A fost proiectat pentru a � �C� !� �!���< � ������ �!� ��� �� !�C� � � ��!�� ��<

Page 280: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 280

� ����� �� � eturnarea unor structuri complexe (detalii în Dumbill et al.< �--*:� %&�!��� �� �&������ � ������� ��� ������� �Buraga (2003b);

• SOAP (Simple Object Access Protocol) – �� ���� � ���!��� � ����� ���� ��� ���� �� � #� � 9�--�:< � ���C� �������sofisticate � ��� � � �a���� �� '� �� �������� �� �� ����� �9�� ���� � � ���� ���� �: � ������ ��������� 9��� ������ �K� �'�< �--�< � ������ � K� �'�< �--):� 5 !���8 $3�� � ��!���� � � �� �2 – un plic (envelope: �� � ������� ��� �� �� �ucru pentru a descrie

���� �� ���� !���8�� � !���� �� � ����� � � ������ ������Datele din corpul mesajului pot fi transportate indiferent de protocolul folosit (uzual, e folosit HTTP);

– un set de reguli de codificare (encoding rules) pentru exprimarea ������� ��� �� �� ���� ����� � �������L

– o ���!����� �� �����%������ (representation) a apelurilor de metode !���!����� �� �� ���� ��� � ������ �� �� ���� �� !� ���� ������ ��

4� ���!���< $3�� ����� ������� � � ���� �� �a expeditor la destinatar, via un intermediar (proxy: ������< � ���� �� ����� ��� 8� �� !���8� 9SOAP routing:� 3 � �� � 9�&�����: � ���� � �������������� �� ����� ���� ��!����� � � -un mesaj special, denumit SOAP fault.

SOAP poate fi privit din mai multe perspective. Prima ar fi aceea în care ����� �� ����� � �&��� � ��������� � �� ��'!� ���2 �� � �� � ������� ��� �� �!�� �� � � �H�� �< ����!��� �iind indicate, via XML Schema, tipurile de date ale acestora. A ���� ����� � $3�� �� ��un protocol de mesagerie (serializare), cererea incluzând un obiect-cerere �� �����< � ������� ��������� � �����- ����� �� ������ ��� ��-al treilea punct de vedere admi�� � � ������ $3�� �� �� � � ���� !� �XSLT la distan�� 9EXSLT with a long wire”): cererea este un document XML, � �� �� �� ��� ����< �� ������� �� ���� �� �����< � �� ���� ���� !��� � �� � � 4��'� < � �� �� � ������ ��� �� � ����!���� �� � ��ocol.

În vederea exploa�� ������������ ���� �� ������� �� � �� ������ � ���� ��� �� � ���� � � � �������� ��� � ��������� �� limbaj de descriere< !�� � ������ �� �� ��� � ���! E�� � � ���&� !���8��� ���������1F< E��! �� �������� � � ���� �� �� ����1F � E��! '��! �serviciu Web?”.

Page 281: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 281

$����� ���� �� ���� �� �$4� – Web Service Description Language (Chinnici et al.< �--�L K���� � ��< �-- :� �!��8�� �� !�� ���� � ������ � ���� ���� � ���������� ��� �� �� � �� ��� �� �������c�� ��� 9�� ���� E��!F � E���F ���� ������� ���� �����������:�WSDL descrie serviciile Web începând cu mesajele interschimbate între ������� �� � ��� � � ��� �� � ���� � ��!� �� ���� #���8��� ���E��������F � !�� � ���� ���� � ��oi sunt asociate unui protocol de ����< � ���C��-�� �� ���!��� � � �� !�� 9� ���&�:� 5 !���8 �����dintr-� ������� �� ���� �� ��!�� ��� < � ���!��� �� !���8� �������� � �� � ��� ���� ��� �� �� ���� �� ������ �� ����!� "#�< �� ��l conceptual folosindu-se un model de date reprezentat printr-un set de componente – !���8< �� �< !�� � �� ����� �< �� ��� – având specificate ��� �� � �� ����� �� ivel sintactic, se recurge la XML.

Figura 3. Maniera de interogare a registrului UDDI

��� � ��� � �� ��2 ���� �� �� !����! ��� � ������ �� � �'�� ��< � !�� � ������< � �� �� ��� ���� %��� ����� �� ���!�� ����������� ��� �� �� � ' �� �� �� �� ��� �� ����� � �'���� � �� !���� �� �� �'� formulate de partea care �������� �� ���������� ���� �������itate.

Page 282: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 282

Pentru aceasta, s-a constituit un catalog al tuturor furnizorilor de servicii ��� ������ � ���� �� �'�� �� !���� �orite: UDDI – Universal Description, Discovery, and Integration< ��� � � ���� �� ���� ��� ���� �serviciilor Web din prisma tipurilor de afaceri electronice pe care acestea le ��� !������ 5����< ����� �� � ��� �� 544+ �� �������� � ����� ������� � �� � ���� �� �� ����� ��< ���� � �!� �� �� ��� ��� ���������� '��' ���� � �� �� ului. Detalii sunt furnizate la adresa www.uddi.org.

,����������� �� ����� � ��� !���!����� �� �� �� ���< ��������C� ������� �� �'�� �� 544+ �� �������� � �� !���� � ���������SOAP descris ma ���� 544+ �� ��� �� ������� ����!���� �$4��� �������� �� �� ��� ��!����� �� �� � �� �� !������

Figura 4. Nivelurile de standardizare a serviciilor Web

$���!��� < ������!��� ��� ������� � �� � �� �������� ������ ����ale privitoare la:

• modul de adresare: WS-Addressing; • ������ � ������� �2 WS-Inspection, WS-Discovery; • mesagerie: Reliable HTTP (HTTPR), WS Attachments, WS-Routing

etc.; • ���� ���� � ���� �� �2 WS-Security, WS-Trust, WS-Policy � ������L • procesarea � ������� 2 WS-Coordination, WS-Transaction; • ����� �� �� ���� �� ������� ��2 Web Services for Remote Portlets

(WSRP), Web Services for Interactive Applications (WSIA); • ��'� � �� �� ��� ������ � ���&��� �� ������� 9workflow):

Business Process Execution Language (BPEL), WS-Choreography, WS Flow Language (WSFL);

Page 283: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 283

3 ����� !�� ���� � ���� � �� �� ��� �������� �� ���� Web este WS-I (Web Service Interoperability), detalii fiind disponibile la http://www.ws-i.org.

Arhitectura REST

REST (Representational State Transfer: ���� � � ������ � �� ��zvoltare a �������� ���� ���� ! ������� �%$�< ��� �� � ���� �� ���� ���� ��,���' 9�---:< ��������� �� � ����� ������ �� ��� � �� �������%������ a unei resurse Web. Or�� ������ � � �� �� ����� ��������apli����-client într-� ��� � �� � �� � ���!���� � � !� �� transfer de ���� 9������ �� ���� �� ����� < �� ���� � ��� �� �� ��� ��'��� – desemnate de un URI – ����� � �� ����� �� ��� �� �ale). � ���� �� �� �������� � ����< �� ����� �� ���� !� ���� � "#�< � adresabili����� �� ������ �� 5�+< ������ �� �� ��� ��� ���C� �considerat ca fiind un sistem REST.

$� ���� ��� ������� �� ��� �������� � ���� ���� �� �rhitectura �%$�� ��!������� �� � ���� ���������� �� ����!� �� ����� de resurse (în stilul pull) conform clasicii arhitecturi client/server. Fiecare �� � � ���� ����� ��� �e������< �� � � �� ��� � ����� ��� ����&-tul – conexiuni stateless. Resursele Web pot fi accesate printr-� �� ����'�� �� ���� �� ������� �� !������� � ��������� ����2 G%�< �3$�<�5� � 4%�%�%� ������!���< ��� ������� � ����� �� G%� � �3$�� �se con����� � ��� � �� % � 9�-- : � �� 9�--):� 4�� �� ����� ��ii privitoare �� � �� �� �� � ������ �� ��!����� � ����� �%$� ��� � ������� ��(Gregorio, 2004).

; ��8���� �� �%$�< ����! !���� � web-calculus, model de � ����� � � �� ���� �� �������� ���< ������� �� !������ ��programare al ������ �� #������ �� !�� ����� �� �� ����!���� ���� � �� ����������� � ���� ����< �� ����� � �� � !�������'�corespunz���� � � �� � � ������ ���� ��� �� !���'� �� 4���� ���oferite de Waterken (2005).

!����������������������������������

%&����� �� ���� ��� ���� �������< �� � � ���� �� ���!C��� �!��� ����!��� � �� !���!��� �< �&������ � � ��' � �� 5������ !�� ��� ���� ��� �� ������ �� �� !���� � �� ���� � ���� �� ��accesibile de la f��� � ������� � �� � ���< ��� C� �������������� �� ������ !� �e������ �� �������< �� �� � �� ����� �8���� �� � !��� � ������

Page 284: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 284

Noile servicii dezvoltate pot fi compuse din serviciile Web deja existente, accesibile în mod tran��� ��� @� ����! ������ �� ��� �� middleware ��� � ��C� ���������� 9!���!����� �� �����-�� �� �� �� � �' �!�concepute în limbaje diver��:< �C� � ���� � ��� � �� ��� ��������

$� �� ��� ��� ������� � ���� �� �������� �� �� � �� � ��' ��� �� ���< ���� ��� ��� �&��� � ���� �� '� �� ��� ����� ������„vechi” (e.g., recurgând la script-� �G+ �H��� �� �� � �� ���������������:�

$����� ���� ��� �� �� !���!��� �� � �&������ �� �� �adru de lucru (framework) Web cu suport pentru SOA. Elemen���� �� ���� ��� �������sunt rezumate în figura 5.

� ��� + �������� ���� � ��� ��� framework Web

4��� ��! �� �!� ��< �� ��� �� � �� � � ��!��� � ��tfel de cadru de ��� � ������2

• suportul pentru protocoale�� ��� � ���� � ���� 9����< $#��<FTP etc.), plus pentru familia XML;

• ���� � ��< ������� �� � ��' � �� �� ���� ��� �� 544+L

Page 285: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 285

• ���� � �� ���������� � � � �� H�� �� ' ��� �!��8����$4�< �� ���������� '�� � ����!��� �� ���umente WSDL asociate serviciilor Web implementate;

• ������� �� � ����� �� �� ����&� �� �&�����< ��C��-se în calcul factori precum autorizarea (cine poate invoca un anumit serviciu), ������� �� 9��� � �������� �� ����2 ������ !�< �� �� < �� � ��losit etc.), planificarea (când poate fi rulat serviciul) etc.;

• ��� �� �� �� �� �� ���� – sunt necesare servicii de tip calendar, �� ��'� � � � � ��� ���� �� ��� �< � �n�������� � ������L

• �&����� �� ��� �� ��' � �< �� !�C� ������� �� ������ �����!� � ������� 9legacy), la servere de stocare (backend servers), la calculatoare de tip mainframe etc.;

• ��� �� �� ������� � �� ��� �� �� ���� � 9frontend) via un �� �� ���< �� � � ������ �&����� �� !� �- � !�� �-servicii, a ��H�� !�� �r����� � � �� !��� �� ��'� � � � ���&��� ��������� 9workflow engine).

�� ����� ��� !� �� ��� �� ���� ��� ����� �� �� �� ��� ��� ������� �� direct al acestora.

������!���< �&��� � ��!���� �� ������'< � ����� � ��� ��� ���� �� ���< �� � �� � �� ��!� �! ��� �� �r!���� ���2 ������ �&� �Synapse, implementate în Java, Borland Delphi/JBuilder Web Services, IBM ��� $� ���� ����(�< #� ����� �@%� , �!�D� (< @�$3�� � �%��22$3�� pentru PHP, suportul integrat în PHP 5, modulul SOAP::Lite în cazul Perl, ��� $� ���� 4������� ���( ��� �� ������� �� !���� .���� 4����!���< �&��� !���!��� .��� ��� �� � �� ���� ��!��< � ���! K%�< Fujitsu, Hewlett-Packard, Oracle, Sybase etc.

4 ��� � ��� !�� ���� �� ������� �� �!� ��< �� �� � �� ��<!���!��� �� ������ �� .��� �< �������� ������< �� ���� ��� ������ ��.NET Framework.

2.3. Un studiu de caz

+�����! �� !���!���! � �� ��� ��� !�� � �� ��� ���������unui document XML conform unei scheme. Pen� � �� !���!��� �� �� ��!!���< ����� �! �� ��C� ����!����< �C� � ����!� ��� ������� ��nivelul serverului.

Vom realiza o implementare în limbajul C# sub .NET Framework, editarea codului-�� �� � �&������ �� �� ����� ���zându-se prin intermediul

Page 286: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 286

�������< ������� ' ����< WebMatrix – �&��� ���� �� ���< �� ��� ��� ���� *�* � �������� ��� � ��-� ���#�� & ����� � � !-server ���< �� !�C� �� ��� �� ���������� �� ���� �������ate.

Serviciul �� �&��� ���� !�����2 CheckIfExists (veri��� �&���������!����� "#� �� � � � ������: � Validate 9 �������� ����� ��propriu-���: !���!����� � ��� �� ����� �!�� XMLValidator:

<%@ WebService language="C#" class="XMLValidator" %>

using System;

using System.Web.Services;

using System.Xml;

using System.Xml.Serialization;

using System.Xml.Schema;

using System.IO;

�� ����� ����!�� ����� ������������ ����������� J��

[WebService(Namespace="http://www.infoiasi.ro/XMLValidator")]

public class XMLValidator {

static private int validationMessages;

static private string result;

�� ����� J�� ���� ���� ��� �-������ ���� ����� 61�

[WebMethod]

public bool CheckIfExists (string filename) {

return File.Exists (filename);

}

�� ����� J�� �� �������� � ���� ����� 61�

[WebMethod]

public string Validate (string filename) {

�� ������� �� ���������� �� �������� 61�

XmlTextReader tr = null;

XmlValidatingReader vr = null;

�� �������, ���� o eroare

validationMessages = 0;

result = "";

�� +������� �� �������� ��������� 61�

try {

�� ��������� ������� �� ������� 61�

tr = new XmlTextReader (filename);

Page 287: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 287

�� ��������� ���������� 61�

vr = new XmlValidatingReader (tr);

�� ���� ������� �� �������� ������� 61� 2�&���

vr.ValidationType = ValidationType.Schema;

�� ���� � ����� �� ��������� � ������������ (������

// de validatorul XML

vr.ValidationEventHandler +=

new ValidationEventHandler (ValidationHandler);

while ( vr.Read () )

; // nu facem nimic, doar citim documentul XML

} // final de "try"

catch ( Exception e ) {

�� ������� ����3�� �� �-������

return result + e.Message;

}

finally {

�� �� ����, ����� *(������*

if ( tr != null ) tr.Close ();

if ( vr != null ) vr.Close ();

}

// gata!

�� +������� ������ ��� ������� �� �����

return (validationMessages == 0 ?

"valid" : "invalid (" + validationMessages + ")");

}

�� ����� �� ����� � �������� �� ��������

private static void ValidationHandler (object sender,

ValidationEventArgs args) {

result += args.Severity + "(" + args.Message + "). ";

validationMessages++;

}

}

; �'� � / �� ����� �!� �� �� ���� ���� �� ������� �� �@%� ��� � �invoca în cadrul browser-ului metodele publice ale serviciului Web !���!����� 4� ���!���< �� ���� �� � ����sul primit – un document "#� ���C� ��������� �a��� �

Page 288: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 288

Figura 6. Invocarea unui serviciu Web direct prin intermediul navigatorului

La prima rulare, codul este compilat, generându-se un assembly temporar. 3 �� !����� � ���� �� � � ������-�� �� va conduce la recompilarea ����!��� 9����� � .� '���< �--�:�

4���!���� �$4� '�� �� ����!�� ����� � ������ � ���� � ��tipurile (abstracte) de date folosite, acestea fiind specificate printr-� ����!�XML:

<types>

<s:schema elementFormDefault="qualified"

targetNamespace="http://www.infoiasi.ro/XMLValidator">

<!-- ������ ��������!��� ������ ������� -->

<s:element name="CheckIfExists">

Page 289: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 289

<s:complexType>

<s:sequence>

<!-- ��������!� ��������� de intrare:

��� ��������� �� ���� �� ����� -->

<s:element minOccurs="0" maxOccurs="1"

name="filename" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

<!-- element d�������� ��������� ������ -->

<s:element name="CheckIfExistsResponse">

<s:complexType>

<s:sequence>

<!-- ��������� ����������� �� �

o valoare logi�� -->

<s:element minOccurs="1" maxOccurs="1"

name="CheckIfExistsResult" type="s:boolean" />

</s:sequence>

</s:complexType>

</s:element>

<!-- ������ ��������!��� ������ �� �������� 61� -->

<s:element name="Validate">

<s:complexType>

<s:sequence>

<!-- �� ������# �� ��� �� �������� -->

<s:element minOccurs="0" maxOccurs="1"

name="filename" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

<!-- ������ ����� ����� ��������� ������ -->

<s:element name="ValidateResponse">

<s:complexType>

<s:sequence>

<!-- ��!����� �� � �� ��� �� �������� -->

<s:element minOccurs="0" maxOccurs="1"

name="ValidateResult" type="s:string" />

</s:sequence>

Page 290: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 290

</s:complexType>

</s:element>

</s:schema>

</types>

4� ���!���< � ��� �� �$4�< �� ������� – la nivel abstract – mesajele ��������� �� � �� �� � ����� ; ����� ��tru, vor fi patru: o pereche reprezentând invocarea metodei CheckIfExists � ������� ��� � � ��� ���� �!�� � �o ��������� � !����� Validate: <message name="CheckIfExistsSoapIn">

<part name="parameters" element="v:CheckIfExists"/>

</message>

<message name="CheckIfExistsSoapOut">

<part name="parameters" element="v:CheckIfExistsResponse"/>

</message>

<message name="ValidateSoapIn">

<part name="parameters" element="v:Validate"/>

</message>

<message name="ValidateSoapOut">

<part name="parameters" element="v:ValidateResponse"/>

</message>

În cele de mai sus, v �� ���� ������ �� �!� ������ �� ����� ���implementat (aici, http://www.infoiasi.ro/XMLValidator).

3�� ���� ��������� �� �� ��� ��� ��������� � � !���a �� ������ �����!����� �$4� 9��� � ���� � !�����< �� ��� ���� !���8��� ��in� � � � �� �� � �� �� � ��������� �� $3��:2

<portType name="XMLValidatorSoap">

<operation name="CheckIfExists">

<input message="v:CheckIfExistsSoapIn" />

<output message="v:CheckIfExistsSoapOut" />

</operation>

<operation name="Validate">

<input message="v:ValidateSoapIn" />

<output message="v:ValidateSoapOut" />

</operation>

</portType>

����� �� 9binding: � ��� ���� �� � � ������ �� � ���� � �� �� � ������utilizat (e.g.< ���� ��� $#��: �� �������� � intr-� ���� ���� �� �� !�2

Page 291: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 291

<binding name="XMLValidatorSoap" type="v:XMLValidatorSoap">

<soap:binding transport="

http://schemas.xmlsoap.org/soap/http"

style="document" />

<operation name="CheckIfExists">

<!-- �������� 2O$� ������� �� � ����� ����e�����

de serviciul Web -->

<soap:operation soapAction=

"http://www.infoiasi.ro/XMLValidator/CheckIfExists"

style="document" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

<!-- ������� �� ����� ������� ����� -->

</binding>

Acest aspect e similar modului în care, în contextul progra!� +�� ��<un socket ���� ������ �� �� ��

Docum���� �$4� !� ���� � � ���� ��� ��� � �� ������� ���� �� 9�� ��� ������� � ��� �� ����� : – � �&�!���� �� ����< � ��������doar unul:

<service name="XMLValidator">

<port name="XMLValidatorSoap" binding="v:XMLValidatorSoap">

<!-- URI-�� ����� ����� ��������� � �����

a serviciului Web implementat -->

<soap:address location= "http://localhost:8080/xml-validator.asmx" />

</port>

</service>

; !�� �����< � ��! ���� ��� � �� ��� ��� �� avigator, ci prin intermediul unui client, conceput eventual în alt limbaj de programare.

��� � ������< ��! �� � � ���� �B �� �� � ��� �� �� �� � ���������&� ���� � !��� ��2

�� ����� � ������� � ������ ��������!����� ������iului Web

XMLValidator validator = new XMLValidator();

Page 292: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 292

�� ������� ����� �� ���� ����� � �-������� �����ului

if (validator.CheckIfExists (args[0])) {

�� �-���, ���� ���� �����!� ���������

string valid = validator.Validate (args[0]);

�� � ���� �� � ������ ����� 8������./ �������

Console.WriteLine(valid + ".");

}

else

������'J�������.������������ .�� �-��� �� ��rver?).");

4��� ��! � ����� ���� �� �-a dat seama, args[0] ���� �!���documentului XML dorit a fi validat.

Pentru ca programul s� �������� ������ �� ��� �< �� � e�� '�� ��� ������ �� !��� � 9proxy:< ��C� �� �� !8��� � � ����'��� �� � !��� ������ � �� �� �� �� �� � �� � ���� �� ���� ���� ����� ��� � �� ��������printr-� ��!��� �� '��� � !��� < �� � �� '�� � � ��� XMLValidator.cs:

"c:\Program Files\Microsoft.NET\SDK\v1.1\Bin\wsdl.exe" http://localhost:8080/xml-validator.asmx?WSDL

Se va înlocui calea spre programul wsdl.exe �� ��� �&����� �� !���������� 9�! � ������ �� �� ���� ��� �� ����� � invocat pe localhost, la portul 8080).

� ��� ; $��� �� � ���� ���� � �� #��� �� ����� ���-� ������ proxy � ��� ����� �//�

Clientul de test care va valida documentul via serviciul Web va trebui compilat prin:

Page 293: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 293

c:\Windows\Microsoft.NET\Framework\v1.1.4322\csc /t:exe /r:System.Web.dll,System.XML.dll,System.Web.Services.dll XMLValidator.cs xml-validator-client.cs

#�� � '�� ��� �� �� ����� �� � � ���� � � �� �� ��� ����� ������� � �'� � 7�

; ���� �� ����� ��< �� ���� ������ �� platforma .NET Framework versiunea 2.0, iar clientul a fost compilat cu compilatorul oferit de .NET Framework 1.1. Un posibil rezultat este: D:\web-client>xml-validator-client.exe projects-xsd.xml

Documentul 'projects-xsd.xml' este... valid.

În continuare, vom studia modul de invocare via un client Perl, ��� 'C� �� ������������ ���� �� ������� �� !������ SOAP::Lite. Mai întâi, codul-�� �� �� �� ����� ��� � ���� !������ ��� � � ������������ �� �&����� � ������ $3�� � !���8��� � ;���� ��� ���� �!�����< ��! �� � ����� ��� [SoapRpcMethod]. Programul Perl are � !��� �� ����� 9�! �!� �� ��� ��������:2

Figura 8. Accesarea via proxy ��� ���� � � #�� �� ����� �� �� ���

use SOAP::Lite;

@ �� ������� �� ������

my $soap = SOAP::Lite

Page 294: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 294

->uri('http://winxp.infoiasi.ro/XMLValidator/')

@ ������ ��������� �� ����

->proxy( 'http://winxp.infoiasi.ro:8080/xml-validator2.asmx')

@ ������� �����������

->on_action(sub { join('', @_) });

@ +����&��� �-����� ���������, ������� ���� ���ificate

# pentru parametrii metodei invocate

my @params = (SOAP::Data->name('filename', $ARGV[0]));

print "Documentul $ARGV[0] este... ";

@ ���� ���� ���� ������� 61� �-��� �� ������

if ($soap->call("CheckIfExists" => @params)->result) {

@ '''�� ������� ����� �� ��������

my $valid = $soap->call("Validate" => @params)->result;

print $valid . ".\n";

}

else {

���� ������������ .�� �-��� �� ������"/'\n";

}

�����! script�� � ����! ������� �� ����� ��� ����� �� �� ���7-7- �� !��� �� �� ��� winxp.infoiasi.ro: (infoiasi)$ perl xml-validator-client.pl projects-xsd.xml

Documentul projects-xsd.xml este... valid.

În programul anterior, pentru a trasa mesajele vehiculate înt � ���� ��� ���� ���< �� ��������� �� use SOAP::Lite �� � !���� ��2

use SOAP::Lite +trace => debug => sub { print; };

Un posibil rezultat – rulat pe calculatorul local – este dat mai jos, la care �! ����'�� � �� � �� ��!��� �&�������2

SOAP::Transport::HTTP::Client::send_receive:

POST http://127.0.0.1:8080/xml-validator2.asmx

Accept: text/xml

Accept: multipart/*

Content-Length: 535

Content-Type: text/xml; charset=utf-8

SOAPAction: http://127.0.0.1/XMLValidator/Validate

Page 295: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 295

<?xml version="1.0" encoding="UTF-8"?>

<!-- plicul SOAP incluzând mesajul -->

<SOAP-ENV:Envelope

xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"

xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsd="http://www.w3.org/1999/XMLSchema"

SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<!-- �� ������!� ����� �� �������� -->

<v:Validate

xmlns:v="http://127.0.0.1/XMLValidator/">

<!-- datele de intrare: numele documentului XML -->

<filename xsi:type="xsd:string">

projects-xsd.xml

</filename>

</v:Validate>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 200 OK

Cache-Control: private, max-age=0

Connection: Close

Date: Sat, 11 Feb 2006 16:48:25 GMT

Server: Microsoft ASP.NET Web Matrix Server/0.6.0.0

Content-Length: 572

Content-Type: text/xml; charset=utf-8

Client-Date: Sat, 11 Feb 2006 16:48:25 GMT

Client-Peer: 127.0.0.1:8080

Client-Response-Num: 1

X-AspNet-Version: 2.0.50727

<?xml version="1.0" encoding="utf-8"?>

<!-- ������ +���������� ����3�� �� ������� -->

<soap:Envelope

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:tns="http://127.0.0.1/XMLValidator/"

xmlns:types="http://127.0.0.1/XMLValidator/encodedTypes"

Page 296: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 296

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Body soap:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/">

<tns:ValidateResponse>

<!-- r�������� �������-zis -->

<ValidateResult xsi:type="xsd:string">

Valid

</ValidateResult>

</tns:ValidateResponse>

</soap:Body>

</soap:Envelope>

$����� �� �!� tns ���� � ����� �� �!� ��!�� � < '�� �� �� �@%�Framework.

?�! �� �� � � �&�!plu de client scris în PHP, invocarea serviciului Web anterior prezentat realizându-�� ' ��� ������� @�$3�� � ������descrierea WSDL a acestuia. Codul-�� �� ���� ������� ���� � �&�!����� ���� �� �� �������� @�$3��2 <?php

require_once('lib/nusoap.php');

�� �� ������� ��������� �� ���-%-ul Web

// (în acest caz, transportul are loc direct)

$proxyhost = ''; $proxyport = '';

$proxyusername = ''; $proxypassword = '';

�� ����������� ��������� 2O$�

// pe baza descrierii serviciului Web

$client = new soapclient(

'http://localhost:8080/xml-validator.asmx?WSDL', true,

$proxyhost, $proxyport, $proxyusername, $proxypassword);

�� ������� ���������� �����

$err = $client->getError();

if ($err) { �� �������� �������

��&� *�&I�;����� �� ��������!are</h3><pre>' .

$err . '</pre>';

}

// stabilim parametrii de intrare ai metodei invocate

$param = array('filename' => 'inexistent.xml');

Page 297: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 297

�� �����!�� ������

$result = $client->call('CheckIfExists',

array('parameters' => $param), '', '', false, true);

�� ���� ���� ���� �-��� ����� ���

if ($client->fault) {

echo '<h3>Fault</h3><pre>';

print_r($result);

echo '</pre>';

L ���� 0 �� ���� ���� ���� �� ����� �����

$err = $client->getError();

if ($err) {

echo '<h3>Eroare</h3><pre>' . $err . '</pre>';

} else {

�� � ���� ��!�����

echo '<h3>Rezultat</h3><pre>' .

$result['CheckIfExistsResult'] . '</pre>';

}

}

�� �������, ��������� �� �� ��������� �� ��������

echo '<h3>Cerere</h3><pre>' .

htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';

echo '<h3>Raspuns</h3><pre>' .

htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';

echo '<h3>Depanare</h3><pre>' .

htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';

?>

+����! !����� CheckIfExists �� � �!� �� ��� inexistent. Vom ob�� !���8� �!�� � �� ���� � �'� � J�

Page 298: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 298

� ��� @ $�������� ��� ��� � ������ ���� � ��� #�� � �� �� ��� &F&

#����! �� � ������� ������ ��� �� ������ 9e.g., Amazon, G��'��< ^����I ����: �� �� ������� ���������� � �� ������ �� � �-' �!� � ����� � ���� �� �������i��� ������� �� �� �� ���<prin SOAP, REST sau XML-���� ���� �&�!��� � ����� �� ���� � �H���im���!��� � � �� ���� ��� ��� ������� � ��� � � ���! �'���(2005), Burag� 9�--):< 4���� !� 9�--): � Q�����(� � ��> 9�--�:�

Page 299: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 299

3. AJAX (Asynchronous JavaScript And XML)

3.1. Context

; � ����< �����! �� ��� �� �� ������ ��� ��� � � ��� !� ��'����� ����� �� ������� ��� � � � ������� ������� �� !���!��� � a ������ �� ����< �� �� ��� �� ���� �� ���' � !���� ��� 9����� � ��www.lukew.com):

• (X)HTML – ����� � �� ���� ���� ���< ���� ���� ��� � !� -�� �� �������� ���� ����� � ��� � ����� �� �� �� ����limi���� 9�� �� !��� � ��� � ��� ��'��� :< �� ��� �� � ��-�� �� � ��C� � ' �� !� � �� ��!�� ���� � � � ���������� ������ � ���� �� � �� ��'��� ���< �� � � ������ �������&�� � � ���� ��&��� �� ��� � !���� ��� �� ����� �� �� �����clientului, nu poate fi folosit pentru a integra resurse locale. Un �����8 ���� ��� � �� ���������� �� � ���� ������� �� �� ���� �$$< � ���� ����� � '�� �� �� �� �!��� �� ���� � � � ������mature. Codul-�� �� � ������ � ��< �� ������ ���� �� ���losit (copiat);

• HTML dinamic – ����!���� � � !�� C� ���!���� ��������' ��#�< .���$� �� �< �������< �$$� 3�� � �������� ��reali�� � � �!���� < �� ��� 9layer-�: �� ���� �< !����� � � drag & drop � ��!������� �� �� ���� � !����� ��!�� ������ �� ���� �� 4 ������< ���� ��� ����� �� browser, fiind de ���� !� !���� � ������� !���!����� ������� ��dio/ ���� ���� ���� �� ��' ��< �� �� !���� ��&��ale redate pot fi ��&��� �� !���� ��� �� ����� �� #���� �� �� ����� �����de versiu�� �H��� ������ �� ��� � � �!��8��� .���$� ��� ;ultima pe ����< �� !���!������ ' ��� ��������� ��� �� ��standardul DOM. Un alt dezavantaj este cel privitor la dificultatea !���!��� ��r componente de in�� ���� ������< � ���!tab-urile, arborii de vizualizare, ferestrele etc.;

• HTML dinamic – �� ����� ��� ��� '� �� ���-numitul remote scripting< ���� ���� �� �� � �' �!� �� �� �� �� ���!����<iframe> 9!����� � ��� ��� �� ����������rii Microsoft). În �$��@%�< ������� ����� �� �!���� script callback (detalii în %������< �--):� +�� ������ �� ������� �� ���� !� ��'���< ���������� '�� �� ��!� � ����� � ��&�� �� !���� ��� ������� �< � ��� ����< ����� �� �������� � ����� �� �� ��!�de carte (bookmarks: ��� ����� � ����!�� ��!�� � ����� ��

Page 300: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 300

�� ��� �� �� �� ��� � ������� �� ����� �������< �� � � !�necesita trans�� �� ����� ; ���� �� � ����� ������������< � ����realizate unele eforturi� ��� ��� �� ����� !� !� �� �������� � ����� �� ��'� � �e������ �� browser;

• HTML dinamic – cel de-�� � ���� ��� �������� �� ���!���� ��������' �.�"< ���� � !� 8��� +�� ���u�� ���� !� ��� � ����< � ���� �� � ����� !� ���� formularele (se poate realiza verificarea în timp real a input-ului provenit de la vizitatorul sitului). 4��� ��� �������� �� ������������ �������� XMLHttpRequest, ����� !�� �� �� ����� � ������ �!� � ��'���� ��� ������ �� � !� ���< ��� ����< ����� �� �������� � bookmarking-ul pot � ��!� �!��< � ������ ��������� �� � ���� � �� �� � ��� ���&��� ��� � ��� � ���� �� �������� �� �� screen reader. � ���� �� �� �� !�� �� �������� � !�� � ��� ��< dar �� �� �� � ����� �� ��!��� �� �� ������ 9�� �� !� ��� transmisii în stilul pull< � � push:� �.�" �������� �� ���� � ����� �� �� !�� � �� �!��� �� �����ltare;

• Flash – �� ���� � ������'� � �� ��� �< ��� � � �� ����� sofisti���� �� ������� �� 9�!��< drag & drop, multimedia, trans-pa ���< layer-e, controale complexe etc.), eventual via limbajul ActionScript 9����� � ?C ��< �--):� +�� !���� ' ���� ���redate nativ � �� !� ����� ���< � �������� ��H����� �� �� ����pot fi realizate � �!� ���� � ���� �� �� �� !�� ����� � �� ���� ��� �< � ���� � �� !� �� ���& 9streaming). Pentru a putea fi ����� � ��'��� < � ����� �� ,���� ������ ��� �� �� �� plugin �&�� 9��� �� � !���!��� ��� � �� �� ������ !� �������� !� � �� �� ��igator la navigator). De cele mai multe ori, ������� ,���� � ����� � ��&�� �� !���� ��� �� ����� �< �� ��pot adopta tehnici alternative. Codul swf generat poate fi decompilat (copiat). Dezvoltarea �� �� ,���� ����� � ��� �����< � ���������� ���� �� �&�� ��� �� � ��� ���� ������� 3 ����� �� ��� �� � � � ,��&< !������ �� �������� � �������fiind unul bazat pe scripting � ������' "#�L �� ���� �� ����atorul �� ������� �� -� �!��8 "#�< � � ����� �� �� �������� �����$� ��� +�� ������ �� ��� �� ��!����� �� �� ����������� � ��� �� �� ������� �� ����� � ��C� �������evenimente, comportamente, stiluri etc. La nivel de se �� �� ������o so���� ������ �� .���< ��� ��-�� �� �� �� ���� 9e.g., autenti-��� �< ��' � � �� ��� ��< �� �� ��� � ������:< ���� �� �� ������ �� ����� �� �������� ,��& � ���� ������ 9�� �&�!���<

Page 301: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 301

suport pentru sesiuni partajate, acces la obiecte Java la nivel de server etc.); detalii la http://www.macromedia.com/devnet/flex/;

• applet-uri Java – ��� � � �� ����� ��'��� �� ������� ��<!����� ����� � �� ������ !����� .���< ������ ��� 9�!���� � ����� et al., 2--�:� �������� ��H����� �� �� ���� ��� fi reali���� � �!� ���< �� ��� ����< ����� �� �������� � bookmarking-ul pot cauza probleme. Pentru a rula, nece��� � �����!�� � ����� .��� 9.?# – Java Virtual Machine), unele imple!��� fiin� ��������� ���inutul redat nu e indexat de motoarele de ����� �< ��� �� umentele de dezvoltare sunt foarte bune. Applet-urile Java nu pot altera resursele locale, fiind din acest punct de vedere sigure;

• ������ Java Web Start – tehnologie liber�< ��� � � �� ����� ��������� �� �!�� � �������� desktop � �������� �������� ��������� ������� �� � �D�� < ���� � ���� �� �� �� �� �� – se ��'� � ���������� �� � ������ �� caching. Pentru a se executa, trebuie instalat ma��� .��� ��� $�� �� ������� ���� � ����� ���&�� �� !���� ��� �� ����� �< �������� ��C� � �'! offline, ������ �� ����� ��������� ���� �� �s����� �� ������ !� .����4 ������< � �� � ������ ��� � �&������ �� �� �������� !��ile ��C� ���'� �� !������� +�� �!����� �� �������� � ��� !�-ture;

• componente ActiveX – ��� ' �� � ������'� � �� ��� �9� ������� � �����< �--�:< ��C� �� ������� � �� ����� ��utili���� �� ���!����� � �������� desktop ������ale. Pot fi ������� ��' � �� ��� ���� ������< �� ������� � ���� �� � -����� ���� ������ ���� ����< ����� �� �������� � bookmarking-ul ��� � � ����!����� 5 ��� ������ ���� ����� �� ������componente nu pot rula decât în Windows, în cadrul browser-ului Internet Explorer. Pot fi folosite controale predefinite, disponibile ' ���� ��� � �'! ��!� ���� ������� ���� � ����� � ��&���� ��� � !���� ��� �� ����� �� +�� �!����� �� �������� � ���foarte bune;

• ������ Windows Smart Clients – �� ���� � ������'� � �prie�� �< ������� �������� �� ������ �!�are celor ale calculatoarelor � �������< �� �� � ������ �� ��� �� �������� !���� 9����� <�� � � :� ��!������� ������� ��� � � ���� ��� �amic, fiind implemen���� � �!��8��� ���� ���� �� �@%�� ��� ������ �� ����cu utilizatorul sunt generate via WinForms, iar resursele locale pot fi ��' ��� �� �@%�< ���� ! ������� �� ����� �������� ��������

Page 302: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 302

������ � �'! offline, benefi�� �� ����� ��������� ���� ��������� �� ������ !� �@%�� �� � !� ���< �� �!����� ��dezvoltare sunt excelente.

4��'� < ��� � �������� � ���� ����� ���� ����< �� � �� � !��o�!2 • ��!��� �� !�������� ��� �� ����� �� ����!�nte PDF

(Portable Document Format:< �� � ��� ����� � ��'��� � �� !��� ��� �� ����� �� ������� ��L

• � ����� �� �� ����� � �� !���� !���!��� �� �!��8��SMIL (Synchronized Multimedia Integration Language) (detalii în Brut � K� �'�< �--4);

• ��� �� �� ' ���� ����� ��� � �!��8�� $?G 9Scalable Vector Graphics: 9��� � K� �'�< �--��L K� �'�< �--):L

• prezentarea datelor pentru dispozitivele mobile via WML (Wireless Markup Language) (detalii în Buraga, 2003b) sau profilul XHTML Mobile Profile (W3C);

• �� ������ ��� ��������� ' ��� �!��8��� ",� !� 94��(� et al., 2003);

• � ����� �� ������ � �� !���� �� ������� ����� ���� ����� ���� �� ������� ��< �&� !��� � �mbaje ca XUL (Extensible User-interface Language) – implementat în Mozilla Firefox – ori XAML (Extensible Application Markup Language) – parte a componentei Windows Presentation Foundation, integrate în Windows Vista.

; ���� �� � !����< � ��! ����� � ���� � ������ �� ������� ��interes privitoare la AJAX.

3.2. Caracterizare

�� !��� �.�" ��� �� �� .���� .�!�� G� ��� � �� ���� � ���� ��tehnologii deschise, încorporând (Eernisse, 2005):

• �!��8� ����� ����� �� � ����� � � ������ < � ���! "��#� �CSS;

• ��� � � �� ����� �� ����� ��l DOM; • �� ���!� � !����� � �� ���� � "#� �H��� "$��L • transfer asincron de date via obiectul XMLHttpRequest (McLelland,

2005); • procesare prin limbajul ECMAScript/JavaScript (ECMA).

Page 303: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 303

��!����� �� ���� ���� ������� XMLHttpRequest ��� �� ������� de ��� � browser-ul Web. Acest obiect permite realizarea de cereri HTTP (e.g., G%� � �3$�: �� -un program rulând la nivel de client (browser) spre o ������� �� �� �� �� < �� -un mod asincron� ������< ������� ��'�� Web nu mai trebuie re��� ��� în întregime. În mod uzual, datele vehiculate �� � � �' �!��� ���� � �� �� ��� !� ���� � "#�� %&��� ���� 9� ���! ��� � ������ � %� ���< �-- : � �� � �� ����� ����� � ���������� �� !� �� � � ������ � 3 ���� ��i�� �� "#� � ���� �� � �����interschimbul de date este JSON (JavaScript Object Notation).

Modul de implementare a obiectului XMLHttpRequest depinde de ��'��� 2 #����� ��C� �� ���� !� !� � ��� �'��� �� *�- � ������� ���� �� , ���& �� ��� � �� ����� ���< � � +�ernet Explorer 5.0 sau ���� � ����� � ������ � ��� ����� �����"� 4� ���!���< ��'��� ��$��� < ������ �� ������ !��� #�� 3$< �� !���!������ ����C� ���� ���� *��� �� ���< ���� !� ����� �� �� ��� � �' �!��� 3�� � ��� �suport pentru XMLHttpRequest.

� ��� 1* !�������� ������ 2,3 6���� �� ��� � ������ �������� �� ��orului, în stânga, � ���������� 2,3 ����� � � ��� �� ������� 6� ���-�

4���'�� �� � �������� ���� � �� �� ���� ���� �� � �'ura 10. Principalele metode care vor fi folosite efectiv de un dezvoltator de

������ �.�" ��� � !���� ���2 • open() � ���� 9�������: � ���&�� ���� �� �� �� ��<

� !�C� � �� � � 9�����< G%� ��� �3$�: ��� � ������L ���'� <������� �� �� �� �� �� �� � �� ���� loc schimbul de date va fi ����!��� �� � 5�+L

Page 304: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 304

• send() � � ��!�� ����< � !�� � ��� ��< ��� � �������rulând pe server;

• abort() � ��������� � ���� �� �� ��L • setRequestHeader() � ������� ��� �� �Cmpuri ale antetului

HTTP (de exemplu, se poa�� ����� � ��!�� ����� � ��� �câmpul Content-Type).

� �� ������ �� ���� ��� �������� ��� �������� � ���uare: • readyState � ���� ����� �� ��� � � � ���� ��� 9e.g., valoarea 4

������� ������ �� � ���� �� ������ �-a efectuat complet); • status � �� ���� ����� �� ��� � ���� ��� � �� �� �� �� ���L

de exemplu, 200 (Ok), 404 (Not Found), 500 (Server Error); • statusText � ����!���� � �� �� �� ���� � �&���C� � �!��8

��� �� ����� �� ��� � �����L • onreadystatechange � ����!���� ����� �� � �� � ������ ��

modi��� �� � �� ���!�� �� ��� �� � ���� � ������ 9 ��!-�! ������ �� ������ ��� � ��!�� � !�� � ��� �� � ���� ���� �� �! ������ ���� � ���!�� ���!����� �� ��� �� -veni pe parcursul transferului).

�����5 ���"��(�"��2��������������(��� ����� ��� �"���� cont de utilizator

; ��� �� ������ � ! �&�!���< ��! ����� � � !��� �� ���� �2 �vizitator al sitului dedicat workshop-��� V���HU �� ���� �� �� ��� � ��participant, pentru aceasta � ���� �� ��!������� � �� !��� �� � � �������� � �!� �� ��� � � �� ��� �� e-mail� @�!��� �� ��� � ���� �� ��unic, desemC� �� � �!�'���� ���� ������� �

3 � !� ������ � � �� �� ���! �� �� �� �&����� �!��� �� ���<prin consu��� �� �� ���� �� ���� � '�� � �� �� ����!�� "��#�nou care va fi transmis clientului în cazul în care numele de cont este deja ales de al����� � ���� �C� �� ! �� ��!���! ������ �� �� !����au fost stocate la nivel de server. Aceasta co���� �� ���� �� �� �ntregului ����� �� ��' ���< � ������� �� �� � ���� ����!��� � 4����!���< ������� �� � �� ����� ������� ���� �!��� �� ��� ���� ����in�� ��� ���C� ���� ��!����� �� ���� � �C!�� �� �� !��� ��� ��� ������rea butonului de tip submit.

� ���� ������< � ���< �� ���� ���� �� !�� � �.�" �� � ���� ��� ��� ������ � ���� �� ��� �� #������ 9�-- :� �� ��� �� ���!����� ��pierdere a focus-ului asupra câmpului de introducere a numelui de cont,

Page 305: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 305

prin intermediul unui program JavaScript se va realiza un transfer asincron ��� � ������� ��C� �� �� �� < ������� �� � �� ���� �� �spunsul privind �&����� �!��� �� ���� ; ����� ���< ������� �� �� � ! !����feedback ����� �� �� �������< � ���� �� ������� � ��� �!�� 4��'� <�� ��� �� �&����� ��n���� ������� �� � ��� ������� �� ��� �� �� �� � ���� ����� �� ������� submit< ���� ��� ��'��� �� � ����� �� ���� !���!���� ������� XMLHttpRequest sau vizitatorul are dezactivat suportul pentru JavaScript ori nu introduce un nume de cont valid (inexistent).

,� !��� �� ����� �� �� �� ����� �� ������� �� � ����� ������ ���� � � !���� �2

<form action="adauga.php" method="get">

Contul : <input type="text" name="nume"

�������������� ������ �� ��� �����

onblur="javascript:verificaNume(this.value, '')" />

<span class="ascuns" id="eroareNume">

5����� ��3� �-���, ���(��� ����'''

</span>

<br />

Adresa: <input type="text" name="adresa"

�������������� ������ �-������ .�-mail sau URI)" />

<br />

<input type="submit" value="Înscriere"

����$������ ���� ����� � �� +������� ��

</form>

$� �!� �� ������ �� ��� � � ���!�� <span> �� � �� ���� !���8��de er�� � ����� ������� ��� � ����� � �� � �!��� �� ��� ��8� �&���!�!� �� �� �� �� � +���< ����� ���!�� �� � ����� � �� � ����� � modificarea proprie��� �� ��� display ��� �� �� �$$�

������� �� � �� ���� �$$ ��� ��������� � ���tul documentului XHTML astfel:

<style type="text/css">

input[type="text"]:focus {

background: #EEE;

border-color: black

}

.eroare { /* stiluri pentru mesajul de eroare */

display: inline;

Page 306: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 306

color: red;

background-color: yellow;

}

.ascuns { /* stiluri pentru ascunderea mesajului */

display: none;

}

</style>

�� ��� �� ���!����� onblur �� � ������� ����� .���$� ��verificaNume(), care va avea în responsabilitate efectuarea transferului ��� � ��� � � ������� ��� ��C� �� �� �� �� �� ����� � !����� ���� ��� � � �&����� �!��� �� ���� ��C� �� � ��< �C� � ��������� �����vor fi marcate în XML.

Codul-�� �� �� ����� verificaNume() ���� � !��orul: �� ������ �� ���� ����� � �-������� ���� ���� �� ��������

function verificaNume (nume, raspuns) {

�� ���� �� �������"

if (raspuns != '') {

�� ������� ��� ������� <O1 �������� �� ��*������5���*

�� ����� � � ��� ����3�� �� ������

mesaj = document.getElementById ('eroareNume');

�� ��&����� ����� �� � �����

// (în caz de eroare vor fi aplicate

�� ������������ �� ��� din clasa 'eroare', // altfel textul va fi ascuns)

mesaj.className = raspuns == 1 ? 'eroare' : 'ascuns';

} else {

�� �� � ���� �� ������� ���, ��� ���� ���

�� �������� � ������ ��������� ���� ������

incarcaXML ('http://www.sit.org/verifica.php?nume=' +

nume);

}

}

4��� ����� � ���� ��� ��< � �� !���� 43# ��! � ����������� ���!����� <eroareNume> (al documentului XML transmis de ������� �� �� �� �� : �� � �� ������< �������< �� !����� ��� �� ������ �e stil asociate elementului <span> descris mai sus.

�� � �� ��� �� ��� � � �' �!�� ��� ��C� �� �� �� �� � ��������� ����� incarcaXML(), �� �� � ��� ���� ��� !� 8��2

Page 307: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 307

��� ������C �� ������� ���� �������� J��

�� +������ �� ������� 61� �������t de 'url'

function incarcaXML (url) {

�� ���� ���� �-������ ��������� 61�����R���

if (window.XMLHttpRequest) { �� �-��� ����� ���� .1�!����, ���� �-/

cerere = new XMLHttpRequest ();

�� �������� ������ �� ����� � ����� +���r�����

cerere.onreadystatechange = trateazaCererea;

�� ������� ��������� ���� ����� U;�

cerere.open ("GET", url, true);

cerere.send (null);

}

else if (window.ActiveXObject) {

cerere = new ActiveXObject ("Microsoft.XMLHTTP");

if (cerere) { // se poate folosi

// obiectul ActiveX pt. MSIE

�� ������� ��������� ���� ����� U;�

cerere.onreadystatechange = trateazaCererea;

cerere.open ("GET", url, true);

cerere.send ();

}

} // final de if

}

4��� ��! �� ����� �!� ��< �� �� ��� ����������� ��iectului XMLHttpRequest în cadrul navigatorului Web. Modul de transfer se va face � !����� G%�< � � ��� �� ���!����� �� � ��!�� ��� �� �datelor are loc în fu��� trateazaCererea():

�� ������ �� ����� � ��&������� �� ���� � ���erii

function trateazaCererea () {

�� ���� ���� ���� +��������� �-a terminat cu succes

if (cerere.readyState == 4) {

�� ���� ���� ���� �� ������ ����� �� ���� *)BB OA*

if (cerere.status == 200) {

�� �������� ����� �����������

�� .������� ��������-�������� �� �������ului XML)

raspuns = cerere.responseXML.documentElement;

Page 308: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 308

metoda = raspuns.getElementsByTagName( 'metoda')[0].firstChild.data;

rezultat = raspuns.getElementsByTagName( 'rezultat')[0].firstChild.data;

�� ������� �����

eval ( metoda + '(\'\', rezultat)');

}

// eventual, se pot trata si alte coduri de stare // (404, 500 etc.)

���� 0 �� ������ ������� �� ������� ���� ���'''

alert ("A aparut o problema la transferul datelor XML:\n" + cerere.statusText);

}

} // final de if

}

4����� "#� �� � �� � ��������� �� ���� � �!� �� !����� � în cazul nostru, verificaNume() � � ���ltatul întors de aceasta. Desigur, aceste date vor fi preluate doar în caz de succes (codul de stare va fi 200).

Pe partea de server, va trebui scris un program PHP, numit verifica.php, care va testa via DOM exist��� �!��� �� ��� �� ������� � ?�! ����������� �� !�� �� -un document XML cu structura: <?xml version="1.0"?>

<participanti>

<participant>

<nume>busaco</nume>

<adresa>http://www.infoiasi.ro/~busaco/</adresa>

</participant>

<participant>

<nume>laur</nume>

<adresa>[email protected]</adresa>

</participant>

</participanti>

Codul-�� �� �� � �' �!��� ���� �� ��� � ����� �2

<?php

// locul unde e stocat documentul XML

define ("PATH", '');

Page 309: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 309

# De exemplu, pentru Windows cu Apache2Triad # instalat in 'apache2':

# define ('PATH', 'c:\\apache2\\htdocs\\php-a\\');

define ('DOCXML', 'participanti.xml');

�� ������ ���� �����������

header ('Content-type: text/xml');

�� ������ �� ���� ����� � �-������� ���� ����

// retur���!� 4 ���� ������ �-���, B +� ��! ������

function verifica ($un_nume) {

�� +������� ������� 61� �� ����� ������ �����i�����

if (!$dom = domxml_open_file (PATH . DOCXML)) {

return 0;

}

$radacina = $dom->document_element();

$participanti = $radacina->get_elements_by_tagname('participant');

�� ������(�� ��� ������������ (�����'''

foreach ($participanti as $participant) {

$nume = $participant->get_elements_by_tagname('nume');

�� ��������, �(������ ����������� �� ��3������

if (!strcasecmp($un_nume, $nume[0]->get_content())) {

return 1;

}

}

return 0;

}

�� (������ ��������� 61�

echo '<?xml version="1.0" ?>';

?>

<raspuns>

<metoda>verificaNume</metoda>

<rezultat> <?php echo verifica ($_REQUEST['nume']); ?> </rezultat>

</raspuns>

$� �� ��� � � ����� "#�< �������� �� �� ��� �� ���� �� ��� �programul JavaScript. Folosind modelul DOM, detaliat în capitolul 3, se

Page 310: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 310

verifi�� �&����� �!��� �� ��� �� ��� script��� ��� �� ��� � �����JavaScript care l-a apelat în manie � ��� ���

4��'� < !� � ���� �� � � �' �!�� ��� �� � �������� ����'� �� ��43# � �� !���� ��������< ������ � !����� G%� �� ����� ��butonului submit � ��� �� �� !��� ��� ���� 3 ������ ������ ����� !�toarea:

<?php

// locul unde e stocat documentul XML

define ("PATH", '');

# De exemplu, pentru Windows cu Apache2Triad # instalat in 'apache2':

# define ('PATH', 'c:\\apache2\\htdocs\\php-a\\');

define ('DOCXML', 'participanti.xml');

// preluam valorile parametrilor

$nume = $_REQUEST['nume'];

$adresa = $_REQUEST['adresa'];

if (!isset ($nume) || !isset ($adresa) || !$nume || !$adresa) {

��&� ����������� ����� ����� ��������� �� ������ *����* �� *���esa'.</p>";

exit;

}

�� +������� ������� 61� �� ��� ������ �����������

if (!($dom = domxml_open_file (PATH . DOCXML))) {

echo '<p>Eroare la deschiderea documentului XML.</p>';

exit;

}

�� ������� �������� �����������

$radacina = $dom->document_element();

�� ����� �� ������ �����������

$participant = $dom->create_element ('participant');

�� ����� �� ������ ������

$nume_participant = $dom->create_element ('nume');

�� ����� �� nod text, cu valoarea numelui

$valoare_nume_participant = $dom->create_text_node ($nume);

�� '''��-� ������� �� ������

$valoare_nume_participant = $nume_participant->append_child

Page 311: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 311

($valoare_nume_participant);

�� ����(�� ������ �� �����������

$nume_participant = $participant->append_child ($nume_participant);

�� ����� �� ������ ��������

$adresa_participant = $dom->create_element ('adresa');

�� ����� �� ��� �-, �� �������� �������

$valoare_adresa_participant = $dom->create_text_node ($adresa);

// '''��-� ������� �� ��������

$valoare_adresa_participant =

$adresa_participant->append_child ($valoare_adresa_participant);

�� ����(�� �������� �� �����������

$adresa_participant = $participant->append_child ($adresa_participant);

// la final, ����(�� �������� ����������� �� ���ore

$radacina = $radacina->append_child ($participant);

�� ������ �������� �� ����� 61�

$dom->dump_file (PATH . DOCXML);

��&� ����$� �� ����(�� ���������� ���# *D����* �� *D������*'�����C

?>

Figura 11 reprez�� � ����� � �� �� � ��� � !���8�� �� � �� � ����� de utilizator în cazul în care introduce un nume de cont deja existent.

� ��� 11 ,��9�� ��� ��� 6� ��� ��������� ��� ���� �� ���� �= �����

Apelând script�� ��� � !�� �&����< ����! ���� �� � � �� ��������2un document XML ilustrat de figura de mai jos.

Page 312: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 312

Figura 12. Documentul XML returnat de programul PHP

�� ��� � ��� �= ������ ��� ���� �� ����

3.4. Al doilea exemplu: jurnalizarea pe partea de server ���(�����������rute în programele JavaScript executate în cadrul browser-ului

�� � ���� �!��8� �� � �' �!� � !��� �< .���$� �� ��� � ���������� �� ���������� �� � ����� � � ��� �&������ �� ���� � ��� �� � �' �!��� ���� !� ������ ���� ���� ��� �� ecurgere la constru���� try ... catch 9%�#�:� $'� �� !���!�� ���� ����� �� !���8��� �� � �� � ��� !���� � �� !���� �� �&����� 9e.g., versiunea navigatorului, ������ !� �� �� � ������< ��!������� ������� ����: ��� ������� ��nivelul clientului (viz���� ���: � � �� ��� �� �� �� ��� 9�� ������ ��� �' �!� � � �� ����� � � �������� : ���� ������< �������� ����� ���&����� �H��� �� � �� � � ��� ��!����� � !�� �� �������� ���� ������ �� �� ���lve.

Prin intermediul AJAX, aceast� � ����!� ����� � ��������� ��� �început, vom scrie un program JavaScript care va încapsula într-� �����Jurnal �� �' � ������ �� 8� ���� � � �&������ ��� ���� $� � ������ �de exemplul precedent, în acest caz prin metoda POST vom expedia aplic��� �� �� ��r�� �� !���� � ���� � �� !���8��� �� � �� �<�� !�� �� �� � ������� �� -� ��� -jurnal. Vehicularea datelor se va produce în mod uzual într-un singur sens, de la programul-client .���$� �� ��� � ��� �ocat pe server (scris, ���� ��! ��! �����< � ����variante � �� � �� � � �������� � ���:�

Clasa Jurnal ���� ����� � scriptul jurnal.js 9�� �� ����� � ������� �� �� � �' �! .���$� �� �� �� �� ! ��- 8� ����! !���8��� �� �&�����survenite la rulare):

// defini� � ����� ������ ����� 3������!���� ��orilor

// survenite în programele JavaScript

function Jurnal() {

Page 313: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 313

// date-membru

this.cerere = null; // obiectul ce va face cererea POST // spre server

// metode

this.serializeaza = se�����!��!�C �� �������!��!� �������

&��'3������!��!� 3������!��!�C �� 3������!��!� �������

}

// metoda de stocare a datelor despre o eroare

// într-un document XML

�� .�������!��!� �� ����� ;���� �� 61�/

function serializeaza (eroare) {

var xml = '<eroare><nume>' + eroare.name + '</nume>\n' +

'<mesaj>' + eroare.message +'</mesaj>\n';

� .������'�������/ 0 �� �-��� ���� ������!���� ������

xml += '<loc>' + eroare.location + '</loc>\n';

}

if (eroare.navigator) {

�� �-��� �� ������� ������ ����(ator

xml += '<client>' + eroare.navigator + '</client>\n';

}

xml += '</eroare>';

return xml;

}

// metoda de jurnalizare (trimite spre serverul Web

�� ������� �������!�� �� ������� 61�/

function jurnalizeaza (eroare) {

�� ���(�im cererea

if (window.XMLHttpRequest) {

this.cerere = new XMLHttpRequest ();

this.cerere.overrideMimeType ('text/xml');

}

else if (window.ActiveXObject) {

this.cerere = new ActiveXObject ("Microsoft.XMLHTTP");

} else {

return; // nu e suportat AJAX

}

// stabilim metoda de transfer...

�� �� K��-ul programului care va prelua

Page 314: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 314

// datele transmise spre server

this.cerere.open ('POST', 'jurnal.pl.cgi', true);

// stabilim câmpurile-antet HTTP

this.cerere.setRequestHeader ('Referer', location.href);

�� ������ �� ������� 61�

this.cerere.setRequestHeader ('Content-type', 'text/xml');

�� ������� ������ �� ����� � ��&������� �����

this.cerere.onreadystatechange = trateazaJurnal;

�� �������� ����� 61� ���� ������� �� �� ��rver

this.cerere.send (this.serializeaza (eroare));

�� ������� �� ��� �� ������� � ���� ������

�� .���� ������� �� � �����!�� +� ��-' 4B ���, �����o���/

this.timeout = window.setTimeout ('anuleazaJurnalizare()', 10000);

}

�� ��������� ������� �� 3������!���

var jurnal = new Jurnal();

// fu����� �� ���������� � 3������!����

function anuleazaJurnalizare() {

jurnal.cerere.abort ();

���� .*V������!���� � ����'*/C

}

�� ������ �� ����� � ��&������� �� ����

function trateazaJurnal () {

if (jurnal.cerere.readyState != 4) {

return; // tr��� ���� +��� ��� ���

}

�� ���� ���� ���� �-� � ����, ���(�� �����-ul

window.clearTimeout (jurnal.timeout);

// transferul s-a efectuat complet (cerere finali!��/

� .3�����'������'���� � 7BB/ 0 �� �������� ��orile...

alert ('A intervenit o eroare la jurnalizare: ' + jurnal.cerere.status);

}

}

?�! � ��!�� ��� � ������� �� �� �� �� � ����� "#� � ��!������� � �� ��� �� �� �� � � ��� �� � �� �3$� � �� !����

Page 315: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 315

câmpului-antet Referer� 3������ �������C� �� !���� referitoare la eroare � ����� � !���8�� �� � �� �< ������< browser-ul etc. � va fi serializat via metoda serializeaza() ca document XML ce va fi prelucrat la nivelul �� �� ���� ,���� jurnalizeaza() va efectua transferul efectiv al datelor XML spre pr�' �!�� �� �� �� �� � 4��� � ��!�� � �-a realizat cu succes, vom semnala acest aspect utilizatorului � a se vedea metoda trateazaJurnal() �< � ���� � ���� �� � � ���� ��� � !�&!�! *-secunde, atunci el va fi abandonat � �������� ����� anuleazaJurnalizare().

Pe server, va fi invocat un script �G+ ������� � �!��8�� �� �� G ���modului CGI::Carp< ������ ��������� �� �� ���� �� � ���'�� ����� ���� �� ����� � �� 8� ���� � �� �� �� ��� ��� � în cazul nostru, în ��� �� error.log '�� �� �� ������� 5 � �'!�� � ����� ��� < � ��� � �� ��!����� �� �.�"< ���� ���� � ����� � 9�� ���� �� !���8������ �� ������ � � !� �&����� �� ��� .���$� �� ���� �� ����navigatoare): [Fri Dec 16 15:41:29 2005] [error] [client 193.230.10.1] [Fri Dec 16 15:41:29 2005] jurnal.pl.cgi: Eroare client: ReferenceError, mesaj: codNecunoscut is not defined, locatie: http://localhost/php-a/test_jurnal.html, functia: incorecta(), client: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5 at C:/apache2/htdocs/php-a/ jurnal.pl.cgi line 32, referer: http://localhost/php-a/test_jurnal.html

[Fri Dec 16 15:42:54 2005] [error] [client 193.231.33.1] [Fri Dec 16 15:42:54 2005] jurnal.pl.cgi: Eroare client: TypeError, mesaj: Object expected, locatie: http://localhost/php-a/test_jurnal.html, functia: incorecta(), client: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) at C:/apache2/htdocs/php-a/jurnal.pl.cgi line 32, referer: http://localhost/php-a/test_jurnal.html

� �' �!�� �� � � � � !��� �� listing:

#!/usr/bin/perl

# Pentru Windows: c:\apache2\perl\bin\perl

@ 2���� ���� �� ������� ���� �O2� �� ������� 61� �� ��itor

# la erorile survenite pe partea client (clientul fo������

# AJAX pentru a trimite datele spre scriere în

@ ��������-jurnal ale serverului Web)

Page 316: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 316

use CGI::Carp;

use XML::Simple;

@ ������� ����� 61� �� �� �����

read (STDIN, $date, $ENV{'CONTENT_LENGTH'});

my $metoda = $ENV{'REQUEST_METHOD'};

print "Content-type: text/xml\n\n";

if ($metoda eq 'PO2�*/ 0 @ �� ���������� � ������ ��� �O2�

eval {

my $continut = $ENV{'CONTENT_TYPE'};

� .D������ �� *�-�-��*/ 0 @ �� � ��������� �����

print "Status: 415 Unsupported Media Type\n\n";

}

@ �������� ����� 61� ������ �� �� ����nt

my $doc = XML::Simple::XMLin ($date);

@ ������� ������, ����3�� �� ������� ������ �aportate

my ($nume, $mesaj, $loc, $client) =

($doc->{'nume'}, $doc->{'mesaj'}, $doc->{'loc'}, $doc->{'client'});

@ '''�� �������� +� ������� �� 3���alizare

# al serverului Web

carp "Eroare client: $nume, mesaj: $mesaj, locatie: $loc, client: $client";

};

@ ���� ���� ���� �� ����� ����� �� ����� �� ������

if ($@) {

print "Status: 500 Internal server error\n\n";

croak "Eroare î� ����� 3������!����# DQ�C

} else {

# succes, trimitem codul de stare 204,

@ ��������� ��������� �� �� ����� ���� �� ��n����

print "Status: 204 No content\n\n";

}

} else {

@ � �� ������ � ����� �� ���� �� �O2�'''

print "Status: 405 Method not supported\n\n";

����A �1���� ��������# D������C

}

Page 317: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 317

$� �!� �� ����� �� !����� XML::Simple ��� � � ����� �� ����� ��������� "#� �������� �� �� ���� (mai multe detalii în lucrarea Buraga et al.< �--�:� 4� ���!���< �� �� ��� ���� ������ �� ���� ��������� � !����� �3$� � ���� ��� � ����� #+#% text/xml. În ��� �� � �� �< �� ��!������ � �' �!��� �� �� ���� ���� �� �� ��� �cores������� �2 )- < ������� )* � #���8��� �� � �� � � ��!�� ����� �� � ��� �� �� 8urnalizare al serverului Web prin intermediul metodelor carp() � croak() oferite de modulul CGI::Carp. Programul nu va re�� � � � ����� scriptului JavaScript care l-a invocat, aspect semnalat via codul de stare 204.

3 ���� ������ � ��!���!��� � ���� � !���� ��< ����C� �� ����������� �� � !���!��� � ���� ; ����� ���< �� !���� � !�� �� ����sunt stocate într-� ��� �� 8� ���� � � �� �< �!� jurnal.log � '�� ���� � �' �!�� ���� ; !�� �����< � script PHP nu are acces la fi�� ���-jurnal ale serverului Web, deci a fost adopta�� � !����� !��!���� �����-�� �� �� � �' �!��� ���� �� ��� � ����� �2 <?php

�S ������� ���� �O2� �� ������� 61� �� ����� �� �������

�������� �� ����� .������� ������� $V$6 �����

a trimite datele spre scriere într-�� ����� ��opriu)

*/

// locul unde e stocat documentul XML

define ('JURNAL', 'jurnal.log');

�� ��������� ����� ����

$metoda = $_SERVER['REQUEST_METHOD'];

�� ��� (����� ������� 61�

echo "Content-type: text/xml\n\n";

�� �� ���������� � ������ ��� �O2�

if (!strcmp($metoda, 'POST')) {

$continut = $_SERVER['CONTENT_TYPE'];

if (strcmp($continut, 'text/xml')) {

�� �� � ��������� �����

echo "Status: 415 Unsupported Media Type\n\n";

exit;

}

/� ����&���� ������� �� 3������!���

$fis = @fopen (JURNAL, 'a');

if (!$fis) {

Page 318: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 318

�� ������ �� ����&����� � ���������

echo "Status: 500 Internal server error\n\n";

exit;

}

�� ������� ����� �������� �� ����� ��� �O2�

$date = $HTTP_RAW_POST_DATA;

�� �������� ���� <O1 �� ���������

if (!($dom = domxml_open_mem($date))) {

// eroare de procesare

echo "Status: 500 Internal server error\n\n";

exit;

}

$radacina = $dom->document_element ();

$nume = $radacina->get_elements_by_tagname ('nume');

$mesaj = $radacina->get_elements_by_tagname ('mesaj');

�� ������ +� ����� �� ��������� ������ ������

@fwrite ($fis, 'Nume: ' . $nume[0]->get_content() .

', mesaj: ' . $mesaj[0]->get_content() . "\n");

fclose ($fis);

// gata cu succes (trimitem codul de stare 204,

�� ��������� ��������� �� �� ����� ���� �� ��n����/

print "Status: 204 No content\n\n";

} else {

�� � �� ������ � ����� �� ���� �� �O2�'''

echo "Status: 405 Method not supported\n\n";

}

?>

Preluarea datelor transmise de client prin metoda POST se reali����� ���� ���� � ������ $HTTP_RAW_POST_DATA. Aceste date sunt, de fapt, marcate � "#� � ' ��� !����� get_elements_by_tagname(), ofe �� �� 43#<��� �� ��� � ��� ��-8� ��� �� � � ������ ��� �� �< posibilele erori sunt semnalate prin intermediul codurilor de stare HTTP.

�� ����� ������ �����< �� ��! �����-�� �� �� scriptului JavaScript �� � �������� !�� � �� ����� � �� �� �� � �&����iilor survenite la nivelul navigatorului. Acest cod este încapsulat în do��!���� "��#� � !��� 2

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

Page 319: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 319

lang="ro" xml:lang="ro">

<head>

<title>Testarea jurna��!����������

<script type="text/javascript" src="jurnal.js"></script>

<!-- Un exemplu de cod JavaScript care va cauza erori -->

<script type="text/javascript">

�� ������ �� ����� � �������� �������� .�� ����� ��

// jurnal pentru a consemna erorile �� �� ��rver)

function trateazaErori (mesaj, uri, linie) {

var eroare = new Error (mesaj);

eroare.location = uri + ', linia: ' + linie;

jurnal.jurnalizeaza (eroare);

�� �����!�� �� ����!�����

avertizeazaUtilizatorul (eroare);

return true;

}

// or��� ������ �� ���!� �-������ ������� �� �����

// a erorii

window.onerror = trateazaErori;

function incorecta () {

�% 0 �� +������� �� �-����� �����'''

codNecunoscut ();

}

catch (eroare) { // prindem eroarea...

�� ���� ���� ���������� *�������*, ����(��� ��� ���

eroare.location = location.href + ', functia: incorecta()';

eroare.navigator = navigator.userAgent;

jurnal.jurnalizeaza (eroare);

avertizeazaUtilizatorul (eroare);

}

}

�� ������ �� �����!��� .��������"/ � ����!�torului

function avertizeazaUtilizatorul (eroare) {

document.write ('A intervenit o eroare! O vom semnala programatorilor: ' + eroare.location);

�� ��������� ����(����� ���� � ��(��� ��� ����� C/

Page 320: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 320

location.href = '/';

}

</script>

</head>

<body>

���T������� �� ���!�� ����� V���2����'''����

<!-- �-����� ������ V���2���� ��������./ -->

<script type="text/javascript">incorecta()</script>

</body>

</html>

#�� � ���� ��� �� �&�!���� �� ���� ����� � �&��� �� aportarea unor �� !�� ���ionale (e.g.< ������� ��������� ���-����< � ��� ����lingvistice ale vizitatorului etc.) cu scopul de monitorizare/ameliorare a inter���� �� ������� ���

��!���������"���� ���� ���)�������������� ������������a�����.�#

Printre cele mai impor���� ������� �� �� � � ���� �� �� �� ��� ����!� � � !���� ��� 9K��(���< �-- :2

• ���� �� ��� �� �� �' ��' � prin intermediul obiectului XMLHttpRequest � � !������� 43# �� ��� !����� ��� � �'!��� �� ����!��< �� � �� �� �' ����!���� �� �� ��esar a fi 9 �:��� ��� �� �� �� �� L � ������ �'��� ���� ����� �� � ��������� ������� � �� ����� ����� E��!� �� �� ��F ��� ��'(bookmarking-ul poate fi compromis);

• ���������� � ���� �� ���� ������ ��� � �� � ����a�� ��� � ��Web � o ��������� ,� �� ���� � ������� �� �������� �� ��'��� �� ����� ��!� !��� � ��� � ��������������� ��������� ������� �� 9K� �'�< �-- :L ��� ��< �� ������ �� � ������� �utilizatori are loc prin interm���� �� �� ���� ���< �������rile (expectations: ������ �� � ���� �� � !���L �� ���� ���������� � ���� �� ������� �'��!��� �� � ����� ���� � �'�� � ����� �� � ����� � ����� �� �� �e�� �� ������� �� 9K� �'�< �--��:L

• oferirea de alternative la AJAX, când suportul pentru acesta nu �&��� !���!���� � � ���� ��� ��� �� ������ �� � � �� browser ofe � ���� � ��� � �.�"L �� ���!���< ������� �� � ����� �� ���������� ������ �� ��� � � � �' �!��� .���$� ��L

• eliminarea paginilor de confirmare � ������ �.�"< �!� ��paginilor de confirmare sau de semnalare a unor erori scade, ceea ce ������ �� � �� ����� !� ��� �� ������� ���

Page 321: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 321

; ���� �� � ����� � ���� �� � ����� � � �������� �.�" 9�������a�� E����F ���:< �� ��� !���� 9#���!���< �-- :2

• !!�� �� � ������ �� � ��'��� � �� �� � apli���� ���� ���� �� ������ � �!� ��� ������ �� ������� ului, volumul �� ���� � ��!� � !�� � ��� �� �� �C� !� ���� �����L

• ����� �� �� !�� �� �� ����� ��� � metaforele de inter������ ���� �� �� � �������< ������� �� ��� �� �� � ���� �� ��������� � �� ��� �� ���� 9�� ����� ��#� versus AJAX versus ������� ��n�������:L

• evitarea confuziilor, � ������ �� ������� �� �� ��������H������ � ������� �� � ���� �� �� ������ �� ����� ���!�� � �� !����� � � ������� ���L

• eliminarea distragerii utilizatorului � e.g.< ����� �� �� �!��gratuite;

• adoptarea tehnologiilor AJAX ��� � � ���� �� ����������< �doar de dragul tehnologiei.

4� � ��������� � ������ ��� �&�����< �� ��!� �! �� ���� �� ����(detalii pe situl AJAXPatterns.org):

• tratarea evenimentelor la nivel local � pe cât posibil, evenimentele survenite trebuie rezolvate la nivelul clien����< �� � � �� �� �� � 9�< !��i��< � ���� � : ��� � ������-server;

• ��!� ������ �� �� ���� � �������� � mai ales în ceea ce � ����� �������� ��� �� � ' �� ���� �� n�� ����� 9��exemplu, ofer� �� !�� �� � �� �� i!���� ���< � ���! �������� �:< ��'��� �� �� � ��� �� �� �� ����� �� �� �� ��L�� !���� ��� �� �� ���!�� �� �� ��� �� �� �� ���� ��utilizatorul a efectuat ul�!� �� !����� �< ���� �� ����� �!�� � ���� ��� � ����a��L

• anticiparea download-� �� 9� ���� �� �� ������ �� �� � ��������:� ������� ��� � ���� �� � � ������ �������� ���� ���� � ��care le va realiza vizitato �� � �� �� ��!�� �� � �������L

• � ��!�� �� �&����� � datelor spre server � ������� �� � ���� ����� ���������� �� a solicita explicit transfe �� �� !���� � �numai când survin diverse evenimente ori la fiecare nou input al vizitatorului;

• ��� �� �� �������� �� bookmarking � utilizatorii tr���� �� �������� �� ������� � �� �� ��8��� E��!� �� �� ��F � ivind �������L ���� �������� ��� �� ���� �� � ���� � �� �� ��

Page 322: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 322

obiectul XMLHttpRequest � ����� �� � ������� !����� � ��� ��URI-ului apli�����

De asemenea, pot � �� !����� � �� � �� � �� �� ���� � � ������ (Mahemoff, 2005):

• ����� �� � �� ������ �$$ � pe cât posibil, trebuie utilizate � �� ������ �� ��� ���� �� ������� �� �$$ ��� � � ���� ��������� � �� � �� ���� �< ������ � �� �-��� � !�� � �� ���� �9������� � � !� � ����� � �������� �� ������ivul de redare);

• adoptarea principiilor de utilizabilitate � �� � � ����� �������� ���������< ������� �� ������ !��� ����� ���< ��������Web vor trebui concepute avându-se în vedere utilizabilitatea, în '�� ��< � ��������atea, în special (detalii în Buraga, 2005);

• ��� �� E�C ���F �� !��� ������ � pentru ca utili���� �� �������� �� ��� � � �� !���� ���� �� �������< � ������������� ���� ���� ������ !��rtante (e.g.< � ��� < ����<parametri de stare/control etc.);

• oferirea de indicii privind ce date au fost deja transmise serverului � �� ���� �� ���� � ������� � 9pending) pentru a fi transmise � ������� �� � ���� �� ������� ��� �� � �� � �� ���� ������� ��� �da�� �� !���� �� ���� � ��!�� �� ������ ��� � �� �� �� �

4��'� < �� ��� ������ ��� �� ������� �� �� �����< ���� �� � ����!�� � ���� ������� � ����� �������� ��n�������2 drag & drop, popup data input, popup information, highlighting, auto-completion etc.

3.6. AJAX în contextul REST

����! ����� � �� – via AJAX – se pot implementa servicii Web asincrone, în stilul REST (a se revedea cele descrise în subcapitolul anterior).

�������� ��losind AJAX pot fi considerate servicii Web implementate ���� ! �%$�< ���� ��� �� ���!��� �� ���� �� �������� � !� ��� �XML prin intermediul protocolului HTTP, respectându-se paradigma client/server. Orice resurse vehiculate sunt adresate via identificatori uniformi de resurse.

Orice servicii Web oferite via REST – � ���! ���� ���� �� ������� ��Amazon, del.icio.us, eBay, Flickr, Meerkat (oferit de O’Reilly), Yahoo! sau Upcoming.com – ��� � ��� �&�������� � �� !���� �.�"�

Page 323: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 323

��6��5���� �������� �������������)��"�����.�#

�.�" �� ���� �� �� � ��!�������-cheie ale „noului” val de ������ ����� � ����!����� Data Web-ului. O serie dintre siturile !�8� � �'������� �.�" � ���� �� ��� ��i���� �� � �� �� ������!���&� � !����!��� �� 4 ��� �&�!��� ��abile, putem enumera:

• 24SevenOffice � �� ��� ��� � !��'�!���� ������ �� ����(CRM � Customer Relationship Management);

• A9.com � sit e-business subsidiar Amazon; • EpiphanyRadio � �� �� �� ��� �!�� �� ��b; • Flickr.com � �� �� � '��� � 9������� �: � �� �� ��8� � �� !�'<

adnotate liber de utilizatori; • Google Maps � �� ��� G��'�� ��� � �� !�� ��� i��� � �� �� �

� ������� ����'��' ����L • Google Suggest � serviciu Google punând la dispoz�� ������ �� �

���� �� ��'��� �� �� !� � �� ����� �� �� ���< � ����� ��datele specificate de utilizatori;

• Gmail � serviciu Google destinat managementului de mesaje de ����� ����� ����

• Upcoming.com � �� �� � ��� �� ������� ������ � de evenimente. 4�8� �&��� ��� �� ��� � �� ��� � 9frameworks: �� � ��� � !������� ��

� �' �!� � ����� � �������� �.�"� ��� � ������� ������� �� ���� .���$� �� � ���! Google AJAXSLT,

Prototype, Rico sau Sarissa. De asemenea, se poate recurge la func�������implementate la nivel de server: AjaxAnywhere, AJAX.NET, CL-Ajax, Direct Web Remoting (DWR), JavaScript Remote Scripting (JSRS), SAJAX, ThinkCAP Minerva ori XAJAX (detalii în Zametti et al., 2005). De asemenea, sunt ������� �����ii implementate integral în JavaScript, precum DOJO �Qooxdoo.

3 ���� ���� �� ��� �� �.�" ���� ��� ��� 'C� �� ����i��������standardizate de modulul Load & Save 9$�����( � ��'� < �--): �� ���!��� 43# – ����� �< � ��8���� �� %)" (ECMAScript for XML), ��� �� ������� �� �����i����� %�#�$� �� � ��8� !���!���� �Firefox, începând cu versiunea 1.5 (detalii la ECMA).

��7���� ������������� ������������������������������ ���.�#

Una dintre problemele importante care trebuie rezolvate este cea referitoare �� ���� ����� �������� ��� 'C� �� ���� �� ������' �.�"� 4� ����

Page 324: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 324

!� !���� � < ��'���� ��� ��� !�� ��!�� ��� �� �� �&����� �programelor JavaScript, astfel încât nu pot fi realizate cereri HTTP via obiectul XMLHttpRequest ���C� ���� � �� �� ��� �� � '�������� ����-!���� � �� � � �� ����� �� � � ������< � ��� � ������ � !�� ���� �� �� �� ��� �&�� �< � ���! ���� �� �� �!���< G��'�� � Yahoo!. %&��� !� !���� ����� �� � ��� � adoptate pentru a rezolva acest inconvenient, cele mai frecvent folosite în prezent fiind (detalii în Levitt, 2005):

• ����� �� �� ������ �� !��� � 9application proxies) – cererile ��������� � �� !���� �.�" �� � � ������ �� � ������� ���s����� �� ���� ��� �< ������� �� � �� ����� ���� �� �� �������� �� � � �� ��� � ���������� ����!����� �� � � ������ ����cerere;

• �8���� �� ���'� ��� �� �� ��� ��� 9� �����< ������:< ��������C� � �� �� � � � ����� �� �.�" �� �� � 8���< � !��� ���� ��< �� � �� ���� ����a�� ���< �� � ������� �� ��L

• ��� '� �� �� ����� ���� ���� �� � ���� ��� �< � ���! ����utilizând invocarea la cerere a programelor JavaScript via elementul XHTML <script>< �� � � ����ita XMLHttpRequest).

� �� !���� �������� �� !��� �< �������� �� -un limbaj � ���! ���< �� ��� ����� ���� �� �� �� � G%� ��� �3$� ��proto������� ���� � ����$� 3 ����� �� ������ �� proxy ���� � !���� ��2

// adresa Web a serviciului invocat

define ('URL', 'http://api.local.yahoo.com/');

// construim URI-ul ce va fi folosit

// pentru a realiza cererea,

// preluând calea spre serviciul dorit a fi invocat

$uri = URL . $_GET['path'];

�� ������� � ������� ���

$sesiune = curl_init ($uri);

�� ��� ������ ��������� ����������� ������

curl_setopt ($sesiune, CURLOPT_HEADER, false);

curl_setopt ($sesiune, CURLOPT_RETURNTRANSFER, true);

�� �����!�� ������� � �����, �������� ���������

$xml = curl_exec ($sesiune);

�� ������� ��������� 61� ������

Page 325: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 325

header ('Content-Type: text/xml');

echo $xml;

// închidem sesiunea Curl

curl_close ($sesiune);

� �' �!�� ��� �� !� ��� ��������� �&���� curl – disponibi�� � ��� ��PEAR (PHP Extensions and Applications Repository): http://pear.php.net. Un script �� � �� ����� ������ ������ ������ �� ������ �� 4��'� < ���������� � �&�� ��� � � ����� ����� � �� � �3$�< ������� �� -o !�� � ���u ����

���� ! ����� 9�-- :< ��� .���$� �� �� � �������� � G%� �� !�-diarul PHP pentru a invoca serviciul Geocode oferit de Yahoo! (folosind paradigma REST) sunt:

...

// pregatim parametrii de invocare a serviciului REST

uri_proxy = 'http://www.sit.ro/proxy.php?path=';

// parametrul de intrare al serviciului Geocode

adr = encodeURI ('1000 S Congress Avenue, Austin, TX');

// calea spre serviciul Web

cale = "MapsService/V1/geocode?appid=YahooDemo&location=" +

adr);

�� ����� ������� ������� ���-%-ului PHP

cerere_proxy = encodeURI (cale);

// transmiterea cererii via obiectul XMLHttpRequest

cerere.open ("GET", uri_proxy + cerere_proxy, true);

...

În cele descrise mai sus, adresa scriptului PHP ce va fi invocat este http://www.sit/proxy.php.

3.9. În loc de concluzii…

$��� �� ������' �.�" � ���!��� ����� �� ����� � � �������� ��� ��� � � �� ����� ��'��� �� ������� ��� 4��� � ����� �������� ��� � ������� ���������� �� ����� � � !�� ����� pagina (docu-mentul) ca fiind unitatea ato!�� �� �� ��< �� �.�" ������ ��� �� ����dat de componenta ���< ���� �� �� ���� ��� ����� � !�� ���� ��< �� .���$� ��< � ��� �� �� ����!�� "��#�� ��!��-����� � �� � ���� ��!���� ������� �� � ����� ����� � ����� �����!����� �� �� ���� '�� ��� �� �� ������ �� ������� ��< �������� � ���� � �� �� ���C� � ��������� �� � � �� ���� �� � ���!���

Page 326: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 326

pagina. Acest punct de vedere se apropie de cel uzual, bazat pe programarea ������ �� ���!����

4 ��� ����'� ���� �� ���!��� � ����� ��� � ��!� ���2 ����� ��<�� ������ ��'��� �� �� �� ��< � �� �� �� ���� �� ������� �� ��� ������9� � < �� ���� � �� ��� ������ ��� ����:� ; ����� !��< ������� �������� � ����� ��� �� �� �� � ��� ��� 93-tier):

• ������� �� � � �� ������� � �� ���� �� � � �� !�� ����� �� ����� �� �!�� � ���� �� �� �������� desktop; prin intermediul unor ��� E������F< ���������� ������ �e la componentele rulate la ��� �� �� �� ��� ����� ' ��� .���$� ��L

• !������ ������� �� � �������� � ���� �� ��� � �� ���� � � �� ������������ ��� ���� �� ���� ���� �� ������ �� � �' �-mul JavaScript recurgând la facili����� ���� �� ������� �� �.�"(poate fi considerat un gen de middleware);

• componentele de interes sunt reprezentate de servicii rulând pe �� �� 9�:< �����C� ���� ! �� ��'!� �%$� � �� !���!����� în diverse limbaje de programare. Rezultatul acestor componente ����� � �� ������ �� ���� �H��� !���-date (e.g., mesaje de stare, maniere de redare sau chiar cod-�� ��:�

3 ��!�� ��� �� � !�� � � ������� � ��� ������ �� �.�" �������� � � �������� ��� ���� ���!��� � ������� � !��� �

Tab���� 1 ���-�� 6���� ����� �� ��������� -� �� ��� #�� ��� � ��ale � ����� �ecurgând la AJAX

�������� ��� � ������� �������� ��� � �.�" 5����� �� �� ����� ���� pagina Web

5����� �� �� ����� ���� compo-nenta (serviciul) Web

+� � �� ������� ��� ��� ���� -tite în �������

+� � �� ������� ��� ��� ���� -tite în evenimente

Codul la nivelul clientului reali-����� � � ���� ����� – even-tual via expresii regulate

Codul la nivelul clientului poate realiza v���� < ���ificarea fluxu-lui (flow), aranjamentul datelor (layout), interschimb de date – even-tual via XML

Butoanele de tip submit conduc la �&����� �� ���� �� ��� �� �� �� < preluând datele introduse de utili-zator

Butoanele de tip submit sunt înlo-cuite de butoane de salvare (save) a datelor modificate de utilizator

Page 327: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 327

���������� �� ���� ������ �� ��!� ������ �� �������� �� �' ��' 9�� '�� ���� � ����!��diferit)

4�� � �'!��� �� ��'� ��� ��!� �������� �� � !�!�� ���(rezultatele primite asincron de la server sunt integrate în codul ��������� document)

; �����< � �.�" ���������� �� � ���� �� � � ����� a��< !� !���decât în alte cazuri, utilizabilitatea ������� ��� �� �� � � ��������� �.�"������ � ��� !�� �� ����� � � � !�� � �� ���� � � � �� ������Web, principalele pro���!� �� ���� ��'��� �� ��'� � � �� !��� � ���� 9����: ����� #� !��� ���C� ��C�< ������� ��� � �� ���serverului poate fi mai lent decât ne-�! �����ta, astfel încât trebuie analizate momentele în care datele introduse de utilizator vor fi efectiv transmise c�tre programul rulând pe server. Viitorul apropiat va aduce – via AJAX – la constituirea de apli��� ������ � � �� ����� ��!���&� �� ������� �� �< ����!���< �� � ��-�� � �� ��C� � �� �� �!��� � ������� �� �������� �< �C� � ��biblioteci specializate de cod.

������ ��

Abbas, A., Grid Computing: A Practical Guide to Technology and Applications, Charles River Media, 2004

Albin, S., The Art of Software Architecture: Design Methods and Techniques, Wiley & Sons, 2003

Alboaie, L.; Buraga, S., „Dialoguri despre SOAP”, NET Report, februarie 2003: http://www.infoiasi.ro/~busaco/publications/articles/SOAP.pdf

Alboaie, S.; Buraga, S.; Alboaie, L.; „An XML-based Serialization of Information Exchanged by Software Agents”, International Informatica Journal, vol. 28, nr. 1, aprilie 2004

Anghel, T., Programarea în PHP. Ghid practic� ����� ����� ��� Ash, L., The Web Testing Companion: The Insider’s Guide to Efficient and Effective Tests,

Wiley & Sons, 2003 Baekdal, T., XMLHttpRequest Usability Guidelines, Baekdal.com, 2005 Booth, D. et al. (eds.), Web Services Architecture, W3C Working Draft, Boston, 2003:

http://www.w3.org/TR/ws-arch/ Booth, D.; Liu, C. (eds.), Web Services Description Language (WSDL) Version 2.0 Part

0: Primer, W3C Working Draft, Boston, 2005: http://www.w3.org/ TR/wsdl20-primer Brut, M.; Buraga, S., ���"������ multimedia pe Web� ����� ����� ���3�

http://www.infoiasi.ro/~multimedia/ Buraga, S., Tehnologii Web� ������ ��� ���������� ����� http://www.infoiasi.ro/

~busaco/books/web.html

Page 328: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 328

Buraga, S., Proiectarea siturilor Web ������� � ����� ����� ����� ��� � http://www.infoiasi.ro/~design/

Buraga, S. et al., ���������� �� � �� �� ����� ����� ����� �����http://www.infoiasi.ro/~cgi/

Buraga S., „Suportul pentru implementare”, în Pribeanu, C. (ed.), Introducere în ������������� ��-calculator, Matrix Rom, ���������� ���4

Buraga, S. (coord.), ��������� �� �� � ���� ����� ����� ���4� http://www.infoiasi.ro/ ~phpapps/

Buraga, S. (coord.), ������ �� �� � ���� ������� ������������ �� ������������, Polirom, ����� ���3� http://www.infoiasi.ro/~busaco/books/webapps/

Buraga, S. (coord.), �������� ������� � ����������� �� ��"#������� ������������ ��, ������ ��� ���������� ���>

Chinnici, R. et al. (eds.), Web Services Description Language (WSDL) Version 1.2 Part 1: Core Language, W3C Working Draft, Boston, 2003: http://www.w3.org/ TR/wsdl12

2����� �#� ����#� � �������� �� ���������� ����� ����� ���4 Coyle, F., XML, Web Services, and the Data Revolution, Addison-Wesley, 2002 Dubinko, M. et al. (eds.), XForms 1.0, W3C Recommendation, Boston, 2003:

http://www.w3.org/TR/xforms/ DuCharme, B., Amazon’s Web Services and XSLT, XML.com, 2004: http://www.xml.com/

lpt/a/2004/08/04/tr-xml.html Dumbill, E. et al., Programming Web Services with XML-RPC, O’Reilly, 2001 Eernisse, M., A Simpler Ajax Path, OnLamp.com, 2005: http://www.onlamp.com/

pub/a/onlamp/2005/05/19/xmlhttprequest.html Erl, T., Service-Oriented Architecture: Concepts, Technology, and Design, Prentice Hall

PTR, 2005 Esposito, D., „Script Callbacks in ASP.NET”, MSDN Magazine, august 2004 Fielding, R., Architectural Styles and the Design of Network-based Software

Architectures, lucrare de doctorat, 2000: http://www.ics.uci.edu/~fielding/pubs/ dissertation/top.htm

Foster, I.; Tuecke, S., „Describing the Elephant, The Different Faces of IT as Service”, Enterprise Distributed Computing, vol. 3, nr. 6, iulie/august 2005

Gregorio, J., How to Create a REST Protocol, XML.com, 2004: http://www.xml.com/ lpt/a/2004/12/01/restful-web.html

Guruge, A., Web Services: Theory and Practice, Digital Press, 2004 He, H., What is Service-Oriented Architecture?, XML.com, 2003: http://webservices.xml.com/

pub/a/ws/2003/09/30/soa.html He, H., Implementing REST Web Services: Best Practices and Guidelines, XML.com,

2004: http://www.xml.com/pub/a/2004/08/11/rest.html Jeffery, K.; Kacsuk, P., „Grids: The Next Generation”, ERCIM News, nr. 59, 2004 Jorgensen, D., Developing .NET Web Services with XML, Syngress Publishing, 2002 Kulchenko, P.; Ray, R., Programming Web Services with Perl, O’Reilly, 2002 Levitt, J., Fixing AJAX: XMLHttpRequest Considered Harmful, XML.com, 2005:

http://www.xml.com/pub/a/2005/11/09/fixing-ajax-xmlhttprequest-considered-harmful.html

Page 329: Sabin Buraga: 'Tehnologii XML

XML pentru servicii Web: SOA, REST, AJAX 329

Linthicum, D., Enterprise Application Integration, Addison-Wesley, 1999 Mahemoff, M., „AJAX Patterns: Design Patterns for AJAX Usability”, Software As

She’s Developed Weblog, AJAXPatterns.org, 2005 Mahmoud, Q., Service-Oriented Architecture (SOA) and Web Services: The Road to

Enterprise Application Integration (WAI), Sun, 2005: http://java.sun.com/developer/ technical/WebServices/soa/

McLellan, D., Very Dynamic Web Interfaces, XML.com, 2005: http://www.xml.com/ pub/a/2005/02/09/xml-http-request.html

Mitra, N. (ed.), SOAP Version 1.2 Part 0: Primer, W3C Recommendation, Boston, 2003: http://www.w3.org/TR/soap12-part0/

Mueller, J.P., Mining Google Web Services: Building Applications with the Google API, Sybex, 2004

Stenback, J.; Heninger, A., Document Object Model (DOM) Level 3 Load and Save Specification � Version 1.0, W3C Recommendation, Boston, 2004: http://www.w3.org/ TR/DOM-Level-3-LS

Strong, P., „Enterprise Grid Computing”, Enterprise Distributed Computing, vol. 3, nr. 6, iulie/august 2005

<������ =# et al., Java de la 0 la expert� ����� ����� ���4 Vârlan, C., Macromedia Flash. Concepte, exemple, studii de caz� ����� ����� ���3 Weerawarana, S. et al., Web Services Platform Architecture, Prentice Hall PTR, 2005 Völter, M.; Schmid, A.; Wolff, E., Server Component Patterns, Wiley & Sons, 2002 Zametti, F. et al., Survey of AJAX/JavaScript Libraries, OSAF.com, 2005:

http://wiki.osafoundation.org/bin/view/Projects/AjaxLibraries * * *, Ajaxian: http://www.ajaxian.com/ * * *, Amazon Web Services: http://www.amazon.com/webservices/ * * *, del.icio.us API: http://del.icio.us/help/api/ * * *, Flex Developer Center: http://www.macromedia.com/devnet/flex/ * * *, Global Grid Forum: http://www.gridforum.org/ * * *, LukeW Interface Design:: http://www.lukew.com/ * * *, Yahoo! Developer Network: http://developer.yahoo.net/ * * *, ECMA (European Computer Manufacturers Association):

http://www.ecma-international.org/ * * *, Flickr API Documentation: http://www.flickr.com/services/api/ * * *, Google Web API: http://www.google.com/apis/ * * *, ��������#� ��-I: http://www.ws-i.org/ * * *, Microsoft Developer Network (MSDN): http://msdn.microsoft.com/ * * *, NuSOAP: http://dietrich.ganx4.com/nusoap/ * * *, Oracle Technology Network: http://www.oracle.com/technology/ * * *, PEAR::SOAP: http://pear.php.net/package-info.php?package=SOAP * * *, SOA Web Services Journal: http://webservices.sys-con.com/ * * *, ������� �� ���������� �$� % http://www.AJAXPatterns.org/ * * *, UDDI (Universal Description, Discovery, and Integration): http://www.uddi.org/

Page 330: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 330

* * *, Upcoming.com APIs: http://upcoming.org/services/api/ * * *, Waterken’s Web-calculus: http://www.waterken.com/dev/Web/Calculus/ * * *, World-Wide Web Consortium, Boston, 2006: http://www.w3.org/ * * *, XMethods: http://www.xmethods.net/ * * *, XUL (Extensible User-interface Language): http://www.mozilla.org/ projects/xul/

Page 331: Sabin Buraga: 'Tehnologii XML

Capitolul 5

C��������-ul semantic

E�� ������� ����� �� ��� �� ����� ����� �� ������F Antonio Porchia

Web-� ���� � �� ������� ����� ���-numitul stadiu de Web al datelor (Data Web�� ����� ������!����� � 5�0-ului semantic. Materialul va detalia unele aspecte privind specificarea meta-����� �� ��!���� � ������ � ����� �� ��������� �� (���� � ������� � �������practice. Se vor prezenta detalii referitoare la tipurile de ontologii (e.g., voca0����� �������� ��'����� �� � ���0������� �� �����tare �(������ � ��!���# &� ��������� �� (����'��'� ������� ������

privitoare la specificarea în limbajul standardizat OWL (Web Ontology Language� � ��� ���������� ��!���� �� ���0������� �(�������� ��

����������� ����� 0�'ate pe reguli.

Cuvinte-cheie� 5�0 ��������� ������� ����������� ����-date, ontologii, RDF, OWL, inginerie.

1. Introducere

���� �C� ������! ���� � +�� �� �< � ������< ���� � ���< � 'Cndim automat la partajarea ��������� 9������� !���� ������� �� ����icare, ����� �< �'�� � � �� � ��� � � ������ �:� %����< ������ ������� � ���fi efectuate doar procesând documente Web care folosesc vechile marcaje HTML – Hypertext Markup Language –, deoarece limbajul HTML este un limbaj pentru prezentarea dat��� < � ������ ����� ��� ����� ����!��� 9������� : ���stora.

Nici meta-�!��8�� "#� � ��� �< � !�� � ���< ���� � � ��� �� ��semantici marcatorilor XML pe care- ����! !�'� � ������ ��!C� �

Page 332: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 332

responsabilitatea utilizatorului asoc� �� �� ������ 9meaning: ���� � tag la �� � ��� '� 9��� � ����� ���� � K� �'�< �--)�:� #�8� ����� �!��8��� bazate pe XML, precum SVG ori SMIL, ambele folosite pentru redarea datelor, definesc – într-� !�� �� !��< � ��� �� ����������r puse la ������� �� ��� � ���� ��� ��� – ��!��� ��� � ���� � ���� ����������� � e�������

#� !��� ���C� ��C�< �����! �� � ����� �� � ���� �� �� �!������� ���� �� � �� !������ 9information overload: � �� �&����� �� ���-��� �� C� ��������< ��� ���&��� 9���-����� ����!� �� �� ������� – stovepipe systems:< �� !���� ����C� � �� ��8��� �� �������� � #�!���< �� ������� � �' e'� � � ��� � � �������� ������ �� ����

Ne�������� !����� � �2 • posibilitat�� �� � ��� '� �� � !�� � �� ����� � �� ���� � ���� � ��

date, ceea ce conduce la crearea de vocabulare de termeni descriind proprie���< ��!�< ��! ����L

• �&����� �� !����! �� ������� � � ������ �� � ��� ��<pentru a crea premisele d�� � ����� �� �� ���� �� � '�-nizare a datelor.

������< ��!������ ������� �� < ��� ���� � �� ���� �� ��� �������!��< � ���� �� �� ��8��� ������ conceptualizare � �� !��� 9!� !���<��C� ��!�< �C� � !���� � e��� �� �� ������� �� ������� +� ������� ��� ���������:� ������� !���� �&����� �� �������� ��!�< � �� �����!� �� ���� C'� � � �� ��� � ��������� ��!� ��� � ������ � ����� �� �� !���� ?������� �� ��!� '� ������ �� ���!������������ 9�������< !� ���� ����: �� ������ ������ ��C� ��� �� ��!���� < �C� � ��� � ������� 9������ �� �������� ����� � �� ���dintr-un voca���� ������ ��8� � ��� �� �� ��!���� �!�� ���industrii). Cadrul conceptual comun ne �� ��'� � �� �����'� ���� !���� � �� � �������� �� ��������� �ale nespecificate (unspecified background knowledge: 9��� 4��! � #� ��< �--�:�

4� �!� ��� ������ �� !������ � ����� � ���H� ������ �� ��� �!��� 9������< ���� ! �� !���� �� �� � � ������ator le-ar putea prelua din Encyclopædia Britannica, s-� ����� ������ �� !�� ��� �� �����&����� � � ���� ����'�:� #� !���< �� !���� �� Ebackground” – deseori, implicit cunoscute de scriitorul/cititorul uman – nu sunt accesibile ��� � ��������� < ����� !����� �� � ������ � !�� � ����!���<���'���< !��� ��� � ��!��� ��i��� � ����� ����

?�! ����� � � ��� �&�!��� � ���� ���� "#� �!���< ��C� �� !�� !���� �2

Page 333: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 333

<title><ref src="cv.html">CV-ul meu</ref></title>

;� ��� �� �� �� � �� ���! �� ��� ������< � � !�� C�< �� ���� �2din punct de vedere conceptual, marcatorul <ref> este parte din <title> ori altceva? De asemenea, cv.html �� ���� � ��� �� 9� �����:< � �����de obiecte< � �� ��� ��� � �����1 3 �� ����� ����eva?

; ���� �� � ����� �������� ��< ����! �� ���� <title> este similar elementului <title> din XHTML? Autorul marcajului este cel care l-� �publicat pe Web?

Apare astfel necesitatea de a exprima semantica într-un mod formal,

� ������� �� ��� � ��������� � 4��� ������� !��rtante sunt: • ������� (relation) dintre conceptele vehiculate – de exemplu, pentru a

��� �� !��� E��� ��F � ����! �� E� ����'�F< � �C��������! E� ����'�F �����! �� ����� acestuia cu termenul „poligon”;

• constrângerea sau ���������� (constraint) – ��� � � ���� �������� � E� ����'�F � E��� ��F< ��! ��� � ��� ��� � ���� � ���'������� ���� �� � ����� ��� atului.

����� �� ���< ������ ��������� �� � ���a ce va fi Web-ul semantic sau The Web of Meaning, conform celor declarate de Berners-Lee (în Berners et al., �--*:� 5 � ! ��� ���� �� ����! ��� '� �� � ��������� �� � �� �� !�� �� ����� �� �� !���� �� ��� � identificate �� ���< ��� ���� u pot fi accesate via Web. Pentru aceasta, vom utiliza RDF – Resource Description Framework 9#���� � #��� < �--):� #� ��8��� �&stente pot fi astfel extinse � ����'� �� �� ����� ��!����< ���� � ������� �H��� �����resurselor Web existente. Aceste aspecte vor fi surprinse în prima parte a ��������� �� �����

�� ����� ������ !�� ��� ���� �� ����! !����� �� ��� ��!����� !����< ��� 'C� �� ontologii< �������� � ���� �� ������������ �� !���� ���� 4��� ��! ��! �����< �tologiile vor putea fi exprimate într-� �� !� !��� � � � ���� ��� �� ��� � ��� �� ����� ����D� �< ���&�bazându-se pe meta-limbajul XML. Ontologiile vor complementa vocabularele ������� �� ����� 9E�������� �� !���F �������� ��� � !���:< ' ����� �!��8 ����� ���� �� !����� � � �����'�� < �� �� �� ���&�!��� � �&� !� ��!�����

Page 334: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 334

2. Spre Web-ul semantic

2.1. Punerea problemei

$���� �� � '� � � ����� ��� ������� �� �� ��� ��� �� ���� ������de a oferi o modalitate d� ��!��� � �� �!�� � �� ��8� ����������� � ���������� �&������ � !a� � ��� ���� � ���� ��calcul a computerelor conectate la Internet.

$����� ��� ������!��� ���� ��!��� � ��' 9����!���:marcate în limbaje precum HTML, WML sau SVG (detalii în Buraga, 2003b; K� �'�< �--)�L G� �!�(�< �--):< ���C� �� !�� ��&�����< ' �����H��� !���!��� ������� � � ���� � ������� ������!��� �� ��� �consumatorii umani. Principala activitate a calculatoarelor este aceea de a ��� ������ ������ � � �� � �� � ��� �� -� !�� � ����!��� ������!�� +�� !���� � ���� �'���� �� -� !�� ���'�� � � ���� ��poa�� � � ������� �� ��� � !���� ���� ! � ���� ��� ������� ���<Sir Tim Berners-Lee, Web-ul semantic �� ���� � �C�� �������� ���'�� � ���� � ��� ���� �� �� ���< ������� ��C��-se pe �� � ��� �� ������ �� ��� � !��� � � �� �� ����� �� �� � ; ��� ��unui scenariu vizionar expus în Berners-���< ����� � ������ 9�--*:< ��p ��'� ���� !���� ��! �������� ���'��� �� ��8���� �������privitoare la pro� �� ���������� � �� ����&��� � �� � �� �������� �activitatea, utilizând re'�� �� �� ��� � !���-���� ��� � � 9 �:'���� !���� �������� �� ��ilizatorii umani.

+���� �� ���� ���� ����� �� ���-�� �� �� ���� � �C�� �������� �� ���� ������� �� � ������ ��������� 9� � ����< � �������� uniformi de resurse, iar ulterior, prin nume stabilite de utilizatori), dezvoltarea viitoare fiind focali���� ���� � !���� < � �!� ���� �oamenilor (Buraga, 2004a).

Printre dezideratele Web-ului semantic se pot enumera (conform Berners-���< ����� � ������< �--*< � 4����< ,���� � �� �� !���<2003):

• ����� �� �� ��!��� ��'��� ilor dintre resurse, cu posibilitatea extinderii acestor semantici;

• ��� ���� ��� �� ����� � �&��� � ���������< ��� � �������� ���� �� �� �������� �������� ��nceptuale;

• �� ��� �� � �' �!� �< �� �&��� ����� ������� �� � ������� �mani� � ���'��� �� !���� � �� ����� ����< ��� �!���� � ��!��� �� �� ��!���&� 9e.g.< ����� �� ���elor,

Page 335: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 335

�'�� �� �� ��� �� ��� �� ����H��'��< !��� �� ��������� �������� < ��� � �� �� !���� ����:L

• partajarea de ��� � ������� � ��������� < ��� �� �� !������ ����� � � �� �� ����� � � �����ora.

2.2. Niveluri ale Web-ului semantic

Arhitectura Web-��� ��!��� ���� �� ��������< ���� ��� !���� �������� � � ������� �� ������� �� ������� �� � �!����� � �� limbaje, pornind de la nivelul inferior (i.e., nivelul meta-������ : �ajungând la nivelurile superioare (e.g., nivelul logic) – � �� ����� � �'� � *��!��8��� ������� �� ���� � ��� ��� �������� �� �� !���� ��diferite tipu 9��� ���� : �� ������ 9K� �'�< �--)�L 4�����< 3� �� �$!��< �--�L 4����< ,���� � �� �� !���< �--�:2

• nivelul meta-datelor ��� �� ������� ��� �� '�� �� ��� � �&� -!� �� �� ��� �� ��!���� �!���� #������ ��� � ����concepte � ���! ��� �� � � �� �����< ������� �� �&� !� !���--�� !��� #������ �� ������� �� �!��8�� �4, � ��� �� ����-bulare de meta-date precum DCMI (Dublin Core Metadata Initiative), RSS (Rich/RDF Site Summary sau – actualmente – Really Simple Syndication), FOAF (Friend Of A Friend) etc. (a se vedea subcapitolul 3);

• nivelul schemelor ��� � ���������� ������� �� �ntologii simple (ca, de exemplu, taxonomii) pentru a se putea defini o descriere � � ��� � ��n������� � � �� ������ L

• nivelul logic introduce limbaje ontologice mai complexe, capabile a modela ontologii sofisticate � a se vedea cele discutate în ����������� 6� $� �� ���� ������ ������ �� �� �� �� 9reasoning services) pentru Web-ul semantic, de interes în ceea ce prive�te �������� ������� �� ��!� � ���! e-business (e.g., servicii de luare sau asistare în luarea deciziilor, servicii de monitorizare a �C�� �� online etc.).

Page 336: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 336

Figura 1. Nivelurile de specificare a Web-ului semantic

������!���< �&��� ��� ���� �� � � !���� � � ���� ise, eventual prin limbaje bazate pe cele existente. De exemplu, la momentul scrierii ������ �� �< �� ���� ��� ��� �� ��� � ����!� ������� �� �!��8de modelare a regulilor.

�� ��!��� ������ ���� �� ���� ���� �ntre componentele principale ale Web-��� ������2 �������� ��� ! �� ��� �� 5�+< ���� � ��������� *< � !���-limbajul XML � a se (re)vedea capitolul 2. Identificatorii uniformi de resurse sunt fo���� ��� � ������� �� ��� ���� ���<identificându-le printr-o reprezentare a mecanismului de accesare (via adresa IP sau numele de domeniu Internet, de exemplu) ori referindu-le printr-� �!� �� ����� � ��� #���-�!��8�� "#� ������� � !�� ���� !� �������< n�������� �� ������ !� � �� �!��8�� ��� �' �!� �< �� �� ���� � � � ������ � 4��� ��! �! �����< �� �������� ��!� ���!�� �� �!��8� ������ �� "#� ��� � !� �� �� ��� ���� �� !���

Pentru fiecare nivel al arhitecturii stratificate a Web-ului semantic, ���� ��� ��� � ����� ���� ��� � !���� �� ����� ����� ��� ��limbaje având drept suport meta-limbajul XML.

Page 337: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 337

Figura 2. Arborele limbajelor Web-ului semantic

3. Specificarea meta-datelor prin RDF

��%����������� ����)� �����

Deoarece meta-limbajul XML nu poate exprima semantici – reflectând doar � !�� � ������� ��� !� �� �� ���� � � � ������ –, pentru a putea ����� !���-���� 9���� ���� � ����: ��� ���� ��� � ���� �� ���! ��������� � ��� � '�� �� !�� � � �olosit în acest scop.

���� ! Q���>�� � $���� 9*JJ6:< �&��� !� !���� ��� �� !���-date. ���� �������� �� ����&� ������ �� !���� �� � ��� ������� �

!�� � ��� �� ���u��� ��� �� �� �� � � ���� �� %�� ���� � ����&��� �

Page 338: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 338

!���� � �� � ������ �� ���� � �� � � �������� �� exemple se pot da meta-datele referitoare la au�� �� ��� ���� � �� �� ��� ���

Meta-������ �������� �� ����&� � ���� � ������� �� !���� <� � �� ���� ������� �� � �� ��� �&� �'� � ��� � ������ ; ����� ���<meta-datele pot con�� �� !�� � �� ��'!�� �� ����!��<�!� �� �� ��' ��� �� �� � ��� �!�� � �� � � ������ � ��&��

Meta-������ ������ �� ����� ������� ������ ������� �� ��� ��<����!��� ��� � ��!�� �� !�� �H��� !�� � �� �� ��turare a �������� ��� � � ������ � ����� �� ������ � '���� 5 �&�!��� � ����� � ��&�� ������ �� ����! ��� ��

Meta-������ �� � ���� � ������� �� '�����< �� ����< �� ����� ����!� �� �� �������� �� ��� ��< �� ������e pentru a determina ���� � ��!�� ���� � ����� ��� � ����� �� �� ���� � ������ 4 ����&�!����� ����! ��!� � ������ �� �����-���� ������� �� � �����

Meta-������ ��� � E����� �F ��� � ��� �� �� !�� ����� 9e.g., referitoare �� !���� ��� ������ �� ����� �< �� !������� �� �����< �� ���-�� �� �� ����� ������� ����:� ��� � '�� �� � ������ �� �� !���� <rolul meta-������ ���� �����2 �� �� �� �� ���� �� ��� � � !8��� ��� '��� � 9�� ���� � �:< �� ��� � � ������� � 9������'� �: � ��� selor, � ������� �� �� ��� �� ������� !8����� ��� � ������ ��< ���-� �� � �� � ��� �� �� !a��� �

��� � �� �� �&����� �� ����� �� � �� ���&�< �� ���� � �������� ��� ���� �eb.

Forma de modelare a meta-������ � ���� �� ��� � ���� � �� �� �� ����� �� ������ � �� ��� � !���< �� -� !�� � �������� ��������� ��� �� ������ !�� 4� ���!���< � ����� �� �� ��� � � !��������de asociere (via unor mecanisme externe) a meta-datelor resurselor vizate. 5� �� � ����� ���� ����� �� � �&� !� ��� �� ��� �� � ���� � ��resurse, meta-������ �� ����� ��� � �� ���� ��� ��� ���� � ��u���

���� ��� ��� � ���� � ��� � �� ���� � � � ��� ���� < ��� ��zat � ��������� �4, 9Resource Description Framework:< ���!��� �� ������������� �� �'���� � Q�>� � �� ��� 9�--):� 5 ���� �� ���� ��� � ��#���� � #��� 9�--):�

�� ��� '�� ��< �4, �� ���� � ��� � !�� �� ��� � ���� � ��� �pr����� �� � !�� � ���'��� � !���-������ � K��� ��� � �!��8� !���!���&� �� �� ����� � � ������ < �4, �� '������ ��� � ����� � ���!(Berners-���< ����� � ������< �--*:2

• inspectarea resurselor< ��� � � ��������� !���� ��� �� ����are, !� ���� � ���� �� � ����� ������� �� ��� �� ��� ����!�ntelor Web;

Page 339: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 339

• catalogarea datelor ��� � ���� � �� �H��� ������ �� �������� � ������ �� � ��� �� �� !�� ������� �� -� �������� ����� ���<sit Web etc.;

• implementarea de ������ �����������< �����C� ���!��� � �� ��8� ��cuno������ L

• ���������� ����������� �� ����������� ������������ a resurselor Web; • ���������� ��������� ��� �������� a datelor (oferind suport pentru

����� �� �� ��������� �������� ���� � ��!� ��� ����� ��< � ���������!�� � 8uridice etc.).

������< �!��8�� �4, � � � ��� ���� � ���� �� ����� �� �� !���� � ���� � �� ��� ���� ��� � ����� � ������ ��� � �� ����� �� ��� -selor care pot fi identificate �� ���< ��� ���� � !�� direct nu pot fi accesate via tehnologiile WWW.

�4, ��������� �!��8�� "#� ��� � �� ����� �� �����i�� � !���--datelor (Beckett, 2004), dar nu impune o astfel de sinta&��

5����< ��� ���� �4, ������� !���-date privitoare la aspecte care privesc caracteristicile „externe” ale unei resurse (de exemplu: autor, tip, ���� � �� < copyright � ������:� 4� ���!���< !������ �4, ����� � ���pentru descrierea resur���� E�����F 9��C� �� ����� � �� !��� �-nare) – e.g., multimedia.

3.2. Modelul de �� �

#������ �4, �������� �� � !���� ��� ��� �� ������2 • resurse – �� ���� ������ ���� �� �� �&� ���� �4,� 3 ������� poate

� � ��'� ���< � � �'!�� �� ����!�� 9e.g., o imagine) sau un obiect care nu este direct accesibil în Internet (de exemplu, o carte ��� �� ��� � ��r����:� ���� ���� ��� ��������� �� 5�+-uri;

• ����������� – o proprietate �� ���� � ������ ������< � �� ���� ����<� �� ��� ��� � ����� ���� � � ��� ��� ,��� � � �� ����������� � �e!����< � ��� �� ���� �� !��< � !���!� �� ��� �� ��� �� �� �� � �� ���� � � � ��� �� ���� 9�� ��������: �� ����pro� ����L

• ���������� – � ��!�� ��� �� �!� ��� �� � � �� ����� � �� ��C�������� � ����� � �� !���� � ����������� ����! ����� � ����� ��� ca un triplu {subiect, predicat, obiect}.

$������� �� ���� ��� �� 9��������� �� � 5�+: �� � ���� ���� �� ��� ����� � �����< � � ������� ����!���� � ����� 9���� �� � 5�+:������� �� � ������ � ������ � ������� ����� � ����� �� � � ��� �� ���9� �� �����:� 3������ ����� ��� 9����� �� � �� ����: ����� ����!� �

Page 340: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 340

���� ��� �� 9��������� �� � 5�+: ��� � literal 9�� �� ����:� 3 ��������� ���� ���� Atribut (Obiect, Valoare).

$�����< �� ����� �� ����� ���� �� poate realiza prin mai multe !�������< �� � �� � �� ���' ' ���� � ����< !� ��8��� "#� � � ������

; �&�!���� �� !� 8��< �&� !�! ������ �� ���� �� ��� �� ����!���de http://www.infoiasi.ro/~busaco/ este Sabin-Corneliu Buraga:

<rdf:RDF> <rdf:Description

rdf:about="http://www.infoiasi.ro/~busaco/">

<s:Autor>Sabin-Corneliu Buraga</s:Autor>

</rdf:Description>

</rdf:RDF>

Prefixul rdf �� ���� ������ �� �!� �4,< � s desemnea�� ������ ��nume al vocabularului folosit pentru a desemna atributul/proprietatea ��� �� 9���� � ���� ���� "#� � �� a �:�

Alternativ, putem exprima acest aspect astfel:

autor ("http://www.infoiasi.ro/~busaco/", "Sabin-Corneliu Buraga")

descriere ("http://www.infoiasi.ro/~busaco/", "Un sit Web personal")

referitDe ("http://www.infoiasi.ro/~busaco/",

"http://www.rowd.org/stiri#s20")

$� ���� �� �� �� !� ���� �&� !��� �������2 ���� ��� � � ������� ����� � � 9� �� ����� � �� � ����� � � � � �� �� ���� �: � ���� ��� ���e ��� � �� � ���� ��� ��< ������a�� �� � 5�+�

���� ���� �&�!���< ��� C� �� ������� ���� ����< ���2 translatedInto ("#book", "carte") isA ("#book", "#noun")

$� ����� ������ �� �� !��� �'������ Ebook” se traduce în limba �!C� � E�� ��F �< de asemenea, „book” este un substantiv.

4 ���� � ������� �C� ���! ����! ����� �� �� ����� about se ��������� ��� � ��� �� ��8� �&������ 3������ ��s� � �� � ����� ��� �4,(indicat de atributul about) se nume�te referent.

Pentru crearea unei resurse vom utiliza atributul ID. Pentru resursa �������� �� EcsbF �������! �� !�!���� ��� �!���< ���� � ����'C� � � � �� ����� � ���� � �� �C ����

<rdf:Description rdf:ID="csb">

<s:Nume>Sabin Buraga</s:Nume>

Page 341: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 341

</rdf:Description>

...

<rdf:Description rdf:about="#csb">

<s:Ani>32</s:Ani>

</rdf:Description>

Nodurile care nu au asociat URI se numesc noduri blanc. Pentru a le referi în alte locuri ale documentului, vom recurge la atributul nodeID.

Pentru a asocia meta-���� �� ������ �� resurse, putem folosi <rdf:Bag> (multi-set), <rdf:Seq> 9�������: � <rdf:Alt> (alterna���:� ;�&�!���� �� !� 8��< �&� !�! ������ E�� ��� -�������� ,� la cheie, ����!��� �� �� ��� ����� ��� ������< � � � � ��� ���� �� ���&�� �< �� � � +avi”:

<rdf:Description rdf:about="http://www.infoiasi.ro/~phpapps"> <s:Autor> <rdf:Bag> <rdf:li resource="http://www3.infoiasi.ro/~aorzan" /> <rdf:li resource="http://www3.infoiasi.ro/~snake" /> <rdf:li resource="mailto:[email protected]" /> </rdf:Bag> </s:Autor> </rdf:Description>

; �4, �� ��� �&� !� � ���� �-binare, apelându-�� �� � ��� ���� !��� �� 3 �&�!����� � ���� � !���� ��< � �� � � ����! �� � �� �� ��� �� �� � +$K@ � � � ��!� � �� 9price) dat în dolari – ���� ��! ��� ��� ������� �� �!� �4,2

<rdf:RDF

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:s="http://www.schemas.org/Units/">

<rdf:Description about="urn:ISBN:973-685-772-7">

<s:price rdf:parseType="Resource">

<rdf:value>33.00</rdf:value>

<s:units rdf:resource= "http://www.schemas.org/Units/USdollar"/>

</s:price>

</rdf:Description>

</rdf:RDF>

$� ����� �!� �� ��� �� �� ������ parseType, care in��� !���� ��� ����� � � ����� ���� 2

• parseType="Literal" ����� � ������ ��� � �� � ����� �� �4, ��� � ���� ��� ������� �� ��!� ���!��L �� �&�!���< �!

Page 342: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 342

����� ���� ���� ��� "��#�2 <dc:title rdf:parseType= "Literal">Italo Calvino: <h:em> Palomar </h:em></dc:

title> ; • parseType="Resurse" �� ��������� ��� � � ��m��� ������ �� �

�� �� �� � ��� �� � � �� � �aloare; • parseType="Collection" ��������� �� � ����� �� �� ����� �

resursele �� �� !C� � ������� 9�� �� !� ��� �� !������ � �����exprim� �� � �� ����:�

4� ���!���< �� ��� !����� ����� �� ���� � ����� �� 9 �i��� :< �acest mod putându-se specifica meta-date privitoare la meta-date (detalii în K� �'�< �--)�< � Powers, 2003).

� ���� �� ����! ���� ���� �� ����� ���� �4, �� ���� ��nstituie un ����! ��'� �� � ��� ��C 9��!��������� � ��'� ���:� ����� ��9����� �� ���� � ����� ��: ����� �� � ����! ��'� �� � � �� (completitudinea nu este a�'� ���:� @� � ����! ������ �� ���� �toate cazurile. Un exemplu ar fi cel în care do ! �� � ���! � �� �'� ���� � � ����� �� ��� ��!�� � �� ����� 4� ����< � ���� ������� ���� ��� � � ���� � �� � ���� ������� �� ��� �� �� ebarea „Unde locu���� ��� !� ��'�� �! �� �� ������F � ����� � �� � ���� �@@� ���� �� ���� �������� � 5$�< � ���� KK� – �� � ����� � #� �� K ����

3.3. Vocabulare de meta-date

; ��� �� ������ �����< ��! ��!� � � �� � �� �������� � "ML folosite pentru descrierea unor tipuri de resurse:

• DCMI – Dublin Core Metadata Initiative2 ��� �� ������� � �!� �� � �� ���� ���� ��� � ���� � �� � �� � ��� �� ���< � ��������� � ������� �� ����� � � ��� � ������ �� �������lor digitale;

• RSS – Really Simple Syndication: folosit pentru mediatizarea (syndication: � �� �� ��� � � ���!�� �� �� ���� � ��� �� �� situri; alternativ, se poate recurge la Atom – ��� ������� )�� ��>� � � ���� 9�-- :L

• FOAF – Friend Of A Friend 94����< �--):2 �&� !� �� !����� ���� � �� � �� ���� � �� ����� ������� �� ���� �� ����< ��� �suport pentru social networkL �� ������� �!� �����<foaf:knows>< ��� �� ���� �are putând fi realizate via alte vocabulare. Un astfel de vocabular este propus la adresa http://purl.org/vocab/relationship;

Page 343: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 343

• DOAP – Description Of A Project2 ������� !���-date privitoare la un pro��� ����D� � � �� ������� �� �4, � ,3�,L

• ",���2 ������� � �� ������ ����!��� �� ��� � ��� ��ite (detalii în Buraga, 2004a);

• XMP – Extensible Metadata Platform2 �� ����� �� ����� �� �� !���-date ����!����� � ����� �� �������� �����< ����C� "#� � �subset din RDF; meta-datele sunt „scufundate” în cadrul resur�� ���� ��� '� �� 4�#+ � %"+,L �� ��� � � � �� ���� �� � �' amare ECMAScript.

?�! ���� � !���� �� ������� � � ������ �� � � � �� ���� ��� 'C� �� �4, � �������� ��� ,3�, � 4�#+� $� �b�� �� ����� ���� � �� ���� � ���! �!��� � �� ��� ��' �� ������ 4� �semenea, pre���! � !�'� � �� � ��� ���� �� � �� ������ � ������< � � ��fiind fotograful.

<rdf:RDF

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:foaf="http://xmlns.com/foaf/0.1/"

xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema#">

<foaf:Person rdf:ID="adria">

� �� #����������� $�������� �� #�����

<foaf:homepage

rdf:resource="http://www.infoiasi.ro/~adria"/>

</foaf:Person>

<foaf:Person rdf:ID="cristi">

<foaf:name>Cristian Olaru</foaf:name>

</foaf:Person>

<foaf:Person rdf:ID="sabin">

<foaf:name>Sabin Buraga</foaf:name>

<foaf:mbox rdf:resource="mailto:[email protected]"/>

<foaf:homepage

rdf:resource="http://www.infoiasi.ro/~busaco"/>

<foaf:knows rdf:resource="#cristi" />

</foaf:Person>

<foaf:Image rdf:about="http://www.sit.ro/bucuresti.jpg">

<dc:date rdf:datatype="xsd:date">2005-10-03</dc:date>

<dc:title>Întâlnirea de la Buc���������#����

<foaf:depicts rdf:resource="#cristi" />

Page 344: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 344

<foaf:depicts rdf:resource="#sabin" />

<foaf:maker rdf:resource="#adria" /> <!-- 'fotograful' -->

</foaf:Image>

</rdf:RDF>

$� ���� �� � � ���� �� ����� �� ���� ������ ���� ��� � �aloarea elementului <dc:date>.

��� ����� �� �� ����� ������ ���� �� �� ,3�, ����� � ������� ��� ������� � ���! Foafnaut, ���� ��� �� �'� � � !���� ��

� ��� 7 C ��� ��� ��� ������ ��� �� � Foafnaut

,� ��! � � �&�!��� �� ��������� 43�� ������� �� ������9��< � �� ���� �� � �' �!� �:� 4���!����� 43�� ��� � '�� ��� �� �instrument precum DOAP-a-matic.

<doap:Project xmlns:doap="http://usefulinc.com/ns/doap#">

<doap:name>Carp</doap:name>

<doap:shortname>Carp</doap:shortname>

<doap:homepage rdf:resource= "http://www.semanticplanet.com/2004/07/carp"/>

<doap:created>2004-07-01</doap:created>

<doap:description>...</doap:description>

<doap:shortdesc>Convenient API for

RDF Programming</doap:shortdesc>

<doap:wiki rdf:resource=

"http://www.semanticplanet.com/library/Carp/HomePage"/>

Page 345: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 345

<doap:programming-language>C#</doap:programming-language>

<doap:maintainer> <!-- persoana care men���� �������� -->

<foaf:Person>

<foaf:name>Ian Davis</foaf:name>

<foaf:nick>iand</foaf:nick>

<rdfs:seeAlso rdf:resource=

"http://purl.org/NET/iand/foaf"/>

</foaf:Person>

</doap:maintainer>

</doap:Project>

Scriptul urm��� < ���� � ����� ��������� �$�< ������� �� -� �� ���� �!����� !���-������ ������� �� ����!��� 4� ���!���< � ����� ���� �� ��� ��� ��� ��� � � �� �� 9layer: ���C� � �� �� �� �meta-datele disponibile – ��� � �'� � �

try { // nici un document deschis?

if (!app.documents.length > 0) {

var fisier = "/xsl.psd";

var document = open( File(fisier) );

}

���� 0 �� ���������� ������ ����� ��schis

var document = app.documents[0];

}

�� ������� ��� �������� ����� �������� �� ������

app.preferences.rulerUnits = Units.INCHES;

app.preferences.typeUnits = TypeUnits.POINTS;

// stabilim culoarea stratului de tip text

�� ���� �� ������� ���-datele imaginii

var culoare = new SolidColor;

culoare.rgb.red = 0;

culoare.rgb.green = 127;

culoare.rgb.blue = 0;

�� ����� �� ��� +� ������ ����������� �����

var strat = document.artLayers.add();

strat.kind = LayerKind.TEXT; // de tip text

�� ��������� �� � �����!��� �� ���-date

strat.textItem.contents

= document.xmpMetadata.rawData.slice(240, 340) + "...";

Page 346: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 346

strat.textItem.position = Array(0.2, 0.2);

strat.textItem.size = 14;

strat.textItem.color = culoare;

�� � ���� ��� ���-datele într-� ������� �o����

alert (document.xmpMetadata.rawData);

�� �������� �� �������� ������

document = null;

culoare = null;

strat = null;

}

catch (eroare) {

alert ("A intervenit o eroare: " + eroare.description);

}

Figura 5. Fragment din meta-����� 2,& � ���

3.4. Sintaxe alternative

Modelul formal RDF permite folosirea mai multor sintaxe. Astfel, pentru documentul RDF/XML de mai jos, specificând formatele

���� ���� ��� �� ��� ��< �&��� �� ����� �� ' ���� � �'� � 9'�� ��� �� Altova SemanticWorks).

Page 347: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 347

<rdf:Description rdf:about="urn:ISBN:973-685-772-7">

<dc:format>

<rdf:Alt>

<rdf:li>text/html</rdf:li>

<rdf:li>text/plain</rdf:li>

<rdf:li>application/postscript</rdf:li>

</rdf:Alt>

</dc:format>

</rdf:Description>

Figura 5. Graful asociat unui model RDF

3 ���� ���� ���� ����� �� ����� ���� �4, �� � ��� �� �� !�2 subiect predicat obiect .

Pentru un nod blanc (nod care nu are asociat un URI) se fo������� un identificator de forma _:sir� ,����� E$�� �� ������� �� ?� ��F ��poate scrie: @prefix foaf: <http://xmlns.com/foaf/0.1> <#Sabin> <foaf:knows> <#Viorel> .

��� � !� !���� �����< �������� K� � �-Lee (2005). 4� ���!���< "��#� ��- ��� � ���� � ��� � ������� �� �� � ��� �4,�

$���� �� ��� �� �4, �� !� 8�� ������� ��ntru documentul de la adresa http://www.infoiasi.ro/~busaco/ ur!���� ��� �����2 � � ����� E$��� �� $��F<� ���� ����� �� E����F �� � �� �!���� 4 �'�� � � � ���� �� ���� ��http://www.adt.ro/. Graful e ilustrat în figura 6. <rdf:Description rdf:about="http://www.infoiasi.ro/~busaco/">

<viz:vizitatDe>

<rdf:Description>

<foaf:homepage rdf:resource="http://www.adt.ro/" />

� �� #�����<��(���� �� #�����

</rdf:Description>

Page 348: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 348

</viz:vizitatDe>

<dc:title>Situl lui Sabin</dc:title>

</rdf:Description>

F ��� ? $�-�������� ��� �� ����������� $/�

������� �� !�� ������� � �� !� �� � ��� ��� � ���ntate mai jos:

<http://www.infoiasi.ro/~busaco/>

<http://purl.org/dc/elements/1.1/title> "Situl lui Sabin" . _:blanc <http://xmlns.com/foaf/0.1/homepage>

<http://www.adt.ro/> . E#����� �&�#��-����'���� �� �B'4������ �<��(��� ' <http://www.infoiasi.ro/~busaco/>

<urn:infoiasi.ro:Vizite#vizitatDe> _:blanc .

�!��8�� "��#� ��- �� !�� �&� !� �� ����� �� � ��� � �� !�2

<meta about="http://www.infoiasi.ro/~busaco/">

<meta property="viz:vizitatDe">

���� ������%� �� #������<��(��������

<link rel="foaf:homepage" href="http://www.adt.ro/" />

</meta>

<meta property="dc:title">Situl lui Sabin</meta>

</meta>

Page 349: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 349

O ilustrare a posibilit���� �� �&� !� � �� ���&� ��� �� ���� ���� ������ �� ��� �� �4, � ������� �� �� ��� ��� http://internetalchemy.org/ 2005/09/the-sixteen-faces-of-eve.

��!��+"��"� ������������� ���

�� �������'�����

Actualmente, sunt disponibile o �� � �� !���!��� ��� �� ��������� � ����� � � ������ �4,� %�!� �! � �� �� �� � �� ������ �instrumentele de programare pentru RDF:

• Carp and Spiral – ��� � � !���!��� � � �BL • Drive.NET – este un assembly pentru .NET; • Jena Semantic Web Toolkit – �� ���� � ��� � �� ��� � .��� ��� �

� ����� ��< � � � ������< � ��� ���� �4, 9����� � #�K ��<2002);

• RAP (RDF API for PHP) – ���� � �������� ������� � �' �!��� �� PHP, parte a mediului pOWL;

• Raptor – procesor inclus în Redland< !��� �� ����� � � � ����� ��4, !���!���� � �!��8�� �< �� �� �� ����!��� � � �B< .���<Perl sau Python;

• RDFLib – �������� !���!����� � �>���< ������� � ��� ��proiectului Redfoot �� �� � ���� ���� ��� �� �� ��� � �� ��� �pentru constitui �� �� ����!� �� !��'�!�� �� ���������

�� ��'���������� �������

; ���� �� � ����� �� �'� ��< �� ���� � ����� ��� �� �!��8� ���� �'� � 9�� �&�!���< .��< ��� � ������ �������� �4=�:< � �� � ��stan�� ��� � �� ���� ��� ��� �� $���=� 9� ��T��!!���& �Seaborne, 2005).

+���� ��� ��� � �!��8��� ���� �� ��� � � �!��8 ���� ��� ��� � ����� �� �� �� �'� �� ���� ��� � �� �� ������� ��� ��� � �� � ����4,� $� � ������ � �� � � ��� �4,< � ����� �� !�e specificarea de �� ���� ��C� �� !�� �� �� � ��� ��� � � !� ����� �� �'� � 4� �&�!���< ��� � � ������ �� ��'� ���� �� � ��� �4,< �!putea scrie:

?subiect ?predicat ?obiect .

Interogarea ?persoana foaf:knows ?alta_persoana va oferi lista persoanelor interconectate via predicatul (proprietatea) foaf:knows.

Page 350: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 350

,��� � � ��� �� � �� ��� ����� �� ������� ��� � �� � ������� 9bind) o valoare ������� � ����� �� ���� �4, �&����< ��� � ���� � �� ���� ������a���

0�������� ��� � ��!���� ��� � � �� !� ������� !� ��!���&�<���!�� ������� �� �� ' �� 9graph patterns:< �� � ��������� ���interog�rilor SPARQL.

3 � !� �� �'� � ���� � !���� ��< � �� � �������! ����� �� ��� ��2

SELECT ?title

WHERE {

<http://www.infoiasi.ro/~busaco/>

<http://purl.org/dc/elements/1.1/title>

?title .

}

+�� �'� �� �� !� 8�� ��� � �� !�� ���� � � !��� *- �� ������C� �C ��� !� !�� ���C� ��� $����� �� �!� s cuprinde vocabularul nostru propriu referitor la specificarea vârstei în ani. PREFIX foaf: <http://xmlns.com/foaf/0.1/>

PREFIX s: <http://infoiasi.ro/varste#>

SELECT ?nume ?adresa ?ani

WHERE {

?pers foaf:name ?nume .

?pers s:ani ?ani . FILTER (?ani < 33) .

OPTIONAL { ?pers foaf:mbox ?adresa . }

}

ORDER BY ?ani DESC (?nume)

LIMIT 10

Deoarece sunt stocate date semistructurate, anumite construc� ��� ���9���! ������ �� �� ��� �� �-!�� � � �� ���� ������:� +�� !���� �� � �� ���� ���� �C ���< ��� ���� �!� � � �� ���� ������� ��

���� ����� ��� � �'���� � 94����< �-- :�

&��������

%&��� �!� ���� ��!� �� ����� � � ��� ������� � ���� �������� � ���� � �� ���� ��< ����� ��< !��'e!���� � �� �'� �� !���--������ < � '�� ��< � ����!����� �4,< � ������� 5 !���� �C�����&�!����� 2

• Navigatorul Mozilla �������� �4, ��� � ����� �� �� !���� privitoare la componentele sale.

Page 351: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 351

• #��� �� �� ����� � dmoz.org ��������� �4, ��� � !��� ��� � �� �� ��!� �� ������� � !����� � ��'�� ����

• PiggyBank �� ���� � plugin Mozilla care permite utilizatori�� ���&� �'� �� !�� � ��� �� ��'�� ��� � �� �� ������� � �� !��RDF.

• ��!�� �� �� �� ������'� � � ��� ���� �������� �� 4�#+ � �4,� • Meta-datele sunt folosite în cadrul platformei METIA pentru descrierea

caracteristicilor mediilor electronice de comunicare, în vederea distri-�� �� ����� !���!����

• Swordfish �� ���� � �� �!�� enterprise folosit de Sun pentru ma�'�!���� � ��� ���� �� ��� �'���� �� ��� �� �� �� ���pe baza vocabularelor DCMI.

• Flink ���� � ����! �� �&� �'� �< �' �'� � � ������� � � ������� sociale pe baza profilurilor FOAF asociate persoanelor.

• ������� Sherpa ��� � ���� � ��� � ������ ��< �� ��8� �� �!��'�!���� �� ������ � �� ������� � ���!��� ��������� �RDF.

• Catalyst permite crearea de meta-date bazate pe XMP. • ?������ �� � ����� �� !���-datelor se pot realiza via Metavue. • Descoperirea de meta-date se poate face prin intermediul unor

������ ��� �� Schema Web, Ontaria sau Swoogle. • ������� ProQuest �� !�� � �� �� � �� �'� �� �� �����

dintr-un anumit domeniu. • Haystack �� !�� ������� �� �� !�� ������ � ��!���

������ ��� ������� ��� ����� �� ���� ������ ������ � ����dezvoltat BioHaystack, un sistem recurgând la tehnologiile grid, ������ �� ���� �� � ���� !�����

• �� ��8� �� � ������ �� �����'�� ��� � ������� �� ����!��peer-to-peer Oyster, folosind OMV (Ontology Metadata Vocabulary).

#���� ���� �&�!��� �� ������ ��� ���� �� � K� �'� 9�--)�:< K� �'�9�--)�:< K� �'� 9�--/:< 4����< ,���� � �� �� !��� 9�--�: � G� et al. (2005).

��/���4,����"�������"�����

Proliferarea multitudinii de formate XML a condus la instituirea unei !��� �� !��� !��C� ���� � ������ �������� ��� "#� �&�����<������� ��� � ����� �����< � � ���� �� ������ �� $����� ������ �� ��� '� �� microformate, seturi de vocabulare pentru realizarea de

Page 352: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 352

����� ��!���� � ��� �� �� �!��8� � ����������< � ���!"��#�� #� ��� !����� ��� ��� �� �� �� � �� ��� � ��!�< ���marcate de ex�� � � ��!����< �� ��� � � ������� � �� ��� � !����

#� ��� !����� �� ������� � ���� ����'� < ���C� � ���!��� � ���!����� ���� ���!��� � ��� � � ������ !!��� �� � � ����!� �!���<folosind un singur atribut XML (de exemplu, pentru � ��'� ����! �����atributul rel="license"< � �� � ���� �! ���� �� ����� � � ����-tului). Microformatele compuse sunt conglomerate de microformate elementare. Un exemplu este cel din domeniul blog-urilor structurate, inclu-�C� �� !�� ��scriptive (meta-����: � ���� � �� ����� � ��� gând la microformate precum hCard 9�� !�� �� ������ ���� � �� ����<��!��< � '���� ����:< hCalendar (format referitor la eveni!��� �orare) sau hReview (date despre comentariile emise de vizitatori).

; ����� ����&� � ���� !����� � "3"3 9Extensible Open XHTML Outlines:< �� � �� ������� �� ��� �� !����� "��#� ��� � � ������� ����� �� �������� �� ��� � ��� �� ����� ����D� � �< ��������< ��� �� acestuia în cadrul browser-ului.

; ���� �� !� ��� !����� ��� � ���-numitele profiluri, subseturi ale �� �!��8� �� !� �� � !� ��� ����� �� 4 ��� �&�!���< !����!XHTML Mobile Profile< ������ ��� � ��� �� �������� �� ��������!����< � SVG Tiny, ��� � ' ���� ����� ��� ������� �� ����� ��calculatoare cu resurse limitate.

� ����� �4, � �������� ��� �� !���-date ca DCMI pot fi exprimate via !� ��� !���� ; ������� ��) �! ����� �� "��#� ��- ��� � ���� � ��� ��������� ��� � �� �� !���� ��!��ce (specificate prin micro-formate ��� ���� �!��8�: ��-� ���� ��� �������� �C� ��� � ���� !��� � ������ !���< ���� ��� ��� � � ���� Gleaning Resource Descriptions from Dialects of Languages (GRDDL), descris în Hazaël-#�����& � �����>(2004).

4. De la Web 1.0 la Web 2.0 (Data Web)

4.1. Preliminarii. Caracteristici ale „noului” Web

; ���� �� � !����< ��! ��� � ����� ��� � ������� �� ���� ��� ���E����F ���< ���!� � Data Web< �� ����� � ��!� � � ����� �constituirii Web-ului ��!���� ?�! � ��� � ����� ���!�� �� !�8� ������ �� ��� ������ ��� � ���� �� � ����� ���� ��� ��� � ����� ��de marcaje (tag-� : ����� �� ������� < !�� � ������� �� �� ���� �

Page 353: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 353

�� E����� �� ����F ��� – ne referim, în principal, la Weblog-uri –, gradul ���� �� ������ ���� � � ������ � �� ���� �&�����< �� ��� �� ������ � n�� ������ ��� !� ��'��� � ��!���&� �� ������� ���

������!���< �� ������� � � ���� �� �� E������F ��� �� E���F ���<������ ��� �� ����� !� !��� �� � ������ !� ����D� �< � �� �������� �� �� ��� ������ � �� �� ����< ��C��-le în mod uzual la ������� ���� �< � ntermediul unor instrumente colaborative.

������< �����! �� � ���� � �� �� servicii specializate disponib�� ' ���������'�� ���< ����� ������C��-�� ���� � �� � � ���� ���������� ����D� �< ��'��!� ��� �� ����������< �� ���� !� !���� � ��� !�� ���� ��� � !� �� !�8oritate a utilizatorilor.

De asemenea, Web-ul poate fi considerat un mediu participativ, cel mai � �'�� ������ �� �� ��� �� H�������� ����� �� ����� Esocial networking” (Drummond et al.< �--):� @� ����! ��� �� ��!����virtuale, Weblog-uri, situri de tip Wiki< ������ �� �� ��8� � � !�'�� < �noti�e�� < � E��!��� �� �� ��F 9�� ��� ���:< ��� �� !�C� ������� ��� ��!��� �� '������ � �� !���� ���-numitelor folksonomies 9#�����< �--):� ����� ������� �� ����� � ������ ���� �� �� ������'standardizate bazate pe XML precum RDF, RSS sau FOAF, prezentate în subcapitolul anterior.

3 ���� �� ���� ���� � ���-ului este cea a ����� ��������, serviciile oferite putând fi invocate într-� !�� � � ���a ���< �� ��� � � ��< � !�������� �����! �� � �� �� � ������� �� �� � ��ecturi orientate spre servicii (despre care am amintit în capitolul 4), concept privind maniera de �������� � �� ������ ��� ���� ���� �������� 9loose coupling) care pot fi exploatate de utilizatori (umani sau nu) prin intermediul unor tehnologii deschise precum serviciile Web construite cu SOAP ori REST. De ���!���< ����! ����� � �� �������� ����D� � ��� � ����� �� � ���<�������� �� ������ !� � �� �spozitiv.

G ��� �� ������' � ������ ��� �������< ������ ��� � � ��-format� � � �� �� !�� �� � �� ������� < ���� ������� �� ��� ��� ��editarea acestora, prin intermediul unor instrumente precum blog-urile sau Wiki-� �� 9K� �'�< �--)�L K� �'�< �-- :� #������ �� ���!�� �� �� ���� �� � �� �� ����� ����� ��� �� ���uturi RSS ori Atom.

@� ����! �� � !����! ������ ��< � � ����< ���-�� ��� �8���������� �� ���-numitei ����������� �������!� (O’Reilly, 2005). Prin stabilirea �� �� ��� ��� ��� � � � �'!�� �� ������� ���C� �� !���H��u progra!� � ��� � �� ��8� �� ����� �� ��� �� ���< ���� �� �� ����� � ������ ��!�� ��� � !��� 2 � �� �� ���� ��� �C� ��!�-��� ��� ����� � ��� �� ��!�� �� !�� ��� �� esante („bune”) prin

Page 354: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 354

� �� �� �� ��'��� ��� � ��� �� �� �� � ����� ����� ������������ !��< ��� � � �������� ����� � ���� �� �� 5������ � ������documentul ini���< ��� � �� � � � �� ������� L ��� !� ��� � �����!�� �� � ������ � � ���'� ���� ������ �� ��������� �ocument este prin intermediul adresei Web, realizându-�� � ��'��� � ���r��&� ��� � ����� �'!�� �� �� !���� ������� ��!������ ����� ������� ��� ��� � �� ����� �� ��������� 2 ����� �� ���� !� ��!������< �� � ������ la rândul ei, pe !���< �����'� ��!�� 9K� �'�< �--)�:� $������� ��������� !���� � �� ����� �< � !� �� !�'��� � ����� � � �-��!������ reprezentate în principal de blog-� � Wiki-� �� ���� ���� ���!� ���stui aspect.

*����$����8��9�� �����:����� ���������ilizator

Ceea ce apare pregnant în cazul Web-ului datelor (Data Web: ���� ������ ��utilizatorii pot folosi propriile lor marcaje (tag-� : ������ ��C� �� ��������� !���� �� �� � �� �� ��� �� �� �������< ����ificând astfel meta-date.

În Web-ul „vechi”, meta-������ ��� � ���� �� � ������� ����������� � ��!� ��!��< ������ ��� C� �������� � � ���� � �� � �����intelectuale � e.g., MARC (Machine Readable Cataloging) sau OPAC (Online Public Access Catalogs), având drept precursori ����!��� �� ������'� � �clasificare folosite de biblioteci � de exemplu, sistemul zecimal Dewey.

3 ���� ���� �� ������� � �� ���� !��������� �� ���� ���� �� ��specifice meta-datele dorite, una dintre maniere fi� ��� ��� �� �� 4�#+<cu un anume succes în unele arii de cu����� �< !� ���� � ���� �� � �����descrierea resurselor (elec� ��� ��� �: 9����� �� 4�#+:� �� � � ������ ������< !���!�� �� !� ���� �� !� ���� �� �&���< ��� � � �� ����� ��� � ���� '���� ���� ���abulare publice, de multe ori inexistente.

3 � � �� ������ ���� ����� �� � �� !�� ������� �� ��-� ��������proprii marcatori, într-o ma� � �&�����< ��� � � ����� � ���� � �������� ������� 3 !����� � ����� ��� �e8� E��� ����F � ���� ��� ��� �� ��Weblog-� < �� �&��� � �l�� !�� �< � ���! !� �� �� ��������(tagging content) via instrumente ca Del.icio.us ori Flickr.com, veritabile ������ ��i��� � ���� Esocial bookmarking tools” (Hammond et al., 2005).

Se institu� ������ ���-�!�� � ������ � � �� ���� 9arhitecture of participation:< ���� ! 3T����> 9�--�:< �� � ��� �� ������� ��������necesare definirii de tag-uri proprii, într-� !�� � ��� ���� ��� � ��� �� ���� ��� �� ������� � � �����ului resurselor Web. Utilizatorii sunt ������ �� ���������< ���� ! � �� �� � �� < �� ��� �� ��� ��� � repre���� �� ��� ��< �������� ��� �� � �� !� � ���! Efolksonomy”

Page 355: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 355

(folk + taxonomy), „folk classification”, „ethno-classification”, „distributed classification” sau „social classification” (Hammond et al., 2005; Mathes, 2004).

� � � �������� E����F ��� �� �!� � Connotea, del.icio.us, Flickr.com, Frassle, Furl, Spurl.net � unalog, cu imple!��� � �!��8� ��Perl, Python, PHP ori Java (detalii în Hammond et al., 2005, Lund et al., �-- < � #�����< �--):�

4.3. Participare, nu doar publicare a datelor

În mod pregnant, aici o cvasi-��� �!��� � ��� Weblog-urile. Un Weblog (sau blog< �� ��� �: �� ���� � ��'� ��� �� � ���� ��� �� � �'!����� �� !��� ���� �� ������� �� ��� � � �� ���� ������� ������ (Buraga, 2005). Termenul provine de la cuvintele „WebF 9���: � Elog” 98� ��: � � ���� � ���� � � �!� � �� .� K� '� � �ecembrie 1997.

Un blog p���� � ����� �� � !8��� �� ��!��� � �� �� �����<��� � �� ���C� �� � �� �� � �� !� �� 8� �� online �C� �� ������ ���� !�� � ���� � �� � ��!�� 9���� ��� �:� 5 ������ �� blog este ������� 9�� ����: �� �� � �'� � �� ����< �� �� � ' ��� $� ����� ��� ���!��� Weblog � ������ �� � �!���� � ����C� �� ��� �--- 9� � �„vechiului” Web), actualmente pe Web existând o sumedenie de blog-uri, �� ����� ��C� �� ��!< �C� � �� ��� �� �� �o����� � ���� �� -o m���!� �� ��!� 9� ���� �� ���� ��C� �� !����:� ; ��� ��-- < ����� ,� ��� ������� � �!� �� ��� blogger- 9�� ���� �� � �� ��������� � �� �� blog-� : �� � � ��!� �� ����� � � ��� �� � ��ignore comentariile publicate pe Web. Din aceasta se poate deduce faptul �� blog-�� �� ���� � ��!�����-cheie a „noului” Web.

4��� G �' �� �< Eblogging-�� � �� ���� ��� � blog� %��� � !�� ��� �� ��8� � �� ����� �� �' ��! � ���� � 'C�� �� �� ������4��� ���! �� ������� �� !�� �� �� ��< ���� � ���� �� �� ��8�!��� ��'��� � �� �acem disponibile comentariile din cadrul altor blog-uri. ��'��� �� �i�� ��&� �� ���� ������ �� �� �� ���-ului, iar în cazul Weblogging-ului, ele sunt elementul-cheie”. Din punctul de vedere al stra-��'� ����� ����� �� ����� ��� ��� �� ��i�� �� ��!���� online, „blogging-�� ���� �� �� � ���� !� ���� �� �� �������� � � �����propriu” (Eric Dolecki).

De asemenea, un alt context de utilizare a blog-urilor este cel reprezentat de intranetul întreprinderilor virtuale, un blog putând deveni un instrument indispensabil de intercomunicare la nivel de echipe de lucru în cadrul unui � ����� 4 ������� �� �������< blog-�� ����� � � ��!����� !�� ���� �aplica��� �� �� groupware (teamware).

Page 356: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 356

������� �� blog � � ���� �� �� �&����� ��&����< �&��C� blog-uri �� � ��� � � ����� !���!��� 9���� – de succes sunt MP3 blog-urile –, fotografii, video – denumirea acestei categorii fiind videoblog sau, pe scurt, vlog:� ���� ����� ��� � ��������� � ��� � �� K� �'� 9�--)�:< K� �'� 9�-- :< � 4���� �D et al. (2002).

La succesul fenomenului blogging au contribuit: • ������'� �$$H���! ������� ��� � !������ �� 9syndication)

�������� ��� �� ���L �� !����� �$$ � ���! �� !����������� ��� �� �� ���!�� n�� !�� � ���� � �� �������siturilor Web (în acest caz, al blog-urilor). Fiind bazat pe meta-�!��8�� "#�< � ����!�� �$$H���! ���� ��� �� � ������sau de creat, existând diverse instrumente – numite agregatori de �������� – care ex� �'< ��!� ����� � ��������� ������ �$$H���!L

• ���� �� �� ���� �� � blog-� ' ��� ��'��� �� ��rmanente (permanent links); astfel, un mesaj poate fi accesat fie direct, fie parcurgând ���� !���8��� 9�!�� � post-uri) existente;

• � �� �� ���-numitei blogosfere< !���!�� �� blog-uri interconectate ��C� ������ ������ �� ����� ������ 9social network) în stilul peer-to-peer ��� � ������ �� ����� �� ����� � �� ���!� �e ������� � !�� � �� �� ��� ��� �� – a se vizita situri precum vezi Friendster, Hi5, LinkedIn, Orkut etc.

���� ! 3T����> 9�-- :< ������� ����'� ����� � ���rselor Web („users add valueF:� ��!���� ����� E����F ��� ��� � ��� �� � ebui �� ��� � �� �!��� � �� �' �'� �� ������ -������� � �� � � ��������� �� ������ � �� ����� ������ �� ����� �������� ���� �� ��������Par���� �� ������� �� �� �� ����� � �� �� ����!����� � � ������ �������� ��� �itoare.

*�*��4��� ����� ������������

Web-�� ������ !���� � ������ ���� � ��!����� � ������ < �� ���� ��������� � ,��� � ������� ��� !�� ���� � �i���� ���� � �� ������� ��� ���� �� ���� ���������� � de exemplu, Google pe indexul resurselor '���� �� ���� ���< �!��� �� ���� �� ���� � ���� � �� � �������dispo���< #��=���� �� ���� �� ���� ��� ��� � �� �� � '��' ����� ;E������F ���< �� !���� � ��� �� ������ ���� �� ���� � �� � ��� �continuare protejate de copyright.

;�� �8C� ������� �� �� ���� �� � �� �� ���� 9� �� ����� �������� ��� � ���:< �������� E����F ��� �� � ���a��� �� ��� � �

Page 357: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 357

moduri de (re-:����� � � �� 9 �-:�' �'� � � �� !���� < ���������� ��� �� �!��'��irea se!���� � ������ ��

#� !���< � �� ��� ���� ����!�� !� �� �� �C� !� !��� ��!��� ��������< � ��� �� ���� �� ���-ului 2.0 (conform O’Reilly, 2005). Un �&�!��� ���� ��� �� ������� K��� ��< � �� � ���� � ������� �� ��� �resursele proprii în crearea unei arhitecturi Internet descentralizate de transfer peer-to-peer �� ��� ��� � ,�� ��� �� ��8��� ��� ������ �� �'!��� �� � ��� � � ������ � ��� �� ����� � ���!����� �� ������� ��� �C� � ��� ���� !� ������ < cu atât va fi mai rapid transferat, din !�!�� �� �� � ����� �� � �!� !� !� � �� ������� � ��� ��putea fi preluat în paralel din surse multiple.

*�!��; ������������������,���������� ��������

$� � ���� ��� ����� �< �� �� � ����'� �� �� ������ ��� ���-ului datelor este cea a siturilor de tip wiki< �� � �� !� ������� �� �� ����'���� �� ��� �� �����< �C� � ���� ���������� ������ �� �� ���������� ������ �� !��� wiki �� ��� � � �� ����D� �-ul colaborativ utilizat pentru crearea acestor tipuri de situri (Buraga, 2005).

Un exemplu important este Wikipedia.org, fiecare intrare a acestei �������� ������� ���C� � ������ �� � �� ������� �� �� '���<reprezentând astfel un experiment interesant de încr��� � ��!������ $������< ������< ������ �� % � ��>!��< � ����&��� � '� �� �� � ��software open source2 E��C� ������ ���< � �� ' ������ ���� �������F(„with enough eyeballs, all bugs are shallowF:� ����! ����� � �� �(����consti��� � ���!�� � � ����� � ���� �� � ����� ��!�� � ��������� �� �� ��n����

4��'� < � � ���� �� '� �! ������ �� � ������ � �� �������������� �!����� ������ �� �� !���� � � ��� �&�� !��� ���Astfel (conform O’Reill>< �-- :< ���� �C� ������� � �� � ������ colec��� �� �� !�� � � � ��� �� � ����< � ���� � ��� ��� �� ��cât mai facile utili�� � ����� �� !��< � � !� �� ����� ���� 9�������: �&����� � � ��� '� �� �� ����� �� ����� � �C� !� ���restrictive � „some rights reserved” în loc de „all rights reserved”.

#� !���< �������� � ���� ��� �� � ��� � ������� ��C� � ���� �interoperabilitatea, tratarea utilizatorilor de zi cu zi ca fiind co-dezvoltatori ai software-��� � ������ �� �� !o���� �� � �' �!� � ���� � 9lightweight). Un exemplu este cel al folosirii unor conglomerate de tehnologii precum AJAX, RSS sau REST, în detrimentul unora mai sofisticate.

Page 358: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 358

*�/��+ �������� ����)������������ ������

Poate mai !��� ���C� � ����� �� ������ ������< ������� �� ������&������< �� ������� � � ������� �� �� �� ������ �&���� ����� ��H�������� ��� �������� $����� ��� � ���� ������� �� ������declarat de a fi utilizat de oameni, deci inter������ ��� � ���� �� ��� �������� ������� �� �� � �� �'��! �� �� ������ � ��i����� 9K� �'�<2003a):

• ���������������� – �� ��� � �� ce ��!� �������� � �� ����L �����scop este îndeplinit pe Web prin adoptarea unor tehnici de progra-mare la nivel de client (navigator) – prin intermediul programelor script (i.e., JavaScript în contextul HTML-ului dinamic), a applet-� �� .���< � � ����� �� ,���� ��� � ��� ������ �����" – sau la nivel de server Web – folosindu-se scripturi CGI, servere de ������ ���< servlet-uri Java sau componente .NET � vezi cele expuse în ca������ ��� � L � ���� ��� �� � ���� ��� ����C� �'��software sau componente intermediare – middleware (CORBA, DCOM, servi� ���:L �� ������ ��� � ���� �� �� !����� e – ���!����� �� �� ����< ������� ����� ��� �� ������< ��� �E��'���F � !�� � ��!��< ' ��� ��� ��xtului;

• utilizabilitatea – ������� � �� ����� ������� !���� cum � �� ������������ ������������ ��L �&��� � �� � �� ����� < !�8�ritatea �������< ��� � ���� !� �� ������ ������2 �!��� �� ����� �<��u �� � ����� �< �� �� !��� � ����� �< � '��!�L �� ��������� !������� ������������ �������� �� ��'� � �� ��� � �documentelor (X)HTML care pot fi vizitat�< �� ���� ��� ���� ��!������ �� !���� �� �� ��� ��'�� � ���!��� !���!���9� ������ ���� ����� applet-� .���< � ����� ,���� �����!����� �����":L �� ���� � � �� ������� �� !���!��� �(editoarele de cod HTML, generatoarele de script� ����: �� ������� �!��� ��� � !��� � �� � ���!�� �� �������i���L

• �%������ ���������� �� ��������� �������-%��� – în cele mai multe cazuri, ���� �� � ����� ������ �� ��'�� ������� ���� �� ���� !��-���� �� ���2 ������������ 9� �' �!��� ����� �� �� ��� ���� �� ��� �� ����: ���� ���� �� �� ���� 9���!����� ��#�:<������� �����C� �� �������� !�8� � � �� ���� � ��< !���men-�� �� � !��� �� �� �� ��� �� �!��iuni medii sau mari 9���C� ����� *-- �� ����!���:L !�� �� ����� ���� �� ������� ������ ��!�� � �'!��� �� �� ���� ��� � ������ ��� ��< operându-�� ������� ��� !����� !� � – actualmente, acest

Page 359: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 359

������ ���� �� ���� !�����< ��� �&��� � ��!� ���� � ��� �împlinirea acestui deziderat (e.g., foile de stil CSS externe, directivele SSI (Server-Side Includes), componentele ASP.NET sau JavaBeans, folosi �� �� �� �� � �� ������ ��� �8C� ������ �� ��������� de proiectare Web);

• adaptabilitatea – �� ���� � ���� �� ��� � ���� � ��� � �� ����multimodale, acest aspect devenind foarte important în contextul �� ������ ��� 9������ � ��''���< �--�:< � � ���� � �� ���-ritelor dispozitive mobile care pot prezenta mijloace diverse de intra �H�� �L �� �!����� �� !���!��� � ��� �� ������ ����� � ��� �� �� ������� �� ��� �� ������� ���i���� �� �� ��-��� � !���!����� �� ������� 9�� ����< '�s�� < �� � �� !C�etc.);

• ����������� – � � ����< ���� ���� �� �� ��'� � ��sis���� �� ����� 9K� �'�< �-- :< � ������ � ����� ������ �� ����!������ �� � ����� � � � ��uza lipsei de instrumente adecvate �� � �� �� ����� �e�'� ��� �� ������� �&����� ���!���consistente (asigurându-�� �������� ��������< � �� ���� �� ��'������< � ����� ����ale etc.).

+�� ������ E����F ��� � ���� �� � � ������ �����8��� ��� �� ��!���� ��� � ���� �� � ����� ���������< ����������� ��� �� date�� �� ��� ��&�< ���������� �� ����� � ���� 4� ���!���< �� � ���asigurate � ��� ��! �! !����� !� ��� � � �� ����� ���������<�!�� � ���� ��� �� �� �� ������ �� ������� �� ���������< � � �C� !���� ������������

4 ��� ������ ��� � �� � �� �� ������� � �� ����� ���������� �� ������� �� ��� � !������ Gmail, Google Maps � Writely, iar urm��� � �� ����� �� �'� ��� � ����� �������� �� ' ���� ��� �������� ����� ��� �i ��� �� �� ������

4.7. Spre Web-ul social?

; ���� ���� �� !� ���< �! ������� � �� � �� � � ����� �� ��� ��������� �� �� ������ ������� E����F ����

; ��� �� �� ����< ������'�� ������� ��� � ������ �� �iind elementele �� ���� ���� � ���-ului social (Social Web), eta�� � �!� '���� �constituirii Web-��� ��!���� $� �� ��� � �!���� ����� ����� ��'��� �n� � �� ���� � � '����< � ��� �� � !�� �����!���< � �� !���� ���-�!��� �������� �&����� ��resurse (XRI – Extensible Resource Identifiers:< �� ����� �� ���!�� �

Page 360: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 360

�����C� � ����!��� ��'��� �� �!���� �� ����� 9privacy: � �� ��� �(trust: 9��� ��� � �� 4 �!!�� � $� �'< �--)< � 4 �!!�� et al., �--):� 4� ���!���< � ���� � ���� � ���� ��� � ���� � �� �olosirea YURL-urilor – a se vizita http://www.waterken.com/dev/YURL/.

; ���� ���� �� ����� ��� �����< Data Web-ul poate fi considerat � ��� � ������ �!�������� � ��� � �� ���!� �� ����< ������ ��principiile arhitecturale ale Web-��� � �� ��n������� �� ���� ��� �� ���� ��� � ���-ului semantic. Con�� ! 4 �!!�� � $� �' 9�--):< ������� ��� ��� �� ���� �� � �������� �� "�+< �� ����� �� � E��'� ��Fdatelor se vor realiza printr-� ����!� "4+ 9XRI Data Interchange), iar inter���!��� �� ���� �� ���� ��� ' ��� �� ���� "4+ 9�&��� ���serviciilor Web actuale).

����'� �� �� ������ ��� ���-��� ����� � ��� �� ����< �� � �� ���-��� � �� ������'�� �� ��!�� �.�"< �� � ��'u ���� � � � !���� ���2

• �� � 9�� ����ri) de acces la contacte personale; • filtre de încredere (trust filters); • ������ �� !��'�!�� ���'�� �� e-mailului; • ������ � �� ���!��� � ��!� �� �� �� '�� ��� �utomat; • ���������� ����� �'�� � < ���������� � ������ ������

utilizatorilor; • � ������ �� ���� ������ �'����L • ������ ��� � ������� �� �� ����� �� ������ ����� 9social search),

� ���! 9 �:'�� �� � ����� < ' ��� i�� �� �� ��< ��!������ axate pe un anumit domeniu etc.;

• ����� �� ������� 9reputation networks). ; ����� �� ������ ���������< ����! ������ �� ��� ���� �� ���������

� ���� ��� ������< ����� E����F ���< �� � ��� �� ��greze servicii oferite de dispozitive mobile, calculatoare personale, servere etc. De asemenea< � ���� �!� ��� ������ �� ���� �C� ���������� �� �' �!��� ��� �������� �� +�� ��< �������� � !� ������� � �������sof�D� �< � ��� �� �� � �� !���� �������� � 9����� �� ��� ���������� �� ���< � ���� ���� �� �� �digma extreme programming) – apare astfel fenomenul numit the perpetual beta (O’Reilly, 2005). „Useful software written above the level of the single device will command high margins for a long time to come.” (Dave Stutz)

Page 361: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 361

5. Ontologii

5.1. Ontologia cu „O” mare sau mic?

���� ! � ����-Matu (2004), pentru filosofi, o Ontologie (cu „O” mare) �� ���� � ��� � � ���� � �� �&����� 9� ����< ���� � ��� � ���� � � ������ ����� � �� �&��� ��� �� � ���c!���� ��� �:� ���� � �� !� !���� ����!� �������� �� ���� �� �� � 3����'�< ���� �� �� ��� ������'� �� ����!����� 9�� ����: �� ����� � ���� � ������� � � ������ �� � �������� $�D� !������� ������ ��< ��� 3����'� � ����întot����� �&�����< � �� ��!� � ��������� ���� ����� una, într-un !�� !����< ��� ������ 9$�D�< *JJJ:� Termenul ontologie 9�� E�F !�: ���� ������ � � ��!��� �� !���< !����� � ��� �� ���'��� � ������ 9+�: ��� �� �������� � �����3����'�� ��� ������� 9� ��� �����toare) atât la nivel teoretic (formal), �C� � �� ��� � ���� 9�������:� #�8� ����� �������� ����D� � �����domeniului IA – ����!� �&�� �< �'�� ���� – � ���� ���� �� ���� ��simboluri me�� � �� ����� ��������� ��� ��� � �� ��!��� con-siderat.

� ��� ; /� � ���� � ������� � � ��9�� �� ����� – ���� ������� � =��� 6��������

conceptelor (termenilor) vocabularului comun

Page 362: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 362

5.2. Scopuri

Conform celor descrise în Sowa (2001), subiectul ontologiei este studiul categoriilor de lucruri (things: �� � �&��� ��� ��� �&��� �� -un anumit domeniu de interes. Rezultatul unui astfel de studiu, denumit ontologie, este � ������' �� ��� �� ��� � �� � �� � ������ �� �&��� �� -un domeniu de interes D (domain) din perspectiva unei �� ���� �� � �������� ��!��8 � �� ������ �� � ������ ���� � 4� ��� �� � �����'� �� ����predicatele, sensurile cuvintelor sau con������� �� �������� �� ������� ale limbajului L, atunci când e utilizat pentru a discuta despre domeniul D.

Dup� G ��� 9���� � K� �'�< �--)�:< � ����� � ��������� �������'� ���� � !���� ��2 E3 ontologie �� ���� ����������� �� ��dome� �� ������� � �� -un format destinat a fi procesat de calculator, �� !�� !����C� �����< �� ����< ���� � �&�!�F� ; +� 9� ���! � �domeniul Web-��� ��!���:< �����'� �� ��� � �� � ���� �� � ���� �� ��consi�� � �� E�&���F�

3 ��'�� ��� � ����� – precum calculul cu predicate, grafurile concep-tuale (CG) sau formatul KIF – Knowledge Interchange Format 9G���� ��� �,(��< *JJ�:< ������ ��� � � ���� �� ��������� �� � ����!� +� – este ����� ��� �� ��� � $�D� �� �� � �����'� ��� � 9$�D�< *JJJL $�D�<�--*:� @� �� !�� ��� �� ���� � ��������� ��� !����� �� �caracteriza sub����� 9����! �� !� �� � ������ �� �����'� ����� �&� !�„orice”). Citându-l pe Sowa, „logica spune nimic despre orice, dar ��!���� ��'� �� � �����'� �� ����� � �!��8 �� � ����� �&� !� ���� ���� � ������� ��!���� �� �� ��F 9K �(ley et al., 1999). Putem privi ontologiile ca fiind lego-uri conceptuale.

Diverse aspecte – tehn(olog)ice – privitoare la maniera de utilizare a �����'�� � � !��'�!����� ������ � ��� � ������� � ��� � � ���! K� �'� 9�--)�:< 4�����< 3� �� � $mith (2003), Fensel et al. (2003) � G� et al. (2005).

6. Tipuri de ontologii

/�%������������

3 �����'� �� !��� ����� � ��������� � �� !���� �� ������' ����� �� � ��� � ������ � ����� �!� � � ����� � �!��8��uman. %��� � ����� ����!����� "#�< � �� ������ ����� C� ��orice document XML poate fi considerat ca fiind o ontologie de nivel 0.

Page 363: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 363

3����'�� �� !��� ��� � ��������� � ����� �� !�� � � �� �subtipurile sunt deosebite de supertipurile lor:

• ontologii axiomatice – ���' ������ �� � �&�!� � ����specificate într-un limbaj formal (logic);

• ontologii bazate pe prototipuri – ���' ������ �� � ��!�� ��� ��un membru tipic ori specificând un prototip pentru fiecare subtip în parte.

3����'�� ��� � �� !� !���� ��� < � ����� �� ��!��� �� �� ���� ��!���� �� ������ �� �� � ������ � �����a�� � ��!�� �����'�� Un prim aspect important este cel al nivelului de descriere pe care îl poate oferi o ontologie (Bura'�< �--)L 4��! � #� ��< �--�:2

• vocabular – �� ���� �� !� ��� !� �!��� � �� ��ologii; în acest ���< � ����!� "#� ����� ��� � �����'� 9�!�� �� ��� -:L�� �'�� ��� ���� �� �� ��� ��� �����< �� � � ������precum SOAP, interschimbu� �� ������ �� �����' ���� ��������� � !�� �� �������� ������ �� �!� ��!� ��documentelor vehiculate;

• taxonomie – ���� ��� �� �� � ���� !� ��� ��� ���� ���� ��� ��clasifi�� �< �� ��� ������� ���� �� � ������ � �����< �������� etc.; � ��!�� ���������< ������ �� �!��� is-a, taxonomiile oferind o ���� � � � ��� � ��������� !������� 9��� infra);

• tezaur – �� ���� � ��&��!�< ��C� � ���� ������� � !���!� ���� !� � ���< ���� ! �� ���� � ecum: – ��������a – termenul X � � 9�� ����: ������ ������ ��

termenul Y 9�� �&�!���< E��'� ���F ���� ��!� ��„document Web”);

– omonimia/omografia – termenul X �� � ����H�� � �� ��� �� �Y< �� � � ���� ��!���� – e.g., „toc” (de scris) versus „toc” (de ������!nte);

– ierarhia – termenul X � � � ������ !� �� 'H ��� C� ���C�termenul Y (de exemplu, „animal” versus „mamifer”);

– asocierea – termenul X este asociat termenului Y 9�&��� � ��������������� �� � �: – e.g., „cui”/„Pink Floyd” asociat lui „ciocan”;

• ������ ���������� – ���'� < ��� �&��� ������ �-ierarhice (un �&�!��� � � ����� este-ascultat-de – is-listened-by –< ������� �� � � � ����� � �������� ��< �� � � !���� � � � � �� �� � �������E� ����� F � E������F:L ������ ���� ��� ���� � ��� �� ����!��� �� ���� �� ���� �������� 9� ����< ���� � ����!� �� ���� �� ���� �������� ����� � ����� ��� � � � ��ologie);

Page 364: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 364

• ������ ���������� – constrângerile care pot surveni într-o ontologie sunt definite ca axiome 9� �&�!� �� ���� � ��� ��'� �� � ������ � ����� � ���� ���� < �� ����� � ������ ��� �demonstrarea altora); astfel, într-o ontologie privitoare la ierbivore, am pu��� ��� � �&�!� �� '��� E� �� � ��� ����!� �������� �� � �ntr-� �����FL ��� ��-ne la sisteme de baze de date, constrângerile sunt definite prin intermediul regulilor de integritate 9� ���� ������ ���� ���� �� ���� �!��8� �� � �' �!� � ��� �suport pentru specificarea constrângerilor – de exemplu, în C/C++ �� ��� ��� ��� ��L !� !���< �&��� � �!� � � �� !��� �� �se ocu�� ��� �� � �' �!� �� �� ���� C'� – constraint logic programming).

6.2. Specificarea taxonomiilor

��������%�� �������

��&��!� �� ���� ������ � ���� '�� ��� �e clasifica � ������<i.e., ������������ ������������ %������ �� !������ 9 ��� ����: ��� � ����-����� ��� �� !� �� � � �< ���� ! �� ���� � � ������ �&���������� �� � ������� �� �� � �� �� ���� � ��!�� ����� 3 ��&��mie ����� � ����!��� �� � � �� �< ��� �� �� ������� 9�����:< � �������� � ��� ������C� ���� �� ���H��� �-clasificare (generaliza-re/spe����� �:� ,��� � �� 9������: ������ � ����������� ���������, pro-� ����� �� ���� ���� subclasei din care face parte. Taxonomiile pot fi utilizate la clasificarea resurselor (model simplu de clasificare), fiind considerate ontologii simple. Din punct de vedere sintactic, se poate ��� '� �� �4, $���!�< ���� ��! ��! ����� !� 8���

Drept util�� � ����� ��� ��&��!�� < ��� � ��!� ���2 • !�!� � �� ������ � �� ���� �� � ����� � �� ��ere; • ����� �� �� ��� �� �������'� 9!���� � �� �� directory), un

exemplu fiind Open Directory – dmoz.org; • ��!� ��� ����� �� – ����� � ������� � ����ificare a produ-

selor/serviciilor precum Universal Standard Products and Services Classification – www.eccma.org;

• clasificarea serviciilor Web – �� �������� � �� !����componentei tModel (UDDI), folosindu-se, de exemplu, sistemul nord-american de clasificare a industriilor (North American Industry Classification System).

Page 365: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 365

Modelarea taxonomiilor via scheme RDF

; ��� �� ������ �����< ��! ����� ��! ����! ����� �4, ��� � �specifica taxonomii. Din cele descrise în subcapitolul anterior, putem obs� �� �� ����� �����4, �� ������� �� ��� �� ����� 9�� ������� ����� � ���� � �����:� ������� � !����! �� ����� � � � �� �������� � ��� ������ ��������� �&� !� �� �axonomii a resurselor Web. 4��� �4, ���� � !���� �� � �� !�� ������� �� �� ���� �� � ����obiecte (indivizi), prin RDFS – RDF Schema 9K �(��> � G���< �---: – se permite definirea unei taxono!< � �� !� �� �����< ���� ����� � ���������� ��� ��� �4,$ ��� � � !�������� �� ��� � � �� �������� de �� !� � �� ���� �� � ����� �� !�� 4��'� < ����� �� �4,$ � ��� ����� ���� �4, ���� �������� $���!��� �4, ����'� ��!���� � �������� � ��� ���� �4,� � intermediul acestor scheme se poate defini modul cum un termen trebuie interpretat, specificându- � �� ����i�� � ������ �� ��� �� ������ ���fi date ca valori pentru aces�� � �� �����

3 ����!� �4, ���� ���� � ��� �� �� ����� � � � �� ������ ���� �� ������� !�� � �� ������� � � ������� � � �� ������ �������� � ����&��� ����� �� �������� �

�� !���'� �� ���� ��������< � ���< �� ��������� �� ����� 9class: � ��proprietate (property). De asemenea, apar termeni precum tip (type), �������� 9subClassOf), domeniu (domain) � �� ��� 9range). Vocabularul �� � �� ������� ������ ������ � !���� ������< �� � ��� �4, ����!�&� !� � !���� ���2 <Persoana, rdf:type, rdfs:Class> <Autor, rdfs:subClassOf, Persoana> <Student, rdfs:domain, Persoana>

$� ����� ������ ��� �� �! ���� �������� �� �� ���� �� �� �� �������< � ����� Autor ���� �������� � ����� Persoana.

Sunt specificate o serie de clase fundamentale: • rdfs:Resource (clasa resurselor); • rdf:Property 9����� � �� ������ :L • rdfs:Class (corespunde conceptului de tip sau categorie). ���� ���� ��� �C� �� ����� ��� ���!�� ����� – în paradigma

� ����� �� ����� �� �!��� ������� 4 ��� � �� ���� �� ����< ��� �������2 • rdf:type 9��� ������ �� � ��� �� ���� !�m� � � �� �����:L

Page 366: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 366

• rdfs:subClassOf 9����!���� �����< � �����< �� !���� � �claselor);

• rdfs:subPropertyOf 9������� ����� �� !���� � � � �� �-����� :�

���� � ������� �H��� � �� ������ ��� � !���� ��� ��� $�� ����-��� ���� �����2

• rdfs:range – restri������� ���� �� �� � �� e���L • rdfs:domain – ������� � ����� �� � ����� � ���� �� ����� � � ��

pro� ����� ����! ����� � �� ������ �� � ����� p �� �� !���!�� domain la

!���!�� range 9����!��� �����:�

� ��� < $�-�������� ��� �� ��� -��-� ���� $/��

; ����� �< ��! ���� � � ����� '�� �� Multimedia< ��!���� ����� �������� Audio � Video. Clasei Multimedia �� ������� � �� ������durata având drept interval de valori numere întregi – ��� � �'� � 72

<rdf:RDF

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">

<rdf:Description rdf:ID="Multimedia">

<rdf:type rdf:resource="rdfs:Class" />

Page 367: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 367

</rdf:Description>

<!-- subclase -->

<rdf:Description rdf:ID="Video">

<rdf:type rdf:resource="rdfs:Class" />

<rdfs:subClassOf rdf:resource="#Multimedia" />

</rdf:Description>

<rdf:Description rdf:ID="Audio">

<rdf:type rdf:resource="rdfs:Class" />

<rdfs:subClassOf rdf:resource="#Multimedia" />

</rdf:Description>

<!-- o proprietate -->

<rdf:Property rdf:ID="durata">

<rdfs:domain rdf:resource="#Multimedia" />

<rdfs:range rdf:resource="#Integer" />

</rdf:Property>

</rdf:RDF>

4��� ��! �� �!� ��< � ���� ���'��� � �� ���! ���te conceptele. 4� ����< ����� �!� ��� �� �'< Integer< � ���� 9���: ����������

; � !��� �� �&�!���< � ����! � � � �'���� ��!��������� �vom defini clasa/conceptul „parte de vorbire” (part of speech:< ��!���� ����������� E�� �F � Esubstantiv” (noun: � � �� ������ number (va avea � ��� ���� � ��� �� � ���! E$'��� F � E��� ��F:� 4� ���!���< ��!������� � ���� �����< �������� � �� �< �� � �� �� ��� �� � �!� via proprietatea number (acest aspect poate fi verificat în mod automat, plecând de la modelul definit).

<rdf:RDF xmlns:pos="http://www.linguistics.org/schema.rdf#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">

<!-- nivelul ontologic (al claselor) -->

<rdfs:Class rdf:about="pos:PartOfSpeech">

<rdfs:label>POS</rdfs:label>

<rdfs:comment xml:lang="ro">Clasa desemnând categoria

ge������ *���� �� �������*���� �#�������

</rdfs:Class>

<rdfs:Class rdf:about="pos:Noun">

<rdfs:label>Noun</rdfs:label>

<rdfs:comment xml:lang="ro">

Clasa substantivelor</rdfs:comment>

<rdfs:subClassOf rdfs:resource="pos:PartOfSpeech"/>

Page 368: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 368

</rdfs:Class>

<rdf:Property rdf:about="pos:number">

<rdfs:domain rdf:resource="pos:PartOfSpeech"/>

<rdfs:range rdf:resource="rdfs:Literal"/>

</rdf:Property>

<!-- ������� ������ .����������/ -->

<s:Stiri xmlns:s="http://www.stiri.ro/">

<pos:Noun rdf:I<��-����������

<pos:number rdf:value="Plural"/>

</pos:Noun>

����#8��� �� #�<���E3������

<pos:number rdf:value="Plural"/>

</pos:Verb>

</s:Stiri>

</rdf:RDF>

4 ���� �� ���� � ' ���< � ����� ����� � �� ������� �� � �'� � J�

Figu� @ $�-�������� ��� �� ��� ������

� ���� �� ���� ��! ������ ��< �� � ������ � �� �� ��'!� � ����� �������< � �� ������ � ��� �� �� � �����< ������� � � �� ������ ��!������� ���� ��� 4� ���!���< �4,$ � ����� �&� !� ���� �omplexe între clase (ca reuniunea ori dis8����: ��� �� �������� 9e.g.< E��� ���una”).

Page 369: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 369

6.3. Tezaure

; ���� �� � ����� ����� ���< ������� ��'� � � !���� ��� 94�����< 3� �� �Smith, 2003):

• conceptele se descriu într-un mod consistent; • utilizator �&�� !���� ��� ��-� ����� ����� �� � ���� ��

������� �� !���� �� �� � ��� �� ����� ���L • ������� � � ���� �� �� ��!�� ��� �� �� !���'� �����

(particula �: �������� 4 ��� �&�!��� �� ����� �< ��� � !������ ��'��T� Thesaurus (parte

din proiectul Gutenberg), WordNet, Center for Army Lessons Learned 9����: ������ �� � @����� ���� +������ 9@�+: ������ ���

� ��� 1* ������� � � ������� ��33 �-����� � � /����� :���� � �� �"� )**8

��� � �&� !� �� ��������� � ��� �� ����!��� � '��������< �'�� ��< � � ����� ��� < � ������< ���� ��� ��� � ���� Simple Knowledge Organizational System (SKOS).

������ ���� � !���� ����� �� �4, � ����!� �4, � ��������� �� !���de concept pentru a defini o ��� �� ���������� ���!��� #� !����������� ��� �� !� ������< � ���� �C� ��� ��������� � ����� ��� �� ������ ��!���� �� � �������< �� � ����� � ����!� �����������

Page 370: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 370

3 ������ �� ����!� ���������� ����� ����!� � ����� < � ����ficare, o taxono!�< � '���� �� �� !� � � �� ��� �� �� �������� ��� �����

De exemplu, pentru a defini conceptul de instrument vom scrie:

<skos:Concept rdf:about="#instrument">

<skos:definition>

Obiect utilizat într-un anumit scop</skos:definition>

<!-- specializare a unui alt concept -->

<skos:narrower rdf:resource="#obiect"/>

<!-- concepte înrudite -->

<skos:related rdf:resource="#unealta"/>

<skos:related rdf:resource="#dispozitiv"/>

<skos:related rdf:resource="#mecanism"/>

<skos:scopeNote>...</skos:scopeNote>

</skos:Concept>

Alte detalii în Mikhalenko (2005) � �� ���� ���� ���� ����

/�*�$����������� ���� �������3 ����)�����"��(�

3����'�� ��� ��� � � ���� �� � ����� ������ � ����&��� ����� �������� 9������ �� �������: �� �� �-l modelea���

De exemplu, se pot crea ontologii specializate, folosite într-un domeniu de interes precum chirurgia sau aeronautica (e.g., ontologiile dezvoltate de Bo�' � +K# ��� �����'�� !����� �� ���� ��� – OWL-$ � �$#3<Web Service Modeling Ontology:< �� � �����' '�� ��� � �� � �� !��ile � �� � � �� ��!��� �� �&�!����� < �� ��� !��ona:

• Cyc – cu varianta OpenCyc (OpenCyc); • ontologia lui Sowa (Sowa, 1999); • Princeton WordNet (WordNet); • ontologia ABC (Brickley et al., 1999); • Suggested Upper Merged Ontology – SUMO (Pease, 2005).

Unele dintre ontologiile generale sunt utilizate în contextul lingvisticii ��!��������� – ��� �� � ���� !������ � �����'� ��&���� !���-�'�� K��(�@�� 9����< �--):�

Cu ajutorul ontologiilor, se poate specifica un model conceptual< ���� �n !���� �� �� � 9��!��: �� ������� �< �� ezentat de:

• ������� � !� � 9�����< E��� � F ��� ��!����:L • ���� �� � �������L • �� ����H� �� ���� 9����!C� �!� � ���� : ��� ������elor; • �'�� �� ����� � �� �������< ���� � �� ibute.

Page 371: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 371

Unul dintre scopuri este cel de definire a unui model de date la nivel � '������� 9enterprise scheme:� %&���!� !���� !������� �� ������� �a modelelor conceptuale, dintre care se distinge modelul diagramelor entitate- ����� 9%�# – Entity-Relation Model:< �� ���� �� �� �� ����precizate SOM (Semantic Object Modeling), UML (Unified Modeling Language) � �%�# 9Higher Order Entity Relationship Model: 9����� � 4��! �Merten, 2003). Acest model este folosit în special pentru specificarea schemelor de baze de date.

Mai nou, se poate recurge la AOM (Asset-Oriented Model), printre �����8��� ������� �!� C��-�� ���������� ��� �� ���� �� � �super� 9 ���� �� � ����:< ������� �� ����� �� ���� � !����� ����lor N-� �� 3 �� !���� ������� ����� � �&� !�� � ' ��� �3#<modelul putând fi imple!���� � � "#�� #� !���� �!���� �� 9�3#:�

Conform celor de mai sus, putem identifica patru tipuri de ontologii 94��! � #� ��< �--�:2

• de nivel cel mai înalt (top-level ori upper-level) – sunt cele mai generale, ser�� ����� �� �� ��!���� �� 'L

• specifice unui domeniu (domain-related) – ����� ��� � �� �����< ������� �� ��!�� ������ �� �u����� � 9�� �&�!���< ���� �de calculatoare sau domeniul academic);

• specifice unor sarcini (task-related) – �� ����� �� �� � ��� ' ��de sar� � ���� 9�� �&�!���< ����� �� ���� ����D� �:L �� !��!��� � �����' � ���ale;

• ������� �� ������ 9application-related) – descriu conceptele care intervin într-� �������< ��� ��-se la specializarea unei ontologii ������� �� ��!�� �H��� �� ��

7. Specificarea unei ontologii

O ontologie va include (Sowa, 1999): • categoriile, conceptele fundamentale; • � �� ������ ��������� L • ������ � ������� �� � ��������

Conform Buraga (2004a), se pot folosi diverse limbaje de specificare, ca �&�!��� ������ ���C� � ���� Q+, ��� ������� �� ���< �� 9Common Logics). Alte limbaje sunt bazate pe logici ale descrierii (description logics), pentru Web fiind propuse OIL (Ontology Inference Layer), RDFS (RDF Schema:< 4�#�A3+� � ������� ���!��� � � ���� ���� ���2 3��

Page 372: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 372

(Web Ontology Laguage) (detalii în Smith et al.< �--)< � 4�����< 3� �� �Smith, 2003).

���� � � !�< �� ������ �� "#�< ��� � ������� �� ������ � ��� ��� ��8� �� �����'�� �� � ������< � ������ ��� �� !�� ��� �����&��� ����!��� ������ �� �'�� ������� � ��!� � ���! e-business 9�� ����< � �� �� ��!� � ���c� �� � ����� ��-� ������� � �dusele oferite pe baza unei ontologii speci���< ����� ������ �����C� ����� ��E���'���F � �� � ���� �� ��� �� � �� � ��C� � ����� ���� ��� ���� ����a�� ���< �� ���� ����'� �� �� ��!�� ��� ��8����������:� 4��� � ����-Matu (2004), „ontologiile constituie liantul care ��' ���� ����!� �� ���� �� ����< ����!� ������ �� �������< ����!���������� � ��� �� ������ ��' ���a � � ������ �� ������ � �F�

7.1. Specificarea categoriilor

Primul aspect care trebuie luat în ����� ��� ���� ��� �� ������� categoriilor ontologice. În teoria bazelor de date, categoriile sunt denumite, de obicei, domenii< � � +� �� �'����� ��� �!��� �� tipuri sau sorturi. Selec�� �� �� ����'� ���� !� ��� ���� �� ����� � �� ��entat într-o aplica�� ����D� � ��� � ��!�� �� ������� $�D� !������� �� E� ����!�������< ���� �� ��� ��� �� � �������8�� �� ����'� �� �!�� ������ '�� ������� ���� � � �' �! � � ���� �� ���� �� ��������� ����� ���egorii” (Sowa, 2001).

;� ��� �� ����!����� � �����'� 9�� E3F !� � � E�F !�: ����2 E�� �&���1F� � �� �� � �� � E������!F �����'� �� �� � � � ����H��������� ��� ��!���&�< ��� �� � ��������� !�� ���� �� ��� �� �&�� ���� ;ur!� ����'���� ���������< �� ���!����� ������� !�ntale (i.e., con-������� ��� ����'� ��: �� ��� � ��� ����� �� ���� ����'� � ������ �������� � � � ��!���� �� ������< �� !C� ������ � ����pte.

; $�D� 9�--*: �� ��!� � ��� �� categorii ale ontologiei generale Cyc 9������ ��� �� ������ �����' ���� �� ��� �� �� ��'� ������� ��!��:� ��� !� '�� ��� ����'� � �� �!���� Thing � � � � � �� ����proprii – � �� ������� � �'� � **� ������!���< �>� ��� �� ����� � ������ ! �� ��� �� ������� ��C� �� ���� � !�� �� ����� � �&�!�<iar varianta open source se poate re'�� �� 3���>��

Page 373: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 373

Figura 11. Categoriile (clasele) de nivelul cel mai înalt (top-level)

ale ontologi� �4� ��=��-�� -����� � � >�4 � F���r, 1997)

6����&�����������������������

���� �� ��� ����� � ������ �� ����� ����� � �&� !�� 9�: � intermediul �������������� 9�!�� � �� ����< ��� ��� slot-uri). Astfel, fiecare con���� 9����� � frame< ���� � �����! � ��� ��� ����ogiei , �!�@��: � � ������� ��� �� � �� ���� 9�� ����: �� � ��� � �������numai asupra cla���� ��� � �� � �� ���� ������ $� ����� ����� ������nume de atribut unor clase diferite, impunând anumite res������� ale valorilor atributelor consider��� 9������ ��� �� ��� ���!�� range restrictions:� 4��� ��! �! �����< � ����� ��� � � ����&� ��ntru modelarea unui aspect specific unui domeniu.

3 � �� ����� ���� � ����� �� � �� � ����� ������� ����� � ���� � ��membrii unei clase ori la ���� � �� ������ �� ��� ��� �� ��� �� ������ 9 ���� �� � ������� �� ����� � �i�� �� ��� �� ������� �� �!��8��

Page 374: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 374

�� ������� � ��� ��� �� ��� �� ����: � �� ������ 9 ���� �� �������� � ���� ��ase).

Definind o propriet���< � ���� �� !��� � ��� ���� 5��� �!��8� ��������� � 9� ���! 3��: ��� ��� ���� ��� � �� � �� �&� !� �������� � � �� ����� �� ����� ��� �� �� � ���� �� ����� 9�������� �: ��� � �� ���� ��8� ��������� – în acest mod, p �� ������ ��� �� � �����< �!�� ������� � ���� ! 4��! � #� �� 9�--�:< �&������������ � ����i��� � � ��� ���� � ������ 9�� ���� ���< ��!����< �� �� ����� �< �� � ����� �: � ��!�� 9� ��� � ��!�� ���:�

���� ���� ��� � �������� �� ����&� ��� �� �������� @� ������������ �� �� ����� !��� ��� �� ���� � ��� � ilor din universul ontologic considerat.

6����&���������������������

4��� ��! �� ����� �!� �� � ���� ���� �� !� ���< ��� �ntre aspectele cele m� !�� ���� �� �� ���� !���� �� �����i�� � � ������ �� �������� 9� E8� '���F �� $�D�< !���� �� ������� � � ������ �� ������� � ���� ��� :� ��n�� ! 9�� �@��:< ������ ��� � ��hiperonimie („general-specific”), de meronimie („parte-întreg”) sau de ���!�� ; !�� � !��< ��� � � '��� �� � ���� � �� ����'� �� onto��'�� � � � � �� ��� ����� � �� � ' ��� ��� ,��� � � � �� �� ���� � ����� �� � �� �� ���� 9���� �&��� ��� ��� ���� ���!���care � ��� � ��!�� ��� ������ ����� �� � �� ����� ���:� ��� ������'< !���� �� !������ ����� � �&� !��� � �� !���� ��latice, asociindu-�� �� ��� ��� < �� �������� �������� ��!�!�&!�� � �������� ��!� !!�� 9$�D�< �--*:.

� ���� ������ ���� ���� ��< � ������� �� ������ � � �� ������ <pot interveni meta-������ 9���� � ���� � �� ����: �� � ����'� �� !������!��� � ���� � ���!�� �� � � �� ������� � !��������

�� �&�!���< ���� �! ' ��� ������ �� � �� ��� ����� �� � �� ���componente ale unei persoane virtuale – de exemplu, un avatar în cadrul unui mediu tridimensional (Geroimenko, 2004).

Page 375: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 375

� ��� 1) $��� �� � ���� -��� �� ���-������ �� ��� -������ � �����

3 ���� �&�!����� � �� ��� � �� ������ �� � !���-�!��8��� $G#� �"#� � �!��8��� �� !� �� � �� ���� � �������2 ��#�< �������XHTML – a se vedea figura 13.

� ��� 18 $��� �� � ���� ���-� ��9� � � ��9��� ��� ���

(conform Geroimenko, 2004)

6�*��'(�"��������

Prez���! � � �'!�� �� �����'� !����C� �'�� �imal – preluare a �&�!����� �� ��� � K� �'� 9�--)�:� 3����'� ���� �&� !��� ��� ��� !� ��'��� ���� � < � !��� ��� �!��8��� ����� ���� �� �� �-���� � � �����n���� ������ ������ structurate (frames) din IA. (class-def defined ierbivor

subclass-of animal

slot-constraint

Page 376: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 376

value-type (planta or

(slot-constraint este-fragment-din

has-value planta)))

class-def elefant

sub-class-of ierbivor mamifer

slot-constraint consuma

value-type planta

slot-constraint culoare

has-filler "gri"

Am exprimat categoria ierbivor 9�������� � ����� animal) din care face parte clasa elefant 9�������� � ������� ierbivor � mamifer< ��C� � �� ������2consumator de elemente ale clasei planta � ��C� �� ��� �� ����� �� ' :�

Într-un limbaj de specificare bazat pe XML (în acest caz, folosindu-se ���� ��� �4,< �4, $���!� � 3+�:< ��! �� �2 <rdfs:Class rdf:ID="elefant">

<rdfs:subClassOf rdf:resource="#mamifer" />

<rdfs:subClassOf rdf:resource="#ierbivor" />

<oil:hasPropertyRestriction>

<oil:ValueType>

<oil:onProperty

rdf:resource="#consuma" />

<oil:toClass rdf:resource="#planta" />

</oil:ValueType>

<oil:hasFiller>

<oil:onProperty

rdf:resource="#culoare" />

<oil:stringFiller>gri</oil:stringFiller>

</oil:hasFiller>

</oil:hasPropertyRestriction>

</rdfs:Class>

%&��� ������� ��� �� �����'< ��������� � !�� ����� ������ ��� 3��< �� � �C� ��� �� ��!� �� ������ere:

• ontologia camerelor digitale: http://www.xfront.com/owl/ontologies/ camera/

• ontologia alimentelor (food ontology): http://www.mindswap.org/ ~aditkal/ food.owl

• ontologia proceselor (a serviciilor Web) OWL-S: http://www.daml.org /services/

Page 377: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 377

• ontologia standard de nivel superior IEEE SUO (Standard Upper Ontology): http://suo.ieee.org/

• ontologia genomului uman (Gene Ontology): http://www.geneontology.org/ Pentr� !� !���� �����< ���!���! ���� ��� �� ���� �� ������� �

$���!���� � $D��'���

8. Formalisme

8.1. Punerea problemei

4 ���� ���� �� !� ���< �� ����� �!� �� ������ �� �����'�� �� � ������� !����� �� �� 9�� � � ��: ��!� �� !� �!bajului de modelare ������ �� ����� ������ ������� � ��� �� ��!< � �������� 9meaning) este dat de asocierea unui formalism; de exemplu, logica de ordin întâi (FOL – First Order Logic: 9����� � #���(��� � @� ���< *JJ7:�

Recurgând la un model teoretic, putem beneficia de un mecanism de ����� � �� ���� �� � ������� 9� ����� �� ����< ���!����� �!��8��� ���&� !� � � �����'�: � ������������� ��� � � ���� ���� �������< ����&��� !� !���� ���� 9�� � ��� ��� !�����:< un exemplu fiind �� !��� E���F � �!�� �!C�< �� � �� ���� � �� !� !���� ��!����#������� �� � ������ �� ��� �����'� �� 9�� � � ��: ��!<���!����� !������� � ����� �� �����C� �������� ��! ����������Mai trebu� �� ���� � ����� �� !��� �� � ���&� � !�����< ������ ��C��� ���� � !������� �� ������� ������ ��������� � ��� �� ���&��4������� 9�� �����: �� ��� �efini în termenii modelului ales.

8.2. Spre un model formal

Din punct de vedere matematic, putem con��� � � !���arele: • domeniul modelat (partea lumii modelate de ontologie) e interpretat

�� � !���!� 9set) ∆; • �������� 9�������: ��! ��� �� � ����� �� ���!��� ��� �� ∆; • clasele/conceptele (predicate unare) sunt sub!���! ��� �� ∆; • � �� ������H ��� �� 9� ������ �� �: ��� ���!���! ��� �� ∆2 = ∆ × ∆; • � �������� �� � � ��� ���!���! ��� �� ∆3 ����!��� ,����� ����� �� !���! �!���< ����� subClassOf dintre clase poate fi

�� � �����< �� �&�!���< �� � ������ �� !�l�!�

Page 378: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 378

O exem����� � � �'!���� ���� ��� ���� �� � ����� � 9������ ����� �� ��(� � ����� < �--):� 4� ! �� !�����! � ��!� ��!���� ��!���< �� ���� � ����!����� ; ��� �� ������ ��!< �� �&��� ��� ����< ����� ��� �� ����� � ���! .��� (su������ � ����� Animal), /������� sau Auto� 3 ������ ��� ��� ���� ���� ��� �� �'� � *)�

� ��� 17 : ���� ����� �(�� ��� �� �� ����� � � ����-�����

Formal, un vocabular ���� � !���!� �� �!� ������� � ��� �� ��!modelate, pentru a put�� ���! ������� �������� ; ����� ��� �<�������� �� �� � � !���!� �� '��� _,��'�< ?���< �!��< �� ���<Persoana, Auto, drives< ���`� 4��'� < �� � ��� !���� ��� �� 9���&�!���< ����� drives � �� ����� � ������� ���C� �� � ����e de �� ���� � ����!��ile).

O interpretare I a acestui vocabular este o pereche < ∆, �I >, unde dome-�� ���� �� ������ �� !���!�� ∆, iar ����� �� �� � ���&� ���!���� ���� ���� �� ����� �I. Numele obiectelor corespund elementelor lui ∆, numele predicatelor unare (clase/concepte) sunt asociate sub!���-milor lui ∆, iar �!��� � �������� �� � 9� �� ����H ��� : ��� �������submul�!�� ∆ × ∆. $!�� < �� ����� � ����� � ��� � � ��� ���� �� �9���� �x���:�

8.3. Logicile descrie�����3��� � ��������� ��

����! �!� �� ������ �� �����'�� !�������� � ������ �����< ��������� !C� �� !���'� ��! ����� ��� 9��! ����� �� ������� ��!�����

Page 379: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 379

�� �!���� TBox � �� !� ��'� ���� � :� $� ������� ������ �� � ��uie �� �� ����� �� � ��'��� � �� ���� � ������ ������� � ��� �� �����'��4 ������< �����'�� ��� � � !����! �!��� �� �&� !� � ������ 9����� ��� ������� :< ��� � ������� � ���� �������� ����maniere de descriere – baze de date, tri��� �4, ���� ������� ��!��������� ����� �� ABox. Mai mult decât atât, din punct de vedere ��!��������< ����!����� � ���� � �� ��� ��� � ������� �general (Baader et al., 2003).

$�!���� �� !��� ���� ���� �� ��'��� ���� � 9description logics), care �� ���� �� � �������� � ��'�� �� � ��� + � ��� � �� � �&��� ��8�����!� �� �� ���� ������ �� !���!� ��� � ���� �� ���� ���� ��� �specificarea de concep��H����� � ��� H� �� ���� 9�������< �� ���� ���� de8� �&�����:< � ���� ��C� �� ������� ���� �� �&�!� ������C������ ���� � ������� 9�����:< ��� 9� �� ����: � ��� 9n�����:�

Logicile descrierii sunt cele mai uzuale mecanisme folosite pentru repre-���� �� ��������� 9knowledge representation). Limbajele de exprimare a �����'�� � ����&��� ������� ��� 9����C� �� 3+� – Ontology Inference Layer – � $�3% – Simple HTML Ontology Language – � �8�'C� ��actualul standard OWL – Web Ontology Language) le au drept fundament teo ��� 9��� � �����-$����� < ��>�� � �� ��(�< �--):�

Într-� ����! ����� �� ��'��� ���� � < ��!����� � ����� ���� ���� �� ������� 9knowledge base:< �� � ���� ��������� � �!��'���� � ter-!���� �� ����! �� �� ��� 9inference system) ce poate fi accesat via o �� ���� �� � ������� 9�!� ��� �: – ��� �'� � * � K��� �� ����������� ��!���� � ���� !���! �� �&o!� 9�� ��(� � ����� < �--):2

Figura 15. Structura unui sistem bazat pe logica descrierii

Page 380: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 380

TBox descrie �� ���� � ��!���� 9����!� ����������:L �� �&�mplu, ar ����� � ��!���� � � !���� ele:

• Elefant ≡ Animal Ierbivor Gri – ����� �������� ���� �������� �in�� ����� ������� �!����� < � ��� �� � ����� ��C� �����de culoare gri;

• HappyFather ≡ Man ∃hasChild.Female ∃hasChild.Male ∀hasChild.(Rich ∨ Happy) – ����� ����� �� �� ���� ����a���� ������� �� ����� �� � �� ��� ���� ��� ���� � ��� ��� �� �����'�� ��� �� i��L

• transitive (rudaCu) – ����� �� ���� ���� ��������� �� ��� �����L

ABox ���� � � ������ ��� ��� 9������< �������:L ��� ���� �&�!��-��� 2

• Radu: HappyFather – individul Radu este un ta�� �� ��L • <Radu, Andreea>: hasChild – individul Radu are drept copil pe

Andreea. De r�!� ��� ������ �� ������� ���� ��� � � � ���� �� � ��!�����

��'��< �� ���� �������� ��C� � ���� �� �e�� � ���������< �C� � ���� �� !���!��� �

$� ��� � ���������� ����� �� ���� ���� ��� � � !��� ��� �-� 9���:� �� ������ < ���C��-se exprima:

• cardinalitatea (de exemplu, >3 ���(������ – în contextul unui sit de ��!� � ����� ��< � ����� ������� � ��� ��� � ���� � ����� �� �� ��������� �� ���� ���� ��� ���� � ��!���� ��� ��� �produse);

• ��� ���� �� �!� �������� 9��'�< <1 hasParent.Male – orice �� ���� � � ��� !��� � �� �� �� � � �� ���< ���� � ����:L

• domeniile de valori concrete, i.e., tipurile de date; • ��� �� �� � �� ����2 � �����< �� �� 9hasParent este inversa lui

hasChild), ��!���� ����L • nominalii, i.e., singletons 9�� �&�!���< _�� ����` ������� ������ ��

�&��� � �'� �� � �� ������' ���:� Desigur, se pot detalia multe alte aspecte, privitoare la inter� ��� < ��

������������ � �� �� ��� �� ��������< �� �! ����� ��� �� ��������� � 9�� ��� ������� K���� et al.< �--�< � ,���� et al., 2003).

Page 381: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 381

9. Proiectarea (ingineria) ontologiilor

9.1. Preliminarii

Ontologiile pot proveni din sau pot fi salvate sub forma de scheme XML, scheme de baze de date, diagra!� 5#�< ���� �������� ���� 4��'� < ���� �� �� �� ��8� �� ��������� < ��� ��� �� � ����!� �� � �� � �����' � !���� ��� 94��! � #� ��< �--�:2

• crearea de ontologii provenind din diverse surse (eterogene); • managementul versiunilor; • realiz� �� �������� �� �����' 9���� ��� �� �� ���� ���� ��� �

��� �� � ���! ����� < ��!�� ��< ������ < ����� < ���� �etc.);

• ���� ��< � '��� �� � ������� �� ��!���� �� ������� ����� � � �!��� � �� �� �����' �� !�le.

4� �!� ��� �� '� � �����'�� ���� ��� �� �� ��� ����D� �9����!�� ��� � !����� �� ���������:< � ��!�� ��� �� � ���� ������ ������� � ���elul 1.

!����� 1 ,������ �� ������ versus �� ��� ������� �� �������� >�4 � ,�'� ����, 2003)

3 �����< conform paradigmei obiectuale

O ontologie

�������� �� ���� � ������� �� �������unui program (software)

�������� �� ���� � �� 9�� � � ��: lumi

$������< �����< comportamentul via metode

$������ structura unor concepte (abstracte sau nu)

Descrie �����%������� ��%��� 9�� �calculatorului) a datelor (e.g., folo-sind tipurile de date C++ sau Java)

Nu-� ��� � ����!� �� ����� efective a conceptelor modelate

9.2. Metodologii de proiectare a ontologiilor

3 ������ !�������'� ��� ��� � �� ����� �� �� �����' !����������� � �� � !���� ��� ����� 9@�> � #�G����< �--�:2

• ��� ������ ���������� �� ���������� – ������� ���� � ������ ���!��� �� ��� ���� �� �� !��� � �&�� ��� � ���� �� �� ���� �������(things) ale domeniului de interes; tot aici, se vor asigura consensul �� � �������� ���� ���� � �������� ������ �L

Page 382: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 382

• organizarea ontologiei – �� ��� � �� � ����� �� �� ���!��� ��� ���� ����������2 ������ �� � ������� ������� ��� ��� �� � �� ������ ������ �< � ������ �� � �������< � �area ��������� ���� ����< ������ �� ������� < ��� ��� ��H���-�� �� ���� �����' � ��� !� ����rte;

• „umplerea” ontologiei – ������� ����� � � � ���� � ����'� �� �����-telor, rel���� < ����� �� ����� �� ������ � ����� ��� � ���-zarea scopurilor ontologiei;

• verificarea ontologiei – !���� ������ �� ���������� �� ����!���< �� ��� ������< ��'� � ��!���L �� ��� �� ��������poate implica o ������� � ����!���< �����C� � ����pte bazate �� � �� ���� ������� ��� ���� �� � �����L

• publicarea ontologiei – ���� � ������ �� ��� �� ���� �� ��� ��&�� � � ��!���� � ������ �� � ��� �� !����� �� �������� �(grup de interes< �� �� �� �< � '�����< ��!����� +nternet etc.).

��� � ����� � ����< ��� � ���� �� � �� � � !�� ���2 • ����������� ���������� – în cadrul acestei faze, vom crea ontologia, vom

�! ������� � ��! ����� �� !�� ����� ��� �������� $!ilar, ��! �! � �� ������ � ��! ����� �� !���� �� ��L

• formularea faptelor despre un domeniu – �� �� ��� �� !�� ��� ��� � �� ��� ��� �C� ������� ��ologice;

• ���������� �� ������������ ������ ��������� �� ����� – acest pas ia în calcul ���� !� �� ��������� �� ���� �� !���� ��������� �� ���anteriori.

���� ! �� ��(� � ����� 9�--):< ������� � ����� � �� � �� 9�������< ������ : �� �����' ��� �� �� !� 8��2

• stabilirea scopului – ������� ���� !���� ������� �� �� ���� <������ �� �� � ��� �� �� ���� � ���� � �� !����� �� �� �ontologii sau doar a reutili�� ���H�� � ��8� �&�����L

• ���������� ������������� �� ��!�� �������� ��� ����-formal – �� �������� �în mai multe subetape, presupunând: – stabilirea termenilor referitori la domeniul modelat; – � '��� �� �� !��� � �� !��� 9�� �&�!���< ' ��� �� ��

�� !� � ����� �� ���rse criterii); – �� �� ��� �� � ��� ��� �� �� !��� – ������ ����

informale ale conceptelor care ulterior vor fi rafinate; – realizarea de diagrame informale – acestea vor ajuta în stabilirea

����ilor dintre diverse clase de concepte;

Page 383: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 383

• ��������� ���������� �� �������� – !���� ������ � �� �� ���� ���� � �� ��� �� �!�� � � !�� � �� !����� � ��������L

• implementarea ontologiei – ������� ����� ����� � !� !���� ����2 – �������� �� �� ����!� � !������ � � �� ������� ��

ontologie; – ����� �� �� ��!��� � �� �� ��� ��� � ���� � �� �

������� �����'� 9�����< � �� e���< ����:L – !���!��� �� �� � ����� 9�� � �� � �'�� ��� ��C�

����� ���������� ���< �C� � ����� �� ���� �&�� ���� ������elor anterior dobândite, de background);

– �� ��� �� ���������� 9�� �&�!���< �� ����� ��C!��� ��anumite ������� �� � ����� �&� !� ���� � �� ������� '� �� ���n��:L

– popularea ontologiei (eventual, se poate recurge la tehnici de text mining sau la procesarea limbajului natural; datele se pot prelua din corpus-uri disponibile pe Web, posibil adnotate în prealabil);

• �!������� �� ���������� ��������� – �� �� ��� � ����� ��� � !� ��������� ��� ��� � �� � � ���� ���������� �����'�< ���� ���-�� �� �� �� ��� ��� ��� � �� ������� �����'� � �� !��'�!�-tul acesteia; de asemenea, se p�� � ����� ����� � E� ���F 9�������<contraexemple);

• ��������%���� �����%���� �� �!������� 9!������: – în cadrul acestei etape, se va adopta un rol pasiv, de consemnare a posibilelor ���!�� � ��� �� �������< �� � � �� �� �� � !����� ���������� !�8� �L ������� �c������ ����� � ���!��� �� � ��� ����� ����� 2 E� �������� � � � �����F 9EProcess not product”).

#����� �� �����'� � ���� �� ��� � ���� � 9�� ��(� � ����� < �--):2 • semantica (meaning:2 ��'� � �� �������� ������� �� � �&� �'�

cu������� L • indexarea2 ����!���� ������� � �� ��������� �� ������� �<

����� � � '�� � � ��������� L • utilizarea2 �� ����� �� � ����� �� ������ 9������� :< ��� �� ��

���� � ������L • ��$�%����2 ������� ��������� �� ����9� :� � � ������erii. 3 ���� � ���� � � �� ���� �� �� !�������' �� !��'�!�� ��

��������� �� ���� �����'�� ���� � ���n���� � ��� �� ��� � 4����<,���� � �� �� !��� 9�--�:�

Page 384: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 384

Desigur, se poate recurge la diverse instrumente de editare a �����'�� < � ��� �� �� !���� ��� � !������ ����a��� Altova SemanticWorks, OILEd, OntoEdit, Protégé-2000, pOWL sau SWOOP, !���!����� � .��� � ��� � ������� � �'! open source, freeware sau comercial. O compar��� � ���a � �� � �' �!��� �� � �� � �!����� � � �����'�� ���� ������� � ��� � � ��!!� 9�-- :�

4� ���!���< � ���� �� ���! � ���� � �� �������� ������� �� ��� �������� ��� � �� ��� �� �������� � ��� ��� �ntologiei specificate. 4� ���� ������ �� ����� ���� � ���� � �� ��� � � ���� ���'��� ��� �� ������� � ��� �� ������� ����!���

��� ��� �� ��!����� � ����� !� !���� ����� < �� � �� � ��-!� �! ��� �������� �� a priori a dimensiunii ontologi�< �!� ��persoa��� !������ � !����� ��< �� ��� �� � �&������ �� �����'�<����� �� �����'� �� ��� � ������� �� � � ��� �&�� � � ��!�������� �� � – nu în ultimul rând – ���-numitul „fenomen” de natural laziness.

Mai mult, pot �&��� �������� ������� �� ��!�� ����cte privitoare la ��� �� � ��� ���� �� �� !������ %&�� � � ��!�� ��� � �������� ������ � � ����� 9����C� ��� �� ������� �� � ����� �:< ���� ��va conduce la realizarea de prototi�� � '�� ���� � �� �� ���� �� ��<��'�� ��� !����� �� �� !���!� � ��!����������< �����C����� � ��� ��� ��� ���� 5 ��� ������ �� �� � � ���� ��� ��� �ste ��� � ��� �� � ���� ��� � � ����������� �����'� �����ltate versus '�� � � ��!��������� 5 ����� !�8� � �� ������ � �� ������� �����'�< �� � ��� �� � ��� � �&�� ��� �� ��������� � � ��!������ ��� �� ����� � ���� � �� �� !� ������ � �� ��� '� �� �� �-taxe diferite.

Al�� � ����!� 9 ������: ��� ���� � �� '�� �� �� � �� �� !���9��������< ��!��������< ����� ����: �� ������ � � �� �����'< ��� '� �� � ���� ���� �� �����' � ���� !����< �� ��� � ��������provenind din domenii eterogene 9�������< �� ����� �!-calculator, inginerie sof�D� �< �'�����< ���� ��'��� � ������:< ���������� ���-��'�� '�� ��� �� � � ������� ������ � � ����� � ��'� � �� ��� ���<������ �� � ����� � ����� �� �� �� �� �� ���� multiple pentru popularea ontologiilor.

�� ����� ������ �����< � ���� �� �!� ��! �� �&��� !� !������������ � � �'�� � ����!C� ������� �������� ������< �� ����� �sino! �� !� �� �����< ������< ����'� � � ��� 3 ����� �� ����� ���< � � ������ �� ����� � � � � ����� 9����� ��� ���< �

Page 385: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 385

func�� �� ����&�:� ; ��� �� � �� �����< ��� �� !� � ���! slot< �����<atri���< �� ��� ��'��� � ��!�����

Actualmente, sunt disponibile mai multe sintaxe: cea abstra���< � ���<RDF/XML, logica de ordin I, diverse reprezen�� ' ���� – vezi figura 16 –, limbajul natural (parafraza), formatele folosite de unele instrumente ontologice.

� ��� 1? / ����� ��-�������� ��� �� �� ������� ���5

������ ����� ��� ��� �ri de subiecte (topic maps), diagrame UML, grafuri RDF

10. Specificarea ontologiilor prin OWL

10.1. Caracterizare

Limbajul OWL – Web Ontology Language (Patel-$����� < ��>�� � �� ��(�< 2004) – are drept scop facilitarea interpre�� �� ��� � ��������� � ����-���� �� !�����< �����C� �&� !� �� �����'�� �� ���� ��� "#�<

Page 386: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 386

�4, � �4,$� 5 '�� � ��� �� ��������� �!��8��� ���� ����ibil în Smith et al. (2004).

�!��8�� 3�� ��� � � � ���� �� ������� � � �����'�� 2 • OWL Lite – poate fi folosit pentru exprimarea ierarhiilor

�� ������� � � � �� ���� C'� �!���L ��������� ������� �� �� ��onamente automate simple;

• OWL DL – ��� � !�&!�! �� �&� �������< �� � �� �� ��completitudinii (toate concluziile ce se pot deduce pot fi realizate de ��� � ��������� : � ���������� 9�������� �� ����� ����� � �!�finit), bazele teoretice fiind cele date de logicile descrierii;

• OWL Full – �� !�� !�&!�! �� �&� ������� � ���&������< �� ���� � �� ��� � ����!� �ompletitudinii (nu se pot realiza ����!���:�

� 3�� �� ��� ���� � ����� � � �� ����< �&��C� ���� ��� ��� ��&� !� �� ������ �� � ����� 9e.g.< ��8����:< �� ������< �'�����între clase sau indivizi, asocierea de tipuri XML Schema valorilor proprie-���i�� < !����� �� �� ���� ����� � �� ������ 9�� �&�!���< �!�� �: �multe altele.

10.2. Sintaxa OWL

$� ��� � ���� ���&�2 �� ������ �� "#� 9��� �� ������ � � ������: ��������� �!�� E���� ����F 9�� ������ !������� logicilor descrierii). Nume�� � 3�� ��� ��� �� �� 5�+ 9�� �4,:< ����C��-se eventual ���� �� �!��

��� � � ������� � �����'� ��� � � ������2 ������ �� �!� folosite, ver���� �� ��� <owl:versionInfo>, versiunea anterioa �<owl:priorVersion>< � ��!��� � 9�&������: <rdfs:comment> � �etiche�� <rdfs:label>.

Exprimarea claselor

3 ����� �� �&� !� � �� !���� ���!����� <owl:Class>, desemnând � ������� �� ��� 9������ ��� things: � �� � !�������� �� � ���� � �lume. ������ �� �� �� � � ������� �� ������� �� ��8� �����utul <rdfs:subClassOf>. Pot fi definite diverse �������� �� �����, desemnând:

• reuniunea: <owl:unionOf> • �� �����2 <owl:intersectionOf> • complementara: <owl:complementOf> • ��8����2 <owl:disjointWith>

Page 387: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 387

%&� ���� �� ����� ��� ������� ��� � �&� !� �� ������� � 4����!���< � ����� �� ����� ��� � � ��!� � �� !�!� �� � ��<owl:oneOf>.

4� ����< ����! �&� !� �� ����!����� ���� � ��� ��! � ����� �nici executabile:

<owl:Class rdf:ID="Video">

<rdfs:subClassOf rdf:resource="#Multimedia" />

<owl:disjointWith rdf:resource="#LumiVirtuale" />

<owl:disjointWith rdf:resource="#Executabile" />

</owl:Class>

���������������� ������

���� ! ���� �� !� ���< � �� ������ ��� ���� �� � �� � ��� ����ifica fapte privitoare la membrii unei clase sau la indivizi. O proprietate se poate referi la tipurile de date (datatype property) sau la obiecte (object property).

� �� ������ ��� ������ � ��� ������ �� ���� �� � ��� 9� ����:�4��� � � �� �����< �� ���� !���! � ��� ���� 3�� �� !�� �precizarea de sub-� �� ���� 9�������� :�

?�! ��� � � �� ����� �� �� ����� �� � �&� !� ������ �� �document multimedia poate fi stocat pe un sit Web multimedi�� $� ���� ��pre���� ���� ����� �4,$ ��� ��� � �� ��!�� � ����!�� 9range):

<owl:ObjectProperty rdf:ID="stocat">

<rdfs:domain rdf:resource="#Multimedia" />

<rdfs:range rdf:resource="#sitMultimedia" />

</owl:ObjectProperty>

5 !��� �� �&�!��� ������� � � �� ����� datatype !����C� � ������� � ��� �� � ��� �� ��� ���� �� ���� ��C� ��� "#� $���!�� ; ��������< !���! �� ��� �������� �� �� ����!�� �� ���� year:

<owl:DatatypeProperty rdf:ID="anulPublicatiei">

<rdfs:domain rdf:resource="#An" />

<rdfs:range rdf:resource= "http://www.w3.org/2001/XMLSchema#year" />

</owl:DatatypeProperty>

3 � �� ����� �� � � � � ���C� � �'� � ����� � ��� � ���� � ���9����� �� � ���� ���: �� �!���� ����������� ������������ ���� ���� ��!� 8�� ������� ������ �� � �� ���� � � ��� � �'� � ���� �� ���� �2

<owl:FunctionalProperty rdf:ID="dataNasterii">

<rdfs:domain rdf:resource="#Persoana" />

Page 388: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 388

<rdfs:range rdf:resource="#data" />

</owl:FunctionalProperty>

Da�� ��� �� � ���� � ����� p �� K � K ���� � ����� p cu A, atunci p este o ����������� ���������� ������< ����! ��� ����� �� ���� �� � ����persoane:

<owl:SymmetricProperty rdf:ID="rudaCu">

<rdfs:domain rdf:resource="#Persoana" />

<rdfs:range rdf:resource="#Persoana" />

</owl:SymmetricProperty>

4� ���!���< �� ��� �&� !� � �� ���� �� ��< ���� ��! �� ����� �!� �� � � !��� �� �&�!��� – preluat dintr-o ontologie pentru mana-'�!���� � ������� � ���� �� �������� %!�� � ���&�� � �C�� –, în �� � �� ������� ������ �� � ����� ���� ��!���� � !��� ���� �� ����<iar mai multe persoane for!���� � ������

<owl:Class rdf:ID="Echipa">

<rdfs:subClassOf rdf:resource="Persoana"/>

<rdfs:subClassOf>

<owl:Restriction>

<owl:onProperty rdf:resource="#formataDin" />

<owl:minCardinality

rdf:datatype="&xsd;nonNegativeInteger">2

</owl:minCardinality>

</owl:Restriction>

</rdfs:subClassOf>

<owl:disjointWith rdf:resource="#Proiect" />

<owl:disjointWith rdf:resource="#Timp" />

<owl:disjointWith rdf:resource="#Resursa" />

<rdfs:subClassOf>

<owl:Restriction>

<owl:onProperty rdf:resource="#formataDin" />

<owl:someValuesFrom rdf:resource="#Persoana" />

</owl:Restriction>

</rdfs:subClassOf>

</owl:Class>

<owl:ObjectProperty rdf:ID="formataDin">

<rdfs:domain rdf:resource="#Echipa"/>

<rdfs:range rdf:resource="#Persoana"/>

</owl:ObjectProperty>

Page 389: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 389

<owl:ObjectProperty rdf:ID="formeaza">

<rdf:type rdf:resource="owl:InverseFunctionalProperty" />

<owl:inverseOf rdf:resource="#esteFormataDin" />

</owl:ObjectProperty>

Figura 17 $�-�������� ��� �� ��� ������� -� � ���� � ���������� -�� �������

��� � !���� � ��!�� ��� ��< �� � � ���� �� ��� � � ��� ��elementelor <owl:Restriction> � <owl:onProperty>. Principalele tipuri �� ��� �� ������ ��� �� ���pra:

• valorilor: allValuesFrom, someValuesFrom, hasValue; • �� ������2 minCardinality, maxCardinality � cardinality. 5 �&�!��� ���� ��� � �� � !���! �� � ����!�� ���� �� �� ������

!��� �� � �� ��� !���!��� 9���� � ����� �� ����!�� ���io � ���� �� ��� � � ��� ��� � ����� stocat):

<owl:Class rdf:ID="Audio">

<rdfs:subClassOf rdf:resource="#Multimedia" />

<rdfs:subClassOf>

<owl:Restriction>

<owl:onProperty rdf:resource="#stocat" />

<!-- ������� ������������ ������ -->

<owl:minCardinality

rdf:datatype="xsd:nonNegativeInteger">

1

</owl:minCardinality>

</owl:Restriction>

</rdfs:subClassOf>

</owl:Class>

Page 390: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 390

Definirea indivizilor

Un individ (membru) al unei clase se ����� � �� ��� �C� ����� �������� � �� ���� � ����� �� ��! 9Thing). Este înrudit cu alte ������ ��� ���� �� ���� �� � �� ����� ; 3��< �� ����� �&� !� ��elementul <owl:Thing>.

� ��� 1< � ����� ��� �� � � -�� �(�� ��� ��se ontologice

4� �&�!���< ����! ����� � � ����� � ����� Video astfel:

<!-- definim individul -->

<owl:Thing rdf:ID="the_wall">

<rdfs:comment>Un film de Pink Floyd</rdfs:comment>

</owl:Thing>

Page 391: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 391

<!-- �������, ����� ���� ���� ���

(eventual propri��������-date) -->

<owl:Thing rdf:about="#the_wall">

<rdf:type rdf:resource="#Video" />

</owl:Thing>

��� ����� �� ' ���� ���� ������� � �'� � *7< � �� � �! ����� ���� Audio ���� ��8���� �� ����� Video.

4� ���� �� ����� ���� � ���� � �� ��� � � ���� �� �� ������� ���� �� ������� ����!���

�����������!���������

3�� �� !�� �� ���� ����� �� �� ����� ��� ��������� � <owl:equivalentClass>� %�������� � �� ������ �� �&� !� ��elementul <owl:equivalentProperty>< � ��� �� � ��� �� ��������cu <owl:sameAs>.

��� � � ��� ������ �� ��� ����� �� �������� ���� ����<owl:distinctMembers>.

; �&�!���� � !��� < !���! �� � ��� �� �� ����� �� ����� 9������ ���< ���� ��!�: – a se vedea figura 19:

<owl:Thing rdf:ID="zidul">

<rdfs:comment>Un film din România</rdfs:comment>

</owl:Thing>

<rdf:Description rdf:about="#zidul">

<owl:differentFrom rdf:resource="#the_wall"/>

��� �#�������5� ��� ��(���� �� *�&� J���*���� �#������>

<rdf:type rdf:resource="#Video" />

</rdf:Description>

Page 392: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 392

� ��� 1@ $�-�������� ��� �� �� � � ��� � �� ���

%-����4����� ���� ���� ����������3��

Pentru OWL Full se permite „orice” (exemplele de mai sus au fost expri-!��� �� ���� ��� OWL Full). 4����� �4,$ �� ��� !&� �� ���� 3��<�� � �� ����

În cazul OWL DL, nu se poate folosi cardinality pentru o proprietate � ����� 9����� � TransitiveProperty). O ontologie OWL DL nu poate importa una OWL Full. De asemenea, nu se poate defi � ����� ��!�!� � � �����< � FunctionalProperty � InverseFunctional-

Property �� ��� ����� ��� ��� � � �� ���� �� �� ��iect (Object-Property).

Pentru OWL Lite< �� !�� ��� ���� �� �� 3�� 4� � � ���� ���� ��� ����� �� ���� ����or minCardinality � maxCardinality, iar pentru cardinality valorile permise sunt doar 0 si 1. Mai mult, nu se pot folosi: hasValue, disjointWith, oneOf, complementOf � unionOf.

Alte detalii privitoare la limbajul OWL sunt disponibile în Daconta, 3� �� � Smith (2003).

Page 393: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 393

%%������������� �"� ������"��

%%�%��$� ������������� �"� �

5�� �� � ��������� ���� !� !�� ���� � ��'��� � �����'�� ���� ���pri��� �� !�� � �� ����!�� ���p����� %&��� ���� !� ����'� 2

• ����!���� ��! ������� 9open world reasoning) – în acest caz, � �� ����� � ����� �� �C� �C� �� ����� ��!��� � �� ���� ����L �� ������� � !�� � E� �� ��!� � �������� �� ��� � ���� ��mine”;

• ����!���� ��! ����� 9close world reasoning) – �'��� �� �-��� ���� 9� �� � ����� � '��� ���� ����� �� ����:< �����C��-ne ���� ������ E����� ���� ������ �!� � ������� ��!�F�

3����'��< ������� � ���� �� �������< ��� ����� ��� ��! ���-chise, iar bazele de date – ��! ������ 4� ���� ��� �� ���� �� �������� ������� � !���� ��< � �� e��� � ��� �� ���� C'� �� � ������ � !���!� �� !����� ������� ���� � �� � ���� C'� !����adopta �� � �� � !����< � �� �C� �&��� !� !���� ���� C'� < �� ��C�num�rul modelelor posibile scade – � �� ������� � ������� ��

3 ���� �� ���� ������ ������� � !���� ��< �� ������ �� ����!�9�&�: �������� @�!��� 9���� ��: ��� �� ��� �� � ����� �� ��� ����� 9� �'�� � �� � ���� �� �� ���:� 4�!��� !������ � ��mpus numai din ��� �!� ������ � ���� �� ���� 9!������ ��! ����� – ceea ce nu �&��� � ���� �� ����< � �&��� ��� :� %&����� ��� �C� !� �����posibil, fiind relativ dificil de modificat schema de baze de date proiecta���

Tabelul 2. Modelul unic (baze de date) versus modelele multiple (ontologii) ��-��� ��-� F�����A� � $������ )**7

Model unic Modele multiple %&� ������� ����� 9� �&����'��H��8���:

%&� ������� ����� 9������ logici, reuniune, disjunc��< ��.)

@� ����� �&� !� �� !�� -complete

����� ����� �H�&� !� �� !��incomplete

Non-!���� 9����'� �� �� �� -!�� � ���� ���� ����� ��:

#���� 9����'� �� �� �� !������ ���� ����� ��:

Procesul de reasoning (interogare) ���� ���� � rapid – uzual, se �������� � � -o interogare SQL

Procesul de reasoning (interogare) ���� ���� � ���

� ������ �� ������� � � ����!����� �� ����� ����� ����!�� ����� � � �� �!�� ����D� � �!� reasoner – ��� � ������� ��� ������

Page 394: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 394

poate servi la clasificarea conceptelor, rezul�C� �� � � �� � 9� � �� �� ���<taxonomie), fie un digraf aciclic (poli-ierarhie, graf conceptual). De asemenea, reasoner-ul poate fi folosit la normalizarea ontologiei, separând concep���� �� ���� � � �� ��8���< � �� ��C� ��'��� �� � � ������ � ��� c� 9�� ��(� � ����� < �--):�

Dezvoltarea unei ontologii normalizate presupune: • ������ �� ��������� �� ���� �� �� �������� � (cu comentarea

���� !� ��� ������:L • separarea conceptelor în arbori de concepte (poate implica specifi-

�� �� �� � �� ���� ��� ������� ��&�� �:L • ������ �� ������ 9����� ��!��� �� ����� ���� �� � � ���

evidente); • � �� �� ���� � �� � ������ 9�� ��� �� �� �&����� suficient

de detaliate pentru fiecare); • identificarea modului în care elementele-cheie trebuie clasificate

(crearea unor teste de regresie); • utilizarea clasificatorului pentru a forma graful aciclic al conceptelor; • �� ��� �� �� ������� �� �� ����������.

%%����4������ ����)����������� �"� ������"��

0��� ���

������ �� 9����!���: �� ����!��� ���� ����� – mai ales în cazul unor �����' �� !� �!���< !���C� �!� ���� ������� � �������� � ��������� �&����� � ��� �� ������� �WW a unor instrumente � �� �� �������2

• � ����� � !������ �����'�� – ���������� �����'ice � ���� �� �� ��!������ 9����� ������� ��� ���� ���:< �� ����9�����'� � ����� �&� !� ����� �&�� ��� ��!eniului mo-delat), !!�� ������� 9� �&��� ��!� e�� ��: �axiomatizate (sunt oferite descrieri detaliate suficiente);

• ����� �� ����� ��� ������� �����'�� – �� ����� � � !�� ����-!�� �&� ��� � ������� ����� � ����� � ��� �� ����!����� Web existente;

• ���� �� ������ �� �� �'� < � ���!2 '��irea de clase mai '�� ���H������� � ������� �� ����� ��H������� �aginilor Web corespunz�toare unor anumite descrieri;

• ��' � � ��� �����'�� !�������

Page 395: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 395

3 !�� ���� !�8� � � 8���� �� ���� ����!��� �� ���ament (reasoning services: ����� �� �'��� 4� � ����!��� �� �� ��� �������<��C� !���!��� ���!����< ��� � !������ �� �� �< ,���AA< 4�� �RACER.

������������������ �������1�������������2/�

�! ����� � ������� *-�* �� �!��8�� 3�� ��� � ���� !�� �9���������: �� �&� !� � � �����'�� 2 �� ������ �� "#� � ��������folosind o sinta&� ���� ����� ; ���� �� � !����< ��! ��� '� �� �!�������&� ��� � � ���� � � �� � �� ������ �!ple, pornind de la fapte exprimate cu ajuto �� ���� ����� 3���

5 � ! �&�!��� � � ����� ��� ���� �� 9������ � �c��< ��������:� !��� 2 �!� ����� '���� �� ����� �� 8�� �� ������� �� ����� ��� ��$� �� �< � ������ �� ��nse!��� � �� !�� "#�� ,����� �4,< ���fi specificate fapte referitoare la indivizi:

<infractiune rdf:ID="raport-2005-10-29-pol4" tip="jaf"> <desc>...</desc> <suspect> <individ rdf:about="http://www.persoane.ro#Sisi_Pera"/> </suspect> </infractiune>

; ������ �< �� -� � �!�� � ���� ���� � ������ � �u�C� �� � ����<�!� ��! @����< ��� � �� � �� ����!���� � !��� �� ����!�� � ��� �� �!���2

<amenda rdf:ID="raport-2005-10-29-pol54"> <desc>...</desc> <calator> <individ rdf:about="http://www.persoane.ro#Com_Nafus"/> </calator> </amenda>

�� � ���� ���� ���� ����� �� ����� ������ � !���� ��� �� !��exprimate în OWL:

<individ rdf:about="http://www.persoane.ro#Com_Nafus"> <owl:sameAs rdf:resource="http://www.persoane.ro#Sisi_Pera"/> </individ>

4 ��� �������2 �� ����� �����< � !�� � ����!���< �e ��� E��!�@���� ���� ������ ��� �� $� �� ��F< ���� ��� 3�� ��� � ������������ � �&� !� ������ �� ���� ��� �� 9� ����� ���< ���� ��rsoane) sunt identice.

Page 396: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 396

� ���� �&�!����� � ���� � ��!��� ��!� ���� ����� �� � !�����&����� �� ������ 9�'��: ��� �� ���!��� � � ��m�� ��� �� online pe care un utilizator uman îl poate folosi pentru determinarea unor carac-teristici re�� ��� � �� � ����� 9������ � ���� �������� � .�����< �--�:�?�! � ������ �� ������� �� ��i����� ���� ��� �� �� !�'�� � ����� � �� !���� ��������� �'��� 9��� � @�' �����< *JJJ: ������������'�� �� � ����� ��� �� ������� �� ��� � ������� ������'��< ' ���unui serviciu Web, va fi trimis ca document XML de forma:

<SLR rdf:ID="Olympus-OM10">

<f-stop>1.4</f-stop>

<lens unit="mm" kind="zoom">300</lens>

...

<cost currency="USD">120</cost>

</SLR>

Utilizatorul va pune �� ��� �� E$�� ���� � ��!� � �'�a��1F< �!CC��� �'���� ��� �� �� ���� ������� – � �� � !� �'� � *J� 4��� �������� �'�� � � �� ������� � ���� �� ������� ���C� � �����'�3�� � ���� � �� ��!� � �'����< ����� ���� !� �� SLR (Single Lens Reflex) �� ���� � �������� � ����� '�� ��� Camera:

<owl:Class rdf:ID="SLR">

<rdfs:subClassOf rdf:resource="#Camera" />

</owl:Class>

$� ����� ����� ������ �� ��� E3�>!���-OM10 este o ca!� � �'����F�4� �� ������! �� �����'�� exprimate în OWL pot conduce la ������� �� ��!�� � ������ �� � ��� ��< �� ����� !�����pentru utilizator.

Page 397: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 397

� ��� 1@ ������� ��� � ���� �� � ����� ������ #�� � � ��� �� ������ ���ctronic

De asemenea, folosind OWL se poate specifica ������ �� � �� ������focal-length 9��'!�� ������: ���� ��������� �� size:

<owl:DatatypeProperty rdf:ID="focal-length">

<owl:equivalentProperty rdf:resource="#size" />

<rdfs:domain rdf:resource="#Lens" />

<rdfs:range rdf:resource="&xsd;#integer" />

</owl:DatatypeProperty>

Proprietatea focal-length ����� � ����� ��� �� �� � ����� �� ��!���!�� 9�����: ������� – ����!��� �� �������� �� Lens – la !���!�� �alorilor tipului de date integer specificat de recomandarea XML Schema.

A� � ���� �&�!��� ���� � ��!��� ��� � � � ������ �� � ������ ���� ��-� � �'������� � ��� �� � ��� �� ����� �� ���� � �� �� #���Corvin. În urma extragerii de date de pe trei situri Web vizitate, instru-mentul de documentare folosit are !������� � "#�H�4, � !���� ���2

<individ rdf:about="http://www.persoane.ro#MateiCorvin"> <locNastere rdf:about="http://www.cities.com/Klausenburg" /> </individ> <individ rdf:about="http://www.persoane.ro#MateiCorvin">

Page 398: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 398

<locNastere rdf:about="http://world.info/Romania/Cluj-Napoca" /> </individ> <individ rdf:about="http://www.persoane.ro#MateiCorvin"> <locNastere rdf:about="http://history.org/Kolozsvár" /> </individ>

3����'� � ���� � �� �� ���� ��� ������ �� � ��d are un unic ��� �� ���� �� $� ����� � �'� �������2 Q������� '< ���8-@����� �Q������a �� ���� ������ ������ '��' ����� 4��� ��! �� ��������� ��< 3�� ��� � ���� � ��� � � ���� �� �� ������ �� ������ � � ��� �� � � ���� 9� ��est caz, exact una).

5 !���� �� �&�!����� � ��� '� �� ���&� 3�� ���� ���� ��� � �!����� � �����'� � ���� � �� �� ������ �� � ��� �!a�� �� �����

������< ��� � � ������ ������ �� E3 �� ���!� ��� C� � ���� �� ���!��� � ����F 9���� ��� �� � ���� �� ��� !��� � �!�� �� ���� ������ �!����� � � ���� �� �� ���:< � � ��� �� ���! ���������� !���� ���2

Class (old+lady complete

intersectionOf (elderly female person)

)

Class (old+lady partial

intersectionOf (

restriction (has_pet allValuesFrom (cat))

restriction (has_pet someValuesFrom (animal))

)

)

,� � �� ������ �� �� ����� 9!�������� ������ �� � �����: � ��������� !� 8��< ��� ��� � �� ��!� ���2 ObjectProperty (

has_pet domain (person) range (animal)

)

Individual (

Agatha type (elderly) type (female) value (has_pet Bernard)

)

�� ���� ������ �< ����! ������ �� �'���� � ���� �� �� � �� ����9���� ��� � �� ��� �� �!��� �� ���� ��� �� ����: � ���� � ���!���� C�� K� � � � ���� �� �� � �i��� 9��� !���1:< ���� ����� �!������� ���� ��� ���!��� ��trâne sunt pisici.

Page 399: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 399

� ��� )* ������� ������������ �#::&

���� ���� �� !� ��� ��� � � �!���� ����� �� ����!� ���'���de tip întrebare- ����ns (question-answering systems: ��� �� �'�� �����!��� � 9information retrieval) aliniate Web-ului semantic.

#����! �� � �� �� �� � ��������� �� �!����� �� ��tare/ procesare a ontologiilor – �&�!��� ������2 .��< � ��b'b � $�33� – ���� � ������� �� ����� � �� �� ��� � ���! ���� � ��������

?�! �� � �&�!��� �� ����� � �� ����!��� �!��� ������!��� �� �� �� ��� 9reasoner-ul) Pellet, inclus în cadrul editorului SWOOP.

Page 400: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 400

Pentru început, vom considera o ontologie a filmelor cinematografice, ��!���� � ������� Film, Regizor, Gen � Tema� � �� ������ ��������� ������� ��� � �'� � �-� 4� ���!���< �� ����� �!� �� � �� �� � �������privitoa � �� �'�� � +������� � � �� ������ ������ �� ����� ���deduse auto!�� �� ��� � �������

;�� �C� �����'� � $�!����� (�< ����! � � �� ����� �' ����� ,'� � �* ��� � ' ���� ������ �� ������

� ��� )1 $��� �� � ���� � ������ �� � �� � � ������ ����� ���� � ��� ���

Suplimentar, avem posibi������ �� � �� !��� �� �'� � �!��8���4=� �� � �� ����-' ���� �� � ������� ������< � �� ������ �� ����!�� !�� � ���� � �� �'�� �� � �� ������ ��!� �� �� � '� ���� !������ +�� �'� �� � ��������� ����� ��� �'� ��� !� jos.

Page 401: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 401

� ��� )) $�� ��� �� �������� � �������� � �-�� � Pellet Query inclus în SWOOP

Mai mult decât atât, am putea formula anumite reguli pentru a determina ��� �� � �� ���� ��� ��� � �� ��� �����'� ����� ���� 5instrument intel'�� �� ���!��� � �� � ����� ��!���' ���� � ����� ��� '� �� �'�� �� ������� � �� � �!��'��! ���� �� ��������ale. Datele sunt descrise în OWL, iar regulile folosite au forma .������� ������� ''' -> concluzie...), putând fi folosite �� !������ � � �!��� � ������ �� 'C� � �!��� � �!�� �� ���� � � �po-��� � !������ �4,H3�� 9� � �� ����� � �� ��!� �����:< � ��-����� ���� � � ������ ���< ������ ����!�� � � ����� � ���������model. Aceste activi��� ��� � ������� ' ��� ��������� ��� �� �� .���

����! ������� !���� �� ������� � � ��������� � ���� � �� � �gi-�� < �'��� � ������ �� -un proiect dezvoltat de absolventul Sergiu Bursuc:

[(?film cinema:regizatDe ?regizor) ->

[(?regizor cinema:regizeazaGen ?gen) <-

(?film cinema:areGen ?gen)]

[(?regizor cinema:investigheazaTema ?tema) <-

(?film cinema:areTema ?tema)]]

Page 402: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 402

4� ���!���< �� �'�� �� ��'��� � ��� �� �����< ���� �'����� ��!���C� ������ ��!�2 [(?regizorA cinema:areLegaturaCu ?regizorB) <-

(?regizorA cinema:investigheazaTema ?tema)

(?regizorB cinema:investigheazaTema ?tema)]

�� ��� �� �������< ���� �� �� !���� ����� �� ���� ������� ���� ��� �����'� � � �'���� �� �� ��� �� ����� realiza pe baza API-��� .��� 4 ���� �� !� 8��< �� �!� �� � !���� �� ������� � �������� ��� �C� �� ����� �����'���

public static OntModel ontologie;

�� ����!��!� ������ ���������� ���� ����� �����(���

�� *�����* �����!��� ������ ��ei clase

public String[] furnizeazaNumeInstante(String clasa) {

�� ������� ����� �����(���

OntClass ClasaOnto =

ontologie.getOntClass ("urn:cinema.ro#" + clasa);

�� ������ ��������� ������-�������

Iterator it = ClasaOnto.listInstances ();

ArrayList instante = new ArrayList();

H&���.�'&��5�- .// 0 �� ������� ������ �� �������

Resource instanta = (Resource)it.next ();

instante.add (instanta.getLocalName ());

}

String []numeInstante = new String[instante.size()];

for (int i = 0; i < numeInstante.length; i++)

numeInstante[i] = (String)instante.get (i);

return numeInstante;

}

�� �����!��!� �� ������, �� ���� �� ������!� �� 61���<�

public void realizeazaInferenta() {

�� 1���� �� C �� ������� �� ��������

// prelu�� ��(����� �� ����������

java.util.List reguli =

Rule.rulesFromURL("file:///cinema.rules");

�� ��������!�� ������ �� �� ������

GenericRuleReasoner reasoner =

new GenericRuleReasoner(reguli);

Page 403: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 403

�� ������� ������� ��!��� +� ���� ��������entului

inf = ModelFactory.createInfModel(reasoner, ontologie);

inf.write (flux, "RDF/XML-ABBREV");

}

?�� �� �� ���� �� ������ �� ��� �� �� �!��8 ����� ���� ��exprimare a regulilor, pe baza formatelor deja existente RuleML, SWRL (Semantic Web Rule Language) sau Metalog. Regulile modelate prin SWRL pot fi editate direct via o extensie Protégé.

12. „Concluzii”

����� ������ � ������ � � ����� � ������ � ���� �� �� � ���-ul semantic. S-a insistat asupra conceptelor de meta-���� � �� �ntologie, ������� �� �������� �� ��������� ����� ���'��� � ������< � '�� ��<� ���-ului semantic, în special.

��&��� � ����� ������ �� � E3����'�F 9�� !� �'��� � �������: �E�����'�F 9������ ������ �� ���� ���������arelor). S-au ilustrat, de ���!���< � ��������� � ����� �� � � ���� ����� � ���� � �specificarea unei ontologii, dându-se unele detalii referitoare la limbajele bazate pe XML menite a o descrie.

� ��� )8 %����� ���� ���5 �� � #��-�� � � � la cel viitor via XML

Page 404: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 404

��� � ���� ����� �� � ���� �� ���� � �������< ���!���!������� �� ��� � �� 4��! � #� �� 9�--�:< $�D� 9*JJJ: � $�D� 9�--*:�4 ���� �� ���� � ��!��������< ������C� �H��� ����C� �ontologie sau un set de o����' �� � ����� � �!���� ����� �� �� ����� ��� � ������� �� ������ 9e.g.< �'�� ����D� �< �� ���� ��� ��!�ntice ����:< �� !�� ���� !����� �� ��� � ���� �� � ����� !����� �� ��������� �� �������� ����D� � ���'��� �is����� � ������ �� ��Wide Web.

Tehnologiile Web-ului semantic pot fi de un real folos în domenii � ���! ���'��� �!������< semantic grid computing< ���� !���� �bio��'� ��!���������< e-business 9!� ���� ��!� ��� ����� ��:< �� ��-�iunea om-calculator (e.g., semantic desktop � semantic blogging).

Web-�� ������ < ��� ����� � ��� �� ��� ��!��� – ����� ��C� �� ����tehnologiile XML – �� � �� � �!���� ��� � � ����� � ���-numitei paradigme emergent computing. Aceasta expl� ���� � �� �� 8� �� ����!��� ��� � ��� � � ��������< � �� � ��!�� ��!���� ��!���& �� ���'����� ������ � !�� ��� �� ��� �� �� �!� !� � �� �� ����în� � ��!������� ������ �� ����� �� ���� 9����� � ���( � ������, 2006).

������ ��

Ayers, D.; Watt, A., Beginning RSS and Atom Programming, Wiley, 2005 Baader, F. et al. (eds.), The Description Logic Handbook, Cambridge University Press,

2003 Beckett, D. (ed.), RDF/XML Syntax Specification (Revised), W3C Recommendation,

Boston, 2004: http://www.w3.org/TR/rdf-syntax-grammar/ Berners-Lee, T., Information Management: A Proposal, CERN, 1989: http://www.w3.org/

History/1989/proposal.html Berners-Lee, T., Weaving the Web, Orion, Cambridge, 1999 Berners-Lee, T.; Hendler, J.; Lassila O., „The Semantic Web”, Scientific American, 5,

2001 Berners-Lee, T., Primer: Getting into RDF and Semantic Web using N3, W3C, Boston,

2005: http://www.w3.org/2000/10/swap/Primer Brickely, D. et al., ABC: A Logical Model for Metadata Interoperability, Harmony

Project, Working Paper, 1999 Brickley, D.; Guha, R.V. (eds.), Resource Description Framework (RDF) Schema

Specification, W3C Candidate Recommendation, Boston, 2000: http://www.w3.org/ TR/rdf-schema

Buraga, S., Tehnologii Web, Matrix Rom, Bucur����� ����� http://www.infoiasi.ro/ ~busaco/books/web.html

Page 405: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 405

Buraga S., „Suportul pentru implementare”, în Pribeanu, C. (ed.), Introducere în ������������� ��-calculator� ������ ��� ���������� ���4

Buraga, S., �������� ��� ���������� �� ���������, Matrix R�� ���������� ���3�http://www.infoiasi.ro/~sweb/

Buraga, S., Proiectarea siturilor Web ������� � ����� ����� ����� ��� �http://www.infoiasi.ro/~design/

Buraga, S. (coord.), ������ �� �� � ���� ������� ������������ �� ������������, Polirom, ����� �004: http://www.infoiasi.ro/~busaco/books/webapps/

Buraga, S. (coord.), �������� ������� � ����������� �� ��"#������� ������������ ��, ������ ��� ���������� ���> � � ���� �� ���������� http://www.infoiasi.ro/ ~busaco/books/nw05/

Costello, R.; Jacobs, D., OWL Web Ontology Language, MITRE Corporation, 2003 Daconta, M.; Obrst, L.; Smith, K., The Semantic Web, Wiley Publishing, 2003 Daum, B.; Merten, U., System Architecture with XML, Elsevier Science, 2003 Davies, J.; Fensel, D.; van Harmelen, F. (eds.), Towards the Semantic Web, John Wiley &

Sons, 2003 Dodds, L., An Introduction to FOAF, XML.com, 2004: http://www.xml.com/

pub/a/2004/02/04/foaf.html Dodds, L., Introducing SPARQL: Querying the Semantic Web, XML.com, 2005:

http://www.xml.com/pub/a/2005/11/16/introducing-sparql-querying-semantic-web-tutorial.html

Dubinko, M., Microformats and Web 2.0, XML.com, 2005: http://www.xml.com/lpt/a/ 2005/10/19/microformats-and-web-2.0.html

Drummond, R.; Strongin, G., „The Dataweb: An Introduction to XDI”, White Paper, OASIS XDI Technical Committee, 2004

Drummond, R. et al., „The Social Web: Creating An Open Social Network with XDI”, Planetwork Journal, iulie 2004: http://journal.planetwork.net/article.php? lab=reed0704&page=1

Fensel, D. et al. (eds.), Spinning the Semantic Web, MIT Press, 2003 Geroimenko, V., Dictionary of XML Technologies and the Semantic Web,

Springer-Verlag, 2004 Genesereth, M.; Fikes, R., „Knowledge Interchange Format. Version 3.0. Reference

Manual”, Technical Report Logic-92-1, Stanford University, 1992 Gil, Y. et al. (eds.), The Semantic Web – ISWC 2005. Proceedings of the 4th International

Conference, LNCS 3729, Springer-Verlag, 2005 Hazaël-Massieux, D.; Connolly, D., Gleaning Resource Descriptions from Dialects of

Languages (GRDDL), W3C Coordination Group Note, Boston, 2004: http://www.w3.org/TR/grddl/

Horrocks, I.; Rector, A., „The Semantic Web: Ontologies and OWL”, CS646 Course, University of Manchester, 2004: http://www.cs.man.ac.uk/~horrocks/ Teaching/cs646/

Page 406: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 406

Kashyap, V.; Sheth, A., „Semantic Heterogenity in Global Information Systems: The Role of Meta-data, Context and Ontologies”, în M. Papazoglou, G. Schlageter (eds.), Cooperative Information Systems, Academic Press, 1997

Klyne G.; Carroll, J. (eds.), Resource Description Framework (RDF): Concepts and Abstract Syntax, W3C Recommendation, Boston, 2004: http://www.w3.org/ TR/rdf-concepts/

Laera, L.; Tamma, V., „The Hitchhiker’s Guide to Ontology Editors”, AgentLink News, nr. 18, august 2005: http://www.agentlink.org/

Lund, B. et al., „Social Bookmarking Tools (II). A Case Study � Connotea”, D-Lib Magazine, vol. 11, nr. 4, aprilie 2005: http://www.dlib.org/dlib/april05/lund/ 04lund.html

Manola, F.; Miller, E. (eds.), RDF (Resource Description Framework) Primer, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/rdf-primer/

Mathes, A., Folksonomies � Cooperative Classification and Communication Through Shared Metadata, University of Illinois Urbana-Champaign, 2004: http://www.adammathes.com/

McBride, B., „Jena: A Semantic Web Toolkit”, IEEE Internet Computing Journal, noiembrie-decembrie 2002

Metakides, G.; Nerode, A., ��������� �� ������ �� ���������� ������� +������ <�%��������������� �66?

Mikhalenko, P., Introducing SKOS, XML.com, 2005: http://www.xml.com/lpt/a/ 2005/06/22/skos.html

Negroponte, N., &�� ��������� �** +��������� ���������� �666 Noy, N.; Hafner, C., „The State of the Art in Ontology Design. A Survey and

Comparative Review”, AI Magazine, American Association for Artificial Intelligence, Fall 1997

Noy, N.; McGuiness, D., Ontology Development 101: A Guide to Creating Your First Ontology, Standford University, 2003: http://protege.stanford.edu/publications/ ontology_development/ontology101.html

O’Reilly, T., „The Architecture of Participation”, O’Reilly Developer Weblogs, O’Reilly.com, aprilie 2003: http://www.oreillynet.com/pub/wlg/3017

O’Reilly, T., What is Web 2.0. Design Patterns and Business Models for the Next Generation of Software, O’Reilly.com, 2005: http://www.oreillynet.com/pub/a/oreilly/ tim/news/2005/09/30/what-is-web-20.html

Patel-Schneider, P.; Hayes, P.; Horrocks, I, OWL Web Ontology Language Semantics and Abstract Syntax, W3C Recommendation, Boston, 2004: http://www.w3.org/TR/owl-semantics/

Pease, A., „Formal Representation of Concepts: The Suggested Upper Merged Ontology and its Use in Linguistics”, în A. Schalley, D. Zaefferer (eds.), Ontoloinguistics, 2005

Powers, S., Practical RDF, O’Reilly, 2003 Prud’hommeaux, E.; Seaborne, A., SPARQL Query Language for RDF, W3C

Working Draft, Boston, 2005: http://www.w3.org/TR/rdf-sparql-query/

Page 407: Sabin Buraga: 'Tehnologii XML

���� ���-ul semantic 407

Ruskin, H.; Walshe, R., „Emergent Computing”, ERCIM News, nr. 64, 2006 Smith, M. et al. (eds.), OWL Web Ontology Language Guide, W3C Recommendation,

Boston, 2004: http://www.w3.org/TR/owl-guide/ Sowa, J., Knowledge Representation: Logical, Philosophical and Computational

Foundations, Brooke Cole Publishing, 1999 S;�� 9#� @A��!�� �� �����'������� ����������B� � -# 2��������%��

=# <������-Matu (coord.), '����������� �� ��������� ���������������, Editura <�%����� ���������� ����

<������-����� =#� ���������� � ����� ����������� ����������� �� �� ��������, Polirom, ����� ���3

<�(��� &#� @��C�,��� ��!�� ������ ������!��B� � =# <������-Matu, C. Pribeanu (coord.), ��������� ����������� (�������� �� ������������ )�-Calculator – RoCHI 2004� �������%� ���������� ���3

* * *, Active Grid: http://www.activegrid.com/ * * *, Adobe XMP (Extensible Metadata Platform): http://www.adobe.com/xmp * * *, Asset-Oriented Model: http://www.aomodeling.org/ * * *, Atom Specification: http://www.atomenabled.org/ * * *, Carp and Spiral: http://www.semanticplanet.com/ * * *, Conceptual Graphs: http://www.cs.uah.edu/~delugach/CG/ * * *, DCMI (Dublin Core Metadata Initiative): http://dublincore.org/ * * *, DOAP (Description Of A Project): http://usefulinc.com/ns/doap * * *, Drive.NET: http://www.driveRDF.org/ * * *, Embedded RDF: http://research.talis.com/2005/erdf/ * * *, FOAF (Friend Of A Friend) Specification: http://rdfweb.org/ * * *, Jena: http://jena.sourceforge.net/ * * *, Microformate: http://microformats.org/ * * *, Mindswap: http://www.mindswap.org/ * * *, Microformate: http://microformats.org/ * * *, OILEd: http://oiled.man.ac.uk/ * * *, OntoEdit: http://www.ontoprise.de/ * * *, OpenCyc: http://www.opencyc.org/ * * *, OWL-S Specification: http://www.daml.org/services * * *, Protégé-2000: http://protege.stanford.edu/ * * *, pOWL: http://powl.sourceforge.net/ * * *, Roget’s Thesaurus: http://www.cix.co.uk/~andie/cogito/roget.shtml * * *, Redfoot: http://redfoot.net/ * * *, Redland RDF Application Framework: http://librdf.org/ * * *, RSS (Really Simple Syndication) 2.0 Specification: http://blogs.law.harvard.edu/

tech/rss * * *, RuleML: http://www.ruleml.org/ * * *, Schema Web: http://www.schemaweb.info/

Page 408: Sabin Buraga: 'Tehnologii XML

Tehnologii XML 408

* * *, Semantic Desktop: http://www.semanticdesktop.org/ * * *, Semantic Web: http://www.semanticweb.org/ * * *, Semantic Web Reference Card: http://ebiquity.umbc.edu/ * * *, Swoogle: http://swoogle.umbc.edu/ * * *, SWOOP (Semantic Web Ontology Overview and Perusal):

http://www.mindswap.org/downloads/ * * *, SWRL (Semantic Web Rule Language): http://www.daml.org/rules/proposal/ * * *, UDDI (Universal Description, Discovery and Integration): http://www.uddi.org/ * * *, Web Service Modeling Ontology (WSMO): http://www.wsmo.org/ * * *, WordNet: http://www.cogsci.princeton.edu/~wn/ * * *, World-Wide Web Consortium, Boston, 2006: http://www.w3.org/

Page 409: Sabin Buraga: 'Tehnologii XML

<�����)������)� �����

Appelquist, D., XML and SQL: Developing Web Applications, Addison Wesley, 2001 Berners-Lee, T., Weaving the Web, Orion, Cambridge, 1999 Buraga, S., Tehnologii Web� ������ ��� ���������� ����� http://www.infoiasi.ro/

~busaco/books/web.html Buraga, S., �������� ��� ���������� �� ���������� ������ ��� ���������� ���3�

http://www.infoiasi.ro/~sweb/ Buraga, S., Proiectarea siturilor Web ������� � ����� ����� ����� ��� �

http:// www.infoiasi.ro/~design/ Buraga, S. et al., ���������� �� � �� �� ����� ����� ����� �����

http:// www.infoiasi.ro/~cgi/ Buraga, S. (coord.), ��������� �� �� � ���� ����� ����� ���4�

http://www.infoiasi.ro/~phpapps/ Buraga, S. (coord.), ������ �� �� � ���� ������� ������������ �� implementare, Polirom,

����� ���3� http://www.infoiasi.ro/~busaco/books/webapps/ Buraga, S. (coord.), �������� ������� � ����������� �� ��"#������� ������������ ��,

������ ��� ���������� ���> � � ���� �� ���������� http://www.infoiasi.ro/ ~busaco/books/nw05/

Cabrera, L.F.; Kurt, C., Web Services Architecture and Its Specifications, Microsoft Press, 2005

Chaudhri, A. et al. (eds.), XML Data Management: Native XML and XML-Enabled Database Systems, Addison Wesley, 2003

2��������%�� -#$ <������-����� =# �coord.), '����������� �� ���������

calculatoarelor� +������ <�%����� ���u������ ���� Daconta, M.; Obrst, L.; Smith, K., The Semantic Web, Wiley Publishing, 2003 Daum, B.; Merten, U., System Architecture with XML, Elsevier Science, 2003 Davies, J.; Fensel, D.; van Harmelen, F. (eds.), Towards the Semantic Web, John Wiley &

Sons, 2003 Erl, T., Service-Oriented Architecture: Concepts, Technology, and Design, Prentice Hall

PTR, 2005 Geroimenko, V., Dictionary of XML Technologies and the Semantic Web,

Springer-Verlag, 2004 Guruge, A., Web Services: Theory and Practice, Digital Press, 2004 Harold, E., Effective XML: 50 Specific Ways to Improve Your XML, Addison Wesley,

2003 Harold, E., XML 1.1 Bible (edi��� � ���-a), Wiley Publishing, 2004

Page 410: Sabin Buraga: 'Tehnologii XML

������������ �������� 410

Linthicum, D., Enterprise Application Integration, Addison-Wesley, 1999 Myerson, J., The Complete Book of Middleware, Auerbach Publications, 2002 Pribeanu, C. (ed.), Introducere în in����������� ��-calculator, Matrix Ro�� ����������

2003 Rawlins, M., Using XML with Legacy Business Applications, Addison-Wesley, 2003 Skonnard, A.; Gudgin, M., Essential XML Quick Reference, Addison-Wesley, 2002 Si Shi, N.; Murthy, V.K., Architectural Issues of Web-Enabled Electronic Business, Idea

Group Publishing, 2003 Waltz, E., Knowledge Management in the Intelligence Enterprise, Artech House, 2003 Zeldman, J., Designing with Web Standards, New Riders Press, 2003 * * *, *���������� ���#������ �� ������������� ��-calculator: http://www.hcibib.org/ * * *, Blogs of Collective Intelligence: http://www.community-intelligence.com/blogs/public * * *, Café con Lèche: http://www.cafeconleche.org/ * * *, Code Project: http://www.codeproject.com/ * * *, Developers.net: http://www.developers.net/ * * *, ECMA (European Computer Manufacturers Association):

http://www.ecma-international.org/ * * *, ERCIM (European Research Consortium for Informatics and Mathematics) News:

http://www.ercim.org/publications/Ercim_News/ * * *, Exemple privitoare la limbajele XML: http://www.xmlpitstop.com/ * * *+ �������� !�"����% ���%,,---���"��������, * * *, IBM Developer’s Site: http://www.ibm.com/developer/ * * *+ ��������#� ��-I: http://www.ws-i.org/ * * *, Instrumente XML disponibile la Apache: http://xml.apache.org/ * * *, Journal of Web Semantics: http://www.semanticwebjournal.org/ * * *, Lista documentelor RFC ale IETF (Internet Engineering Task Force):

http://www.ietf.org/rfcs/ * * *+ ����� ��������������� ���#������ �� ����.��� �"��� �� !�% ���%,,/�����#���ages.org/ * * *, Macromedia Developer Center: http://www.macromedia.com/devnet/ * * *, Microsoft Developers Network: http://msdn.microsoft.com/ * * *, Mozilla Developer Center: http://developer.mozilla.org/ * * *, O’Reilly OnLAMP: http://www.onlamp.com/ * * *, O’Reilly OnDotNET: http://www.ondotnet.com/ * * *, O’Reilly OnJava: http://www.onjava.com/ * * *, Oracle Technology Network: http://www.oracle.com/technology/ * * *, )�����"���� )���� 0)�����"����� ��� � � ��#�������� �� ���������� �����������

Standards): http://www.oasis-open.org/ * * *, OSI (Open Source Initiative): http://www.opensource.org/ * * *, Planet Source Code: http://www.planet-source-code.com/ * * *, Perfect XML: http://www.perfectxml.com/

Page 411: Sabin Buraga: 'Tehnologii XML

������������ �������� 411

* * *, Perl XML: http://www.perlxml.com/ * * *, PHP Builder: http://www.phpbuilder.com/ * * *, PHP Classes: http://www.classes.net/ * * *, PHP Developer: http://www.phpdeveloper.org/ * * *, Portal dedicat serviciilor Web: http://www.webservices.org/ * * *, 1��������� �� ���� ��� ������������ ��% ���%,,---�-2����,�1, * * *, RELAX NG: http://relaxng.org/ * * *, SAX (Simple API for XML): http://www.saxproject.org/ * * *, Schema Web: http://www.schemaweb.info/ * * *, Semantic Grid: http://www.semanticgrid.org/ * * *, Semantic Web: http://www.semanticweb.org/ * * *+ ����� ������� ���������� !�% ���%,,---� !�������������, * * *, Situl ECMA (European Computer Manufacturers Association):

http://www.ecma-international.org/ * * *, Situl lui Paul Prescod: http://www.prescod.net/ * * *, Situl proiectului Mono: http://www.mono-project.com/ * * *, SOA Web Services Journal: http://webservices.sys-con.com/ * * *, SOAP Software: http://www.soapware.org/ * * *, Source Forge: http://www.sourceforge.net/ * * *, Special Interest Group on Semantic Web and Information Systems – SIGSEMIS:

http://www.sigsemis.org/ * * *, Sun XML Developer Connection: http://www.sun.com/software/xml/ developers/ * * *, ������� �� ���������� �$� % ���%,,---��$� ������������, * * *, The Open Sourcery: http://theopensourcery.com/ * * *, WebReference: http://www.webreference.com/ * * *, Wikipedia: http://www.wikipedia.org/ * * *, XFront: http://www.xfront.com/ * * *, XMethods: http://www.xmethods.net/ * * *, XML 101: http://www.xml101.com/ * * *, XML.com: http://xml.com/ * * *, XML.org: http://www.xml.org/ * * *, XML Software: http://www.xmlsoftware.com/ * * *, XML Standards Library: http://xmlstds.xemantics.com/ * * *, XML Times: http://www.xmltimes.com/ * * *, ZVON: http://www.zvon.org/

Page 412: Sabin Buraga: 'Tehnologii XML
Page 413: Sabin Buraga: 'Tehnologii XML

Sabin Buraga

����������� ��� ���� ��! "���#$ %�� $����$������ (cartea include CD) ������� � ��-a) *������� ����'��'� ��� ��� ���D� ���������� ������� 5�0� �����D�� �������� �������� �� �

��'��� �������� ��������� ��� ������ ��� �� (� ��(�-marea �� ������������ ��������� �������� e-business. 2������ �� ����� ����!� �� ������ ���0�������(����� �� ��� ��%�!��� � ���� �� �������� ��!������ �� ��(������� ��������� �� �(����� online �� ���������� �(������� � ������� 5�0#

Princip��� ������ ����� �� ������ � ��-a: Strategii de optimizare a siturilor (SEO – Search Engine Optimization� E F���'�0�������� ��!���� �� ������0������� �������

Web • "���������� � ������ 5�0 E G������� blog-uri, situri wiki �� ������� E E-branding, e-government, e-learning • Prin XML, spre Web-ul semantic 2������� 2&-���� "����� �� ��' �� ������ E &���������� ��������� ������������(������� � ��0�� ��D�� �� ��!�'� E 2��� �� ��%�!�� 5�0 – �3 ���'������ �� ����������� � � ��0� ��D��� E �������� open source ������ ��������� ������� ������� ��������

Sabin Buraga (coordonator)

��� �� �� ��&���! �� ��� PROFESIONALE DE IMPLEMENTARE H��� ������� �������� �0����� �� ���� ����������������� �� �� � ���� ������ �e caz implementate în PHP �+������ ����� ���4�� ������'D�� � ��� ����� ��� ��!� �� ��0�1� �� ��!������ – XML, Flash, PHP, Perl, ASP.NET, C# – ������0�� �� ���(���� *���� ��I��� 5���;�# + ���'���� ��������� �� ��� ��� 0��� �������� actu�� (���� � ��'������ ��� �������� 5�0 ��

����!��� ��� ������� �!����� ��0����� online, o enciclopedie multimedia, un simulator al meciurilor

�� (�0� �� 5�0 ��� �������� �� �������'��� � ��(������� �� �� �� ����'����

handheld pe un calculator desktop). ��D��� � G��% E G��� �� �������� � G��% E ������� ���������� E������� �� �����'������� ����� ���� ��0�� E ,�� ������� � !��(��� �&�

SVG • Managementul blog-urilor în Perl

Page 414: Sabin Buraga: 'Tehnologii XML

Sabin Buraga

���#����� �� '$ ���& %� ���L (cartea include CD) Lucrarea descrie în detaliu unul dintre cele mai folosite standarde de programare pe partea server a ��������� ��������� 5�0-ului: CGI (Common Gateway Interface�� ���D�� �� ������ ����0�� ������ ��0����� �� �������� 2-� � ��� ������ ��0�1�� �� scripting larg utilizate pe platforma Linux: shell-ul bash �� ��0�1� ���# ������ �� ��������� ��� ��� ����������� �� ���

���� �������������� �� ������ ��0�1�� ������ ������� ���-��� ���������� �������� � ����� ���� ����rmediul serve-

��� �� 0�'� �� ���� �������� �e.g.� �/".* ��� ���!��".*� �� � ��������� )�* (Extensible Markup Language). CD-� ���� ������� ������� �������� ��D� ���-����� � ��1������� ������� �� ������� �� ��' ���'������� �D� �� ����������� �������tare, ��!���� �� �������� ���� ������ �������������� �� ���(������� ���������� ���

������ ������0�� ������ ��(����� ������0���� *���� ��� ��� ���(���# H��� ���� (� (��� � ����� �0������� �� ��� �� ��%�!�� 5�0� fiind destinat atât ��������� �� ����� ��� (�������� �� ����� �� ��(� ��(������� �D� �� ����������� �� �������������� 5�0 �� ������ ��� ���������� �� ������ �������� calculatoarelor.

=# <������ 2# A���

"�()������ ���������� EB FOLOSIND JAVA (cartea include CD) *��0�1� 9��� (��� �� ����� ������� ������ ����'���� �� �������� 5�0 ������ �� ���� ���(���� �� ��!����-��� ������ �������� ��'������� ����������� �� ������'���� �������# ������� ������� ��� �� ������ ������������ (��� �� ���(���� ���0������� �� ������'��� �� �������� a codului, numeroasele instrumente gratuite pentru dez-����� �� 0!��� ����������� ������0�� �� ��������# �������� ��!��������� �� ������ ��������� ��

9��� �� ��%�!�� 5�0� ������ ������ ���� ��'���� ��0��� ������� ������!�'�� �� ����� �������� online. Sunt prezentate elemente frecvent întâlnite în ��������� 5�0� �������(������ ����'������ ��������� � ������� �� 0�'� �� �����!�������� ��(������� �� ������������� �� � ��������� �D�� � ���� ���� ������� �� � ��������� �� ����������� �D�� � !��������� �0��������� �� ���������#

Page 415: Sabin Buraga: 'Tehnologii XML

��������������

��������� ���� �� ��������

�������� ���� �� �����

��� �� ���� ���� ���� ������ ���

����� ������� ����� ��� � �� � � ���� ��� ��

��� ��� �!�� "��� # $� %� & ' (��(���) %� & ' (��(�(()

%� & ' (������ %��*�+�') ������ �**�,�@��������

��,��!��� ����� ���� ������ �� �� ��� �� �� &&�

���� &� � ���� ��� (�� -� �&�(��

"���� %� (' &(&�-.��- ) ������ �**�,��/�,��0��@��������

"���� ���,��� � 1��� 234�5� "��� 0����

0�� 2��6� 7�8�� �� � /�0� 0�,�� � ��,��!��

"���9$�� ((�& ���� ( � .� �� ������ �**�,�@����������,��

Page 416: Sabin Buraga: 'Tehnologii XML