Sunteți pe pagina 1din 149

Sabin Corneliu Buraga

T
T
e
e
h
h
n
n
o
o
l
l
o
o
g
g
i
i
i
i
W
W
e
e
b
b










2007
Sabin Corneliu Buraga Tehnologii Web
Autorul acestei lucrri Dr. Sabin Corneliu Buraga este cadru didactic la Facultatea
de Informatic a Universitii Alexandru Ioan Cuza din Iai, Romnia, fiind titula-
rul cursurilor Tehnologii Web, Semantic Web, Interaciune om-calculator i
Reele de calculatoare. Este laureat al Premiului Gheorghe Crtianu al Academi-
ei Romne (2005) i coordonatorul seriei Web publicat de Editura Polirom.
Mai multe amnunte privitoare la activitile sale sunt disponibile pe Web la adresa
http://www.infoiasi.ro/~busaco/.

Materialul de fa, inclusiv figurile, nu poate fi folosit sau reprodus sub nici o form
dect cu acordul autorului, fiind protejat de legile n vigoare privitoare la drepturile
de autor.
De asemenea, autorul nu se face rspunztor pentru disponibilitatea i/sau acurate-
ea informaiilor de la adresele Web indicate pe parcursul lucrrii.

2
Sabin Corneliu Buraga Tehnologii Web

3
C Cu up pr ri i n ns s

n loc de prefa..................................................................................................5


Partea I Internet i Web .......................................................................................7

1. Fundamente i istoric ..........................................................................................9
2. Localizarea resurselor Web................................................................................18
3. Protocolul HTTP pe scurt .................................................................................23
4. Privire de ansamblu ...........................................................................................27


Partea II Familia de limbaje XML ......................................................................29

1. Preambul ...........................................................................................................31
2. Caracterizare i trsturi eseniale ......................................................................32
3. Prile componente ale unui document XML ....................................................34
4. Membrii constitueni ai familiei XML................................................................37
5. Spaiile de nume XML.......................................................................................41
6. Validarea documentelor XML ...........................................................................43
7. Procesarea documentelor XML.........................................................................54
8. Transformri XML............................................................................................62


Partea III Programarea aplicaiilor Web..............................................................71

1. Maniere de programare pe partea de server........................................................73
2. Standardul CGI (Common Gateway Interface) .........................................................76
3. PHP (PHP: Hypertext Preprocessor) .......................................................................85
4. Servicii Web ....................................................................................................110

Sabin Corneliu Buraga Tehnologii Web

Partea IV Regsirea informaiilor pe Web.........................................................121

1. Preliminarii ......................................................................................................123
2. Motoare de cutare..........................................................................................124
3. Meta-cuttoare...............................................................................................135
4. Alte mijloace de regsire a informaiilor...........................................................137


Exerciii i teme propuse .....................................................................................143

Resurse bibliografice ...........................................................................................147

4
Sabin Corneliu Buraga Tehnologii Web

5

n n l l o oc c d de e p pr re ef f a a
Este mai bine s tii cteva ntrebri dect toate rspunsurile.
James Thurber

Acest material realizeaz o trecere n revist a principalelor trsturi referitoare la spaiul
World Wide Web, punctnd anumite aspecte de interes privitoare la arhitectura Web-ului,
la meta-limbajul XML (componente, spaii de nume, validarea i transformarea documen-
telor XML), la proiectarea i programarea aplicaiilor Web (standardul CGI, serverul de
aplicaii PHP, serviciile Web bazate pe XML) i la regsirea informaiilor disponibile pe
Web via motoare de cutare i alte mijloace.
Lucrarea reprezint numai o introducere n domeniul tehnologiilor Web actuale, o par-
te dintre subiectele menionate fiind nsoite de prezentri i exemple disponibile online la
http://www.infoiasi.ro/~busaco/teach/courses/web/.
Pentru aprofundarea domeniului, cititorul este ncurajat s consulte resurse prezentate
n cadrul bibliografiei i s viziteze periodic situl Web al autorului textului de fa
http://www.infoiasi.ro/~busaco/.
Ateptm posibilele reacii i opinii pe adresa busaco@infoiasi.ro.

Sabin Corneliu Buraga Tehnologii Web

6
Sabin Corneliu Buraga Tehnologii Web

7
P Pa ar rt t e ea a I I I In nt t e er rn ne et t i i W We eb b

De la un anumit punct ncolo, nu mai exist cale de ntoarcere. Acela este punctul ce trebuie atins.
Franz Kafka

1. Fundamente i istoric
2. Localizarea resurselor Web
3. Protocolul HTTP pe scurt
4. Privire de ansamblu
Sabin Corneliu Buraga Tehnologii Web

8
Sabin Corneliu Buraga Tehnologii Web

1. Fundamente i istoric
Conceptul esenial al spaiului World Wide Web l reprezint conceptul de comunicare, pe
care de altfel se bazeaz orice reea de calculatoare. nainte de a defini spaiul World Wide
Web, trebuie precizat mai nti ce nseamn o reea de calculatoare, respectiv Internetul.
O reea de calculatoare reprezint un ansamblu de calculatoare independente ca-
pabile s comunice ntre ele prin intermediul unor canale de comunicaie. Aadar,
o reea poate fi privit drept colecie de calculatoare autonome interconectate.
Luat n sine, Internetul este o reea de reele, prin care utilizatorii unui calculator sau ai
unei reele pot accesa diverse sisteme aparinnd altor reele.
Precursorul Internetului, ARPAnet (Advanced Research Projects Agency network) a fost dez-
voltat la sfritul anilor 60 i nceputul anilor 70 de ctre Departamentul de Aprare al
Statelor Unite ca experiment n plin rzboi rece, dup lansarea primului satelit artificial,
Sputnik. De la nceput, utilizarea reelei n scopuri academice i pentru comunicaii tiini-
fice a condus la o oarecare ndeprtare de scopul iniial folosirea exclusiv n medii mili-
tare. Prima demonstraie public a reelei ARPAnet a avut loc n 1972, soldat cu un
neateptat succes, n ciuda scepticismului dezvoltatorilor ei. Acest aspect a stimulat activi-
tatea de cercetare, aprnd curnd noi reele, iar programatorii fiind ncurajai s adauge
noi faciliti sistemului de operare Unix folosit la interconectarea reelelor. Astfel, n me-
diul prielnic oferit de sistemul de operare Unix, au fost dezvoltate n aceast perioad
primele protocoale de comunicaie, culminnd n 1974 cu suita de protocoale TCP/IP
(Transmission Control Protocol/Internet Protocol). Meritul acesteia este acela de a furniza o mo-
dalitate universal i standardizat de comunicare ntre reelele de calculatoare, folosit i
n prezent pentru conectarea la Internet.
n anul 1980, NSF (National Science Foundation) reproiecteaz modelul ARPAnet,
transformndu-l ntr-o reea modern, noua arhitectura primind numele de Internet, in-
terconectnd la nceput super-calculatoare guvernamentale, instituii academice i centre
de cercetare i utiliznd suita standard de protocoale de comunicaie reprezentat de
TCP/IP (Transmission Control Protocol/Internet Protocol). n anii care urmeaz, Internetul se
dezvolt spectaculos, ntr-o manier exponenial, poate i datorit apariiei unei varieti
de furnizori de servicii Internet comerciale, la nivel mondial, mai ales n cursul anilor 90.
n Romnia, o dezvoltare accentuat a Internetului, la toate nivelele, s-a produs ncepnd
cu anii 1993-1994, dar mai ales dup 1996.
De reinut faptul c Internul nu este proprietatea nici unei persoane sau organizaii,
aflndu-se sub coordonarea unor societi independente, constituite din voluntari, dintre
care se pot aminti ISOC (Internet Society) sau IETF (Internet Engineering Task Force).
Serviciile tradiionale ale Internetului se rezumau n anii 80 la pota electronic (e-mail),
accesul la grupuri de tiri (usenet), conectare la distan (telnet) i transfer de fiiere (FTP).

9
Sabin Corneliu Buraga Tehnologii Web
n 1990-1991 apar dou noi servicii (acum disprute): Archie utilizat pentru cutarea fiie-
relor pe Internet i Gopher, structur de meniuri ierarhizate facilitnd organizarea docu-
mentelor pe Internet.
De notat faptul c funcionarea Internetului este reglementat de o serie de documente
disponibile n cadrul coleciei globale RFC (Request For Comments) www.ietf.org/rfc/.
O parte dintre aceste documente specific arhitectura i standardele protocoalelor de co-
municaie existente.
nceputurile Web-ului
Unul dintre cele mai importante i de succes servicii ale Internetului, World Wide Web-
ul mai pe scurt, Web sau spaiul WWW a fost instituit la CERN (Centre European pour
la Recherche Nucleaire Centrul European de Cercetri Nucleare de la Geneva) n anul
1989, pe baza cercetrilor lui Tim Berners-Lee, Robert Caillau i echipei acestora, scopul
principal urmrit fiind facilitarea accesului rapid la informaiile tehnice cuprinse n ma-
nualele de utilizare a calculatoarelor. Robert Caillau accentueaz faptul c istoria fiecrei
mari invenii se bazeaz pe multe evenimente anterioare. n cazul Web-ului, dou mari
direcii precursoare trebuie menionate: dezvoltarea hipertextului (sau a procesrii compu-
terizate a documentelor electronice complexe) i dezvoltarea protocoalelor Internet care
au fcut posibil comunicarea global dintre reelele de calculatoare.
Data de 12 noiembrie 1990 este considerat drept ziua de natere oficial a Web-ului.
CERN devenea astfel cel mai dezvoltat nod Internet al Europei.
Web-ul reprezint un sistem de distribuie local sau global a informaiilor hipermedia.
Din punct de vedere tehnic, spaiul Web pune la dispoziie un sistem global i standar-
dizat de comunicare multimedia, informaiile fiind organizate asociativ i fiind distribuite
n funcie de cererile utilizatorilor, funcionnd conform modelului client/server. Web-ul,
cu toat dezvoltarea lui spectaculoas, nu trebuie confundat cu Internetul, ci poate fi con-
siderat drept cea mai dinamic i spectaculoas component software a acestuia, nepu-
tnd exista fr infrastructura hardware a reelelor mondiale interconectate prin interme-
diul protocoalelor TCP/IP.
Dezideratele principale ale sistemului propus de Tim Berners-Lee erau:
accesul la distan ntr-o reea, acceptndu-se diverse tipuri de conexiuni;
accesul la o multitudine de surse de informaii stocate ntr-o varietate de forme
(text, grafic, sunet etc.) cu ajutorul unor tipuri diferite de sisteme de operare
situate pe diferite platforme hardware;
capabiliti de extindere i dezvoltare n ceea ce privete aria de acoperire prin
creterea numrului de legturi, fr existena unui control central.
Tim Berners-Lee concepe, de asemenea, prima aplicaie Web un server Web rulnd pe
calculatoare NeXT. n noiembrie 1990, Nicola Pellow ncepe s dezvolte un navigator

10
Sabin Corneliu Buraga Tehnologii Web
(browser) text care la sfritul aceluiai an va fi disponibil n cadrul CERN. Primul client
grafic permind vizualizarea de documente WWW a fost WorldWideWeb.
Dezvoltarea ulterioar a Web-ului a fost facilitat de programul Mosaic (de la NCSA
Centrul Naional pentru aplicaiile supercalculatoarelor, Universitatea Urbana-
Champaign), rulnd sub mediul XWindow (Unix). Acest navigator elaborat n principal
de Marc Andreesen era foarte simplu de folosit i poseda faciliti multimedia, fiind
furnizat gratuit pe Internet ncepnd cu anul 1993. Ulterior, Marc Andreesen fondeaz
compania Netscape Communications, specializat n realizarea de aplicaii destinate Web-
ului, care ulterior a donat comunitii open source codul-surs al navigatorului, peste ani
aprnd astfel Mozilla Firefox.
n 1994 a fost constituit Consortiul Web, avndu-l ca director pe Tim Berners Lee. Con-
soriul Web este o organizaie non-profit, principala sa activitate constnd n elaborarea,
dezvoltarea i meninerea standardelor destinate spaiului WWW. Actualmente, Consor-
iul Web nsumeaz peste 500 de membri, att organizaii academice, corporaii comercia-
le, ct i persoane particulare. Mai multe detalii sunt disponibile pe situl Web
www.w3.org.
Clieni i servere Web
n prezent, pentru a avea acces la WWW, utilizatorii trebuie s foloseasc un program
client cunoscut sub denumirea de navigator i, bineneles, s cunoasc localizarea fizi-
c a documentelor dorite (adresa acestora). Exist actualmente o multitudine de naviga-
toare, alturi de binecunoscutele Netscape Communicator, Mozilla Firefox i Internet
Explorer (rulnd n medii grafice precum Windows, XWindow (Unix/Linux) sau Apple)
numrndu-se multe altele, chiar daca nu att de populare: Opera, Konqueror, Lynx sau
Links (ultimele dou rulnd doar n mod text, fiind disponibile mai ales sub Linux).
Principalele caracteristici ale navigatoarelor Web grafice sunt:
posibilitatea de a realiza interogri multiple ctre serverele Web;
asigurarea securitii transmiterilor de date (de exemplu, n cazul comerului
electronic sau pentru accesarea unor informaii pe baz de autentificare);
suport pentru aplicaii menite s extind funcionalitatea navigatorului. O astfel
de extensie este denumit de cele mai multe ori plugin, putnd fi configurat i
exploatat de ctre utilizator pentru accesarea unor tipuri speciale de date (e.g.
lumi virtuale modelate n VRML, documente PDF sau animaii Flash);
stabilirea de liste de adrese ale unor situri Web favorite i oferirea posibilitii
de a avea acces la istoricul navigrii (mecanismul de history);
posibilitatea de a folosi mai multe ferestre (independente sau nu) de navigare;
suportul pentru cadre (frame-uri) sau vederi multiple n interiorul unei aceleai
ferestre;

11
Sabin Corneliu Buraga Tehnologii Web
posibilitatea configurrii de ctre utilizator a unor caracteristici ale modurilor
de afiare, navigare i exploatare (stabilirea preferinelor utilizatorilor);
asigurarea suportului pentru diverse limbaje de programare folosite la realizarea
de documente Web dinamice (i.e. Java sau JavaScript), pentru foi de stiluri ata-
ate datelor (n vederea mbuntirii modului de afiare) sau pentru stocarea
datelor n mai multe limbaje de marcare (HTML, XHTML, limbaje bazate pe
XML etc.);
integrarea unor aplicaii facilitnd accesul la alte servicii Internet (pota elec-
tronic, transferul de fiiere, grupurile de tiri) sau Web (precum cutarea de in-
formaii, afiarea de nouti, accesarea n timp-real a programelor de radio sau
televiziune etc.).

O versiune a navigatorului Konqueror rulnd n mediul XWindow (sub Linux)
Dup cum se poate observa, Web-ul se bazeaz pe modelul de programare cli-
ent/server care divide aplicaiile de reea n dou pri: partea de client i cea de server.
Prin definiie, clientul (n cazul nostru denumit i navigator sau agent-utilizator Web) so-
licit servicii (informaii) de la componenta server. Serverul rspunde aadar cererilor cli-
enilor.

12
Sabin Corneliu Buraga Tehnologii Web
Modul de dialogare ntre clieni i servere se realizeaz prin intermediul unei
mulimi de reguli de comunicare prin reea denumit protocol.
n cazul Web-ului, acest protocol este HTTP (HyperText Transfer Protocol). HTTP repre-
zint un protocol bazat pe stiva de protocoale TCP/IP. HTTP a nceput s fie proiectat
i folosit din anul 1990, dezvoltndu-se mpreun cu spaiul WWW. n prezent, este utili-
zat versiunea HTTP/1.1 care ofer funcionaliti suplimentare, ca de exemplu suport
pentru identificatori uniformi de resurse URI (Uniform Resource Identifier). Aceti identificatori
specific adresele Web ca locaie (prin URL Uniform Resource Locator) sau prin nume
(URN Uniform Resource Name). Identificatorii uniformi de resurse reprezint o modalita-
te flexibil i eficient de accesare a oricrei resurse Internet, prin oricare protocol de
comunicare. ncorpornd suport pentru transferul de pot electronic, transferul de fii-
ere sau accesul la grupuri de tiri, HTTP este de asemenea utilizat i ca protocol generic
pentru comunicarea ntre agenii utilizator (navigatoare, roboi Web etc.) i alte sisteme
disponibile pe Internet. n acest mod, HTTP permite accesul la resurse disponibile din
diverse aplicaii.
Numeroase detalii privitoare la protocolul HTTP pot fi gsite consultnd cr-
ile S. Buraga, Tehnologii XML, Polirom, Iai, 2006 i S. Buraga et al., Programare
Web n bash i Perl, Polirom, Iai, 2002.
Ca orice serviciu Internet bazat pe modelul client/server, Web-ul trebuie s includ o
multitudine de servere Web. Cele mai cunoscute servere Web sunt Apache, Netscape
Enterprise Server, Sun Web Server, Microsoft Internet Information Services, Stronghold, Jigsaw (dis-
ponibile pe diverse platforme, n special Unix).
Situri Web
Calculatorul pe care ruleaz un server Web i care gzduiete o serie de pagini
(documente) WWW nrudite ale unei organizaii, companii sau persoane se
mai numete i sit (site). Aceast colecie este orientat de obicei ctre anumite in-
formaii unitare sau scopuri comune.
Exist dou tipuri majore de situri Internet:
situri Web seturi de pagini Web corelate i resursele la care se refer acestea;
situri FTP servicii configurabile care furnizeaz acces la fiiere publice (do-
cumentaii, programe, informaii) prin intermediul protocolului FTP.
Un sit Web are asociat n general o adres vizibil oricrui utilizator din Internet (de
exemplu, www. i nf o. uai c. r o este adresa sitului Facultii de Informatic din Iai).
Un server Web poate gestiona simultan mai multe situri, oferind aa-numita gzduire
virtual (virtual hosting). Acest lucru este util n situaia n care o anumit organizaie i
menine situl Web pe un alt server (de exemplu, pe serverul unui distribuitor de servicii
Internet Internet Service Provider).

13
Sabin Corneliu Buraga Tehnologii Web
Un caz particular de disponibilitate a unui sit Web este n cadrul unui intranet, adic a
unei reele interne proprii unei companii sau organizaii care folosete tehnologiile
Internet. Situl Web dintr-un intranet nu este accesibil persoanelor din exteriorul organiza-
iei proprietare, ci exclusiv membrilor acesteia. Din acest punct de vedere, intranetul poa-
te fi privit ca fiind un mini-Internet, restrns la nivelul unei reele locale. Companiile care
s-au slujit de facilitile intranetului au nregistrat economii importante datorit accesului
rapid la date i aplicaii, comparativ cu problemele i costurile ce ar fi fost implicate de
distribuirea n scris a acestora n interiorul corporaiei.
Un sit Web poate fi disponibil i n cadrul extranetului o extindere a facilitilor intra-
netului prin mijlocirea comunicaiilor ntre intraneturile a dou sau mai multe organizaii.
Avantajele cele mai atrgtoare sunt cele din domeniul afacerilor pe Internet, n sectorul
business-to-business (B2B).
O aplicaie Web reprezint o colecie interconectat de pagini Web cu coninut
dinamic menit a oferi o funcionalitate specific utilizatorilor.
Natural, interaciunea dintre aplicaie i utilizatori are loc prin intermediul unei interfe-
e Web. Deseori, termenii de sit i aplicaie Web sunt folosii unul n locul celuilalt, pen-
tru a desemna acelai concept.
Drept exemple de aplicaii Web pot fi enumerate Amazon, Basecamp, eBay, Expedia,
Flickr, Google Maps, PHPMyAdmin, Wikipedia, Yahoo! i multe altele.
Hipermedia
Alturi de modelul client/server, al doilea concept important pe care s-a putut construi
Web-ul este cel de multimedia.
n esen, multimedia reprezint o sum de diverse medii de comunicare: statice
(text, imagini precum fotografii, diagrame sau grafice) i dinamice (sunet, anima-
ie, filme). Dac la acest coninut informaional se adaug i capabiliti de a reali-
za diverse legturi (relaii) ntre prile componente ale documentelor multimedia,
ceea ce rezult se numete hipermedia sau hipertext (termen aprut n anul 1965, n
urma cercetrilor ntreprinse de personaliti precum Vannebar Bush, Douglas
Engelbart i Ted Nelson).
n anul 1965, Ted Nelson inventeaz termenul hipertext (text non-linear), definindu-l
drept material scris sau grafic interconectat ntr-o manier complex care n mod con-
venional nu poate fi reprezentat pe hrtie. El poate conine cuprinsuri ale propriului su
coninut i relaiile dintre diverse pri componente; poate de asemeni conine adnotri,
adugiri i note de subsol pentru cei care doresc s-l examineze.
Definiiile hipertextului sunt diverse. O prim definiie ar fi aceea c hipertextul repre-
zint o form de document electronic. O alta, alternativ, specific hipertextul ca repre-
zentnd o metod de organizare a informaiilor n care datele sunt memorate ntr-o reea
de noduri i legturi, putnd fi accesat prin intermediul navigatoarelor interactive i ma-
nipulat de un editor structural.

14
Sabin Corneliu Buraga Tehnologii Web
Hipertextul semnific o tehnic pentru organizarea informaiei textuale printr-o meto-
d complex neliniar n vederea facilitrii explorrii rapide a unei cantiti mari de cuno-
tine. Conceptual, o baz de date hipertext poate fi gndit ca un (di)graf, unde fiecare
nod poart un fragment de text i unde arcele grafului conecteaz unele fragmente de text
cu altele nrudite. Pentru a vizualiza textul dintr-o astfel de baz de date, utilizatorul se va
folosi de o interfa, traversnd legturile.
Conceptul esenial prezent n cadrul hipertextului este cel al legturilor (care apar n ca-
drul aceluiai document i/sau ntre documente diferite). Aceast caracteristic de legare
permite organizarea non-linear a informaiilor.
O parte dintre avantajele hipertextului fa de textul tiprit sunt:
forma neliniar a hipertextului ofer faciliti eficiente de parcurgere a coni-
nutului;
mediile electronice pot stoca o cantitate impresionant de informaii;
hipertextul ofer o mai bun vizualizare a coninutului i o navigare rapid,
orict de complexe ar fi documentele, innd cont de specificaiile utilizatori-
lor;
n cadrul sistemelor hipertext, interogrile, filtrrile, diversele preferine i ad-
notrile utilizatorilor pot fi refolosite ori de cte ori este necesar, putnd fi
stocate n cadrul structurii hipertext a documentelor folosite.
Principalele probleme cu care se confrunt informaticienii n ceea ce privete hipertex-
tul sunt cele legate de:
conversie (n general automat) a textului liniar n form hipertext i liniarizare a hi-
pertextului;
proiectare (design) a documentelor hipertext;
accesare concurent a bazelor de date hipertext n context distribuit;
construire a unor mecanisme optime pentru cutarea i interogarea n manier inteli-
gent a informaiilor hipertext;
suportare a extensiilor multimedia;
prezentare a documentelor hipertext ntr-o form uor de parcurs de ctre utiliza-
tori etc.

15
Sabin Corneliu Buraga Tehnologii Web

O structur hipertext compus din mai multe noduri
i modul de vizualizare folosind un browser hipertext
n principiu, un sistem hipermedia este constituit din noduri (concepte) i legturi (rela-
ii). Un nod reprezint, n mod uzual, un concept unic (o idee), putnd conine text, gra-
fic, animaie, audio, video, imagini sau programe. Un nod poate avea asociat un tip (de-
taliu, propoziie, colecie, observaie etc.) nglobnd o informaie semantic. Nodurile
sunt conectate de alte noduri prin intermediul legturilor. Nodul surs al unei legturi se
numete referin, iar cel destinaie referent, fiind denumite i ancore. Coninutul unui nod se
afieaz la activarea legturii.
Legturile sunt conexiuni ntre noduri (sau concepte) dependente unul de altul, putnd
fi bidirecionale sau doar unidirecionale. Legturilor li se pot asocia tipuri, definind natura
relaiei dintre noduri. Legturile pot fi refereniale (non-ierarhice, utile pentru realizarea re-
ferinelor ncruciate, ele fiind cele care deosebesc cel mai bine hipermedia de celelalte
forme de stocare a informaiei) sau organizaionale (denumite ierarhice sau structurale, ilus-
trnd relaiile printe-copil dintre noduri, folosite la organizarea nodurilor n manier ie-
rarhic ntr-o structur strict). Legturile organizaionale sunt eseniale pentru liniariza-
rea hipertextului i permit autorilor s verifice coerena structurii hipertext.
De asemenea, legturile pot fi statice (stabilite de autorul documentului) sau dinamice
(create n momentul rulrii sistemului hipertext, n funcie de context sau de cerinele uti-
lizatorilor). Ele pot fi utilizate, de exemplu, pentru a ncorpora proceduri de securitate (o
legtur poate fi disponibil doar pentru un anumit utilizator autentificat) ori s permit
utilizatorilor s-i creeze legturi personale ntre diverse noduri care n mod uzual nu sunt
conectate direct.
Activarea marcajelor unei legturi duce la vizualizarea (activarea) nodurilor.
nelegerea i navigarea printr-un document de tip hipertext depind de abilitatea utili-
zatorului de a construi o reprezentare mental coerent a structurii hipertextului, rm-
nnd n responsabilitatea creatorului documentului s asigure aceast coeren. Construi-
rea unui document hipertext coerent poate fi considerat o problem de design, fr a
exista ns legi pentru conceperea de documente hipertext corecte, dei unii cercettori
au stabilit o serie de reguli pentru aceasta. Astfel, un document hipertext coerent const

16
Sabin Corneliu Buraga Tehnologii Web
din trei componente: partea de coninut, partea de organizare i partea de prezentare a informaii-
lor.
Una dintre soluiile de a crea documente hipertext este oferit de limbajul de marcare
HTML (HyperText Markup Language), aprut nc de la nceputurile Web-ului, n prezent
regsit sub versiunea XHTML. Marcajele HTML descriu structura logic a documentului,
urmnd a fi procesate de ctre programul client (de cele mai multe ori, un navigator). Un
astfel de document poate cuprinde legturi de tip hipertext, indicate prin zone de text sau
imagini, conducndu-l pe utilizator fie n alt punct al aceluiai document, fie ntr-un alt
document, care poate s se gseasc stocat local (pe serverul curent) sau la distan (pe
oricare alt sit Web din lume). Un document marcat se numete pagin Web.
Documentele pot include elemente multimedia variate datorit facilitilor puse la dis-
poziie de diferitele versiuni ale limbajului HTML care prevd inserarea de imagini (for-
mate grafice precum GIF, JPEG sau PNG), fiiere audio (MIDI, WAV ori MP3) i video
(AVI, ATF, MPEG), precum i alte informaii n formate proprietare sau nu (e.g., arhive,
documente PDF, animaii Flash, lumi virtuale VRML).
mbinarea dintre marcajele HTML i diverse linii de cod scrise n alte limbaje de pro-
gramare (JavaScript, VBScript pe partea client; C/C++, C#, Perl, PHP, Python sau
Java pe partea server) confer Web-ului interactivitate sporit i dinamism, caracteristici
exploatate mai ales n contextul e-business, dar nu numai.
Aceste legturi ncruciate ntre sutele de mii de situri Web realizeaz o adevrat pn-
z de pianjen (web) planetar (world-wide) de unde provine i denumirea WWW, iar utiliza-
torul navigheaz prin ciberspaiul reprezentat de aceast reea complex.
n ultimii zece ani, Web-ul s-a dezvoltat exploziv, asimilnd i un nou aspect: nu se mai
limiteaz la schimbul de informaii tiinifice ntre cercettori, ci a devenit domeniu pu-
blic, extinzndu-se foarte mult n lumea afacerilor. Astfel, Web-ul poate fi considerat
segmentul Internet cu cea mai rapid dezvoltare.
Dac Internetul este o reea de reele, format din calculatoare i medii de transmisie ca-
re transport pachete de date de la un calculator la altul, Web-ul reprezint un spaiu ab-
stract de informaie. Pentru Internet, conexiunile sunt reprezentate de canalele de comu-
nicaie (cu fir sau fr fir) ntre calculatoare, iar pe Web conexiunile sunt ilustrate prin
legturi hipertext. Web-ul exist datorit aplicaiilor care asigur comunicarea n cadrul
Internetului i a fcut din Internet un spaiu public, liber de constrngeri, universal i uor
de utilizat.

17
Sabin Corneliu Buraga Tehnologii Web
2. Localizarea resurselor Web
Localizarea informaiilor n Internet se realizeaz apelndu-se la aa-numiii identificatori
uniformi de resurse URI (Uniform Resource Identifiers).
Este considerat resurs orice entitate avnd identitate, de exemplu un docu-
ment electronic, o imagine, un serviciu (i.e. serviciul de pot electronic), o colec-
ie de alte resurse.
Nu toate resursele pot fi accesate direct pe Internet, de vreme ce pot fi considerate
drept resurse (non-electronice) i fiinele umane, organizaiile, volumele dintr-o bibliotec
etc. O resurs se poate menine constant n timp, dei coninutul ei entitile crora ea
le corespunde se poate modifica. Pentru facila lor localizare, resursele sunt desemnate
printr-un identificator (n cazul Internetului, identificatorii reprezint o secven de caracte-
re avnd o sintax bine-definit, dup cum vom vedea mai jos). Pentru ca diverse tipuri
de identificatori de resurse s poate fi utilizate n acelai mod, s-a recurs la folosirea unor
scheme uniforme de identificatori. Acest principiu adoptat asigur independena de meca-
nismul (protocolul) folosit pentru accesarea resurselor, permindu-se astfel interpretarea
ntr-o manier uniform a mai multor convenii sintactice desemnnd identificatori ai
unor resurse eterogene. Mai mult, pot fi introduse noi tipuri de identificatori de resurse
fr a fi modificat modul de adresare a vechilor tipuri.
Identificatorii uniformi de resurse pot fi divizai n dou categorii:
localizatori uniformi de resurse URL (Uniform Resource Locator) care identific
resursele printr-o reprezentare a mecanismului de accesare a lor (e.g. localizarea
unor resurse prin intermediul adresei calculatorului pe care este stocat i a reelei
din care face parte acel computer), nu prin nume sau alte atribute (vezi mai jos);
nume uniforme de resurse URN (Uniform Resource Name) ce permite specifi-
carea unei resurse chiar dac resursa a disprut ori a devenit inaccesibil, prin in-
termediu unui nume care rmne permanent i unic. URN-ul se utilizeaz mai
ales pentru a desemna entiti folosite de anumite aplicaii Web. Ca exemple de
URN-uri putem meniona:
ur n: mozi l l a: package: communi cat or
ur n: schemas- mi cr osof t - com: dat at ypes
Drept exemple de URL-uri, le putem descrie pe urmtoarele:
ht t p: / / www. i nf oi asi . r o/ ~busaco/ cv. ht ml se identific resursa
reprezentat de documentul Web cv. ht ml prin intermediul acestui URL, via o
schem http asociat serviciilor protocolului de transfer a hipertextelor (HTTP
HyperText Transfer Protocol);
f t p: / / f t p. uai c. r o/ pub/ Readme. t xt se utilizeaz o schem ftp pen-
tru serviciile protocolului de transfer de fiiere (FTP File Transfer Protocol);

18
Sabin Corneliu Buraga Tehnologii Web
mai l t o: busaco@i nf oi asi . r o contul unui utilizator Internet se speci-
fic printr-o schem mailto pentru pota electronic.
Un URL este compus din urmtoarele componente principale:
protocol: / / domeniu/ cale?ir_de_interogare
Componentele pr ot ocol (de cele mai multe ori ht t p, specificnd utilizarea protoco-
lului HTTP pentru accesarea resurselor Web) i domeni u sunt obligatorii.
Componenta domeni u reprezint n mod uzual numele unui server Web de pe care
dorim s accesm o pagin WWW (a unui sit), identificnd ntr-o manier unic un calcu-
lator conectat la Internet. Domeniul poate fi specificat printr-un ir de patru octei des-
prii de punct, ir denumit adres IP (de exemplu: 193. 231. 30. 225), sau prin numele
simbolic mai uor de reinut corespunztor adresei IP, asociat unui calculator (adresei
IP dat mai sus i corespunde numele t hor . i nf o. uai c. r o). Numele simbolic reprezin-
t un ir de identificatori de domenii sau de sub-domenii i de calculatoare ale unui
(sub)domeniu.

Ierarhia de domenii de nume primul nivel este cel al domeniilor primare
Domeniile primare (principale) sunt cele aprute la nceputurile Internetului (de obicei
localizate n Statele Unite ale Americii, dar nu obligatoriu):
. comdesemneaz o companie sau organizaie comercial . i bm. comsau
. j cl ar k. com,
. or g reprezint o organizaie non-profit de exemplu, . w3. or g (Con-
soriul Web) ori . oasi s- open. or g,
. gov specific domeniul unei organizaii guvernamentale (americane)
. whi t ehouse. gov,
. mi l desemneaz o organizaie militar . dmso. mi l sau . navy. mi l ,

19
Sabin Corneliu Buraga Tehnologii Web
. net reprezint o organizaie cu preocupri n domeniul reelelor de cal-
culatoare i al Internetului . uu. net ori . php. net ,
. i nt desemneaz o organizaie internaional . gr eenpeace. i nt ,
. edu specific domeniul unei organizaii din spaiul academic, educativ
(de origine american) . ui uc. edu ori . st anf or d. edu.
Tot domenii primare sunt considerate domeniile corespunztoare statelor lumii, codi-
ficate conform codului rutier. De exemplu, . r o corespunde Romniei, . de este specific
Germaniei, . j p asociat Japoniei etc. Mai recent, au aprut domenii primare noi precum
. ws (denumire provenind de la World Site) specific siturilor Web comerciale, . bi z dedicat
activitilor de afaceri Internet (e-business) sau . i nf o pentru siturile Web informaionale
(de exemplu, www. schemaweb. i nf o).
n Romnia autoritatea care se ocup cu nregistrarea i reglementarea domeniilor . r o
din ara noastr este Reeaua Naional de Calculatoare (RNC) www.rnc.ro. nregistrarea
unui domeniu . r o se poate realiza direct la RNC sau la unul dintre partenerii acestuia,
persoana care a nregistrat domeniul purtnd rspunderea pentru eventualele conflicte
aprute. Instituia RNC poate suspenda sau anula dreptul de folosin al unui domeniu, n
condiiile sesizrii existenei unor litigii pe rol, folosirii inadecvate a numelui de domeniu
sau dac datele despre organizaia sau persoana care a nregistrat domeniul respectiv sunt
false ori incorecte etc.
Fiecare domeniu primar va avea n jurisdicie o serie de sub-domenii, corespunznd
diverselor organizaii, companii i persoane care fac parte din acel domeniu. Un sub-
domeniu poate fi compus din sub-sub-domenii sau din nume simbolice de maini conec-
tate la Internet. De exemplu, este uor de neles c adresa www. i nf oi asi . r o corespun-
de calculatorului www(serverul Web) din sub-domeniul i nf oi asi al domeniului . r o. Un
calculator poate avea asociate mai multe nume simbolice (serverul t hor are asociat i
numele www, denumit i alias, pentru servicii de tip World-Wide Web, dar i alias-ul f t p
pentru servicii de transfer de fiiere via FTP). Aadar, www. i nf oi asi . r o este identic cu
t hor . i nf oi asi . r o sau cu f t p. i nf oi asi . r o.
Pentru a vizita pagina principal a serverului (sitului) Web al Facultii de Informatic
din Iai se va folosi URL-ul urmtor: ht t p: / / www. i nf oi asi . r o. La fel de bine, se pu-
tea utiliza ht t p: / / 193. 231. 30. 225, dar se prefer numele simbolice pentru c sunt
mult mai uor de reinut i n plus sunt independente de adresa IP stabilit (mai mult, pot
exista adrese IP multiple asociate cu acelai nume simbolic).
Corespondena dintre numele simbolic i adresa IP a unui calculator este facilitat de
un serviciu denumit DNS (Domain Name System) sistemul numelor de domenii.
Mai multe detalii n cartea S. Buraga, Proiectarea siturilor Web (ediia a II-a),
Polirom, Iai, 2005.
Dac se dorete accesarea unei anumite resurse (fiier) memorat pe un server Web, va
trebui ca n cadrul URL-ului, imediat dup domeniu s fie specificat calea pn la acea

20
Sabin Corneliu Buraga Tehnologii Web
resurs, adic irul de nume de directoare, terminat eventual cu numele fiierului dorit.
Directoarele vor fi desprite de caracterul / , ca n exemplul urmtor:
ht t p: / / www. i nf oi asi . r o/ eur ol an/ eur o95. ht ml . Acest URL indic resursa desem-
nat de documentul HTML eur o95. ht ml , resurs aflat n directorul eur ol an localizat
n directorul rdcin al sitului Web www. i nf oi asi . r o. Dac la sfritul unei ci de di-
rectoare nu este specificat numele unui fiier, va fi ncrcat o pagin implicit (denumit
i pagin index) al crui nume este dependent de serverul Web operaional pe calculatorul
accesat sau de modul de configurare a acestuia (ca exemple standard, pot fi menionate
i ndex. ht ml pentru un server Apache ori def aul t . ht mpentru Microsoft IIS). Dac un
nume de director sau de fiier include caracterul spaiu sau un alt caracter rezervat, aces-
tea vor fi substituite de codul n baza 16 al caracterului n cauz, precedat de % (de pil-
d, adresa www. i nf oi asi . r o/ docs/ Pagi na Web. ht ml va fi transformat n
www. i nf oi asi . r o/ docs/ Pagi na%20Web. ht ml , innd cont c spaiul are codul 32 n
baza 10, adic 20 n baza 16).
Alte simboluri ce pot fi ntlnite n componena unui URL sunt:
caracterul # (la finalul URL-ului) determin poziionarea ntr-o anumit sec-
iune a resursei. De exemplu:
ht t p: / / www2002. or g/ CDROM/ r ef er eed/ 481/ i ndex. ht ml #SunOne;
caracterul ~ indic pagina personal a unui utilizator care posed cont pe
serverul precizat n URL (caracterul tilda semnific directorul home al acestui
utilizator pe o main Unix/Linux). De exemplu,
ht t p: / / www. i nf oi asi . r o/ ~busaco/ t each/ va desemna pagina i n-
dex. ht ml stocat n directorul t each aflat n directorul Web al directorului
home aparinnd utilizatorului cu numele busaco de pe maina cu numele sim-
bolic www. i nf oi asi . r o.
caracterul ? prefixeaz un ir denumit ir de interogare coninnd anumite in-
formaii transmise resursei accesate. De multe ori, URL-urile pot include refe-
riri la resurse care nu reprezint documente propriu-zise, ci programe (i.e.,
script-uri) executate de serverul Web. Aceste programe pot fi, de exemplu,
script-uri CGI (Common Gateway Interface) avnd n mod uzual extensia . cgi ,
programe PHP cu extensia . php sau alte tipuri de aplicaii executate pe server
(i.e. servlet-uri Java, programe ASP.NET etc.). irul de interogare prefixat de
? reprezint tocmai datele de intrare transmise unui astfel de program. Ast-
fel, pentru a cuta paginile Web coninnd cuvntul Dali vom putea scrie
ht t p: / / www. al t avi st a. com/ cgi - bi n/ quer y?pg=q&what =web&q=Dal i ,
apelnd la motorul de cutare Altavista. Acest ir de interogare nu poate coni-
ne caracterele ; , / , ?, : , @, &, =, +, , i $, ele fiind codificate n baza 16 i prefi-
xate de simbolul %.
URL-urile pot fi utilizate, de asemenea, i pentru accesarea fiierelor locale, aflate pe
calculatorul pe care ruleaz i navigatorul Web. n acest scop se va folosi schema f i l e,

21
Sabin Corneliu Buraga Tehnologii Web
ca n exemplul urmtor: f i l e: / / / C: / Temp (navigatorul va afia coninutul directorului
Temp de pe discul C: al unui calculator rulnd sub sistemul de operare Windows). Un
URL similar, n cazul Unix (Linux), ar fi f i l e: / / / t mp/ .
De menionat faptul c pot exista i alte scheme URL nestandardizate, ca de exemplu
man utilizat de navigatorul Nautilus pentru a accesa documentaiile de sistem Linux pro-
cesate n mod uzual de comanda man. Astfel, pentru a consulta paginile de manual ale
shell-ulului bash, se poate folosi URL-ul man: bash, n locul comenzii man bash.

22
Sabin Corneliu Buraga Tehnologii Web
3. Protocolul HTTP pe scurt
Dat fiind importana protocolului HTTP, n continuare vom realiza o trecere n revist a
caracteristicilor sale importante.
Protocolul HTTP, standardizat de documentul RFC 2616, este folosit n special pentru
hipertext, dar poate fi considerat drept protocol generic, baza comunicrii ntr-un sistem
distribuit de management al datelor, n cazul WWW fiind vorba n principal de facilitarea
transferului de date ntre clienii i serverele Web. Fiind un protocol utilizat n Internet,
HTTP se situeaz la nivelul de aplicaii al stivei de protocoale TCP/IP (Transmission Con-
trol Protocol/Internet Protocol), putnd fi considerat fiabil (reliable).
Concepte fundamentale
Conceptele de baz sunt cererea i rspunsul: un client Web trimite un mesaj (cererea) la un
server. Mesajul conine identificatorul resursei dorite, dat sub forma unui URI, metoda de
acces folosit, versiunea protocolului, precum i o serie de meta-informaii care pot fi uti-
le serverului. Rspunsul serverului cuprinde un cod indicnd starea serverului dup inter-
pretarea cererii, un mesaj explicativ pentru codul de stare transmis, meta-informaiile care
vor fi procesate de ctre client i, eventual, un coninut (e.g., resursa solicitat).
n general, o sesiune de comunicare HTTP este iniiat de ctre client i const din so-
licitarea unei resurse (o pagin Web, uzual) identificate unic pe un server cunoscut. Aces-
ta este numit i server de origine datorit faptului c n comunicarea ntre client i server pot
s apar unul sau mai muli intermediari: proxy (numit i server proxy), poart (gateway) sau
tunel (tunnel). Un proxy reprezint un intermediar care retrimite un mesaj HTTP, eventual
modificnd o parte a sa. Poarta semnific un intermediar care se poate situa naintea unui
server de origine i s se identifice drept acesta, clientul Web necunoscnd acest aspect.
Tunelul este un intermediar care nu schimb coninutul mesajului, ci are rol exclusiv de
retransmitere a lui; de exemplu, tunelul poate fi folosit pentru (de)criptarea mesajelor ve-
hiculate ntre server i client, n cadrul unui intranet/extranet.
Un alt concept important este cel de cache, desemnnd un depozit local de stocare (n
memorie, pe disc) a mesajelor (datelor) la nivel de server/client. Un proxy deine obligato-
riu un cache, denumit i sistem de cache.
Un exemplu tipic de cerere-rspuns este urmtorul, n care cererea formulat, intern,
de un browser are forma:
GET / cat al og_pr oduse. ht ml HTTP/ 1. 1
Host: www. por t ocal e. i nf o
User-Agent: Mozi l l a/ 5. 0 ( X11; U; Li nux i 686; en- US; r v: 1. 8. 0. 5) Gec-
ko/ 20060719 Fi r ef ox/ 1. 5. 0. 5
Accept: t ext / ht ml , i mage/ gi f , i mage/ j peg, */ *
Accept-Language: en- us
Accept-Encoding: gzi p, def l at e, compr ess, i dent i t y
Connection: Keep- Al i ve

23
Sabin Corneliu Buraga Tehnologii Web
Un posibil rspuns obinut din partea serverului Web ar putea fi urmtorul (am
omis coninutul propriu-zis al documentului solicitat):
Date Tue, 22 Aug 2006 07: 17: 13 GMT :
Server: Apache/ 2. 0. 54 ( Wi n32) PHP/ 5. 0. 4
Accept-Ranges: byt es
Content-Length: 201
Keep-Alive: t i meout =15, max=74
Connection: Keep- Al i ve
Content-Type: t ext / ht ml ; char set =I SO- 8859- 1
. . .
Maniera de codificare a coninutului
Pentru ca datele s fie corect interpretate de toate entitile participante la conversaia
prin reea, indiferent de platforma hardware i software, ele trebuie s respecte aceeai
codificare.
Astfel, se definete conceptul de set de caractere, pentru a putea interpreta corect datele
schimbate via protocolul HTTP ntre dou platforme diferite (e.g., un server rulnd pe un
sistem Linux cu un navigator Web de pe un dispozitiv mobil), avnd reprezentri diferite
ale datelor. Informaia e transmis sub forma unui ir de caractere urmnd ca entitatea de
la cellalt capt, folosind indicaiile despre setul de caractere, s realizeze transformarea
din ir de octei n ir de caractere. Setul de caractere implicit este ISO-8859-1, dar exist
o multitudine de alte seturi (de exemplu, ISO-8859-2 denumit i Latin-2, care ofer prin-
tre altele i reprezentarea diacriticelor din limba romn).
Protocolul HTTP respect seturile de caractere definite de specificaiile MIME
(Multipurpose Internet Mail Extensions) descrise n documentele RFC 2045 i 2046. Conform
standardului MIME, pentru fiecare resurs n parte se specific tipul i subtipul acesteia.
De exemplu, text/html pentru un document HTML, text/plain n cazul unui document
text neformatat, image/png pentru o imagine n format PNG, application/soap+xml pentru
mesajele SOAP etc.
De asemenea, mesajele pot fi codificate prin diverse metode precum gzip ori compress, n
vederea comprimrii sau asigurrii identitii i/sau integritii.
Mesajele HTTP
Cererile i rspunsurile HTTP sunt vehiculate prin intermediul mesajelor. Astfel, mesajele
HTTP sunt considerate de dou tipuri: cerere provenit de la un client ctre un server i
rspuns al serverului, trimis la acel client. Un mesaj e compus dintr-o succesiune de linii
de text, delimitate de caracterele CRLF (Carriage Return i Line Feed). Prima linie semnific
o cerere efectuat de un client sau un cod de stare obinut de la server, urmat de un nu-
mr de atribute de antet.
Un antet (header) conine mai multe atribute care sunt folosite la completarea unei ce-
reri sau a unui rspuns cu meta-informaia necesar interpretrii corecte a mesajului prin
stabilirea unor valori specificate de ctre protocolul HTTP sau a unor protocoale definite

24
Sabin Corneliu Buraga Tehnologii Web
de utilizator (de exemplu, SOAP). Un atribut este furnizat printr-un nume urmat de :
i de o valoare (opional, n unele cazuri).
O cerere este specificat de o metod de acces, cele mai folosite fiind descrise n conti-
nuare.
Metoda GET reprezint o cerere de accesare a unor informaii (reprezentri de resur-
se). Un client HTTP (navigator, robot, program de descrcare, agregator de tiri, player
multimedia etc.) folosete metoda GET pentru a obine o anumit resurs, fie c ea re-
prezint un fiier (document text, HTML, imagine PNG sau JPEG, aplicaie, arhiv, do-
cument XML etc.), fie c indic execuia pe serverul Web a unui proces care va produce
datele dorite (e.g., invocarea unui script CGI sau a unui program PHP);
HEAD este similar cu metoda GET, dar serverul va ntoarce un mesaj avnd infor-
maii doar n antet. Meta-datele din anteturile HTTP din rspunsul la o cerere HEAD vor
fi identice cu cele din rspunsul la o cerere GET. Utilitatea acestei metode const n obi-
nerea meta-datelor asociate unei resurse Web fr a transfera efectiv ntreaga entitate, n
vederea de exemplu a testrii existenei resursei, a obinerii datei ultimei modificri
sau furnizarea drepturilor de acces;
Metoda POST este utilizat pentru a identifica dac serverul accept o entitate ngloba-
t n cadrul cererii. POST este proiectat s implementeze o metod uniform pentru
funcii precum adnotarea resurselor, trimiterea datelor unui formular Web ctre server,
extinderea unei baze de date printr-o operaiune de inserare, invocarea unui serviciu etc.
n cadrul unei cereri, pot fi specificate diverse atribute, utilizate pentru a transmite ser-
verului informaii suplimentare privitoare la acea cerere i la client. Se poate face o analo-
gie ntre trimiterea unei metode HTTP cu apelul unei funcii dintr-un limbaj de progra-
mare, unde atributele reprezint parametrii de intrare.
Dup primirea i interpretarea unui mesaj de tip cerere i interpretarea lui, un server
HTTP rspunde cu un mesaj denumit rspuns. Prima linie conine versiunea protocolului
HTTP implementat de ctre server i continu cu un cod de stare reprezentnd un num-
rul asociat de ctre specificaia HTTP unei anumite situaii a serverului n urma tratrii
unei cereri. Urmeaz un text explicativ pentru codul de stare, menit s clarifice situaia
exprimat de codul de stare.
Codul de stare este format din trei cifre organizate n categorii de stri; codurile din ace-
eai categorie se refer la stri similare.
Ele se disting dup prima cifr n modul de mai jos.
Codurile de informare (1xx) furnizeaz informaii privitoare la o anumit aciune (cererea
a fost primit, comunicaia continu). De exemplu: 100 Continue (clientul poate continua
cererea, trebuind s trimit urmtoarea parte a unui mesaj parial).
Codurile de succes (2xx) raporteaz efectuarea cu succes a unei operaiuni (cererea a fost
primit, interpretat i acceptat de ctre server). Un cod tipic din aceast categorie este

25
Sabin Corneliu Buraga Tehnologii Web
200 OK (cererea a fost rezolvat cu succes). Alt exemplu este 204 No Content (serverul a
rezolvat cererea, dar nu are ce returna clientului).
Codurile de redirecionare (3xx) indic o redirecionare a cererii spre alt locaie ori alt ser-
ver. Drept exemple, menionm codurile 301 Moved Permanently (resursa solicitat a fost
asociat unui URI nou i orice referin viitoare la ea trebuie s se realizeze prin acest
URI furnizat) i 302 Moved Temporarily (resursa cerut are asociat un alt URI, dar pentru o
perioad temporar).
Codurile de eroare provocate de client (4xx) specific apariia unei erori pe partea clientului
(fie cererea este incorect din punct de vedere sintactic, fie nu poate fi satisfcut din varii
motive). Ca exemple, furnizm 401 Unauthorized (cererea necesit autentificarea utilizato-
rului e.g., via unui nume de cont urmat de o parol) i 403 Forbidden (serverul a recepio-
nat o cerere corect, dar refuz s o satisfac din diverse motive legate de restricionarea
accesului). Un alt cod tipic, des ntlnit, este 404 Not found (serverul nu gsete resursa
specificat).
Codurile de eroare generate de server (5xx) desemneaz coduri semnificnd o eroare pe par-
tea serverului (cererea este aparent corect, dar serverul nu o poate ndeplini din anumite
motive). Ca exemplificare, menionm 503 Service Unavailable (serverul Web nu poate sa-
tisface cererea e.g., din cauza suprancrcrii temporare sau din raiuni de administrare).

26
Sabin Corneliu Buraga Tehnologii Web
4. Privire de ansamblu
Din cele ce am vzut mai sus, spaiul World-Wide Web funcioneaz n practic datorit:
unei scheme consistente de identificare a resurselor, prin intermediul identificatori-
lor universali de resurse (URI);
unui mecanism flexibil de transfer de date, reprezentat de protocolul HTTP;
unei descrieri logice a structurii documentelor hipertext, prin intermediul limbajelor
de adnotare (marcare) HTML i XHTML.
Web-ul poate fi considerat un veritabil sistem hipermedia distribuit, utiliznd ca infrastruc-
tur Internet-ul. De asemenea, Web-ul poate fi privit ca un mediu eterogen pentru dez-
voltarea i exploatarea de sisteme distribuite menite a manipula componente multimedia.

Interaciunile dintre server, client i utilizator din prisma unei aplicaii Web
Iniial, spaiul WWW era compus din pagini (documente) statice incluznd text i
imagini, apoi elemente multimedia , interconectate prin intermediul legturilor hipertext.
Aplicaii de tip client (precum navigatoarele Web) erau folosite pentru accesarea via
adrese (URI) a reprezentrii acestor resurse, stocate pe servere Web. Programe supli-
mentare (plug-in-uri), incluse n navigatoarele Web, erau menite s redea tipuri de coninu-
turi nestandardizate, ca fiiere Word, PostScript, PDF (Portable Document Format), Flash
etc. Pentru a oferi coninut dinamic utilizatorilor, sunt adoptate diverse modaliti pro-
gramatice, reprezentate pe partea de server de programe CGI (Common Gateway Interface),
servere de aplicaii precum PHP (PHP: Hypertext Processor), JSP (Java Server Pages), ASP
(Active Server Pages) sau ASP.NET, iar pe partea de client de programe JavaScript sau
applet-uri Java.
De remarcat faptul c o serie de elemente programabile funcioneaz drept componen-
te middleware (genernd de fapt o arhitectur 3-tier ori N-tier), reprezentnd interfee pen-
tru accesarea unor servicii aflate la distan (e.g.: sisteme relaionale de baze de date).

27
Sabin Corneliu Buraga Tehnologii Web
Unul dintre paii importani ai evoluiei spaiului WWW l reprezint serviciile Web baza-
te pe meta-limbajul XML (Extensible Markup Language). Serviciile Web permit ca elemente
programabile s fie plasate pe siturile Web, ali programatori/aplicaii putnd accesa func-
ionalitile acestor programe, n manier distribuit i direct, pentru orice potenial nu-
mr de sisteme independente, prin folosirea unor standarde precum XML i HTTP.
Calculatoarele sunt i vor fi incluse n diferite tipuri de dispozitive, pe diverse scale,
precum telefoane celulare, palmtop-uri, notebook-uri, laptop-uri i alte viitoare dispozitive
portabile. Aceasta implic adoptarea unor noi mijloace de interaciune i comunicare att
ntre maini, ct i ntre calculatoare i utilizatori, cercetrile concentrndu-se n prezent
pe studierea comunicaiilor fr fir (wireless), n medii distribuite precum Web-ul,
folosindu-se diverse paradigme (peer-to-peer, sisteme de ageni etc.).
Identificatorii uniformi de resurse, protocolul HTTP i limbajul (X)HTML au reuit s
ndeplineasc practic scopurile principale ale Web-ului:
independena de dispozitiv (aceleai informaii pot fi accesate via o multitudine de dis-
pozitive ca mainframe-urile, calculatoarele personale, dispozitivele mobile etc.),
independena de software (forme diferite de software clieni (navigatoare, roboi Web
etc.) i servere Web ofer i extrag informaii ntr-o manier universal, fr ca
nici un produs-program s reprezinte o component critic pentru spaiul WWW,
deoarece Web-ul nu reprezint un program, ci un set de protocoale i specificaii
standardizate, deschise, redactate de Consoriul Web),
scalabilitatea (dezvoltarea exponenial a Web-ului este un exemplu interesant al
efortului uman depus de comunitatea utilizatorilor Internet-ului, independent de
resursele hardware i software disponibile),
multimedia (documentele, regsite i sub denumirea de pagini, disponibile pe Web
pot integra surse de informaie multiple, n diverse forme, de la date discrete
text, imagini statice precum fotografii, scheme, diagrame etc. pn la cele conti-
nue animaii, audio i video).
Drept concluzie final, Consoriul Web fora motrice din spatele XML-ului consi-
der c misiunea sa este aceea de a conduce evoluia Web-ului. Dei a mprtit mai multe
idei comune Internetului precum software-ul gratuit se rspndete mai repede, sis-
temele ASCII prolifereaz mai rapid dect cele binare i protocoalele proaste imit;
protocoalele bune fur a impus o strategie inovatoare: autodescrierea. Web-ul poate fi
construit peste el nsui. Identificatorii universali de resurse, formatele de date uor de proce-
sat de ctre main i specificaiile capabile de a fi interpretate de calculatoare pot fi m-
pletite ntr-un sistem extensibil care asimileaz orice concuren. n esen, apariia limba-
jului XML n spectrul formatelor de date pentru Web pune capt luptei asupra structur-
rii documentelor n vederea realizrii viziunii originare a creatorilor Web-ului. La ora ac-
tual, XML reprezint unica modalitate existent pentru adnotarea complex a datelor.

28
Sabin Corneliu Buraga Tehnologii Web

29
P Pa ar rt t e ea a I II I F Fa am mi i l l i i a a d de e l l i i m mb ba aj j e e X XM ML L
Esenialul n lumnare nu este ceara ce las urma, ci lumina.
Antoine de Saint-Exupry

1. Preambul
2. Caracterizare i trsturi eseniale
3. Prile componente ale unui document XML
4. Membrii constitueni ai familiei XML
5. Spaiile de nume XML
6. Validarea documentelor XML
7. Procesarea documentelor XML
8. Transformri XML
Sabin Corneliu Buraga Tehnologii Web

30
Sabin Corneliu Buraga Tehnologii Web

1. Preambul
Pentru identificarea resurselor Web-ul recurge la identificatori uniformi de resurse (URI
Uniform Resource Identifiers), iar pentru interaciune se folosete n mod uzual protocolul
HTTP. Reprezentarea resurselor se realizeaz via formate de date. Arhitectura spaiului
WWW ncurajeaz refolosirea formatelor existente, printre aspectele importante legate de
acest aspect putndu-se enumera: adoptarea formatelor textuale n contrast cu cele bina-
re, controlul versiunilor, extensibilitatea, compunerea formatelor, separarea coninutului,
prezentrii i interaciunii.
Cu proliferarea serviciilor Internet, mai ales ale Web-ului, datele au putut fi publicate
liber, folosindu-se un format de redare (prezentare) a informaiilor pus la dispoziie de
bine-cunoscutul HTML (HyperText Markup Language), n varianta actual XHTML
(Extensible HTML). n prezent, atenia cade asupra modelrii ct mai eficiente a informa-
iilor, prin intermediul unui format deschis, extensibil subiectul acestui capitol. Mai
mult dect att, modelarea datelor nu reflect doar sintaxa (care e specificat printr-un set
de convenii de marcare), ci i semantica pn acum, reprezentat de codul-surs al
programelor ce prelucrau acele date.
Dac formatele de date transpun maniera efectiv de stocare i prezentare a informaii-
lor, la nivel conceptual trebuie adoptat cel puin un model de reprezentare. Evoluia in-
frastructurilor de calcul a condus i la adoptarea unor modele de date diferite. Prezentul
are la baz arhitecturile navigaionale, bazate pe hipertext (text neliniar), utilizate de o ple-
iad de dispozitive, inclusiv cele mobile. Se consider c unul dintre modelele de date cele
mai potrivite este cel oferit de familia de limbaje XML.
Ca i SGML (Standard Generalized Markup Language), din care provine, XML
(Extensible Markup Language) reprezint un standard internaional pentru descrierea
de marcaje (markups) ale textelor electronice disponibile pe Web. n fapt, XML reprezint
un meta-limbaj, o descriere formal a unui limbaj, n acest caz, un limbaj de adnotare (de
marcare) a datelor. Specificaiile XML au fost dezvoltate ncepnd cu 1996 n cadrul Con-
soriului Web, de un grup de cercetare condus de Jon Bosak de la Sun Microsystems, la
care au aderat ulterior o serie de grupuri de experi din comunitile academice (Text
Encoding Initiative, NCSA, James Clark) i industriale (Sun, IBM, Netscape, Oracle,
Adobe etc.). Specificaiile XML sunt standardizate de ctre Consoriul Web vezi
http://www.w3.org/TR/xml.

31
Sabin Corneliu Buraga Tehnologii Web
2. Caracterizare i trsturi eseniale
Putem considera XML ca reprezentnd un standard internaional pentru descrierea de
marcaje (markups) privitoare la resursele electronice. n fapt, XML reprezint un meta-
limbaj (descriere formal a unui limbaj, conform unei gramatici suit de reguli prin care,
pe baza unor simboluri, se genereaz cuvinte). La nceput, a fost vzut ca un limbaj de
adnotare (de formatare) de texte, dar scopurile actuale depesc aceast interpretare n-
gust.
Termenul marcaj (markup) a fost utilizat iniial pentru a descrie anumite adnotri, note
marginale n cadrul unui text cu intenia de a indica tehnoredactorului cum trebuie listat
un anumit pasaj ori chiar omis. Cum formatarea i imprimarea textelor au fost automati-
zate, 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, listare ori alte aciuni.
Marcajul (codarea) reprezint, astfel, o aciune de interpretare explicit a unui
fragment de dat. Astfel, un limbaj de specificare ofer un set de convenii de marcare uti-
lizate pentru codificarea textelor. Un limbaj de marcare trebuie s desemneze mulimea
de marcaje obligatorii, permise, maniera de identificare a marcajelor i care este
semantica fiecrui marcaj disponibil (similar procesului de specificare a sintaxei i
semanticii unui limbaj de programare).
Exist urmtoarele caracteristici definitorii ale XML, primele trei preluate de la SGML:
utilizarea marcajelor descriptive (descriptive markups), adoptarea tipurilor de documente via
DTD (Document Type Definition), independena datelor i caracterul case-sensitive (majuscule-
le difer de minuscule).
Printre trsturile care au fcut meta-limbajul XML s fie folosit n industria software
putem enumera: suportul acordat Web-ului, facilitile pentru utilizarea internaional,
meta-limbajul (se permite definirea de noi limbaje, ntr-o manier portabil), soluie pen-
tru reprezentarea coninutului resurselor Web identificate via URI.
Aadar, XML este o metod de descriere universal a informaiei astfel nct att com-
puterele, ct mai ales oamenii s o poat nelege. Scopurile limbajului sunt cele legate de
utilizarea lui n Internet, suportnd o varietate de aplicaii, dar fiind mult mai flexibil dect
HTML. Oferind o manier universal pentru reprezentarea (descrierea) informaiilor hi-
pertext, XML poate fi vzut ca o tehnologie complementar limbajului HTML, nu ca o
nlocuire a sa.
Un prim exemplu: dac am considera un fragment de document HTML utilizat pentru
a stoca informaii dintr-o list privitoare la colegii de grup, acesta ar putea avea forma:
<p>Col eg: </ p>
<p>Nume: <b>t ef an Ci pr i an Tanas</ b></ p>
<p>Adr esa: <i >St r . Ber t hel ot , 16 - I ai </ i ></ p>

32
Sabin Corneliu Buraga Tehnologii Web
<p>Tel ef on: 032- 201090</ p>
<p>E- mai l : <t t >st anasa@i nf oi asi . r o</ t t ></ p>
Din perspectiva unui calculator (a unei aplicaii de prelucrare a acestor informaii), nu
exist nici o indicaie asupra faptului c informaia ar fi structurat. n schimb, conside-
rnd aceeai informaie reprezentat prin XML, fragmentul de document ar putea fi:
<col eg>
<nume>t ef an Ci pr i an Tanas</ nume>
<adr esa>St r . Ber t hel ot , 16 - I ai </ adr esa>
<t el ef on>032- 201090</ t el ef on>
<emai l >st anasa@i nf oi asi . r o</ emai l >
</ col eg>
Dac fragmentul de document HTML de mai sus indic mai mult modalitile de afia-
re a datelor (forma), documentul XML descrie structura datelor (putem afirma c este
vorba de un coleg, pentru el memornd numele i diverse maniere de contact). Cunos-
cnd structura datelor, se pot executa diferite operaii asupra acestora (e.g. afiarea doar a
numelor colegilor, trimiterea de felicitri tuturor colegilor din Iai, generarea unui tabel
coninnd numerele de telefon etc.).
1. Subset simplificat al SGML
foarte puternic, dar uor de implementat
fr limite n ceea ce privete complexitatea structurilor care pot fi de-
finite
ndeajuns de compact pentru a fi suportat de navigatoarele Web
2. Ofer suport pentru utilizare la nivel internaional
marcajele i coninutul pot fi reprezentate n Unicode
instrumentele de dezvoltare XML pot suporta orice codificri
3. Meta-limbaj
conceput pentru a suporta definirea unui numr nelimitat de limbaje
specializate, oferind suport de extinderi
portabilitate
Trsturi definitorii ale meta-limbajului XML

33
Sabin Corneliu Buraga Tehnologii Web
3. Prile componente ale unui document XML
Un document XML poate cuprinde urmtoarele categorii de constitueni:, declaraia,
elementele, atributele, entitile, seciunile de marcare, instruciunile de procesare.
Documentele XML pot s nceap cu o declaraie (numit i prolog) XML care specifi-
c versiunea limbajului XML utilizat de exemplu: <?xml ver si on=" 1. 0"
encodi ng=" UTF- 8" ?>(de asemenea, s-a precizat i tipul de codificare a setului de ca-
ractere folosit).
Componenta structural a unui document XML este elementul.
Diferite tipuri de elemente au asociate nume diferite. Fiecare element trebuie specificat
explicit prin intermediul marcajelor (tag-urilor). Perechea marcaj de nceput (start tag)
marcaj de sfrit (end tag) este folosit la ncadrarea fiecrei instane a elementului respec-
tiv n cadrul unui text. n XML, se utilizeaz <el ement >pentru a specifica un tag de n-
ceput i </ el ement >pentru cel de sfrit, unde element este numele unui element oare-
care (specificat de utilizator ori de autoritatea care a redactat specificaiile limbajului bazat
pe XML folosit).
Regulile sintactice privitoare la numele de elemente sunt similare celor privitoare la
identificatorii de variabile. Numele ncepnd cu caracterele xml (n orice modalitate de
scriere, cu majuscule sau minuscule) sunt rezervate. Numele de element nu poate conine
spaii albe.
Un element poate fi vid (nu conine nimic ntre tag-urile de nceput i sfrit), putnd fi
scris fie <el ement ></ el ement >, fie prin forma prescurtat <el ement / >. De asemenea,
poate include un text (ir de caractere) ori alte elemente. Mai multe elemente de acelai
tip pot fi, aadar, imbricate. Un aspect deosebit de important este cel privitor la faptul c
elementele trebuie s fie nchise i imbricate corect.
Coninutul textual al unui element poate fi compus din caracterele permise de codifica-
rea precizat de atributul encodi ng din declaraia XML, orice apariie de spaii albe
multiple fiind implicit redus la un singur caracter spaiu.
Pentru a ilustra mai detaliat acest aspect, considerm un model structural foarte simplu.
Presupunem c dorim s identificm o comand de portocale ce va fi procesat de un sit
de comer electronic. Astfel avem:
<por t ocal e>
<! - - par t ea de achi zi i e de por t ocal e - - >
<achi zi t i i >
<t i p>Por t ocal e gr ecet i f r coaj </ t i p>
<cod>P10- 01- GR</ cod>
<cant i t um=" kg" >3374</ cant i t >
</ achi zi t i i >
<! - - par t ea de vnzr i de por t ocal e - - >
<vanzar i >

34
Sabin Corneliu Buraga Tehnologii Web
<t i p>Por t ocal e j aponeze al bast r e</ t i p>
<cod>P10- 03- J P</ cod>
<cant i t um=" kg" >0107</ cant i t >
</ vanzar i >
</ por t ocal e>
Exemplul de mai sus nu ne precizeaz anumite reguli de compunere a comenzii (de
exemplu, nu putem impune ca tipul produsului solicitat s nu apar de mai multe ori).
Aadar, vom avem nevoie de un mecanism de precizare a structurii.
Un atribut este utilizat cu scopul de a descrie o anumit proprietate a unei apari-
ii specifice (particulare) a unui element.
Atributele sunt localizate n tag-ul de start al unui element, imediat dup numele ele-
mentului, sunt urmate de =, apoi de valoarea atributului, scris ntre ghilimele sau apos-
trofuri. Dac valoarea unui atribut nu este specificat ntre ghilimele va fi semnalat o
eroare, la fel ca i n cazul n care pentru un atribut nu ar fi ataat i valoarea acestuia.
Pentru un element pot exista oricte atribute, specificate n orice ordine, att timp ct
sunt declarate corect.
Pentru exemplul dat mai sus, am specificat unitatea de msur kilogram prin valoa-
rea kg a atributului umasociat elementului <cant i t >.
Referinele la entiti constituie de fapt pointeri ctre entiti. n XML, entitile repre-
zint uniti de text, unde o astfel de unitate poate desemna orice, de la un singur caracter
la un ntreg document sau chiar o referin la un alt document. O referin la o entitate
prezint construcia sintactic &nume_entitate; (caracterul &, urmat de numele enti-
tii, apoi de caracterul ; ). Una dintre cele mai frecvente utilizri ale referinelor la enti-
ti este atunci cnd se dorete folosirea unor caractere care ar conduce la erori de proce-
sare i deci care nu ar trebui s apar n forma lor normal n text (de exemplu, pentru a
genera simbolul < vom folosi &l t ; ). n momentul n care se ntlnete referina la o
entitate n document, aceasta se va substitui cu datele pe care le refer i se va returna
documentul cu nlocuirile fcute.
Ocazional, anumite pri ale documentului necesit un tratament special n ceea ce pri-
vete modul de procesare. Astfel, exist posibilitatea folosirii seciunii CDATA (character
data), cu rolul de inhibare a prelucrrii construciilor XML. Seciunile CDATA pot fi inse-
rate oriunde pot aprea i datele de tip caracter. Ele sunt utilizate pentru a include blocuri
de text coninnd caractere care altfel ar fi recunoscute ca marcaje. Acest aspect devine
important atunci cnd documentul include, de exemplu, linii de cod-surs scrise ntr-un
limbaj de programare care are propriile convenii sintactice.
Sintaxa general a seciunii CDATA are forma <! [ CDATA[ . . . ] ] >. Seciunile
CDATA nu pot fi incluse unele n altele.


35
Sabin Corneliu Buraga Tehnologii Web
Un exemplu este urmtorul:
<achi zi t i i >
<t i p>Por t ocal e gr ecet i f r coaj </ t i p>
<obs><! [ CDATA[
Cant i t at ea t r ebui e s f i e >2000.
] ] ></ obs>
</ achi zi t i i >
Instruciunile de procesare reprezint un tip special de marcaj care conine informaii
privitoare anumite aplicaii ce urmeaz a fi executate pentru procesarea coninutului. Un
exemplu este instruciunea de procesare care permite ataarea de foi de stiluri documen-
telor XML n vederea redrii coninutului acestora:
<?xml - st yl esheet hr ef =" xml 2ht ml . xsl " t ype=" t ext / xsl " ?>

36
Sabin Corneliu Buraga Tehnologii Web
4. Membrii constitueni ai familiei XML
Limbajul XML ofer mai mult dect o sintax comod pentru reprezentarea datelor
structurate sau semi-structurate. XML consist dintr-o familie de limbaje bazate pe XML
pentru reprezentarea datelor i relaiilor dintre ele.
Aceast familie de limbaje, menite a adapta conceptele curente de stocare, modelare i
publicare pe Web a datelor, este compus din:
XML (Extensible Markup Language) subset al specificaiei SGML, conceput pen-
tru o implementare mai uoar. Modalitile de validare sunt concretizate, uzual,
de schemele XML, complementare DTD-urilor;
XLL (Extensible Linking Language) oferind suport pentru specificarea de legturi
hipertext, concretizat n dou componente majore:
XLink conceput pentru descrierea legturilor (simple sau multiple) din-
tre resursele Web;
XPointer are ca scop precizarea n manier extensibil a unor scheme de
adresare a datelor XML;
XSL (Extensible Stylesheet Language) permite transformarea documentelor XML
n alte tipuri de documente (XML, XHTML sau altele) i ataarea unor obiecte de
formatare, n vederea redrii coninutului XML n formate precum PDF (Portable
Document Format);
XQuery mpreun cu limbajul XPath, ofer posibilitatea interogrii documente-
lor XML.
Pentru alte detalii, putei consulta lucrarea S. Buraga, Tehnologii XML,
Polirom, Iai, 2006.
Intuitiv, structura unui document XML complex poate fi mult mai uor neleas
avnd asociat o reprezentare grafic arborescent a se vedea figura de mai jos.

Reprezentarea arborescent a unui document XML

37
Sabin Corneliu Buraga Tehnologii Web
De asemenea, exist o multitudine de aplicaii bazate pe XML, dintre care se pot enu-
mera limbaje pentru:
reprezentarea expresiilor matematice (MathML),
descrierea resurselor Internet (RDF Resource Description Framework) baza pentru
Web-ul semantic,
crearea de ilustraii (coninuturi grafice) vectoriale (SVG Scalable Vector
Graphics);
realizarea de prezentri multimedia sincronizate (SMIL Synchronized Multimedia
Integration Language),
reprezentarea i interschimbarea informaiilor referitoare la afaceri pe Web
(BRML Business Rules Markup Language),
transferul de date n medii mobile (WML Wireless Markup Language),
descrierea serviciilor Web (WSDL Web Services Description Language).
Practic, este imposibil de enumerat toate limbajele bazate pe XML existente la ora ac-
tual, standardizate sau nu. Numeroase limbaje utile, n numr de peste 500, sunt descrise
la adresa http://xml.coverpages.org/.
n ceea ce privete tipurile de instrumente XML, pot fi amintite urmtoarele categorii:
analizoare (procesoare, parsers) XML e.g., Expat, libxml, MSXML,
Xerces;
vizualizatoare i editoare structurale Firefox, Open Office, oXygen,
Stylus, XML Spy, XMLStarlet i multe 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-text (native XML sau doar
oferind suport pentru XML) dbXML, eXist, Mark Logics CIS, Xindice
etc.;
aplicaii hipertext Annotea, Hyperwave;
biblioteci/sisteme de procesare a meta-datelor Carp and Spiral, Dri-
ve.NET, Jena, Redland i altele;
instrumente de modelare conceptual pOWL, Protg, SWOOP etc.;
aplicaii din domeniul social (blog-uri, portaluri, wiki-uri, adnotatoare de
coninut, managere de notie i adrese personale etc.) Connotea,
del.icio.us, Furl, Spurl.net etc.

38
Sabin Corneliu Buraga Tehnologii Web
Exemple
Documentele XML pot stoca informaii structurate sau semi-structurate care ulterior se
pot prelucra ntr-o manier comod.
Astfel, o baz de date simpl poate fi memorat ca fiier XML astfel (desigur, aceast
abordare nu este unic):
<t abel a>
<i nr egi st r ar e i d=" 0001" >
<camp1 t i p=" numar " >val oar ea 1- 1</ camp1>
<camp2 t i p=" car act er " >val oar ea 1- 2</ camp2>
<! - - mai mul t e cmpur i - - >
</ i nr egi st r ar e>
<i nr egi st r ar e i d=" 0002" >
<camp1 t i p=" numar " >val oar ea 2- 1</ camp1>
<camp2 t i p=" car act er " >val oar ea 2- 2</ camp2>
</ i nr egi st r ar e>
<! - - mai mul t e nr egi st r r i - - >
</ t abel a>
La fel, documentele XML pot fi utilizate cu succes ca fiiere de configuraie pentru di-
verse aplicaii:
<conf i g l ogdi r =" / var / l og/ app/ "
debugf i l e=" / t mp/ app. debug" >
<ser ver name=" odi n" osname=" sol ar i s"
osver si on=" 2. 6" >
<addr ess>193. 30. 121. 101</ addr ess>
</ ser ver >
<ser ver name=" f enr i r " osname=" l i nux"
osver si on=" 2. 4. 2" >
<addr ess>193. 30. 121. 197</ addr ess>
</ ser ver >
<ser ver name=" t hor " osname=" l i nux"
osver si on=" 2. 4. 2" >
<addr ess>193. 30. 121. 224</ addr ess>
<addr ess>193. 30. 121. 225</ addr ess>
</ ser ver >
</ conf i g>
Un alt exemplu privete stocarea informaiilor referitoare la cuprinsul unei cri:
<?xml ver si on=" 1. 0" ?>
<! - - Un al t exempl u de mar car e a dat el or i n XML
( un cupr i ns de car t e)
- - >
<?xml - st yl esheet hr ef =" cupr i ns. xsl " t ype=" t ext / xsl " ?>

39
Sabin Corneliu Buraga Tehnologii Web
<cupr i ns t i t l u=" Si t ur i Web l a chei e. Sol ut i i pr of esi onal e de i mpl e-
ment ar e" edi t ur a=" Pol i r om" an=" 2004" >
<capi t ol >
<nume>Pr ef at a</ nume>
<aut or >Sabi n Bur aga</ aut or >
</ capi t ol >
<capi t ol >
<nume>Por t al ur i educat i onal e</ nume>
<aut or >Bogdan Manol ache</ aut or >
<descr i er e>Capi t ol ul de f at a i ncepe cu o pr ezent ar e gener al a a
por t al ur i l or , ur mat a de o i ncur si une i n l umea por t al ur i l or
educat i onal e. </ descr i er e>
</ capi t ol >
<capi t ol >
<nume>Model ar ea si r epr ezent ar ea r el at i i l or i nt r e t abel e</ nume>
<aut or >Sor i n Bahmat a</ aut or >
<descr i er e>Apl i cat i a Dat aR r epr ezi nt a un si t Web dezvol t at i n
l i mbaj ul PHP ce of er a posi bi l i t at ea de a model a si r epr ezent a
met adat el e asoci at e st r uct ur i i bazel or de dat e r el at i onal e ( mai
exact , a bazel or de dat e MySQL) , ai ci i ncl uzand si det al i i despr e
r el at i i l e i nt r e t abel e. </ descr i er e>
</ capi t ol >
<capi t ol >
<nume>Fi ndMyHome, sol ut i e e- busi ness i n domeni ul i mobi l i ar </ nume>
<aut or >Vi or el At of ani </ aut or >
<descr i er e>Capi t ol ul de f at a pr ezi nt a o pr i vi r e de ansambl u asu-
pr a unei i dei de af acer i on- l i ne, pr i n det al i er ea unei sol ut i i pr ac-
t i ce de e- busi ness, r epr ezent at a de un por t al Web i n domeni ul i mobi -
l i ar . </ descr i er e>
</ capi t ol >
</ cupr i ns>

40
Sabin Corneliu Buraga Tehnologii Web
5. Spaiile de nume XML
n unele situaii pot aprea confuzii, atunci cnd se folosesc date provenite din diverse
surse (documente) XML care pot avea elemente/atribute cu acelai nume, dar cu semni-
ficaii (semantici) diferite. Pentru evitarea acestor ambiguiti sunt folosite spaiile de nu-
me, astfel nct numele de elemente i/sau atribute vor fi identificate n mod unic,
evitndu-se conflictele.
Necesitatea folosirii spaiilor de nume se poate remarca din exemplul urmtor, n care
considerm dou documente XML, primul cu informaii despre partenerii de afaceri, al
doilea despre numele furnizorilor de portocale:
<! - - par t ener i de af acer i - - >
<par t ener i >
<par t ener >
<nume>Por t ocal Escu</ nume>
<adr esa>Al eea Zpezi l or , 33</ adr esa>
</ par t ener >
. . .
</ par t ener i >

<! - - f ur ni zor i - - >
<f ur ni zor i >
<f ur ni zor adr esa=" ht t p: / / j a. po. r o/ " >
<nume>J apo Nez S. A. </ nume>
</ f ur ni zor >
. . .
</ f ur ni zor i >
Documentul care le utilizeaz pe precedentele i folosete spaii de nume pentru evita-
rea ambiguitilor (nume reprezint un nume de persoan sau un nume de companie?;
idem pentru adres) ar putea fi urmtorul:
<comanda xml ns: p=" ht t p: / / www. undeva. r o/ par t ener i / " >
<par t ener >
<p: nume>Por t ocal Escu</ p: nume>
<p: adr esa>Al eea Zpezi l or , 33</ p: adr esa>
</ par t ener >
<f : f ur ni zor xml ns: f =" ur n: f ur ni zor i . i nf o"
f : adr esa=" ht t p: / / j a. po. r o/ " >
<nume>J apo Nez S. A. </ nume>
</ f : f ur ni zor >
</ comanda>
Atributul xml ns este folosit pentru declararea spaiilor de nume, iar valoarea lui trebuie
s fie un URI, fie localiznd o resurs prin adresa ei cazul URL (Uniform Resource Loca-
tor), fie desemnnd un nume unic asociat resursei n cauz facilitate oferit de URN
(Uniform Resource Name).
Prin intermediul construciei xml ns, se asociaz un vocabular, denumit i spaiu de nume
(namespace), pentru elementele n cauz.

41
Sabin Corneliu Buraga Tehnologii Web
n cele ce urmeaz, vom furniza un exemplu complet, n care se vor folosi mai multe
vocabulare, fiecare desemnat de un spaiu de nume XML. Documentul servete pentru
stocarea rezultatelor unui chestionar anonim privitor la desfurarea unui curs (se poate
observa i utilizarea referinelor la entiti, plus a atributelor speciale xml : i d i
xml : l ang).
<f eedback xml ns=" ur n: i nf oi asi . r o: busaco: f eedbacks"
xml ns: r df =" ht t p: / / www. w3. or g/ 1999/ 02/ 22- r df - synt ax- ns#"
t ype=" r esul t s" xml : i d=" f eedback1- 2005" ver si on=" 0. 1" >
<met a>
<aut hor ur i =" ht t p: / / www. i nf oi asi . r o/ ~busaco/ " >
Sabi n- Cor nel i u Bur aga</ aut hor >
</ met a>
<i ssue xml : i d=" i 2" >
<quest i on xml : l ang=" r o" >
Car e di nt r e aspect el e pr opuse spr e expuner e
v st r nesc cel mai mul t i nt er esul ?
</ quest i on>
<r esponse xml : l ang=" r o" >
<r df : Seq>
<r df : l i >Baze de dat e nat i ve XML
&amp; XQuer y</ r df : l i >
<r df : l i >Cooki e- ur i &amp; sesi uni </ r df : l i >
</ r df : Seq>
</ r esponse>
</ i ssue>
<i ssue xml : i d=" i 3" >
<quest i on xml : l ang=" r o" >
Ce al t e subi ect e ai dor i s f i e pr ezent at e?
</ quest i on>
<r esponse xml : l ang=" r o" >
<r df : Seq>
<r df : l i >Tehnol ogi i WAP</ r df : l i >
<r df : l i >Ani mai i pent r u Web</ r df : l i >
<r df : l i >E- busi ness</ r df : l i >
</ r df : Seq>
</ r esponse>
</ i ssue>
</ f eedback>

42
Sabin Corneliu Buraga Tehnologii Web
6. Validarea documentelor XML
Punerea problemei
O prim necesitate n cazul adoptrii tehnologiei XML este aceea ca informaiile marcate
n XML s poat fi regsite, reutilizate i partajate ntre diverse aplicaii. Astfel, o cerin
important este de a cunoate:
setul de elemente/atribute ce pot fi specificate;
modul lor de structurare (e.g., ordinea, numrul minim/maxim de apariii, contex-
tul etc.);
tipul coninutului (de exemplu, cantitatea de portocale s reprezinte un numr na-
tural, aparinnd intervalului [0, 7433]);
ce anume este valid i ce reprezint eroare.
Soluia este aceea ca un grup sau grupuri de indivizi (precum o companie, o industrie,
persoane, productori de instrumente software specifice sau un consoriu) s specifice
mulimea de elemente i atribute permise i regulile de marcare, adic tocmai modelul
structural amintit mai sus.
Modelul structural se aplic unei clase de documente XML, n vederea verificrii via
un analizor (numit i procesor sau parser) a corectitudinii instanelor de documente apar-
innd acelei clase. Se au n vedere aspecte privind:
modul de numire a elementelor/atributelor;
definirea regulilor de utilizare a acestora;
specificarea structurii i coninutului;
precizarea anumitor constrngeri;
oferirea unui set de convenii de numire.
Apare, aadar, necesitatea specificrii unui set de constrngeri asociate documentelor,
astfel nct datele XML s fie verificate dac sunt valide sau nu din punct de vedere struc-
tural sau al tipului coninutului.
Modalitile de precizare a constrngerilor se pot baza pe: descrieri (DTD i XML
Schema), reguli (Sablotron) i abloane (RELAX NG) detalii n cartea Sabin Buraga, Teh-
nologii XML, Polirom, Iai, 2006.

43
Sabin Corneliu Buraga Tehnologii Web
Declaraia tipului de document. Validri via DTD
Declaraia tipului de document reprezint un marcaj special care poate fi inclus n documente-
le XML cu rolul de a specifica existena i locaia definiiei tipului de document (DTD
Document Type Definition). Declaraia tipului de document i definiia tipului de document
sunt noiuni diferite. DTD-ul nsumeaz un set de reguli formale care definesc structura
unui document XML, spre deosebire de declaraia tipului de document care are rolul de a
indica analizorului ce DTD trebuie s foloseasc pentru verificare i validare. DTD-urile
sunt o reminiscen a SGML-ului i n prezent tind a fi nlocuite de schemele XML.
Pentru a putea fi procesate, documentele XML trebuie s fie mcar documente bine
formatate.
Documentele bine formatate sunt documentele corecte din punct de vedere sin-
tactic.
Spre deosebire de HTML, XML este mai strict n ceea ce privete sintaxa. Regulile care
trebuie respectate pentru ca un document s fie bine formatat sunt:
Fa de HTML i SGML, XML este case sensitive. Greelile de scriere a elemen-
telor i atributelor sunt destul de greu de detectat, mai ales cnd nu se folosete
un editor XML specializat.
Fiecare tag deschis trebuie nchis, n caz contrar analizorul XML va semnala
eroare.
Primul tag deschis trebuie s fie ultimul care este nchis. Tag-urile trebuie nchi-
se exact n ordinea invers a deschiderii lor, altfel va fi semnalat eroare (con-
strucia <cl i ent ><adr esa>. . . </ cl i ent ></ adr esa>este incorect).
Nu sunt acceptate elementele vide. Dup cum am vzut deja, elementele vide
au sintaxa modificat: <el ement / >.
Un document XML valid este acel document bine formatat a crui structur este
conform cu DTD-ul ataat (pot fi valide doar documentele care au ataat un
DTD).
Un analizor XML efectueaz dou nivele de verificare a unui document XML. Dup
verificarea corectitudinii sintactice, analizorul poate verifica dac documentul este con-
form setului de reguli specificate de DTD-ul ataat. Dac sunt respectate aceste reguli,
atunci spunem despre documentul XML c este valid. Procesul de verificare dac un do-
cument este valid se numete validare.
Sintaxa declaraiei tipului de document difer n funcie de tipul DTD-ului: intern sau
extern.

44
Sabin Corneliu Buraga Tehnologii Web
DTD-ul intern se declar imediat dup declaraia XML sau, dac aceast declaraie nu
exist, el va fi primul element exceptnd comentariile, spaiile de nume sau instruciunile
de procesare. DTD-ul intern se declar utiliznd cuvntul cheie DOCTYPE n modul
urmtor:
<! DOCTYPE el ement _r dci n [
decl ar ai i de el ement e
decl ar ai i de at r i but e
decl ar ai i de ent i t i ,
decl ar ai i de i nst r uci uni de pr ocesar e
decl ar ai i de not ai i
] >
DTD-ul extern este definit ntr-un alt fiier text care trebuie s se afle la o adres speci-
ficat. Declaraia este asemntoare, dar intervin cuvintele cheie SYSTEM sau PUBLIC:
<! DOCTYPE col egi
SYSTEM " ht t p: / / undeva. r o/ col egi . dt d" >
<! DOCTYPE col egi
PUBLI C " par t ener i " " ht t p: / / undeva. r o/ col egi . dt d" >
Fiierul col egi . dt d aflat la adresa specificat n declaraie conine definiiile elemen-
telor care vor apare n document. Elementul <col egi >trebuie s apar n DTD-ul speci-
ficat.
Un exemplu de document DTD este furnizat n continuare:
<! - - DTD def i ni nd t i pul de document ' cupr i ns' - - >
<! ELEMENT cupr i ns ( coor donat or ?, capi t ol +) >
<! ELEMENT coor donat or ANY>
<! ELEMENT capi t ol ( nume, aut or *, descr i er e?) >
<! ELEMENT nume ( #PCDATA) >
<! ELEMENT aut or ( #PCDATA) >
<! ELEMENT descr i er e ( #PCDATA) >

<! - - decl ar ar ea unei ent i t at i
( cu ut i l i zar ea ent i t at i l or pr edef i ni t e) - - >
<! ENTI TY busaco " Sabi n Bur aga &l t ; busaco@i nf oi asi . r o&gt ; " >

<! ATTLI ST cupr i ns
t i t l u CDATA #REQUI RED
edi t ur a CDATA #I MPLI ED
an ( 2004| 2005) " 2004"
>
<! ATTLI ST capi t ol
numar CDATA #REQUI RED
>
<! ATTLI ST aut or
emai l CDATA #I MPLI ED
>
Se observ definirea elementelor cuprins, coordonator, capitol, nume, autor i descrie-
re. Elementul cuprins (care e element rdcin) va putea cuprinde elementele coordona-
tor (apariia acestuia e opional, aspect indicat de ?) i capitol (operatorul + indic
mcar o singur apariie). Elementele vor aprea n secven, lucru specificat de caracterul
virgul. Elementul capitol va putea include elementele nume, autor i descriere. Elemen-

45
Sabin Corneliu Buraga Tehnologii Web
tul autor poate aprea de 0, 1 sau mai multe ori, deoarece a fost specificat operatorul *.
Coninuturile elementelor nume, autor i descriere sunt iruri de caractere (indicate de
#PCDATA), iar coninutul elementului coordonator poate fi oricare (s-a folosit ANY).
Pentru elementul cuprins se specific lista de atribute titlu, editura i anul. Atributul titlu
are drept valoare un ir de caractere (CDATA) i e obligatoriu (#REQUIRED), pe cnd
atributul editura este opional (#IMPLIED). Atributul an are drept valori o enumerare de
valori, implicit fiind considerat valoarea 2004. Similar i pentru celelalte.
Se specific i o entitate (numit busaco) care cuprinde un ir de caractere.
Documentul XML care trebuie validat conform acestui DTD va putea fi urmtorul:
<! DOCTYPE cupr i ns SYSTEM " cupr i ns. dt d" >
<! - - pent r u val i dar e se f ol osest e un DTD ext er n - - >
<cupr i ns
t i t l u=" Apl i cat i i Web l a chei e. St udi i de caz i mpl ement at e i n PHP"
edi t ur a=" Pol i r om" an=" 2003" >
<coor donat or >&busaco; </ coor donat or >
<capi t ol numar =" 4" >
<nume>E- Pi zza - de l a br owser l a WAP</ nume>
<aut or emai l =" angel @i nf oi asi . r o" >Cr i st i an Neghi t a</ aut or >
<aut or >Mar i us Ropot a</ aut or >
<aut or >I avi Rot ber g</ aut or >
<descr i er e>Apl i cat i a E- Pi zza est e o sol ut i e compl et a pent r u
management ul i nf or mat i i l or r ef er i t oar e l a act i vi t at ea unei pi zzer i i ,
i ncl uzand comandar ea on- l i ne de pr oduse, r ezer var ea de mese i n
r est aur ant si admi ni st r ar ea f aci l a pr i n i nt er medi ul unei i nt er f et e
Web. De asemenea, se descr i e si o sol ut i e de accesar e - vi a
di spozi t i ve WAP - a si t ul ui , ut i l i zandu- se l i mbaj ul WML. </ descr i er e>
</ capi t ol >
<capi t ol numar =" 7" >
<nume>Accesul l a baze de dat e pr i n ser vi ci i Web</ nume>
<aut or >Si l vana Sol omon</ aut or >
<descr i er e>Acest capi t ol pr ezi nt a pr i nci pal el e t r asat ur i al e
pr ot ocol ul ui XML- RPC, pr i n car e e posi bi l a apel ar ea de pr ocedur i l a
di st ant a, mesaj el e schi mbat e f i i nd scr i se i n f or mat XML, i n veder ea
i mpl ement ar i i de ser vi ci i Web bazat e pe XML. Exempl i f i camut i l i zar ea
t ehnol ogi ei XML- RPC pent r u gest i unea unei baze de dat e Web i ndi f er ent
de pl at f or mel e f ol osi t e. </ descr i er e>
</ capi t ol >
</ cupr i ns>

46
Sabin Corneliu Buraga Tehnologii Web

Verificarea validitii unui document XML
n cadrul editorului Kate oferit de mediul KDE sub Linux
Descriere succint a XML Schema
XML Schema, recomandare oficial a Consoriului Web, este una dintre cele mai utilizate
i versatile maniere de validare a documentelor XML. n cele ce urmeaz, vom prezenta
cele mai importante aspecte referitoare la aceasta.

47
Sabin Corneliu Buraga Tehnologii Web
O schem reprezint o specificaie formal a gramaticii asociate unui document
XML i reprezint, n fapt, tot un document XML stocat ntr-un fiier avnd ex-
tensia .xsd (XML Schema Definition). O schem XML definete o clas de documente
XML conformndu-se unui model structural, suplimentar specificnd un sistem
de tipuri de date. Pentru a putea fi verificat validitatea, o instan a unei clase de
documente XML trebuie s aib asociat o schem XML.
Aceste aspecte sunt asemntoare celor de la paradigma orientat-obiect.
O schem va specifica modul de apariie i tipurile de date pe care le pot lua valorile
construciilor XML. Rezultatul obinut n urma unei validri ncununate cu succes este
numit i PSVI (Post-Schema Validation Infoset).
Schemele XML sunt utilizate n multe contexte/domenii, dintre care le enumerm pe
urmtoarele:
verificarea tipurilor de date n contextul sistemelor de baze de date (relaionale), al
mainilor virtuale (CLR, JVM) etc.;
serializarea automat a datelor;
invocarea la distan a metodelor (RMI Remote Method Invocation, SOAP Simple
Object Access Protocol);
generarea de cod-surs;
implementarea de editoare inteligente;
crearea validatoarelor generale de date (e.g., validarea formularelor electronice).
Construciile XML Schema trebuie s aparin spaiului de nume indicat de adresa
http://www.w3.org/2001/XMLSchema. Atributele privitoare la scheme ce apar n cadrul
unei instane a unei clase de documente vor proveni din spaiul de nume specificat de
http://www.w3.org/2001/XMLSchema-instance.
Un document XML Schema are ca element-rdcin <xsd: schema>. Definirea sau
instanierea unui element se realizeaz via <xsd: el ement >, iar n cazul unui atribut prin
<xsd: at t r i but e>.
Asemntor definirii unor tipuri de date i variabile ntr-un limbaj de programare, ntr-
o schem XML fiecare instan de element trebuie s aparin unei clase (tip) de elemen-
te. Un element/atribut va avea valori permise ce aparin unui tip de date (simplu sau
complex), specificat prin <xsd: Si mpl eType>i, respectiv, <xsd: Compl exType>.
Tipurile simple, predefinite ori derivate din cele predefinite, descriu coninutul datelor
textuale. n acest caz, nu se permite ca un element s includ alte elemente i nici s aib

48
Sabin Corneliu Buraga Tehnologii Web
asociate atribute. Tipurile simple pot fi folosite i pentru specificarea coninutului atribu-
telor.
Tipurile complexe descriu datele (semi)structurate. n acest caz, se accept ca elemen-
tele s includ alte elemente (via reguli de apariie) i s aib asociate atribute. Elementele
de tip complex vor putea conine:
declaraii de elemente, prin intermediul construciei <el ement name=" nume"
t ype=" tip" / >;
referine la elemente apriori definite: <el ement r ef =" nume" re-
guli_aparitie=" valori" / >;
declaraii de atribute via <at t r i but e name=" nume" t ype=" tip" / >.
Tipurile complexe nu pot fi folosite n contextul stabilirii tipului valorilor atributelor
XML.
Consoriul Web a pus la dispoziie o palet larg de tipuri predefinite (primitive i de-
rivate). Cele mai utilizate sunt enumerate n continuare:
numerice: byte, unsignedByte, integer, positiveInteger, negativeInteger, int, long,
decimal, float, double i altele;
logice: boolean;
privitoare la dat i timp: time, dateTime, duration, date, gYear, gMonth, gDay
etc.;
iruri de caractere: string, token i altele;
adrese Web: anyURI.
Putem defini tipuri simple derivate din cele predefinite via <xsd: si mpl eType>. Noul
tip de date specificat poate fi o restricie a unui tip deja existent prin intermediul unor
constrngeri (facets). Prin intermediul constrngerilor pot fi precizate aspecte precum:
lungimea: <xsd: l engt h>;
lungimea minim: <xsd: mi nLengt h>;
lungimea maxim: <xsd: maxLengt h>;
un model (pattern), exprimat printr-o expresie regulat: <xsd: pat t er n>.
De asemenea, putem recurge la precizarea unei liste de valori (via
<xsd: enumer at i on>) ce va forma tipul sau a unui interval de valori (construciile
<xsd: mi nI ncl usi ve>, <xsd: maxI ncl usi ve>, <xsd: mi nExcl usi ve> i
<xsd: maxExcl usi ve>).

49
Sabin Corneliu Buraga Tehnologii Web
Tipurile simple noi vor fi folosite s descrie valorile elementelor/atributelor, ataarea
acestora unor construcii XML putnd avea loc fie n cadrul schemei la declararea unui
element, fie n cadrul instanei via atributul xsi : t ype.
De asemenea, vom putea preciza urmtoarele (simbolul | semnific o alternativ):
reguli (restricii) de aparitie a unei instane de element: numrul minim de apariii
(mi nOccur s=" numr " ) i/sau numrul maxim de apariii (maxOccur s=" numr
| unbounded" );
reguli de apariie a unui atribut (obligatoriu, opional sau interzis):
use=" r equi r ed | opt i onal | pr ohi bi t ed" ;
valoarea predefinit a unui atribut via def aul t ;
valori particulare pentru elemente sau atribute: f i xed.
De reinut c tipurile simple pot fi utilizate doar pentru a descrie date-caracter. n ve-
derea definirii structurii unui document, se recurge la <xsd: compl exType>. Un tip com-
plex poate avea un coninut simplu (<xsd: si mpl eCont ent >) sau unul complex.
Coninutul simplu nseamn c un element va putea include atribute, extinznd astfel
modelul-coninut. O prim metod este derivarea prin extensie, via elementul
<xsd: ext ensi on>, iar a doua modalitate vizeaz derivarea prin restricie, realizat prin
intermediul constrngerilor (facets). Atributele vor fi definite prin intermediul
<xsd: at t r i but e>, putnd fi declarate global (la nivelul schemei) sau local (n cadrul
unui tip complex). De asemenea, ele pot fi calificate (prefixate de spaiul de nume ales)
sau nu.
Specificarea unui tip cu coninut complex vizeaz definirea listei i ordinii sub-
elementelor i atributelor sale. Coninutul unui element poate fi i mixt (compus din sub-
elemente sau date-caracter): <xsd: compl exType mi xed=" t r ue" >ori vid (nu va conine
dect declaraii de atribute).
Pentru a preciza diverse modele ale coninutului, vom adopta diverse construcii refe-
ritoare la:
alternativ: <xsd: choi ce>;
secven: <xsd: sequence>;
grupare: <xsd: gr oup>;
apariie a tuturor elementelor, n orice ordine: <xsd: al l >.
De menionat i faptul c specificarea unor elemente/atribute generice (ale altor ti-
puri de documente) se realizeaz prin elementele <xsd: any> i <xsd: anyAt t r i but e>.
De asemenea, XML Schema ofer i suport pentru documentare via <xsd: annot at i on>.

50
Sabin Corneliu Buraga Tehnologii Web
n continuare, vom furniza un exemplu de schem XML menit a valida documentul
XML privitor la achiziiile i vnzrile de portocale, menionat mai sus. Structura schemei
este urmtoarea:
<xsd: schema
xml ns: xsd=" ht t p: / / www. w3. or g/ 2001/ XMLSchema"
xml ns=" ur n: por t ocal e. i nf o"
t ar get Namespace=" ur n: por t ocal e. i nf o" >
<xsd: annot at i on>
<xsd: document at i on xml : l ang=" r o" >
O schem ut i l i zat l a val i dar ea
t r anzaci i l or de por t ocal e
</ xsd: document at i on>
</ xsd: annot at i on>

<! - - def i ni r ea el ement ul ui - r dci n " por t ocal e" - - >
<xsd: el ement name=" por t ocal e" t ype=" por t ocal eType" / >
<xsd: compl exType name=" por t ocal eType" >
<! - - o secven de al t er nat i ve - - >
<xsd: sequence maxOccur s=" unbounded" >
<xsd: choi ce>
<! - - mcar o apar i . a el em. " achi zi t i i " - - >
<xsd: el ement name=" achi zi t i i "
t ype=" pr odType"
mi nOccur s=" 1" maxOccur s=" unbounded" / >
<! - - i demi pt . " vanzar i " - - >
<xsd: el ement name=" vanzar i "
t ype=" pr odType"
mi nOccur s=" 1" maxOccur s=" unbounded" / >
</ xsd: choi ce>
<xsd: sequence>
</ xsd: compl exType>

<! - - t i pul compl ex " pr odType" ,
f ol osi t pent r u achi zi i i sau vnzr i - - >
<xsd: compl exType name=" pr odType" >
<xsd: sequence>
<xsd: el ement name=" t i p" t ype=" xsd: st r i ng"
mi nOccur s=" 1" maxOccur s=" 1" / >
<xsd: el ement name=" cod" t ype=" xsd: st r i ng"
mi nOccur s=" 1" maxOccur s=" 1" / >
<! - - el ement ul " obs" e opi onal - - >
<xsd: el ement name=" obs" t ype=" xsd: st r i ng"
mi nOccur s=" 0" maxOccur s=" 1" / >
<xsd: el ement name=" cant i t " >
<xsd: compl exType>
<! - - der i vmdi nt r - un t i p si mpl u - - >
<xsd: si mpl eCont ent >
<xsd: ext ensi on base=" xsd: unsi gnedI nt " >
<! - - speci f . apar i i a ( obl i gat or i e)
a at r i but ul ui " um" - - >
<xsd: at t r i but e name=" um"
t ype=" xsd: st r i ng"
use=" r equi r ed" / >
</ xsd: ext ensi on>
</ xsd: si mpl eCont ent >
</ xsd: compl exType>
</ xsd: el ement >
</ xsd: sequence>
<! - - un i dent i f i cat or opi onal - - >
<xsd: at t r i but e name=" i d" t ype=" xsd: I D"

51
Sabin Corneliu Buraga Tehnologii Web
use=" opt i onal " / >
</ xsd: compl exType>
</ xsd: schema>
Reprezentarea grafic a schemei e disponibil n figura de mai jos.

Reprezentarea generat de editorul <oXygen /> a schemei XML
Mai urmeaz s utilizm schema de mai sus, pentru a verifica validitatea unei instane
de document XML care trebuie s declare un spaiu de nume cu un URI desemnnd
schema utilizat.
La nivel de instan de document, vom folosi o construcie de genul:
<por t ocal e xml ns=" ur n: por t ocal e. i nf o"
xml ns: xsi =
" ht t p: / / www. w3. or g/ 2001/ XMLSchema- i nst ance"
xsi : schemaLocat i on=
" ur n: por t ocal e. i nf o f i l e: por t ocal e. xsd" >
<! - - coni nut pr opr i u- zi s - - >
</ por t ocal e>
Aplicaia <oXygen /> XML Editor amintit mai sus poate fi folosit i ca validator de
documente XML.
n cele de mai jos, ilustrm anumite mesaje de eroare afiate de unul dintre utilitarele
puse la dispoziie de procesorul Apache Xerces disponibil n regin open source n cazul
unui document XML invalid conform schemei descrise anterior:
P: \ xer ces>DOMPrint.exe -v=always -n -s -f portocale.xml
Er r or at f i l e " por t ocal e. xml " , l i ne 7, col umn 21
Message: Unknown el ement ' supl i ment ar '
Er r or at f i l e " por t ocal e. xml " , l i ne 11, col umn 21
Message: I n el ement cod: Can not have el ement chi l dr en wi t hi n a
si mpl e t ype cont ent
Er r or at f i l e " por t ocal e. xml " , l i ne 12, col umn 14
Message: Requi r ed at t r i but e ' um' was not pr ovi ded

52
Sabin Corneliu Buraga Tehnologii Web
Er r or at f i l e " por t ocal e. xml " , l i ne 13, col umn 15
Message: El ement ' supl i ment ar ' i s not val i d f or cont ent model :
' ( ( t i p, cod, obs) , cant i t ) '
Un rezultat aproape similar l obinem utiliznd Microsoft Visual Web Developer pentru
editarea i validarea documentelor XML a se urmri figura alturat.

Semnalarea erorilor de validare a unui document XML n cadrul instrumentului
Visual Web Developer

53
Sabin Corneliu Buraga Tehnologii Web
7. Procesarea documentelor XML
Modelul DOM
Consoriul Web a propus pentru prelucrarea sofisticat a documentelor XML i/sau
HTML un model obiectual denumit DOM (Document Object Model).
Acest model reprezint o interfa de programare a aplicaiilor destinate s prelucreze
documentele HTML i XML, independent de platform i de limbaj, definind structura
logic a documentelor i modalitile de accesare i de modificare a lor.
Structura logic a documentelor este o structur arborescent, documentele fiind mo-
delate utiliznd obiecte. Modelul DOM nu furnizeaz doar o vizualizare structurat a do-
cumentului, ci i o modalitate de specificare a comportamentului lui i a obiectelor com-
ponente. Fiecare element al unui document poate fi privit, aadar, ca un obiect, cu o iden-
titate i propriile sale funcii.
Recomandrile DOM sunt structurate pe mai multe nivele de specificare a modelului.
Nivelul 0 (pentru HTML) a fost nivelul de funcionalitate a versiunilor 3 ale navigatoare-
lor Netscape i Internet Explorer. Nivelul 1 este recomandare standardizat din anul
1998, iar n 2000 a fost standardizat DOM nivelul 2. Parial, nivelul 3 al DOM a fost
publicat ca recomandare oficial n anul 2004 i este n curs de standardizare complet.
DOM nu este o specificaie binar i nu definete nici o form de interoperabilitate la
nivel binar, n contrast cu alte tehnologii, precum CORBA (Common Object Request Broker
Architecture) ori COM (Common Object Model). DOM reprezint un model care specific
interfee i nu este un set de structuri de date (abstracte). De asemenea, nu definete se-
mantica detaliat a documentelor HTML sau XML.
Specificaia DOM reprezint documentele ca o ierarhie de obiecte-nod. Anumite tipuri
de noduri pot avea noduri copii (descendeni) de diverse tipuri. Altele pot fi noduri frun-
z, lipsite de descendeni. Tipurile fundamentale de noduri sunt cele din urmtorul tabel.
Pentru fiecare tip de nod, DOM ofer o interfa care desemneaz constantele, variabi-
lele i metodele ce vor putea fi folosite de programator ntr-o implementare efectiv a
modelului. Exist o serie de interfee fundamentale (e.g., Document, DocumentFragment,
Node, NodeList sau Attr), plus diverse interfee extinse pentru a suporta implementri
avnd n vedere procesarea documentelor HTML ori oferind faciliti adiionale.
n continuare, vom descrie succint o serie dintre interfeele puse la dispoziie.

54
Sabin Corneliu Buraga Tehnologii Web

Tip Descendeni
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
Interfeele DOM
O interfa important este DocumentFragment care poate reprezenta un obiect-
document minimal. Sunt numeroase situaiile n care nu trebuie lucrat cu ntregul docu-
ment, ci doar cu diverse fragmente ale sale. Arborele de noduri ale unui fragment de do-
cument este un sub-arbore al structurii de noduri a documentului luat n ntregul lui. n
funcie de necesiti, DocumentFragment poate reprezenta o entitate XML, un element
XML sau chiar un grup de elemente.
Interfaa Document reprezint un document XML, conceptual desemnnd rdcina ar-
borelui de noduri-obiecte ale documentului i oferind accesul la informaiile coninute de
acesta. Din moment ce elementele (marcatorii), nodurile de tip text, comentariile, instruc-
iunile de procesare nu pot exista n afara contextului unui document, interfaa Document
conine de asemenea metodele necesare pentru a crea aceste categorii de obiecte.
Interfaa Document are ca membri trei atribute:
i. doct ype reprezint declaraia tipului de document (DTD) asociat unui
document particular.
ii. i mpl ement at i on specific implementarea sau implementrile disponibile
pentru procesarea documentului.

55
Sabin Corneliu Buraga Tehnologii Web
iii. document El ement (de tip Element) desemneaz nodul-rdcin de acce-
sare a structurii arborescente a documentului.
Menionm urmtoarele metode importante:
cr eat eEl ement ( ) creeaz un element XML;
cr eat eText Node( ) , cr eat eComment ( ) , cr eat eCDATASect i on( ) ,
cr eat ePr ocessi ngI nst r uct i on( ) vor genera noduri-obiect de tip text, co-
mentariu, seciune CDATA, instruciune de procesare, respectiv;
cr eat eAt t r i but e( ) creeaz un obiect atribut care va fi asociat unui element
specificat;
get El ement ByI d( ) va ntoarce elementul al crui atribut id se potrivete cu cel
furnizat ca argument al acestei metode (n acest mod poate fi selectat exact un
anumit element, tiind c identificatorul asociat trebuie s fie unic);
get El ement sByTagName( ) va returna o list ordonat de noduri NodeList pen-
tru toate elementele corespunztoare unui tag, ordonarea nodurilor realizndu-se
prin parcurgerea n pre-ordine a arborelui;
Interfaa Node definete un tip primar pentru ntregul model DOM, reprezentnd un
anumit nod n cadrul arborelui asociat unui document. Atributele nodeName, nodeVal ue
i at t r i but es sunt introduse ca mecanism pentru furnizarea informaiilor despre noduri
fr conversie de tipuri (vizualizare simplificat, nu una orientat-obiect). Fiecare
nod va avea asociat o list ordonat coninnd descendenii si, plus atribute specificnd
nodul printe, primul i ultimul nod copil, dac exist.
Ca metode prezentnd interes se pot meniona cele care manipuleaz nodurile copil:
i nser t Bef or e( ) permite inserarea unui nod naintea celui curent;
r epl aceChi l d( ) substituie un nod-copil;
r emoveChi l d( ) elimin un nod-copil specificat;
appendChi l d( ) adaug un alt nod-copil;
cl oneChi l d( ) cloneaz un anumit nod-copil;
hasChi l dNodes( ) ntoarce true dac exist noduri-copil;
hasAt t r i but es( ) ntoarce true dac nodul are atribute (metod introdus n
DOM nivelul 2);
i sSameNode( ) ntoarce true dac nodul curent e identic cu un altul specificat
(metod oferit de DOM nivelul 3).

56
Sabin Corneliu Buraga Tehnologii Web
Interfaa NodeList reprezint o interfa care ofer un tip abstract de dat pentru co-
leciile ordonate de noduri, fr a defini sau restriciona cum va fi implementat efectiv
aceast colecie. Fiecare implementator va decide ce tipuri de date concrete vor fi utiliza-
te. Membrii coleciei se vor accesa via metoda i t em( ) pe baza unui index ntreg, nume-
rotarea nodurilor ncepnd cu valoarea 0.
Interfaa NamedNodeMap este folosit pentru reprezentarea abstract a coleciilor ne-
ordonate de noduri, prelucrate prin intermediul numelui. Interfaa NamedNodeMap nu
deriv din NodeList.
Interfaa Attr modeleaz un atribut din cadrul unui obiect de tip Element. Tipic, valo-
rile permise ale atributelor sunt definite n schema XML corespunztoare documentului.
Un obiect Attr nu se consider c aparine arborelui de noduri-obiect al documentului.
Nodurile de tip Attr sunt considerate proprieti ale elementelor (marcatorilor), putnd fi
asociate nodurilor Element coninute de obiecte de tip DocumentFragment.
Interfaa Element deriv din Node i ofer metode de accesare a obiectelor Attr, prin
nume sau prin valoare: get At t r i but e( ) , set At t r i but e( ) , r emoveAt t r i but e( ) ,
get At t r i but eNode( ) , set At t r i but eNode( ) , r emoveAt t r i but eNode( ) .
Interfaa Text este o interfa reprezentnd coninutul textual (date de tip iruri de ca-
ractere) al unui nod Element sau Attr. Dac ntre tag-urile de nceput i de sfrit nu exist
ali marcatori, atunci textul va fi stocat ntr-un obiect implementnd interfaa Text.
n prezent, exist implementri complete pentru DOM nivelurile 1 i 2 n majori-
tatea limbajelor de programare actuale (C/C++, C#, Java, JavaScript, Perl, Python etc.).
Drept exemple notabile de biblioteci i interfee de programare disponibile n diverse
limbaje pot fi enumerate JAXP (Java API for XML Parsing), JDOM, libxml,
MSXML.NET, QDOM, Xerces DOM API i XML::DOM.
Inspectarea arborelui DOM se poate realiza direct n navigatorul Mozilla Firefox, via
componentei DOM Inspector. O captur-ecran edificatoare este dat mai jos.

57
Sabin Corneliu Buraga Tehnologii Web

Folosirea componentei DOM Inspector pentru vizualizarea arborelui DOM
asociat unui document XHTML
O serie de exemple de manipulare prin DOM a documentelor XML vor fi furnizate pe
parcursul acestei lucrri.
Procesarea XML prin SAX
Pentru documente de dimensiuni mari, modelul DOM este ineficient, deoarece nainte de
a se realiza prelucrarea, documentul respectiv trebuie ncrcat complet n memorie. Ca
alternativ la implementrile DOM, exist o interfa simpl de programare destinat ma-
nipulrii documentelor XML, ns nu att de complet precum DOM. Aceast interfa
este denumit SAX (Simple API for XML).
Majoritatea celor care se ocup de prelucrarea documentelor XML vd structura unui
document n form arborescent, iar modelul DOM ofer din plin posibilitatea de a ma-
nipula informaiile n aceast manier. Din punctul de vedere al implementatorilor, aceas-
t abordare are numeroase deficiene (maniera de stocare intern a arborelui de obiecte,
parcurgerea lui etc.). Unul dintre beneficiile utilizrii interfeei SAX este c arborele nu
mai trebuie construit, dndu-i-se programatorului o alt cale de analiz a documentului

58
Sabin Corneliu Buraga Tehnologii Web
XML. Mai mult, SAX poate ajuta la convertirea datelor din formatul arborescent DOM
n alt format mai comod, iar pentru procesare nu este necesar a se memora ntreaga in-
formaie XML, ci numai prile dorite.
Interfaa SAX reprezint un efort independent de Consoriul Web de standardizare a
procesrii XML condus de evenimente. n acest moment, SAX este acceptat ca standard
industrial, fiind folosit pe scar larg n multe aplicaii, dar nu trebuie privit ca o nlocuire
a modelului DOM, ci drept o abordare complementar.
Actualmente, sunt disponibile dou versiuni ale specificaiilor SAX: varianta 1.0 i vari-
anta 2.0, mai complex, oferind suport pentru spaii de nume i extensii. Mai multe detalii
la www.saxproject.org.
n esen, dup iniierea ncrcrii coninutului documentului XML dorit a fi procesat,
pentru fiecare tip de construcie XML sintactic (nceput de tag, sfrit de tag, coninut
(text), instruciune de procesare, comentariu etc.) se va aprinde un eveniment care va fi
tratat de o funcie sau metod (handler). Funciile (metodele) de tratare se specific de c-
tre programator, pentru fiecare tip de construcie XML n parte.
Astfel, programul consum i trateaz evenimente produse de procesorul SAX folosit.
Minimal, trebuie definite urmtoarele funcii/metode:
trateaz_tag_nceput ( procesor, elem, atrib) va fi apelat la apariia
unui tag de nceput i are drept parametri procesorul XML folosit, numele ele-
mentului corespunztor tag-ului i lista de atribute ale acestuia (dac exist);
trateaz_tag_sfrit ( procesor, elem) va fi invocat la apariia unui
tag de final, argumentele avnd semnificaiile de mai sus;
trateaz_date_caracter ( procesor, date) va fi apelat la apariia unor
date caracter (coninut propriu-zis aflat ntre marcatorii de nceput i sfrit).
Mai rmne s atam pentru fiecare eveniment de apariie a tag-ului de nceput, a tag-
ului de sfrit i a datelor-coninut funciile de tratare descrise anterior. SAX ofer pentru
aceasta dou funcii/metode de forma:
set _el ement _handl er ( trateaz_tag_nceput, tratea-
z_tag_sfrit)
set _char act er _dat a_handl er ( trateaz_date_caracter)
Sunt oferite implementri SAX pentru majoritatea limbajelor de programare actuale.
Navigatoarele Web nu ofer suport pentru procesri XML via SAX.

59
Sabin Corneliu Buraga Tehnologii Web

Analizoare XML
Desigur, pentru prelucrarea documentelor XML vom trebui s recurgem la un analizor
XML deja implementat n limbajul nostru preferat. Analizoarele XML pot fi de dou ti-
puri:
analizoare fr validare care vor procesa un document XML verificnd dac acesta
este bine-formatat (adic respect regulile privind sintaxa i modul de imbricare
corect a tag-urilor);
analizoare cu validare care vor realiza procesarea documentului XML prin verifica-
rea regulilor formale descrise de un DTD sau o schem ataate acestuia (aceste
analizoare sunt mai complexe).
Unul dintre cele mai cunoscute analizoare fr validare este Expat, disponibil n regim
open source. De asemenea, pot fi utilizate analizoarele cu posibiliti de validare JAXP
(Sun), JDOM, libxml (parte a proiectului GNOME), MSXML (Microsoft) sau Xerces
(Apache). Practic, toate mediile de dezvoltare Web actuale ofer posibiliti de validare a
documentelor XML via DTD sau XML Schema i diverse modaliti de procesare.
Pentru verificarea formatrii corespunztoare a documentelor XML se pot utiliza chiar
i navigatoarele Web actuale.
De exemplu, fie documentul XHTML eronat:
<?xml ver si on=" 1. 0" ?>
<ht ml xml ns: ht ml =" ht t p: / / www. w3. or g/ 1999/ xht ml " >
<t abl e wi dt h=600 al i gn=cent er >
</ t abl e>
Vom obine mesajul de eroare din capturile-ecran de mai jos:

60
Sabin Corneliu Buraga Tehnologii Web

Verificarea bunei-formatri a documentelor XML folosind navigatoarele Web

61
Sabin Corneliu Buraga Tehnologii Web
8. Transformri XML
Din cele descrise mai sus, am vzut c n mod uzual un document XML separ coninu-
tul de maniera de formatare/procesare (specific, deseori, unui anumit scop i/sau unei
aplicaii).
Pentru a prezenta ntr-o manier dorit i comod datele XML, trebuie specificat
o modalitate de redare via aa-numita foaie de stiluri (stylesheet). Soluiile actuale sunt date
de dou direcii importante standardizate de Consoriul Web:
CSS (Cascading Style Sheets) folosesc o sintax non-XML, prezint o flexibilitate
limitat i nu ofer o redare dependent de context;
XSL (Extensible Stylesheet Language) adopt o sintax XML, au o flexibilitate mai
mare, iar procesarea se poate face n funcie de context; de asemenea, se pot opera
modificri de structur, oferindu-se faciliti pentru realizarea de interogri simple.
n cele ce urmeaz, ne vom referi la transformrile XSL. Pentru efectuarea transform-
rilor se consider c documentul XML este un arbore format din noduri de diverse tipuri,
precum element-rdcin, elemente, coninut textual, atribute, spaii de nume, instruci-
uni de procesare, comentarii etc. Pentru noduri de tip text, caracterele rezervate trebuie
rescrise cu entiti.
Fiecare foaie de stiluri XSL const, simplist vorbind, din reguli compuse dintr-un model
(pattern) i o aciune, modelul identificnd un nod sau grup de noduri XML asupra cruia
se va aplica aciunea. Expresiile modelului sunt exprimate n limbajul XPath, iar aciunile
transformrile efectuate asupra elementelor documentului sunt specificate n XSLT
(XSL Transformations). Transformrile se aplic recursiv tuturor nodurilor XML care satis-
fac modelul/abloanele de reguli (pattern-matching).
Limbajul XPath
Vom prezenta n continuare principalele trsturi ale limbajului XPath. Scopul acestuia
este s adreseze pri dintr-un document XML, oferind faciliti de baz pentru manipu-
larea unor tipuri de date simple (iruri de caractere, numere etc.) i opernd la nivelul
structurii abstracte a documentului XML (i.e. arborele).
Construcia fundamental este expresia XPath, evaluarea acesteia realizndu-se n func-
ie de context. Acest context poate fi desemnat de un nod al documentului XML, de po-
ziie, o funcie de bibliotec sau de o declaraie a unui spaiu de nume.
n urma evalurii expresiei, este ntors un obiect, adic: o mulime de noduri (node-set),
o valoare logic (true, false), un numr (float), un ir de caractere.
Asupra nodurilor, pot fi folosii operatorii descrii n continuare.

62
Sabin Corneliu Buraga Tehnologii Web
Operatorul / (descendent) este utilizat s defineasc o ierarhie de elemente (o cale de
parcurgere a nodurilor din arborele asociat documentului). Cteva exemple: / i
/ cupr i ns/ capi t ol / aut or (a se vedea figura urmtoare).

Utilizarea operatorului /pentru selectarea unui element descendent
Operatorul / / (traversare recursiv) traverseaz n adncime ntreg sub-arborele unui
anumit nod; exemple: / / capi t ol i / / cupr i ns.
Operatorul * (wildcard) e folosit uzual pentru elemente i atribute; ofer toate elemente-
le/atributele de pe un anumit nivel al arborelui. Ca exemplificare, furnizm capi t ol / * i
/ cupr i ns/ */ nume.
Operatorul . (nodul curent) este un operator contextual i desemneaz nodul curent;
exemple: . / capi t ol i . / cupr i ns/ *.
Operatorul @(atribut) e utilizat s specifice valoarea unui anumit atribut; drept exem-
plificri, furnizm / / capi t ol / @nr i t abl e/ @*.
Operatorul : (spaiu de nume) este folosit s selecteze elemente/atribute pe baza unui
spaiu de nume pentru / / ht ml : * obinem toate construciile HTML existente ntr-un
document ce au fost prefixate de spaiul de nume corespunztor.
Operatorul [ ] (filtru/index) aplic un filtru sau localizeaz nodurile pe baza unui index
(numerotarea ncepe de la 1); de exemplu: / cupr i ns/ capi t ol [ 2] sau
/ / capi t ol [ @nr =" 3" ] .
De asemenea, pentru valori logice i ntregi pot fi utilizai operatorii uzuali relaionali
(or, and, =, !=, <=, <, >, >=) i aritmetici (+, , *, div i
mod).
Comparaiile de iruri de caractere se realizeaz n manier case-sensitive.
Limbajul XPath clasific tipurile de noduri n aa-numitele axe, dintre care menionm:
axa nodului curent (context node): self;
axa nodului printe: parent;

63
Sabin Corneliu Buraga Tehnologii Web
axa nodurilor copil: child;
axa nodurilor descendente: descendent;
axa nodurilor de tip atribut: attribute;
axa nodurilor spaiilor de nume: namespace.
Pentru specificarea unei axe, se folosete operatorul : : precedat de numele axei dorite.
Un exemplu este / / chi l d: : *[ @nr > 2] care selecteaz toate nodurile copil avnd va-
lori mai mari dect 2 pentru atributul nr , parcurgndu-se recursiv ntreg arborele XML
n locul precizrii anumitor axe, se poate recurge la sintaxa prescurtat. Astfel, self se
poate substitui cu . , parent cu . . , attribute cu @ i namespace prin : .
Specificaia XPath descrie i suita de funcii de baz care pot fi folosite n cadrul unei
expresii. Le menionm pe cele mai importante:
privitoare la noduri: id(), position(), count(), name(), namespace-uri(), last() etc.;
referitoare la tipuri de noduri: node(), text(), comment(), processing-instruction() i altele;
viznd irurile de caractere: 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.
Pentru a avea efectul scontat, construciile XSLT trebuie s aparin spaiului de nume
desemnat de URI-ul http://www.w3.org/1999/XSL/Transform. O foaie de stiluri XSLT are
drept element-rdcin <xsl : st yl esheet > sau <xsl : t r ansf or m> i include diverse
abloane (template-uri) de transformare, mcar un ablon la nivelul rdcin.
Pentru realizarea transformrilor, se recurge la expresii XPath folosite la selectarea no-
durilor dorite a fi procesate, la specificarea condiiilor de procesare (contextul) sau la ge-
nerarea textului de ieire (e.g., un alt document XML, o pagin HTML ori text obinuit).
Modelul procesrii consider c o list de noduri-surs (input) este prelucrat pentru a se
genera un fragment de arbore de noduri la destinaie (output). Iniial, se proceseaz nodul-
rdcin, la care se insereaz noduri copil generate de abloane aplicate prin pattern-
matching unei liste de noduri selectate (n manier recursiv) via expresii XPath.
Regulile abloanelor identific noduri asupra crora se vor aplica transformri, selectarea
nodurilor realizndu-se prin XPath. Un ablon se definete prin elementul

64
Sabin Corneliu Buraga Tehnologii Web
<xsl : t empl at e>, iar aplicarea unui ablon se realizeaz cu elementul <xsl : appl y-
t empl at es>.
Crearea arborelui de ieire se realizeaz innd cont de faptul c ntr-un ablon orice
element ce nu aparin spaiului de nume XSLT sunt copiate, fr a fi operate modificri,
n arborele de ieire. De asemenea, pot fi generate diverse tipuri de noduri:
<xsl : el ement >, <xsl : at t r i but e>, <xsl : t ext >, <xsl : comment >etc. Pentru a avea
acces la rezultatele expresiilor XPath implicnd valori ale documentului surs, vom recur-
ge la <xsl : val ue- of >. Diveri parametri de control al modului de generare a ieirii se
pot stabili via <xsl : out put >.
Foile de stiluri XSLT pot fi considerate programe, permindu-se exprimarea de con-
strucii repetitive: <xsl : f or - each>, de construcii de test: <xsl : i f >, <xsl : choose>,
<xsl : when>i <xsl : ot her wi se>, de copieri de noduri: <xsl : copy>i <xsl : copy-
of >, de sortri de noduri: <xsl : sor t >, de includeri de alte foi de stiluri:
<xsl : i ncl ude>, de variabile i parametri: <xsl : var i abl e>i <xsl : par am>.
Facem observaia c, spre deosebire de limbajele de programare clasice, variabilele (de-
clarate via <xsl : var i abl e>) au valori imutabile: valoarea asociat nu se schimb din
moment ce a fost evaluat. Astfel, dup o construcie de genul <xsl : var i abl e
name=" ani " sel ect =" 21 + 12" / >, o ncercare de a atribui o alt valoare variabilei
ani conduce la apariia unei erori. Parametrii (specificai prin <xsl : par am>) i pot modi-
fica ulterior valoarea. Apelarea (invocarea) unui ablon se poate realiza cu pasarea de va-
lori parametrilor via <xsl : wi t h- par am>.
Suplimentar, sunt puse la dispoziie diverse funcii de baz:
desemneaz nodul curent: cur r ent ( ) ;
adreseaz un alt document XML, diferit de cel curent: document ( ) ;
verific existena unei funcii (suport pentru extensii): f unct i on- avai l abl e( ) ;
formateaz valori numerice: f or mat - number ( ) ;
ofer informaii privitoare la sistemul de procesare: syst em- pr oper t y( ) .
Exemple
Pentru nceput, considerm documentul projects.xml care stocheaz o list de proiecte
propuse spre implementare i care are structura:
<?xml - st yl esheet hr ef =" pr oj ect s. xsl " t ype=" t ext / xsl " ?>
<pr oj ect s updat e=" . . . " >
<pr oj ect cl ass=" A" >
<t i t l e>. . . </ t i t l e>
<desc>. . . </ desc>

65
Sabin Corneliu Buraga Tehnologii Web
<st ud>. . . </ st ud>
<ur l >. . . </ ur l >
</ pr oj ect >
</ pr oj ect s>
Ne propunem s generm un document XHTML pentru redarea, n navigator, a aces-
tei liste. Dup cum se poate remarca, folosind instruciunea de procesare <?xml -
st yl esheet . . . ?> atam o foaie de stiluri XSLT numit projects.xsl i avnd urmtorul
coninut:
<xsl : st yl esheet ver si on=" 1. 0"
xml ns: xsl =" ht t p: / / www. w3. or g/ 1999/ XSL/ Tr ansf or m" >
<! - - abl onul - r dci n - - >
<xsl : t empl at e mat ch=" / " >
<ht ml >
<head>
<t i t l e>Pr oi ect e</ t i t l e>
</ head>
<body>
<! - - apl i cmabl onul pent r u vi zual i zar ea pr oi ect el or - - >
<di v i d=" l i st i ng" >
<xsl : appl y- t empl at es / >
</ di v>
</ body>
</ ht ml >
</ xsl : t empl at e>

<! - - abl onul pent r u pr oi ect e - - >
<xsl : t empl at e mat ch=" pr oj ect s" >
<ul >
<! - - l i st a nenumer ot at coni nnd dat e
despr e f i ecar e pr oi ect - - >
<xsl : f or - each sel ect =" pr oj ect " >
<l i >
<h5>
<! - - t i t l ul pr oi ect ul ui + cl asa - - >
<xsl : val ue- of sel ect =" t i t l e" / >
( <xsl : val ue- of sel ect =" @cl ass" / >)
</ h5>
<p><! - - descr i er ea pr oi ect ul ui - - >
<xsl : val ue- of sel ect =" desc" / >
</ p>
<di v>Resur se supl i ment ar e:
<! - - const r ui mo l egt ur - - >
<a>
<! - - i nser mat r i but ul hr ef - - >
<xsl : at t r i but e name=" hr ef " >
<xsl : val ue- of sel ect =" ur l " / >

66
Sabin Corneliu Buraga Tehnologii Web
</ xsl : at t r i but e>
<! - - i nser mat r i but ul t i t l e - - >
<xsl : at t r i but e name=" t i t l e" >Mai mul t e
det al i i </ xsl : at t r i but e>
<xsl : val ue- of sel ect =" ur l " / >
</ a>
</ di v>
</ l i >
</ xsl : f or - each>
</ ul >
<p>Ul t i ma act ual i zar e:
<xsl : val ue- of sel ect =" @updat e" / ></ p>
</ xsl : t empl at e>
</ xsl : st yl esheet >
Codul generat este XHTML, pentru ca foaia s fie considerat un document XML bi-
ne formatat. Sunt specificate dou abloane, primul construind scheletul general al paginii
Web, iar al doilea genernd lista privitoare la proiecte. Al doilea ablon va fi invocat la
potrivirea cu succes a apariiei elementului <pr oj ect s>. Similar, <xsl : f or - each>va
furniza lista de noduri rezultat n urma evalurii expresiei XPath pr oj ect (acelai efect
l avea expresia absolut / pr oj ect s/ pr oj ect ).
Primul pas al transformrii va conduce la invocarea ablonului-rdcin, n urma potri-
virii cu nodul-rdcin desemnat de operatorul / . Toate nodurile care nu aparin spa-
iului de nume xsl vor fi copiate la ieire (astfel, se construiete codul-surs al paginii
Web, pn la apariia elementului <xsl : appl y- t empl at es / >. Acest eveniment va
conduce la invocarea ablonului potrivit cu expresia pr oj ect , n cazul nostru
<xsl : t empl at e mat ch=" pr oj ect s" > . . . </ xsl : t empl at e>, care va genera lista ne-
numerotat a proiectelor. Cele specificate n cadrul <xsl : f or - each>vor fi repetate de
attea ori cte noduri sunt returnate de expresia specificat ca valoare a atributului se-
l ect al elementului <xsl : f or - each>.
Se observ generarea unei legturi <a hr ef =" . . . " t i t l e=" . . . " >. . . </ a>, pentru
aceasta recurgnd la <xsl : at t r i but e> pentru a ataa cele dou atribute hr ef i
t i t l e elementului <a>al limbajului XHTML.
Vom rafina puin cele scrise mai sus, tiind c proiectele propuse sunt de diverse clase
de dificultate, indicate de valorile atributului cl ass al elementului <pr oj ect >. Intenio-
nm s afim n mod diferit descrierea proiectului, conform clasei sale. Pentru aceasta,
vom recurge la construciile de test (omitem restul foii de stiluri):
<p>
<! - - n f unci e de cl asa pr oi ect ul ui ,
vomaf i a di f er i t descr i er ea l ui - - >
<xsl : choose>
<! - - pr oi ect de cl asa A - - >

67
Sabin Corneliu Buraga Tehnologii Web
<xsl : when t est =" @cl ass = ' A' " >
<span st yl e=" col or : dar kr ed" >
<xsl : val ue- of sel ect =" desc" / >
</ span>
</ xsl : when>
<! - - pr oi ect de cl as B sau C - - >
<xsl : when t est =" @cl ass = ' B' or @cl ass = ' C' " >
<span st yl e=" col or : navy" >
<xsl : val ue- of sel ect =" desc" / >
</ span>
</ xsl : when>
<! - - pr oi ect de cl as necunoscut - - >
<xsl : ot her wi se>
<span st yl e=" col or : bl ack" >
<xsl : val ue- of sel ect =" desc" / >
</ span>
</ xsl : ot her wi se>
</ xsl : choose>
</ p>
De asemenea, putem verifica dac <ur l >exist sau are o valoare nenul, pentru a nu
insera inutil legtura spre resursele suplimentare privitoare la un proiect:
<! - - dac nu exi st el ement ul " ur l " ,
nu af i ml egt ur a spr e r esur se supl i ment ar e - - >
<xsl : i f t est =" ur l ! = ' ' " >
<! - - ( ur l ! = ' ' ) est e echi val ent cu ( not ur l == ' ' ) - - >
. . .
</ xsl : i f >
Urmtorul pas este s ordonm lista proiectelor conform unor criterii. Pentru aceasta,
folosim o construcie de genul:
<! - - l i st a nenumer ot at coni nnd dat el e
despr e f i ecar e pr oi ect - - >
<xsl : f or - each sel ect =" pr oj ect " >
<! - - sor t m n or di nea descr esct oar e a numr ul ui
de st udeni ( sor t ar ea e l exi cogr af i c) - - >
<xsl : sor t sel ect =" st ud" or der =" descendi ng" / >
<! - - apoi al f abet i c dup t i t l ul pr oi ect ul ui - - >
<xsl : sor t sel ect =" t i t l e" / >
<l i >
<h5><xsl : val ue- of sel ect =" t i t l e" / ></ h5>
</ l i >
</ xsl : f or - each>
Vom recurge i la variabile, calculnd valoarea RGB a culorii de fundal pe care o vom
stabili n funcie de numrul maxim de studeni arondai unui proiect se utilizeaz func-
ia concat ( ) pus la dispoziie de XPath:

68
Sabin Corneliu Buraga Tehnologii Web
<xsl : f or - each sel ect =" pr oj ect " >
<xsl : sor t sel ect =" t i t l e" / >
<l i >
<! - - n f unci e de numr ul de st udeni ,
gener mo cul oar e de f undal - - >
<xsl : var i abl e name=" f undal "
sel ect =" concat ( ' r gb( ' , st ud*90 , ' , ' , st ud*90,
' , ' , st ud*30, ' ) ' ) " / >
<p st yl e=" backgr ound- col or : {$f undal }" >
<! - - af i mpozi i a, numer ot nd ast f el pr oi ect el e - - >
<xsl : val ue- of sel ect =" ( posi t i on( ) ) " / >.
<xsl : val ue- of sel ect =" t i t l e" / >
</ p>
</ l i >
</ xsl : f or - each>
Dup cum se poate remarca, valoarea unei variabile se acceseaz prefixnd numele va-
riabilei cu semnul $.
Realizarea transformrilor se poate face direct n cadrul unui navigator Web de ultim
generaie, precum Mozilla Firefox 1 ori Internet Explorer 6 sau o versiune superioar. De
asemenea, exist o sumedenie de modaliti de realizare a transformrilor la nivel pro-
gramatic via procesoare XSLT precum Apache Xalan, libxslt, Saxon etc.
Drept exemple de aplicaii care folosesc tehnologia XSLT amintim:
Adobe Help Center sistem de ajutor utilizat de suita Adobe Creative Suite 2, dar
funcionnd i independent, disponibil gratuit;
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 i 2007;
Open Office suita de birou disponibil n regim open source.

69
Sabin Corneliu Buraga Tehnologii Web


70
Sabin Corneliu Buraga Tehnologii Web

71

P Pa ar rt t e ea a I II II I P Pr ro og gr ra am ma ar re ea a a ap pl l i i c ca a i i i i l l o or r W We eb b
O arhitectur bun poate mbunti calitatea vieii oamenilor.
Alfred Hitchcock

1. Maniere de programare pe partea de server
2. Standardul CGI (Common Gateway Interface)
3. PHP (PHP: Hypertext Preprocessor)
4. Servicii Web
Sabin Corneliu Buraga Tehnologii Web

72
Sabin Corneliu Buraga Tehnologii Web

1. Maniere de programare pe partea de server
Pentru nceput, vom trece n revist modalitile tradiionale de programare, pe partea de
server, a aplicaiilor Web.
Standardul CGI
Din punct de vedere istoric, prima metod de generare dinamic pe server a reprezentri-
lor unor resurse solicitate de un client Web vizeaz standardul de facto CGI (Common
Gateway Interface) detalii n S. Buraga et al., Programarea aplicaiilor Web folosind bash i Perl,
Polirom, Iai, 2002.
Principalele dezavantaje sunt cele privitoare la invocarea concurent a mai multor
scripturi CGI, problemele survenite fiind asigurarea scalabilitii, a integrrii cu alte apli-
caii, persistena conexiunii i contextul invocrii (rulrii). Drept soluii se pot adopta teh-
nici de caching, includerea suportului pentru CGI direct n serverul Web i folosirea aa-
numitului FastCGI.
Servere de aplicaii Web
Evoluia a continuat cu apariia altor interfee de programare Web pe partea de server.
Astfel, pot fi menionate mod_perl pentru Apache, NSAPI (Netscape Server API) i ISAPI
(Microsoft Internet Services API), funcionnd intern conform modelului CGI.
De un succes larg se bucur ns serverele de aplicaii Web, printre cele mai populare
numrndu-se ASP (Active Server Pages), ASP.NET (parte integrant a .NET Framework),
PHP (PHP: Hypertext Preprocessor) i JSP (Java Server Pages). Principalele avantaje ale acesto-
ra fa de vechiul, dar nc utilizatul CGI, sunt urmtoarele: suportul pentru sesiuni, asi-
gurarea load-balancing-ului, conexiunile persistente cu sistemele de baze de date, suportul
pentru template-uri de interfa (abloane, componente Web, skin-uri .a.m.d.), facilitile
viznd modularitatea, securitatea.
Vom descrie n continuare caracteristicile comune serverelor de aplicaii Web, fr a
intra n amnunte privind modul de programare i exploatare.
Un server de aplicaii Web ofer posibilitatea de a include cod (script) direct n cadrul
documentelor Web, cod invocat pe server. Astfel, se genereaz coninut dinamic pe par-
tea de server, eventual procesndu-se un numr de surse de date e.g., fiiere text, baze
de date, documente XML, multimedia etc. disponibile pe acel server sau pe alte calcula-
toare. Maniera de includere a codului menit s proceseze datele i s genereze reprezen-
tri destinate clientului depinde de serverul de aplicaii folosit. Drept exemple, putem da
<% . . . %>pentru ASP, ASP.NET i JSP, <?php . . . ?>n cazul PHP i, mai general,
<scr i pt l anguage= " . . . " >. . . </ scr i pt >.

73
Sabin Corneliu Buraga Tehnologii Web
Un server de aplicaii Web pune la dispoziie un cadru de lucru oferind urmtoarele fa-
ciliti.
n primul rnd ofer posibilitatea folosirii unui limbaj sau o suit de limbaje de pro-
gramare pentru ASP, se poate recurge la JScript i VBScript (un dialect ECMAScript),
interpretate pe partea de server, iar n cazul ASP.NET la limbajele .NET oferite
(ASP.NET este independent de limbaj, programarea putndu-se realiza n oricare din
limbajele suportate de .NET Framework: C#, J#, Perl.NET, VB.NET i multe altele). De
asemenea, se poate folosi Java (via servlet-uri i JSP) sau Python (pentru Zope).
Al doilea aspect privete recurgerea la funcionalitile oferite de API-ul de baz
aceasta are legtur cu utilizarea puterii limbajului i a cadrului de lucru (e.g., folosirea
de funcii/clase predefinite). n funcie de mediu, se poate asigura migrarea relativ facil
de la aplicaii clasice la cele destinate Web-ului. n plus, pot fi puse la dispoziie faciliti
referitoare la accesul la resurse, consisten i siguran. Un alt aspect important este cel
al asigurrii independenei de platform. Funcionalitile incluse n API-ul de baz nu ar
trebui s necesite recompilarea serverului de aplicaii (acolo unde se poate). Exist dou
mari puncte de vedere: existena unei pleiade impresionante de funcii predefinite (cazul
PHP, de exemplu) sau oferirea unei fundaii de ierarhii de clase, uneori chiar independen-
te de limbaj (vezi ASP.NET CLR Common Language Runtime).
Al treilea avantaj este suportul pentru bazele de date se ofer acces robust la diverse
servere de baze de date, eventual folosindu-se interfee standardizate, precum ADO (Ac-
tive Database Objects) sau JDBC (Java DataBase Connectivity). Pentru PHP, exist funcii
predefinite pentru o pleiad de servere de baze de date, majoritatea relaionale, via biblio-
teci incorporate (e.g., SQLite i mysqli n PHP5) sau extensii, n plus putndu-se folosi in-
terfaa ODBC. Legarea datelor de codul-program (data binding) poate fi realizat auto-
mat (e.g., ASP.NET) sau manual (PHP). Eventual, se pot folosi framework-uri adiionale
(pentru Java, un exemplu fiind Hibernate).
Un alt aspect important e suportul pentru interaciunea Web pot fi utilizate controale
Web disponibile pe server, fie emulnd cmpurile din formularele HTML, fie oferind
elemente interactive noi (e.g., calendarul). Unele medii, ca ASP.NET sau PHP5 via PRA-
DO, permit astfel generarea de cod HTML (plus JavaScript) n funcie de clientul Web.
ASP.NET ofer i un model de procesare a evenimentelor provenind de la client, permi-
nd scrierea de aplicaii conduse de evenimente (event driven Web applications). Pe acest
model se bazeaz i PRADO, implementat n PHP5. De asemenea, se pot folosi unele
framework-uri suplimentare oferind suport pentru AJAX.
De asemenea, de interes sunt facilitile acordate procesrii de documente XML n
mod natural, trebuie puse la dispoziie modalitile de prelucrate via DOM i SAX, even-
tual folosind o interfa simplificat (ASP.NET i PHP5). Pot fi suportate i alte tipuri de
procesri, precum XPP pentru Java. Pentru o parte dintre servere, se poate realiza i vali-
darea (n ASP.NET i JSP exist clase de validare prin scheme XML i DTD). De aseme-
nea, se pot efectua transformri XSL i legri ale datelor (XML data binding). Orice ser-

74
Sabin Corneliu Buraga Tehnologii Web
ver de aplicaii Web la momentul actual acord suport pentru implementarea i invocarea
de servicii Web.
Un aspect interesant este cel privitor la recurgerea la medii de dezvoltare unele dintre
ele sunt deosebit de sofisticate, ncadrndu-se n una dintre categoriile: comerciale
(Delphi, Visual Studio .NET, JBuilder, Zend etc.), gratuite (Eclipse, NVU, WebMatrix i
altele), de evaluare/educaionale (Kylix, Visual Express etc.). De asemenea, pot fi utilizate
diverse depanatoare, utilitare de calcul al execuiei (profilers) i optimizatoare de cod. Sunt
acordate i faciliti pentru dezvoltatorii de servicii Web, plus pot fi folosite clase, com-
ponente i biblioteci adiionale, disponibile n regim comercial, gratuit sau open source.
Alt aspect este reprezentat de suportul acordat inginerilor software aplicaiile Web
sunt de cele mai multe ori structurate pe mai multe niveluri (N-tier), unele framework-uri
ncurajnd folosirea abloanelor de proiectare (design patterns). De asemenea, se poate re-
curge i la uniti de testare automat (e.g., JUnit, PHP Unit etc.), iar unele medii prezint
modaliti de generare automat de documentaii, n diverse formate.
De asemenea, se pot pune la dispoziie i alte faciliti. De pild, se poate oferi suport
pentru dezvoltarea de aplicaii Web complexe: descrierea atributelor unei pagini sau ale
unui sit (viznd limbajul, importul de resurse, sesiunile Web, tratarea evenimentelor, tipul
coninutului etc.), modul de autentificare, tema vizual (skin), abloane de redare (template-
uri) etc. Aplicaiile Web pot folosi i containere de componente, precum (Enterprise) Java
Beans.

75
Sabin Corneliu Buraga Tehnologii Web
2. Standardul CGI (Common Gateway Interface)
Standard pentru interaciunea clienilor Web cu serverele Web, Common Gateway Interface
se afl n prezent la versiunea 1.1. Un program CGI, numit n mod uzual script, se execut
pe serverul WWW, fie n mod explicit (apelat din cadrul paginii printr-o directiv specia-
l), fie la preluarea informaiilor aflate n cadrul cmpurilor unui formular interactiv sau
coordonatelor unei zone senzitive (image map).
Acest standard confer interactivitate paginilor Web, documentele HTML putnd ast-
fel s-i modifice n mod dinamic coninutul i s permit prelucrri sofisticate de date.
Programele CGI pot fi scrise n orice limbaj, fiind interpretate (cazul Perl, Tcl, script-
uri shell Unix) sau compilate (C, C++, Delphi). Regulile care trebuie respectate la conce-
perea unui program CGI sunt:
programul scrie datele la ieirea standard (stdout);
programul genereaz antete care permit serverului Web s interpreteze corect ie-
irea script-ului (folosindu-se specificaiile protocolului HTTP).
Cele mai multe script-uri CGI sunt concepute pentru a procesa datele introduse n
formulare. Un formular se definete n XHTML folosindu-se tag-uri specifice pentru afi-
area coninutului i introducerea datelor de ctre client, iar script-ul CGI, executat de
server, va prelua coninutul acelui formular i-l va prelucra, returnnd, eventual, rezultate-
le.
Antetul trimis serverului de ctre programul CGI va respecta specificaiile MIME,
connnd de exemplu Cont ent - t ype: t ext / ht ml (document HTML) sau Cont ent -
t ype: i mage/ j peg (imagine JPEG) ori Cont ent - t ype: t ext / pl ai n (text obinuit).
Programului CGI i se vor transmite n diverse variabile de mediu sau de la intrarea
standard informaii referitoare la datele de procesat sau la clientul care a iniiat cererea (de
exemplu, SERVER_PORT, REQUEST_METHOD, SCRI PT_NAME, QUERY_STRI NG,
REMOTE_HOST etc.) n funcie de metoda de transfer utilizat.
Oricare program CGI va putea dispune de valorile urmtoarelor variabile de mediu,
dintre care menionm:
REQUEST_METHOD specific metoda prin care va fi formulat cererea: GET,
POST, PUT etc.
QUERY_STRI NG conine toate informaiile de dup caracterul "?" din URL-ul care
refer script-ul CGI, informaii care vor trebui decodificate de acel script.
REMOTE_HOST indic maina-gazd care a formulat cererea (calculatorul care a
apelat script-ul CGI prin intermediul unei pagini Web).
REMOTE_ADDR furnizeaz adresa IP a clientului care a formulat cererea, asociat
adresei simbolice date de REMOTE_HOST.

76
Sabin Corneliu Buraga Tehnologii Web
CONTENT_TYPE indic tipul coninutului datelor vehiculate, pentru cererile care au
ataate informaii suplimentare, precum PUT sau POST (de exemplu, pentru un
formular transmis prin metoda POST, normal ar trebui ca variabila CON-
TENT_TYPE s aib valoarea appl i cat i on/ x- www- f or m- ur l encoded).
CONTENT_LENGTH conine numrul de octei ai datelor trimise de client.
Suplimentar, liniile antet (dac exist) recepionate de la client prin intermediul proto-
colului HTTP vor fi plasate n variabile de mediu avnd numele prefixate de HTTP_. Ca
exemple de astfel de variabile, pot fi amintite:
HTTP_ACCEPT indic tipurile MIME pe care le va accepta clientul, fiecare tip fiind
desprit de virgul aa cum specific protocolul HTTP: t i p/ subt i p,
t i p/ subt i p.
HTTP_USER_AGENT furnizeaz numele i versiunea browserului Web care a for-
mulat cererea, n formatul general: sof t war e/ ver si une bi bl i ot e-
ca/ ver si une.
Urmtorul script Perl va afia toate variabilele de mediu la care are acces prin inter-
mediul interfeei CGI:
#! / usr / bi n/ per l
# Af i eaz medi ul
pr i nt " Cont ent - t ype: t ext / pl ai n\ n\ n" ;
pr i nt " Envi r onment : \ n\ n" ;
f or each $key ( keys %ENV) {
pr i nt f " %16s = %s\ n" , $key, $ENV{$key};
}
Variabila predefinit ENV este un tablou asociativ coninnd perechile (nume de variabi-
la de mediu, valoarea variabilei).
Un script CGI similar, scris n bash (Bourne Again Shell), este:
#! / bi n/ bash
# Af i eaz medi ul
echo " Cont ent - t ype: t ext / pl ai n"
echo
set
Un posibil rezultat al execuiei programului de mai sus poate fi:
HTTP_ACCEPT_LANGUAGE=en
SERVER_SI GNATURE=<ADDRESS>Apache/ 1. 3. 12 Ser ver at endi r r a. r o
Por t 80</ ADDRESS>
SCRI PT_FI LENAME=/ home/ ht t pd/ cgi - bi n/ env. pl . cgi
HTTP_ACCEPT_CHARSET=i so- 8859- 1, *, ut f - 8
HTTP_PRAGMA=no- cache
SERVER_NAME=endi r r a. r o

77
Sabin Corneliu Buraga Tehnologii Web
HTTP_CONNECTI ON=Keep- Al i ve
REMOTE_ADDR=127. 0. 0. 1
REQUEST_URI =/ cgi - bi n/ env. pl . cgi
HTTP_HOST=endi r r a
REMOTE_PORT=1041
REQUEST_METHOD=GET
GATEWAY_I NTERFACE=CGI / 1. 1
QUERY_STRI NG=
SERVER_ADDR=127. 0. 0. 1
SERVER_SOFTWARE=Apache/ 1. 3. 12 ( Uni x)
( Red Hat / Li nux) PHP/ 4. 3. 15
SERVER_PROTOCOL=HTTP/ 1. 0
SERVER_PORT=80
DOCUMENT_ROOT=/ home/ ht t pd/ ht ml
HTTP_USER_AGENT=Mozi l l a/ 7. 0 [ en] ( X11; U; Li nux i 686)
HTTP_ACCEPT=i mage/ gi f , i mage/ x- xbi t map,
i mage/ j peg, i mage/ png, */ *
SCRI PT_NAME=/ cgi - bi n/ env. pl . cgi
SERVER_ADMI N=r oot @endi r r a. r o
HTTP_ACCEPT_ENCODI NG=gzi p
Un program CGI scris n limbajul C standard care genereaz o pagin Web coninnd
mesajul Salut!.
/ *
sal ut - cgi . c
Gener eaz o pagi n Web coni nnd mesaj ul ' Sal ut ! '
*/
#i ncl ude <st di o. h>
voi d mai n( )
{
/ * t r i mi t e n pr i mul r nd ant et ul HTTP r ef er i t or l a
t i pul de dat e r et ur nat e de scr i pt */
pr i nt f ( " Cont ent - t ype: t ext / ht ml \ n\ n" ) ;
/ * nceput de document HTML */
pr i nt f ( " <ht ml >" ) ;
/ * ant et de pagi n */
pr i nt f ( " <head><t i t l e>Sal ut ! </ t i t l e></ head>\ n" ) ;
/ * cor p de pagi n */
pr i nt f ( " <body>\ n" ) ;
pr i nt f ( " <p>Sal ut ! </ p>\ n" ) ;
pr i nt f ( " </ body></ ht ml >" ) ;
/ * t er mi nar e pr ogr am*/
}
Pentru a fi ns efective, programele CGI trebuie apelate (implicit sau explicit) din ca-
drul paginilor Web.

78
Sabin Corneliu Buraga Tehnologii Web
De cele mai multe ori, un script CGI va fi invocat din cadrul unui formular XHTML la
apsarea butonului de trimitere a datelor ctre server (butonul de tip submit).
S presupunem c avem urmtorul exemplu n care un utilizator introduce prin inter-
mediul unui formular dou numere ntregi, iar programul CGI va genera o pagin Web
coninnd maximul dintre ele.
Formularul XHTML va fi:
<f or mact i on=" ht t p: / / www. i nf oi asi . r o/ cgi - bi n/ max. cgi "
met hod=" GET" >
<p>V r ugm, i nt r oducei dou numer e:
<i nput name=" nr 1" si ze=" 5" / >
<i nput name=" nr 2" si ze=" 5" / >
<p></ p>
<i nput t ype=" submi t " val ue=" Af l maxi mul " / >
</ f or m>
De exemplu, introducnd numerele 7 i 4 i acionnd butonul etichetat Afl maxi-
mul, vom primi o pagin Web care va afia textul Maximul dintre 7 i 4 este numrul
7 (vezi figura de mai jos).

Introducerea datelor i obinerea rezultatului
dup acionarea butonului de trimitere a datelor pentru prelucrare
Care este mecanismul prin care funcioneaz interfaa CGI?
Presupunnd c n cele dou cmpuri ale formularului (purtnd numele nr1 i respectiv
nr2) am introdus valorile 7 i 4 respectiv i am apsat butonul submit, navigatorul va trimi-
te, prin intermediul protocolului HTTP, o cerere ctre serverul Web aflat la adresa dat
de URL-ul ht t p: / / www. i nf oi asi . r o (adresa este preluat din valoarea atributului

79
Sabin Corneliu Buraga Tehnologii Web
act i on din <f or m>). Desigur, n loc de o adres absolut, putea fi specificat o cale rela-
tiv, nsemnnd faptul c se folosete serverul pe care se gsete pagina coninnd formu-
larul.
Atunci cnd se trimite cererea HTTP, navigatorul construiete un URL avnd ca sufix
informaii despre datele introduse n cmpurile formularului, n cazul nostru
ht t p: / / www. i nf oi asi . r o/ cgi - bi n/ max. cgi ?nr 1=7&nr 2=4 folosindu-se o codifica-
re special. Pentru fiecare cmp al formularului, se va genera o pereche
nume_cmp=valoare delimitat de caracterul &, iar caracterele speciale (ca de exem-
plu slash-ul sau apostroful) vor fi nlocuite de codul lor numeric, n hexazecimal, precedat
de caracterul procent (%). n unele implementri,. spaiile vor fi substituite de semnul
plus (+). De exemplu, pentru a trimite textul Cina de la Maxim's se va folosi codificarea
Cina+de+la+Maxim%27s.
Serverul spre care cererea a fost expediat va procesa datele recepionate conform re-
gulilor proprii. Tipic, configuraia serverului definete unde sunt stocate n cadrul siste-
mului de fiiere directoarele i fiierele CGI. De cele mai multe ori, daemonul HTTP
(adic serverul Web) ruleaz pe main sub auspicii de utilizator fictiv (din raiuni de se-
curitate ca nobody, n mod uzual), fiierele sale fiind stocate de obicei n directorul
/ home/ ht t pd/ sau / var / www/ ht ml (n cazul unui sistem Unix/Linux). Aici, alturi de
directorul ht ml unde se memoreaz documentele HTML ale unui sit Web, se afl i di-
rectorul cgi - bi n unde ar trebui s fie stocate toate fiierele (script-urile) CGI apelate din
cadrul paginilor Web. Aadar, ht t p: / / www. i nf oi asi . r o/ cgi - bi n/ max. cgi va n-
semna pentru serverul Web de la adresa www. i nf oi asi . r o urmtoarea aciune: invoc
programul max.cgi aflat la /home/httpd/cgi-bin. Astfel, n loc s trimit ctre naviga-
torul Web care a iniiat cererea HTTP un document HTML sau un fiier de alt tip, serve-
rul va invoca programul ori script-ul CGI specificat n cadrul URL-ului (n acest caz
max. cgi ) i-i va pasa datele furnizate de sufix, de dup semnul ntrebrii (adic irul
nr 1=7&nr 2=4).
Aciunea de invocare va avea o semantic diferit n funcie de script-ul sau programul
CGI conceput. Pentru un script Perl, serverul va invoca un interpretor Perl (n cazul
Apache, poate fi un modul special mod_per l ; de fapt, pentru a permite execuia de pro-
grame CGI, serverul Apache se va folosi de serviciile modulului mod_cgi ). Pentru un
program executabil (compilat de pild ntr-unul din limbajele C sau C++), serverul va
lansa programul ca un proces separat.
Extensia de fiier . cgi nu are nici o relevan n general, dar pot exista diverse reguli
de numire a fiierelor CGI executabile dependente de server sau de sistemul de operare
pe care ruleaz.
Detalii privitoare la programarea CGI n limbajele bash si Perl sunt disponibi-
le n cartea S. Buraga et al., Programare Web n bash i Perl, Polirom, Iai, 2002:
http://www.infoiasi.ro/~cgi/.

80
Sabin Corneliu Buraga Tehnologii Web
Un studiu de caz: procesarea prin SAX a unui document XML via un script CGI
n cadrul acestei seciuni, vom urmri n continuare s prelucrm documentele XML via
script-urile Perl, n vederea transformrii lor n pagini Web.

Transformarea unui document XML n pagin Web
prin intermediul unui script Perl
Una dintre cele mai facile modaliti de a prelucra documentele XML este cea a utiliz-
rii analizorului Expat dezvoltat de James Clark, a crui funcionalitate este ncapsulat de
modulul XML::Parser. Acest modul va pune la dispoziie obiectele XML: : Par ser i
XML: : Par ser : : Expat .
Dup cum deja tim, procesarea SAX este bazat pe evenimente, fiecare tip de nod al
arborelui asociat documentului XML declanndu-se un anumit eveniment care va trebui
tratat de o rutin Perl specificat de programator. Astfel, dup iniializarea analizorului, va
trebui s folosim metoda set Handl er s pentru a stabili ce funcii vor fi apelate pentru
fiecare tip de eveniment.
Cele mai importante evenimentele generate de procesorul XML sunt:
St ar t indic apariia tag-ului de nceput al unui element;
End desemneaz apariia tag-ului de sfrit al unui element;
Char indic apariia coninutului text al unui element (caracterele de
text neprocesat dintre tag-ul de nceput i cel de sfrit);
Comment indic apariia unui comentariu.
Vom asocia pentru evenimentele St ar t , End i Char cte o subrutin care va fi apelat
la fiecare apariie a evenimentului n cauz.
Documentul XML bi bl i o. xml care urmeaz stocheaz informaii despre mprumu-
turile dintr-o bibliotec:
<?xml ver si on=" 1. 0" ?>
<i mpr umut ur i >
<i mpr umut >
<car t e aut or =" J . P. Sar t r e" an=" 1999" >

81
Sabin Corneliu Buraga Tehnologii Web
Zi dul
</ car t e>
<cl i ent adr esa=" mi t uc@ac. t ui asi . r o" >
Vi ct or Tar hon- Onu
</ cl i ent >
</ i mpr umut >
<i mpr umut >
<car t e aut or =" H. Hesse" an=" 1998" >
J ocul cu mar gel el e de st i cl a
</ car t e>
<cl i ent adr esa=" st anasa@i nf oi asi . r o" >
St ef an Ci pr i an Tanasa
</ cl i ent >
</ i mpr umut >
</ i mpr umut ur i >
Dorim s generm un tabel XHTML cu aceste informaii, prin transformarea docu-
mentului XML de mai sus. Vom scrie urmtorul script Perl, n care vom substitui fiecare
element XML cu elementele XHTML corespunztoare (aceste substituii vor fi stocate n
tablouri asociative):
#! / usr / bi n/ per l
# ut i l i zammodul ul XML
use XML: : Par ser ;

# def i ni mt abl our i l e hash de i nl ocui r e a t ag- ur i l or
# def i ni msubst i t ut i i l e de t ag- ur i de i nceput
%st ar t = (
" i mpr umut ur i " => " <t abl e bor der =\ " 1\ " >" ,
" i mpr umut " => " <t r >" ,
" car t e" => " <t d><b>" ,
" cl i ent " => " <t d al i gn=\ " cent er \ " >"
) ;

# def i ni msubst i t ut i i l e de t ag- ur i de sf i r si t
%sf i r si t = (
" i mpr umut ur i " => " </ t abl e>\ n" ,
" i mpr umut " => " </ t r >" ,
" car t e" => " </ b></ t d>" ,
" cl i ent " => " </ t d>"
) ;

# i nst ant i emanal i zor ul XML
my $par ser = new XML: : Par ser ( Er r or Cont ext => 2) ;
# set amf unct i i l e de pr el ucr ar e
# a el ement el or si cont i nut ul ui l or
$par ser - >set Handl er s(
St ar t => \ &pr ocesar e_st ar t ,

82
Sabin Corneliu Buraga Tehnologii Web
# f unct i a de pr ocesar e t ag- ur i de i nceput
End => \ &pr ocesar e_sf i r si t ,
# f unct i a de pr ocesar e t ag- ur i de sf i r si t
Char => \ &pr ocesar e_cont i nut
# f unct i a de pr ocesar e a cont i nut ul ui
) ;
# af i samant et ul HTTP
pr i nt " Cont ent - t ype: t ext / ht ml \ n\ n" ;
# i ncar camf i si er ul si i l anal i zam
$par ser - >par sef i l e( " bi bl i o. xml " ) ;

# def i ni msubr ut i nel e pent r u pr el ucr ar ea
# el ement el or XML si cont i nut ul ui l or
sub pr ocesar e_st ar t
{
# pr i mul ar gument est e i nst ant a pr ocesor ul ui XML
my $pr ocesor = shi f t ;
# al doi l ea ar gument est e numel e el ement ul ui
# cor espunzat or t ag- ul ui de i nceput
my $el ement = shi f t ;
# af i samcodul HTML, f ol osi nd t abl oul hash
pr i nt $st ar t {$el ement };
}
sub pr ocesar e_sf i r si t
{
# pr i mul ar gument est e i nst ant a pr ocesor ul ui XML
my $pr ocesor = shi f t ;
# al doi l ea ar gument est e numel e el ement ul ui
# cor espunzat or t ag- ul ui de sf i r si t
my $el ement = shi f t ;
# af i samcodul HTML, f ol osi nd t abl oul hash
pr i nt $sf i r si t {$el ement };
}
# r ut i na de af i sar e a cont i nut ul ui
sub pr ocesar e_cont i nut
{
# ampr el uat ar gument el e f ur ni zat e
my ( $pr ocesor , $dat a) = @_;
# af i samdat el e
pr i nt $dat a;
}
Funciile asociate evenimentelor de procesare XML vor primi drept argumente instan-
a procesorului Expat i numele elementului curent (pentru evenimentele St ar t i End)
sau coninutul dintre tag-urile de nceput i de sfrit (pentru evenimentul Char ).

83
Sabin Corneliu Buraga Tehnologii Web
Ieirea script-ului prezentat mai sus este:
Cont ent - t ype: t ext / ht ml

<t abl e bor der =" 1" >
<t r >
<t d><b>
Zi dul
</ b></ t d>
<t d al i gn=" cent er " >
Vi ct or Tar hon- Onu
</ t d>
</ t r >
<t r >
<t d><b>
J ocul cu mar gel el e de st i cl a
</ b></ t d>
<t d al i gn=" cent er " >
St ef an Ci pr i an Tanasa
</ t d>
</ t r >
</ t abl e>

84
Sabin Corneliu Buraga Tehnologii Web
3. PHP (PHP: Hypertext Preprocessor)
PHP (PHP: Hypertext Preprocessor) a fost gndit iniial a fi o simpl aplicaie CGI
pentru interpretarea formularelor definite prin HTML i procesate de un program scris
ntr-un limbaj (e.g., C, Perl), executat pe server. n cazul interfeei CGI aveam nevoie de
permisiunea de a rula programe pe server, ceea ce conducea uneori la lacune n securitate
i n plus la disocierea de documentul HTML a programului care procesa datele.
PHP (n versiunea curent PHP 4; n paralel, este disponibil i versiunea PHP 5) re-
prezint un pachet puternic care ofer un limbaj de programare accesibil din cadrul fiie-
relor HTML, limbaj asemntor cu Perl sau C, avnd n plus suport pentru manipularea
bazelor de date ntr-un dialect SQL (dBASE, Informix, MySQL, mSQL, Oracle,
PostgreSQL, Solid, Sybase, ODBC etc.) i acces la sisteme hipermedia precum
Hyperwave. De asemenea, PHP suport ncrcarea fiierelor de pe calculatorul client:
upload i ofer suport pentru cookies (mecanism, pe care l vom prezenta ulterior, de stoca-
re a datelor n navigatorul client pentru identificarea utilizatorilor).
Aceast aplicaie este disponibil gratuit, integrndu-se n popularul server Apache. n
fapt, PHP reprezint un server flexibil pentru dezvoltarea de aplicaii Web sofisticate,
alturi de altele comerciale.
n ceea ce urmeaz vom prezenta numai o parte dintre facilitile oferite de PHP, fr
a inteniona s realizm un manual complet de programare i de utilizare.
Mai multe detalii, inclusiv studii de caz complete, sunt disponibile n volumele:
S. Buraga (coord.), Aplicaii Web la cheie. Studii de caz implementate n PHP, Polirom,
Iai, 2003: http://www.infoiasi.ro/~phpapps/
S. Buraga (coord.), Situri Web la cheie. Soluii profesionale de implementare, Polirom,
Iai, 2004: http://www.infoiasi.ro/~busaco/books/webapps/
Caracterizare
Script-urile PHP pot fi incluse n paginile Web n diferite moduri, aa cum arat exemplul
de mai jos:
<? echo ( " cea mai si mpl cal e de i nt r oducer e. . . \ n" ) ; ?>
<?php echo ( " se ut i l i zeaz n cazul document el or XML. \ n" ) ; ?>
<scr i pt l anguage=" php" >
echo ( " anumi t e edi t oar e nu accept t ag- ur i necunoscut e" ) ;
</ scr i pt >
<%echo ( " opi onal se pot f ol osi t ag- ur i n st i l ul ASP" ) ; %>
Comentariile pot fi scrise n stilul comentariilor din limbajele C, C++ sau shell-urile
Unix (adic se pot folosi / * . . . */ , / / . . . sau #. . . ).

85
Sabin Corneliu Buraga Tehnologii Web
Preprocesorul PHP va determina construciile PHP delimitate ntre tag-urile de mai sus
i le va interpreta, ignornd restul coninutului documentului pe care l va trimite, la iei-
rea standard, nealterat. Astfel, putem privi analizorul PHP ca un script CGI care efectu-
eaz o preprocesare special nainte ca datele s fie expediate clientului Web.
Instruciunile de control ale limbajului sunt cele uzuale din C (if, break, while i altele).
Pentru instruciunea if, testul se evalueaz ca fiind false i n cazul n care rezultatul expre-
siei de test va fi irul vid (" " ) sau va fi irul " 0" . Variabilele se declar din zbor, tipul
lor putnd fi, de exemplu, integer, double sau string, iar numele de variabile trebuie precedat
de caracterul $. irurile de caractere se pot delimita ntre ghilimele sau apostroafe, n
acest ultim caz inhibndu-se evaluarea variabilelor din interiorul irului respectiv (exact ca
la script-urile bash).
Pot fi definite de asemenea i tablouri (indexate sau asociative, ca n Perl). Exist i di-
verse variabile predefinite, mai ales cele specifice serverului Web, similare variabilelor de
mediu disponibile script-urilor CGI (e.g., $REMOTE_ADDR). Sunt permii operatorii obinu-
ii ai limbajului C i se pot defini i funcii utilizator (prin construcia f unct i on). Un ope-
rator preluat din Perl este cel de concatenare a irurilor de caractere, specificndu-se prin
intermediul caracterului punct . .
PHP pune la dispoziia programatorului i o serie de constante predefinite (ca de
exemplu, PHP_VERSI ON, TRUE i FALSE).
Pentru a experimenta exemplele de programe date n continuare, recomandm s insta-
lai mediul Apache2Triad, care pune la dispoziie, printre altele, pe platforma Windows
serverele Apache, MySQL i PHP, deja configurate pentru lucru. Apache2Triad este dis-
ponibil pentru download la adresa http://apache2triad.sourceforge.net/.

Funcionarea procesorului PHP
Un exemplu de lucru cu tablouri
Acest exemplu ilustreaz folosirea tablourilor indexate, a instruciunii de ciclare foreach i a
generrii de coninut XHTML spre a fi transmis ctre browser-ul Web.

86
Sabin Corneliu Buraga Tehnologii Web
<?php
/ / umpl emun t abl ou cu val or i de l a 1 l a 10
f or ( $cont or = 1; $cont or <= 10; $cont or ++) {
$val or i [ $cont or ] = $cont or ;
}
/ / r eal i zamsuma val or i l or
$suma = 0;
f or each ( $val or i as $el ement )
$suma += $el ement ;
/ / af i samsuma obt i nut e l a i esi r ea st andar d
/ / pent r u a f i t r i mi sa br owser ul ui
echo ( " <p>Suma de l a 1 l a 10 est e: <b>" . $suma . " </ b></ p>" ) ;
?>
Un exemplu de definire i folosire a funciilor specificate de utilizator
Urmtoarele linii PHP ofer detalii privitoare la modul de creare i de utilizare a funciilor
definite de utilizator:
<?php
/ / f unct i a de r i di car e l a pat r at
f unct i on pat r at ( $numar ) {
r et ur n $numar * $numar ;
}

$numar = 0;

whi l e ( $numar < 10) {
$numar ++; / / i ncr ement amnumar ul

i f ( $numar %2) / / e numar i mpar . . .
cont i nue; / / cont i nuamcu ur mat oar ea i t er at i e

/ / e numar par , deci af i sampat r at ul
echo " <p>$numar l a pat r at est e " . pat r at ( $numar ) . " </ p>" ;
}
?>
Un exemplu de prelucrare a formularelor electronice
Puterea limbajului PHP const i n manipularea facil a formularelor, dup cum vom
vedea n continuare.
Presupunem c definim urmtorul formular folosit de utilizatori pentru a introduce di-
verse impresii despre o pagin Web personal:
<ht ml >
<head>
<t i t l e>I mpr esi i </ t i t l e>
</ head>
<body t ext =" bl ue" bgcol or =" whi t e" >
<f or mact i on=" add. php" met hod=" POST" name=" For m" >
<t abl e al i gn=" cent er " cel l paddi ng=" 4" >
<t r >
<t d>
<p>Numel e i pr enumel e: </ p>
</ t d>
<t d>
<i nput t ype=" t ext " name=" nume" / >

87
Sabin Corneliu Buraga Tehnologii Web
</ t d>
</ t r >
<t r >
<t d>
<p>Ocupai a: </ p>
</ t d>
<t d>
<sel ect name=" ocupai a" si ze=" 1" >
<opt i on sel ect ed>St udent </ opt i on>
<opt i on>El ev</ opt i on>
<opt i on>Cadr u di dact i c</ opt i on>
<opt i on>Al t ceva</ opt i on>
</ sel ect >
</ t d>
</ t r >
<t r >
<t d>
<p>Vr st a: </ p>
</ t d>
<t d>
<p>
<i nput t ype=" r adi o" val ue=" sub 18"
name=" vi r st a" >sub 18 |
<i nput t ype=" r adi o" val ue=" 18- 25"
name=" vi r st a" checked>18- 25 |
<i nput t ype=" r adi o" val ue=" 25- 35"
name=" vi r st a" >25- 35 |
<i nput t ype=" r adi o" val ue=" 35- 60"
name=" vi r st a" >35- 60 |
<i nput t ype=" r adi o" val ue=" pest e 60"
name=" vi r st a" >pest e 60
</ t d>
</ t r >
<t r >
<t d>
<p>Adr esa e- mai l : </ p>
</ t d>
<t d>
<i nput t ype=" t ext " name=" emai l " >
</ t d>
</ t r >
<t r >
<t d>
<p>I mpr esi i l e d- voast r : </ p>
</ t d>
<t d>
<t ext ar ea name=" i mpr esi i " r ows=" 3" col s=" 60" >
</ t ext ar ea>
</ t d>
</ t r >
<t r >
<t d>
<i nput t ype=" submi t " val ue=" Tr i mi t e" >
</ t d>
<t d>
<i nput t ype=" r eset " val ue=" t er ge" >
</ t d>
</ t r >
</ t abl e>
</ f or m>
</ body>
</ ht ml >

88
Sabin Corneliu Buraga Tehnologii Web
Se solicit utilizatorului numele, ocupaia, vrsta, adresa de e-mail i impresiile care vor
fi procesate de programul (script-ul) PHP coninut n fiierul add.php. Acesta ar putea cu-
prinde urmtoarele:
<ht ml >
<body>
<?
i f ( ! $nume | | ! $emai l ) { / / nu s- au i nt r odus numel e sau adr esa
?>
<h4 st yl e=" col or : r ed" al i gn=" cent er " >
Er oar e: nu ai speci f i cat numel e sau adr esa!
</ h4>"
<p al i gn=" cent er " >Cor ect ai
<a hr ef =" j avascr i pt : hi st or y. go( - 1) " >
f or mul ar ul </ a></ p>
<?
}
el se {
?>
<h4 st yl e=" col or : gr een" al i gn=" cent er " >
For mul ar ul i nt r odus
</ h4>
<hr / >
<?
/ / cr eaz un mesaj pent r u a f i expedi at i pr i n e- mai l
$mesaj = " " ;
/ / dat a cur ent
$mesaj . = " <i mpr esi e dat a=\ " " . dat e( " d M Y, G: i " ) ;
$mesaj . = " \ " cl i ent =\ " " . $REMOTE_HOST
. " ( " . $REMOTE_ADDR . " ) \ " >\ n" ;

/ / concat eneaz numel e, adr esa, ocupai a i i mpr esi i l e
$mesaj . = " <nume emai l =\ " " . $emai l . " \ " >" .
$nume . " </ nume>\ n" ;
$mesaj . = " <ocupat i a>" . $ocupai a . " </ ocupai a>\ n" ;
$mesaj . = " <vi r st a>" . $vi r st a . " </ vi r st a>\ n" ;

/ / exi st i mpr esi i ?
i f ( $i mpr esi i )
$mesaj . = " <t ext >\ n" . $i mpr esi i .
" \ n</ t ext >\ n</ i mpr esi e>\ n" ;

/ / t r i mi t e e- mai l ul ( adr esa, subi ect , cor p- mesaj , dest i nat ar )
mai l ( " busaco@i nf oi asi . r o" , " I mpr esi i " ,
$mesaj , " Fr om: " . $emai l ) ;

/ / scr i e i nt r - un f i i er
$f = f open( " i mpr esi i . xml " , " a" ) ;
i f ( ! $f )
echo ( " <p>Er oar e l a deschi der ea f i i er ul ui ! </ p>" ) ;
el se
{
f put s( $f , $mesaj ) ;
f cl ose( $f ) ;
}

/ / scr i e i n pagi n ( conver t i nd NL cu <br >) ,
/ / dar t ag- ur i l e XML nu vor f i r ecunoscut e de navi gat or
$mesaj _ht ml = nl 2br ( $mesaj ) ;
echo ( " <cent er >$mesaj _ht ml </ cent er >" ) ;
}

89
Sabin Corneliu Buraga Tehnologii Web
?>
<! - - f i nal de pagi n - - >
<hr / >
</ body>
</ ht ml >
Script-ul PHP va expedia prin pota electronic, unui anumit utilizator, datele introdu-
se n formular, prin intermediul funciei predefinite mai l ( ) , i va genera un fiier numit
impresii.xml cuprinznd impresiile enunate de vizitatorii paginii.
Un fragment dintr-un astfel de fiier XML este dat mai jos:
. . .
<i mpr esi e dat a=" 01 Nov 2006, 11: 33"
cl i ent =" f enr i r . i nf oi asi . r o ( 193. 231. 30. 197) " >
<nume emai l =" socr at e@t ui asi . r o" >Radu Fi l i p</ nume>
<ocupat i a>St udent </ ocupat i a>
<vi r st a>18- 25</ vi r st a>
<t ext >
Sal ut ! . . .
Ce mai f aci ?
</ t ext >
</ i mpr esi e>
<i mpr esi e dat a=" 02 Nov 2006, 18: 42"
cl i ent =" l ocal host ( 127. 0. 0. 1) " >
<nume emai l =" l umi ni sh@i nf oi asi . r o" >Lumi ni a Chi r an</ nume>
<ocupai a>Cadr u di dact i c</ ocupai a>
<vi r st a>25- 35</ vi r st a>
<t ext >
mi pl ace, ns cr ed c ar f i t r ebui t s pui i ceva
r ef er i t or l a adnot ar ea l i ngvi st i c ( e. g. TEI ) .
Lumi ni a
</ t ext >
</ i mpr esi e>
. . .
Dup cum se observ, PHP ofer un limbaj script puternic i simplu, accesul la cm-
purile formularului realizndu-se prin intermediul unor variabile create automat. n cazul
cmpurilor checkbox ale unui formular, nu se creeaz variabile dect pentru cmpurile bi-
fate. Dac nu apare atributul val ue pentru un buton checkbox, atunci valoarea variabilei
corespunztoare lui va fi setat automat pe on.
Atenie! Ultimele versiuni de PHP interzic folosirea variabilelor globale pentru a avea
acces direct la datele din formulare, transmise de ctre clientul Web. Astfel, se va folosi,
n loc de $nume, construcia $_REQUEST[ " nume" ] .
n PHP exist, de asemenea, o multitudine de funcii predefinite (o serie fiind similare
funciilor din bibliotecile standard ale limbajului C) detalii la www.php.net (situl oficial
al serverului de aplicaii PHP; tot n cadrul sitului avei posibilitatea s obinem manualul
PHP, n diverse formate):
matematice;
de conversie;
de manipulare a irurilor de caractere;

90
Sabin Corneliu Buraga Tehnologii Web
de prelucrare a tablourilor;
de acces la resursele sistemului de operare i de lucru cu fiiere;
de manipulare a bazelor de date;
privitoare la conexiunile Internet (HTTP, FTP);
pentru accesarea fiierelor avnd tipuri speciale: PDF, JPEG, XML etc.;
specifice sistemului de operare;
generale.
Programare orientat-obiect n PHP
Limbajul PHP ofer implementarea unora dintre cele mai importante aspecte ale pro-
gramrii obiectuale: ncapsularea datelor, motenirea, polimorfismul. Astfel, PHP d po-
sibilitatea programatorului s exprime distincia dintre proprietile generale i cele speci-
fice ale obiectelor cu care lucreaz. Vom ilustra aceste caracteristici prin cteva exemple
concludente.
ncapsularea
ncapsularea datelor reprezint un mecanism de protecie a membrilor de tip dat, acce-
sul la ei realizndu-se exclusiv prin intermediul unor metode specifice i nu n mod direct.
Acest lucru se realizeaz prin intermediul claselor, dup cum se poate remarca din frag-
mentul de cod PHP de mai jos:
<?php
cl ass St udent {
/ / dat e- membr u
var $year ; / / an
var $age; / / vr st a
var $name; / / nume

/ / met ode
f unct i on set Year ( $y) {
$t hi s- >year = $y;
}
f unct i on get Year ( ) {
r et ur n $t hi s- >year ;
}
. . .
}
?>
Datele-membru se definesc utiliznd var, putnd avea orice tip (ntreg, tablou sau chiar
obiect). Metodele se specific prin declaraii de funcii care prelucreaz membrii clasei.
Pentru a accesa datele clasei, metodele vor trebui s se foloseasc de construcia sintactic
$t hi s- >var i abi l a, altfel var i abi l a se consider a fi local n cadrul acelei metode.
Vom crea un obiect prin operatorul new, exact ca n limbajul C++:
$st ud = new St udent ;

91
Sabin Corneliu Buraga Tehnologii Web
Accesarea metodelor clasei se realizeaz astfel:
$st ud- >set Year ( 4) ;
$st udent _year = $st ud- >get Year ( ) ;
Din pcate, n PHP4, membrii dat ai clasei pot fi accesai direct, neputndu-i declara
privai. La fel, metodele nu pot fi specificate private sau protejate, aa cum se ntmpl la
C++. Astfel, PHP ofer doar suport pentru ncapsulare, dar nu o poate impune. n versi-
unea PHP 5 acest aspect a fost remediat.
Pentru funciile membru, n loc de construcia sintactic - >, n PHP 4 se permite
: : . Astfel, codul de mai sus este echivalent cu:
$st udent _year = $st ud: : get Year ( ) ;
Motenirea
Motenirea reprezint posibilitatea folosirii datelor sau metodelor definite n prealabil de
o anumit clas n cadrul unei clase derivate din prima. Relaia de derivare se specific
prin cuvntul-cheie ext ends:
<?php
cl ass GoodSt udent ext ends St udent {
/ / dat e- membr u
var $pr i zes; / / pr emi i

/ / met ode
f unct i on set Pr i zes( $p) {
$t hi s- >pr i zes = $p;
}
f unct i on get Pr i zes( ) {
r et ur n $t hi s- >pr i zes;
}
}
?>
Putem scrie urmtoarele linii:
$goodst ud = new GoodSt udent ;
/ / apel de met od di n cl asa de baz
$goodst ud- >set Age( 21) ;
/ / apel de met od di n cl asa der i vat
$goodst ud- >set Pr i zes( 2) ;
n PHP motenirea multipl nu este nc posibil. Nu putem avea, de exemplu:
cl ass Gr eat St udent ext ends GoodSt udent Geni us {
. . .
}
Pentru a accesa membri ai clasei printe ne vom folosi de construcia : : (exact ca i
n C++).
Constructori
PHP permite specificarea constructorilor, ei fiind metode cu acelai nume al clasei din
care aparin, fiind apelai automat atunci cnd instaniem un obiect al clasei respective.
Putem avea, de exemplu:

92
Sabin Corneliu Buraga Tehnologii Web
<?php
cl ass St udent {
/ / dat e- membr u
var $year ; / / an
var $age; / / vr st a
var $name; / / nume

/ / const r uct or
f unct i on St udent ( $y, $a, $n) {
$t hi s- >year = $y;
$t hi s- >age = $a;
$t hi s- >name = $n;
}
/ / met ode
f unct i on set Year ( $y) {
$t hi s- >year = $y;
}
f unct i on get Year ( ) {
r et ur n $t hi s- >year ;
}
. . .
}
?>
Aadar, acum se poate crea un obiect de genul:
$st ud = new St udent ( 3, 24, " Radu Fi l i p" ) ;
Constructorii i metodele, fiind funcii PHP obinuite, pot avea specificate valori im-
plicite pentru argumente (ca n C++):
f unct i on St udent ( $y = " 4" , $a = " 22" , $n = " " )
Dac scriem n acest mod constructorul, atunci n urmtoarele cazuri vom avea:
/ / year = 4, age = 22, name = " "
$st ud = new St udent ( ) ;
/ / year = 2, age = 22, name = " "
$st ud = new St udent ( 2) ;
/ / year = 2, age = 20, name = " "
$st ud = new St udent ( 2, 20) ;
Atunci cnd un obiect al unei clase derivate este creat, numai constructorul lui propriu
va fi apelat, constructorul clasei de baz nefiind apelat implicit. Dac dorim ca i con-
structorul clasei printe s fie apelat, o vom face ntr-o manier explicit:
<?php
f unct i on GoodSt udent {
$t hi s- >pr i zes = 3;
/ / apel expl i ci t al const r uct or ul ui cl asei de baz
$t hi s- >St udent ( ) ;
}
?>
ncepnd cu versiunea 4, tipurile permise pentru parametrii unui constructor sunt doar
cele simple (ntregi, iruri de caractere), deci nu vor putea fi executate transmiteri de ta-
blouri sau de obiecte.
Dac o clas derivat nu posed propriul ei constructor, va fi apelat implicit construc-
torul clasei printe.

93
Sabin Corneliu Buraga Tehnologii Web
Mecanismul obiectual n PHP 4 nu permite declararea destructorilor i nici specificarea
de clase abstracte (dei se pot imagina metode mai mult sau mai puin sofisticate pentru a
le simula). n PHP 5, exist ns posibilitatea specificrii destructorilor.
Suprancrcarea
Suprancrcarea (asocierea de semantici diferite unei aceleai funcii pe baza tipurilor pa-
rametrilor specificai) nu este suportat nici ea. Putem ns suprancrca, indirect, con-
structorii prin crearea de obiecte diferite n funcie de numrul de argumente specificate:
<?php
cl ass St udent {
. . .
f unct i on St udent ( ) {
/ / cont r ui mun i r de apel
$met hod_name = " St udent " . f unc_num_ar gs( ) ;
$t hi s- >$met hod_name( ) ;
}
f unct i on St udent 1( $x) {
/ / cod
}
f unct i on St udent 2( $x, $y) {
/ / cod
}
. . .
}
?>
Vom putea scrie:
$st ud1 = new St udent ( ' 1' ) ; / / va apel a St udent 1
$st ud2 = new St udent ( ' 1' , ' 2' ) ; / / va apel a St udent 2
Pentru a pasa un numr variabil de parametri unei funcii i a-i folosi ulterior putem s
ne slujim de funciile predefinite f unc_get _ar gs( ) , f unc_num_ar gs( ) i
f unc_get _ar g( ) .
Astfel, metoda St udent ( ) de mai sus va putea afia toi parametrii transmii prin co-
dul urmtor:
f unct i on St udent ( )
{
$ar gs_ar r ay = f unc_get _ar gs( ) ;
f or ( $i = 0; $i < count ( $ar gs_ar r ay) ; $i ++)
pr i nt ( $i => $ar gument _ar r ay [ $i ] ) ;
}

94
Sabin Corneliu Buraga Tehnologii Web
Polimorfismul
Polimorfismul reprezint abilitatea unui obiect de a determina care metod trebuie invo-
cat pentru un obiect pasat ca argument n momentul rulrii i acest lucru se realizeaz
foarte uor n limbaje interpretate precum PHP.
Vom ilustra acest concept i implementarea lui n PHP presupunnd c avem o clas
Fi gur e desemnnd o figur geometric n care se definete metoda dr aw( ) i clasele
derivate Ci r cl e i Squar e unde vom rescrie metoda dr aw( ) n funcie de figura dorit
a fi desenat:
<?php
. . .
f unct i on dr awi ng( $obj ) { / / met oda cl asei Boar d
$obj - >dr aw( ) ;
}

/ / coor donat e cent r u i r aza
$ci r cl e = new Ci r cl e( 100, 100, 33) ;
/ / coor donat e st nga- sus i l at ur a
$squar e = new Squar e( 100, 200, 74) ;

/ / af i eaz cel e dou f i gur i
$boar d = dr awi ng( $ci r cl e) ; / / apel eaz dr aw( ) di n Ci r cl e
$boar d = dr awi ng( $squar e) ; / / apel eaz dr aw( ) di n Squar e
. . .
?>

Funcii utile pentru manipularea obiectelor
ncepnd cu PHP 4, se pun la dispoziia programatorului o serie de funcii folositoare:
get _cl ass( ) va returna numele unui obiect, instan a unei clase;
get _par ent _cl ass( ) furnizeaz clasa printe din care provine un anumit
obiect;
met hod_exi st s( ) testeaz dac exist o metod pentru un anumit obiect
specificat;
cl ass_exi st s( ) testeaz existena unei clase;
i s_subcl ass_of ( ) va determina existena unei relaii de motenire dintre
dou clase.
O alt facilitate este cea a transmiterii prin referin a parametrilor i nu prin valoare,
cum se realizeaz n mod implicit. Pentru a fi transmis prin referin, vom prefixa numele
acelui parametru cu caracterul &.

95
Sabin Corneliu Buraga Tehnologii Web
Accesarea bazelor de date
Cele de mai sus ne permit s definim un mecanism bazat pe obiecte pentru manipularea
informaiilor din bazele de date SQL. Pentru a accesa o baz de date (de oricare tip) va
trebui s specificm mulimea minimal de membri (date i metode) pe care s o ncapsu-
lm ntr-o clas general:
cl ass Dat aBase_SQL {
/ / dat e- membr u
var $Li nk_I D = 0; / / i dent i f . l egt ur i i cu o baz de dat e
var $Quer y_I D = 0; / / i dent i f . i nt er ogr i i act i ve
var $er r or = 0; / / st ar ea de er oar e

/ / met ode
f unct i on connect ( ) { . . . }
f unct i on quer y( ) { . . . }
f unct i on next _r ecor d( ) { . . . }
f unct i on num_r ows( ) { . . . }
}
Metoda quer y( ) verific existena unui $Li nk_I D valid care s pointeze spre o baz
de date activ. Dac nu exist, quer y( ) va apela connect ( ) pentru a stabili o legtur
cu serverul SQL. Execuia metodei quer y( ) va actualiza variabila $Quer y_I D i metoda
next _r ecor d( ) va putea furniza nregistrrile gsite n urma invocrii interogrii SQL.
Metoda num_r ows( ) va returna numrul total de rnduri ale tabelei.
Accesnd bazele de date prin clase, ne vine mult mai uor s realizm, de exemplu, do-
u interogri concurente asupra aceleai tabele, prin instanierea obiectelor de mai jos:
$db1 = new Dat aBase_SQL;
$db2 = new Dat aBase_SQL;
Folosind cele de mai sus, putem concepe o clas care s ne faciliteze accesarea unei ba-
ze de date MySQL. Astfel, vom defini clasa derivat:
cl ass Dat aBase_MySQL ext ends Dat aBase_SQL {
/ / dat e- membr u
var $Host = " " ; / / adr esa ser ver ul ui MySQL
var $Dat aBase = " " ; / / numel e bazei de dat e de pe ser ver
var $User = " " ; / / numel e ut i l i zat or ul ui
var $Passwor d = " " ; / / par ol a ut i l i zat or ul ui

var $Li nk_I D = 0; / / r ezul t at ul l ui mysql _connect ( )
/ / r ezul t at ul cel ei mai r ecent e mysql _quer y( )
var $Quer y_I D = 0;
/ / r ezul t at ul cur ent al l ui mysql _f et ch_ar r ay( )
var $Recor d = ar r ay( ) ;
var $Row; / / numr ul r ndul ui cur ent

var $Er r no = 0; / / st ar ea de er oar e a i nt er ogr i i
var $Er r or = " " ;

/ / met ode
. . .
}

96
Sabin Corneliu Buraga Tehnologii Web
Pentru nceput trebuie s scriem codul care stabilete conexiunea cu serverul de baze
de date MySQL. n caz de eec, va trebui s semnalm acest lucru programului care ma-
nipuleaz o instan a clasei noastre. Vom furniza n continuare metoda connect ( ) care
va utiliza funcia auxiliar hal t ( ) :
/ / opr et e execui a n caz de er oar e f at al
f unct i on hal t ( $msg) {
pr i nt f ( " <p>Dat abase er r or : %s\ n" , $msg) ;
pr i nt f ( " <p>MySQL er r or : <b>%s ( %s) </ b>\ n" ,
$t hi s- >Er r no, $t hi s- >Er r or ) ;
di e( " Sessi on hal t ed. " ) ;
}

/ / conect ar ea l a baza de dat e
f unct i on connect ( ) {
i f ( $t hi s- >Li nk_I D == 0) { / / nc nu exi st o conexi une
$t hi s- >Li nk_I D = mysql_connect( $t hi s- >Host ,
$t hi s- >User , $t hi s- >Passwor d) ;
/ / succes sau eec?
i f ( ! $t hi s- >Li nk_I D)
$t hi s- >hal t ( " Connect f ai l ed" ) ;
/ / deschi de baza de dat e
i f ( ! mysql_query( spr i nt f ( " use %s" , $t hi s- >Dat aBase) ,
$t hi s- >Li nk_I D) )
$t hi s- >hal t ( " Cannot use dat abase" . $t hi s- >Dat aBase) ;
}
}
Implementarea metodei quer y( ) poate fi urmtoarea:
/ / t r i mi t e o i nt er ogar e ser ver ul ui MySQL
f unct i on quer y( $quer y_st r ) {
/ / r eal i zeaz conect ar ea. . .
$t hi s- >connect ( ) ;

/ / ncear c s execut e i nt er ogar ea
$t hi s- >Quer y_I D = mysql_query( $quer y_st r , $t hi s- >Li nk_I D) ;
/ / i ni i al st abi l i mpoi nt er ul pe pr i ma nr egi st r ar e
$t hi s- >Row = 0;
/ / sal veaz er or i l e
$t hi s- >Er r no = mysql_errno();
$t hi s- >Er r or = mysql_error();

/ / er oar e f at al ?
i f ( ! $t hi s- >Quer y_I D)
$t hi s- >hal t ( " I nval i d SQL: " . $quer y_st r ) ;

r et ur n $t hi s- >Quer y_I D;
}
Mai sunt necesare a fi specificate metodele next _r ecor d( ) i seek( ) :
/ / f ur ni zeaz dac mai exi st o nr egi st r ar e
f unct i on next _r ecor d( ) {
/ / sal veaz nt r - un t abl ou nr egi st r r i l e
$t hi s- >Recor d = mysql_fetch_array( $t hi s- >Quer y_I D) ;
$t hi s- >Row++;
/ / sal veaz er or i l e
$t hi s- >Er r no = mysql_errno();
$t hi s- >Er r or = mysql_error();


97
Sabin Corneliu Buraga Tehnologii Web
/ / r et ur neaz nr egi st r ar ea gsi t
$st at = i s_ar r ay( $t hi s- >Recor d) ;
i f ( ! $st at ) {
/ / nu mai exi st o al t nr egi st r ar e
mysql_free_result( $t hi s- >Quer y_I D) ;
/ / se el i ber eaz i nt er ogar ea
$t hi s- >Quer y_I D = 0;
}

r et ur n $st at ;
}

/ / f ur ni zeaz o nr egi st r ar e dup pozi i a ei
f unct i on seek( $pos) {
$st at us = mysql_data_seek( $t hi s- >Quer y_I D, $pos) ;
i f ( $st at us)
$t hi s- >Row = $pos;
r et ur n;
}
n acest moment putem s realizm o interogare particular asupra unei baze de date
MySQL coninnd informaii despre studeni. Pentru aceasta, trebuie s completm pa-
rametrii $Host , $Dat aBase, $User i Passwor d. Vom utiliza o clas derivat Dat a-
Base_St ud astfel:
cl ass Dat aBase_St ud ext ends Dat aBase_SQL {
var $Host = " l ocal host " ;
var $User = " busaco" ;
var $Passwor d = " " ;
var $Dat aBase = " st udent s" ;
}
Codul PHP pentru afiarea numelui i vrstei tuturor studenilor din anul IV este ur-
mtorul:
<?php
/ / i nst ani er ea obi ect ul ui
$db = new Dat aBase_St ud;
/ / conect ar ea l a ser ver ul MySQL
$db- >connect ( ) ;
/ / f or mul eaz i nt er ogar ea SQL
$quer y = " sel ect name, age f r omst udent s wher e year = 4" ;
$db- >quer y( $quer y) ;
?>
<ht ml >
<body>

<h3>St udeni i anul ui I V</ h3>
<hr >
<! - - par cur gemt oat e nr egi st r r i l e gsi t e - - >
<?php whi l e( $db- >next _r ecor d( ) ) { ?>
<! - - Numel e ngr oat - - >
<p><b><?php pr i nt $db- >Recor d[ " name" ] ?></ b></ p>
<! - - Vr st a cu i t al i ce - - >
<p><i ><?php pr i nt $db- >Recor d[ " age" ] ?></ i ></ p>
<hr / >
<?php } ?>
</ body>
</ ht ml >

98
Sabin Corneliu Buraga Tehnologii Web
Firesc, nainte de a utiliza acest script, trebuie s crem o baz de date MySQL pe care
o vom numi stud, iar n cadrul acesteia vom genera o tabel students coninnd informa-
ii despre studeni (omitem rspunsurile sistemului dup execuia fiecrei comenzi SQL):
$ mysql - h l ocal host - u busaco - p
Ent er passwor d: ********

mysql > cr eat e dat abase st ud;

mysql > use st ud;

mysql > cr eat e t abl e st udent s(
- > year i nt ( 1) ,
- > name char ( 50) ,
- > age i nt ( 2) ,
- > i d char ( 4) ,
- > pi c char ( 80)
- > ) ;
mysql > cr eat e uni que i ndex st ud_i dx on st udent s ( i d ) ;
Ultima linie construiete un index pe baza cmpului de identificare a unui student (i d),
index denumit st ud_i dx.
Deoarece sistemul de gestiune a bazelor de date lucreaz n context multi-utilizator, va
trebui s acordm dreptul de acces asupra unei baze de date (de exemplu, pentru selecia,
inserarea i tergerea de nregistrri) prin intermediul comenzii SQL gr ant . Pentru ca
utilizatorul busaco s se poat conecta la baza de date de pe sistemul local i s poat
executa comenzile SQL sel ect , i nser t i del et e vom scrie:
mysql > gr ant usage on st ud. * t o busaco@l ocal host ;
mysql > gr ant sel ect , i nser t , del et e on st ud. * t o busaco@l ocal host ;
n figura de mai jos putem observa operaiunile efectuate n cadrul unei tranzacii de
date ntre navigator i serverul Web, utilizndu-se i un server MySQL:

Executarea unei interogri SQL dintr-un script PHP
Paii efectuai sunt:
1. Iniierea de ctre navigator a unei conexiuni HTTP cu serverul Web;
2. Preprocesarea codului PHP de ctre interpretorul PHP;
3. Trimiterea interogrii SQL coninute de codul PHP spre serverul MySQL;

99
Sabin Corneliu Buraga Tehnologii Web
4. Returnarea rezultatelor interogrii SQL;
5. Returnarea de ctre motorul PHP a codului HTML generat, n urma procesrii
ntregului program PHP;
6. Trimiterea documentului HTML spre navigatorul Web.
n cadrul clasei Dat aBase_MySQL mai putem implementa urmtoarele metode utile:
/ / numr ul de nr egi st r r i gsi t e
f unct i on num_r ows( ) {
r et ur n mysql_num_rows( $t hi s- >Quer y_I D) ;
}
/ / numr ul de cmpur i
f unct i on num_f i el ds( ) {
r et ur n mysql_num_fields( $t hi s- >Quer y_I D) ;
}
/ / val oar ea unui cmp par t i cul ar
f unct i on get _f i el d( $f i el d) {
r et ur n $t hi s- >Ret ur n[ $f i el d] ;
}
Se pot imagina, de asemeni, clase similare i pentru alte sisteme de management al ba-
zelor de date (e.g., PostgreSQL, Oracle, ODBC).
Procesarea documentelor XML n PHP
Pentru a procesa documentele XML n cadrul programelor PHP, va trebui s avem la
dispoziie un analizor XML instalat pe server, de exemplu un procesor SAX sau DOM.
Dup cum deja am vzut, n cazul procesrii prin SAX se declaneaz un anumit eve-
niment care va trebui tratat de o funcie definit de programator. Pentru a ataa funcii
evenimentelor XML, ne vom folosi de o serie de funcii PHP predefinite:
xml _set _el ement _handl er ( ) stabilete funciile care vor fi apelate
pentru procesarea elementelor XML (pentru tag-urile de nceput i de sfrit);
xml _set _char act er _dat a_handl er ( ) stabilete funcia care va fi ape-
lat atunci cnd analizorul ntlnete un nod de tip CDATA (text);
xml _set _pr ocessi ng_i nst r uct i on_handl er ( ) definete funcia care
va fi executat la apariia unei instruciuni de procesare.
Alte funcii importante puse la dispoziie sunt:
xml _par ser _cr eat e( ) iniializeaz analizorul XML i returneaz
o instan a sa;
xml _par ser _f r ee( ) elibereaz memoria alocat analizorului;
xml _set _obj ect ( ) stabilete adresele funciilor care vor fi utilizate de
analizor pentru a realiza procesarea documentului XML dorit;

100
Sabin Corneliu Buraga Tehnologii Web
xml _par ser _set _opt i on( ) se folosete la setarea unor opiuni de ana-
liz XML (e.g., modul de tratare a scrierii cu majuscule sau minuscule
a tag-urilor);
xml _get _er r or _code( ) furnizeaz codul de eroare n urma
eecului procesrii.
Pot fi amintite, de asemenea, funciile dnd mai multe amnunte despre erorile surve-
nite n timpul analizei: xml _er r or _st r i ng( ) i xml _get _cur r ent _l i ne_number ( ) .
Funcia xml _par se( ) returneaz, n caz de eec, o serie de coduri de eroare ale cror
constante simbolice predefinite pot fi consultate n manualul PHP.
Vom defini o clas pe care o vom folosi ulterior la procesarea documentelor XML
(vom salva acest cod n fiierul par seXML. php).
<?php

/ / o cl as pent r u pr el ucr ar ea document el or XML
cl ass par seXML {
var $xml _par ser ; / * i nst ana anal i zor ul ui XML */
var $xml _f i l e; / * numel e f i i er ul ui XML */
var $ht ml _code; / * codul HTML gener at */
var $open_t ags; / * mul i mea t ag- ur i l or de nceput */
var $cl ose_t ags; / * mul i mea t ag- ur i l or de sf r i t */

/ / const r uct or
f unct i on par seXML( ) {
$t hi s- >xml _par ser = " " ;
$t hi s- >xml _f i l e = " " ;
$t hi s- >ht ml _code = " " ;
$t hi s- >open_t ags = ar r ay( ) ;
$t hi s- >cl ose_t ags = ar r ay( ) ;
}
/ / dest r uct or
f unct i on dest r oy( ) {
i f ( $t hi s- >xml _par ser )
xml _par ser _f r ee( $t hi s- >xml _par ser ) ;
}
/ / met ode
/ / set eaz t ag- ur i l e de nceput
f unct i on set _open_t ags( $t ags) {
$t hi s- >open_t ags = $t ags;
}
/ / set eaz t ag- ur i l e de sf r i t
f unct i on set _cl ose_t ags( $t ags) {
$t hi s- >cl ose_t ags = $t ags;
}
/ / set eaz numel e f i i er ul ui XML

101
Sabin Corneliu Buraga Tehnologii Web
f unct i on set _xml _f i l e( $f i l e) {
$t hi s- >xml _f i l e = $f i l e;
}

/ / f ur ni zeaz codul HTML gener at
f unct i on get _ht ml _code( ) {
r et ur n $t hi s- >ht ml _code;
}
/ / t r at ar ea eveni ment ul ui de
/ / apar i i e a unui t ag de nceput
f unct i on st ar t _el ement ( $par ser , $name, $at t r s) {
i f ( $f or mat = $t hi s- >open_t ags[ $name] )
$t hi s- >ht ml _code . = $f or mat ;
}
/ / t r at ar ea eveni ment ul ui de
/ / apar i i e a unui t ag de sf r i t
f unct i on end_el ement ( $par ser , $name) {
i f ( $f or mat = $t hi s- >cl ose_t ags[ $name] )
$t hi s- >ht ml _code . = $f or mat ;
}
/ / t r at ar ea eveni ment ul ui de
/ / apar i i e a unui el ement de t i p CDATA
f unct i on char act er _dat a( $par ser , $dat a) {
$t hi s- >ht ml _code . = $dat a;
}
/ / t r at ar ea eveni ment ul ui de
/ / apar i i e a unei i nst r uci uni de pr ocesar e
f unct i on pr ocessi ng_i nst r uct i on( $par ser , $t ar get , $dat a) {
swi t ch ( st r t ol ower ( $t ar get ) ) {
case " php" : eval ( $dat a) ;
br eak;
}
}
/ / f unci a de anal i z pr opr i u- zi s
f unct i on par se( ) {
/ / i nst ani az pr ocesor ul XML
$t hi s- >xml _par ser = xml _par ser _cr eat e( ) ;

/ / nr egi st r eaz f unci i l e de anal i z
xml _set _obj ect ( $t hi s- >xml _par ser , &$t hi s) ;

/ / set eaza opi uni l e de anal i z
/ / ( t ag- ur i l e nu sunt r escr i se cu car act er e mar i )
xml _par ser _set _opt i on( $t hi s- >xml _par ser ,
XML_OPTI ON_CASE_FOLDI NG, f al se) ;

/ / set eaz f unci i l e de pr ocesar e a el ement el or XML
xml _set _el ement _handl er ( $t hi s- >xml _par ser ,

102
Sabin Corneliu Buraga Tehnologii Web
" st ar t _el ement " , " end_el ement " ) ;
xml _set _char act er _dat a_handl er ( $t hi s- >xml _par ser ,
" char act er _dat a" ) ;
xml _set _pr ocessi ng_i nst r uct i on_handl er ( $t hi s- >xml _par ser ,
" pr ocessi ng_i nst r uct i on" ) ;

/ / deschi de f i i er ul XML
i f ( ! ( $f p = f open( $t hi s- >xml _f i l e, " r " ) ) )
di e( " coul d not open XML sour ce" ) ;
/ / pr oceseaz f i i er ul
whi l e ( $dat a = f r ead( $f p, 4096) ) {
i f ( ! xml _par se( $t hi s- >xml _par ser , $dat a, f eof ( $f p) ) ) {
/ / er oar e de pr ocesar e
di e( spr i nt f ( " XML er r or : %s at l i ne %d" ,
xml _er r or _st r i ng( xml _get _er r or _code( $t hi s- >xml _par ser ) ) ,
xml _get _cur r ent _l i ne_number ( $t hi s- >xml _par ser ) ) ) ;

}
} / * whi l e */
} / * par se( ) */
} / * cl ass */
?>
Folosind aceast clas, putem transforma un document XML n cod HTML, dup
cum se poate remarca din exemplul de mai jos, unde va fi prelucrat fiierul cu impresii
despre un anumit sit Web i va fi generat un tabel HTML.
Documentul XML coninnd impresii privitoare la un sit Web are structura de mai jos:
<i mpr esi e dat a=" 01 Nov 2006, 11: 33"
cl i ent =" f enr i r . i nf oi asi . r o ( 193. 231. 30. 197) " >
<nume emai l =" socr at e@t ui asi . r o" >Radu Fi l i p</ nume>
<ocupat i a>St udent </ ocupat i a>
<vi r st a>18- 25</ vi r st a>
<t ext >
Sal ut ! . . .
Ce mai f aci ?
</ t ext >
</ i mpr esi e>
Codul-surs PHP este dat n continuare:
<?php
/ / necesi t pr ezena cl asei def i ni t e mai sus
r equi r e( " par seXML. php" ) ;

/ / subst i t ui a t ag- ur i l or XML cu cod HTML
/ / se f ol osesc dou t abl our i asoci at i ve
$open_t ags = ar r ay(

103
Sabin Corneliu Buraga Tehnologii Web
" i mpr esi i " => " \ n<! - - gener at de par seXML - - >\ n" .
" <t abl e>" ,
" i mpr esi e" => " <t r st yl e=\ " t ext - al i gn: cent er \ " >" ,
" nume" => " <t d><h4>" ,
" ocupat i a" => " <t d><p st yl e=\ " col or : bl ue\ " >" ,
" vi r st a" => " <t d><p><i >" ,
" t ext " => " <t d><p cl ass=\ " t ext \ " >" ) ;
$cl ose_t ags = ar r ay(
" i mpr esi i " => " </ t abl e>\ n" .
" <! - - sf r i t ul gener r i i par seXML - - >\ n" ,
" i mpr esi e" => " </ t r >" ,
" nume" => " </ h4></ t d>" ,
" ocupat i a" => " </ p></ t d>" ,
" vi r st a" => " </ i ></ p></ t d>" ,
" t ext " => " </ p></ t d>" ) ;

/ / i nst ani az i i ni i al i zeaz anal i zor ul
$par ser = new par seXML( ) ;
$par ser - >set _xml _f i l e( " i mpr esi i . xml " ) ;
$par ser - >set _open_t ags( $open_t ags) ;
$par ser - >set _cl ose_t ags( $cl ose_t ags) ;
/ / r ul eaz anal i zor ul
$par ser - >par se( ) ;
/ / af i eaz r ezul t at ul
echo $par ser - >get _ht ml _code( ) ;
/ / di st r uge obi ect ul
$par ser - >dest r oy( ) ;
?>
Clasa definit este suficient de general pentru a putea fi utilizat pentru orice tip de
document XML. Tag-urile netratate de programul nostru vor fi ignorate.
De multe ori ns ar fi de dorit s realizm anumite prelucrri asupra datelor stocate de
fiierele XML. Putem nc s ne slujim de par seXML. De exemplu, am dori ca utilizatorul
(sau autorul sitului) s poat trimite mesaje celor care i-au lsat impresiile. Pentru aceasta
vom defini o clas derivat din clasa par seXML i vom redefini funciile
st ar t _el ement ( ) i end_el ement ( ) :
<?php
r equi r e( " par seXML. php" ) ;

/ / f ol osi r ea mot eni r i i pent r u a def i ni
/ / un al t compor t ament
cl ass par seXML2 ext ends par seXML {

/ / i ndi c dac exi st at r i but ul " emai l "
var $i s_emai l = 0;


104
Sabin Corneliu Buraga Tehnologii Web
/ / r edef i ni r ea met odel or
f unct i on st ar t _el ement ( $par ser , $name, $at t r s) {
/ / apel eaz met oda di n cl asa de baz
par seXML: : st ar t _el ement ( $par ser , $name, $at t r s) ;
/ / pune i l i nk spr e adr esa e- mai l
i f ( ! st r cmp( $name, " nume" ) ) {
i f ( $at t r s[ " emai l " ] ) {
$f or mat = " <a t i t l e=\ " Tr i mi t e mesaj l a " .
$at t r s[ " emai l " ] .
" \ " hr ef =\ " mai l t o: " . $at t r s[ " emai l " ] . " \ " >" ;
$t hi s- >ht ml _code . = $f or mat ;
$t hi s- >i s_emai l = 1;
}
el se
$t hi s- >i s_emai l = 0;
}
}

f unct i on end_el ement ( $par ser , $name) {
/ / nchi de
i f ( ! st r cmp( $name, " nume" ) ) {
i f ( $t hi s- >i s_emai l ) {
$f or mat = " " ;
$t hi s- >ht ml _code . = $f or mat ;
}
}
/ / apel eaz met oda di n cl asa de baz
par seXML: : end_el ement ( $par ser , $name) ;
}
}
?>
Noul membru de tip dat i s_emai l este folosit pentru a putea nchide corect tag-urile
elementului <a>(se poate ntmpla ca atributul emai l s nu apar). Restul codului rm-
ne acelai, n loc de $par ser = new par seXML( ) trebuind fi scris linia
$par ser = new par seXML2( ) .
O posibil rulare a script-ului PHP de mai sus poate avea ca efect
pagina Web din cadrul capturii-ecran urmtoare:

105
Sabin Corneliu Buraga Tehnologii Web

Afiarea datelor XML n urma unei procesri SAX
Desigur, dac facem numai prelucrri asupra documentelor XML, ne putem dispensa
de definirea celor dou tablouri asociative open_t ags[ ] i cl ose_t ags[ ] , iar n funcii-
le st ar t El ement ( ) i endEl ement ( ) putem insera orice cod dorim.
O alt metod de procesare este descris n capitolul 4 al crii S. Buraga
(coord.), Aplicaii Web la cheie. Studii de caz implementate n PHP, Polirom, Iai,
2003.
Un exemplu complet de procesare DOM a unui document XML este furnizat n con-
tinuare. Intenionm s procesm coninutul unui fiier XML referitor la proiectele pro-
puse spre implementare studenilor urmnd disciplina Reele de calculatoare. Acest
document, numit pr oj ect s. xml , va avea structura (evident, e oferit aici doar un frag-
ment):
<! - - Document XML cont i ni nd i nf or mat i i despr e pr oi ect el e pr opuse
l a " Ret el e de cal cul at oar e" ( f r agment )

Aut or : Sabi n- Cor nel i u Bur aga - busaco@i nf oi asi . r o
Ver si une: 1. 6 / 2002- 2004
Ul t i ma act ual i zar e: 04 noi embr i e 2004
- - >
<p: pr oj ect s xml ns: p=" ur n: i nf oi asi . r o: pr oj ect s"
updat e=" 04 noi embr i e 2004" >

<pr oj ect cl ass=" B" >

106
Sabin Corneliu Buraga Tehnologii Web
<t i t l e>HangmanS</ t i t l e>
<desc>
Sa se i mpl ement eze un ser ver car e sa per mi t a. . .
</ desc>
<st ud>1</ st ud>
<ur l ></ ur l >
</ pr oj ect >

<pr oj ect cl ass=" A" >
<t i t l e>Net Chat S</ t i t l e>
<desc>
Sa se conceapa un ser ver de chat .
</ desc>
<st ud>2</ st ud>
<ur l >ht t p: / / www. i nf oi asi . r o/ ~busaco/ gaen/ </ ur l >
</ pr oj ect >

<pr oj ect cl ass=" A" >
<t i t l e>Super Pr oi ect </ t i t l e>
<desc>
Un super pr oi ect pent r u ni st e super st udent i !
</ desc>
<st ud>3</ st ud>
<ur l >ht t p: / / www. super . or g/ </ ur l >
</ pr oj ect >

<! - - si al t el e. . . - - >
</ p: pr oj ect s>
Pentru procesarea datelor, vom putea implementa urmtorul script PHP 4:
<?php
/ * Un pr ogr amPHP car e pr oceseaz un document XML f ol osi nd DOM
Funci oneaz pent r u PHP ver si unea 4. x

Aut or : Sabi n- Cor nel i u Bur aga - busaco@i nf oi asi . r o ( c) 2001, 2004
Ul t i ma act ual i zar e: 04 noi embr i e 2004
*/
/ / l ocul unde sunt st ocat e f i i er el e
def i ne ( " PATH" , ' ' ) ;
# De exempl u, pent r u Wi ndows cu Apache2Tr i ad i nst al at i n ' apache2' :
# def i ne ( " PATH" , ' c: \ \ apache2\ \ ht docs\ \ php- exampl es\ \ ' ) ;

/ / var i abi l a gl obal a i ndi cnd daca document ul a f ost modi f i cat
$modi f i ed = 0;

/ / ncr cmdocument ul XML
i f ( ! $doc = domxml _open_f i l e( PATH . " pr oj ect s. xml " ) ) {
echo " <p>A apr ut o er oar e l a pr ocesar ea document ul ui ! </ p>\ n" ;

107
Sabin Corneliu Buraga Tehnologii Web
exi t ;
}

/ / r dci na document ul ui
$r oot = $doc- >document _el ement ( ) ;

/ / af i mi nf or mai i gener al e despr e document
echo " <p>El ement ul r adaci na est e &l t ; " .
$r oot - >node_name( ) . " &gt ; . </ p>" ;

/ / af i mi nf or mai i pr i vi t oar e l a pr oi ect e
$pr oj s = $r oot - >get_elements_by_tagname( " pr oj ect " ) ;
f or each ( $pr oj s as $pr oj ) {
/ / pr el uamnodur i l e <t i t l e>
$t i t l es = $pr oj - >get_elements_by_tagname( " t i t l e" ) ;
f or each ( $t i t l es as $t i t l e) {
echo " <p>Pr oi ect : " . $t i t l e- >get_content( ) ;
}
/ / ver i f i cmcar e e cl asa pr oi ect ul ui
i f ( $pr oj - >has_attribute( " cl ass" ) ) {
echo " de cl asa " . $pr oj - >get_attribute( " cl ass" ) . " </ p>" ;
}
el se {
echo " de cl asa necunoscut a. </ p>" ;
/ / nu exi st a at r i but ul " cl ass" , l cr eam
/ / i mpl i ci t , pr oi ect ul e de cl as D
$at t r = $pr oj - >set_attribute( " cl ass" , " D" ) ;
/ / mar cmdocument ul ca f i i nd modi f i cat
$modi f i ed = 1;
}
}

/ / dac document ul a f ost modi f i cat , l af i m
i f ( $modi f i ed) {
$xml doc = $doc- >html_dump_mem( ) ;
echo " <pr e>" . ht ml ent i t i es( $xml doc) . " </ pr e>" ;
}
?>
n ceea ce privete realizarea de transformri XSLT, putem recurge la funcionalitile
oferite de extensia Sablotron disponibil n versiunea 4 a mediului. Funcia de transformare
XSL are forma:
f unct i on xsl t _t r ansf ( $xml , $xsl ) {
$xp = xslt_create( ) ; / / cr empr ocesor ul XSLT
$r ez = @xslt_process ( $xp, $xml , $xsl ) ; / / t r ansf or mm
i f ( ! $r ez) { / / o er oar e
echo " Er oar e XSLT: " . xslt_error ( $xp) .

108
Sabin Corneliu Buraga Tehnologii Web
" ( " . xslt_errno ( $xp) . " ) " ;
r et ur n 1;
}
echo $r ez; / / af i mr ezul t at ul t r ansf or mr i i
xslt_free ( $xp) ; / / el i ber mmemor i a
r et ur n 0;
}
La finalul acestei seciuni, menionm c n PHP 5 pentru realizarea validrilor XML
vom recurge la metodele puse la dispoziie de clasa DOMDocument . Pentru validri con-
form schemelor XML exist schemaVal i dat e( ) , iar cele DTD cu val i dat e( ) .
Exemplul de mai jos ilustreaz modul de validare via o schem XML:
<?php
$doc = DOMDocument::load( ' pr oj ect s- xsd. xml ' ) ;
echo ' Document ul est e ' .
$doc->schemaValidate( ' ht t p: / / l ocal host / pr oj ect s. xsd' ) ?
' val i d' : ' i nval i d' ;
?>

109
Sabin Corneliu Buraga Tehnologii Web

4. Servicii Web
Premise
Dup cum am mai menionat, originile i scopurile Web-ului iau n consideraie constitui-
rea unui spaiu de comunicare inter-uman prin intermediul partajrii cunotinelor i ex-
ploatarea puterii computaionale puse la dispoziie de calculatoarele inter-conectate. Se
poate remarca uor c interaciunea dintre om i Web se rezolv prin intermediul formu-
larelor Web, iar interaciunea dintre maini se desfoar pe Web ntr-o manier limitat.
Nevoile industriei au crescut, dorindu-se existena unor soluii multi-platform, slab-
conectate acestea conduc la integrarea aplicaiilor, serviciilor i sistemelor, prin folosirea
tehnologiile Web actuale. Aceast integrare trebuie s se realizeze ntr-un mod flexibil, ad
hoc, n funcie de necesiti. O alt necesitate privete crearea i exploatarea unor servicii
ataabile (pluggable) i inteligente, software-ul fiind vzut n termeni de serviciu i nu
drept aplicaie mamut (software as service). Aceasta pune premisele constituirii unor ofer-
tani de servicii de aplicaii (application service provider). Acesta conduce la proiectarea i
(re)folosirea unor standarde pentru ndeplinirea cerinelor legate de vehicularea, disponi-
bilitatea, mentenana, securitatea i regsirea datelor.
Mai mult dect att, trebuie puse bazele constituirii unei arhitecturi destinate dezvolt-
rii de aplicaii distribuite orientate spre Web. Software-ul trebuie divizat n servicii care se
pot compune, menite a se conecta i orchestra n mod spontan n cadrul proceselor de
afaceri sau din alte medii. Este o viziune a software-ului bazat pe componente Web (com-
ponent-based software), n contrast cu aplicaiile monolitice, clasice. Desigur, software-ul
standard (vechi) trebuie integrat n aceast nou arhitectur pentru a se proteja investi-
iile fcute.
Soluia este dat de un model, cunoscut sub numele de arhitectura orientat spre servicii
(SOA Service Oriented Architecture). Arhitectura SOA impune adoptarea unui stil de dez-
voltare de aplicaii considerate drept servicii ce vor fi invocate de alte aplicaii.
Prin SOA se nelege o perspectiv asupra unei arhitecturi software care defi-
nete utilizarea de servicii oferind funcionaliti solicitate de utilizatori. Resursele
reelei sunt astfel disponibile graie unei suite de servicii independente ale cror
implementri sunt necunoscute.
SOA presupune c noile servicii pot fi create pe baza celor deja existente, ntr-o manie-
r sinergic, dar componentele sistemului n ansamblu trebuie s aib un grad mare de
independen (de-coupling). n funcie de schimbrile ce pot interveni n cadrul cerinelor
(business requirements), serviciile pot fi re-compuse sau orchestrate diferit.

110
Sabin Corneliu Buraga Tehnologii Web
Conceptul de serviciu Web bazat pe XML
n mod obinuit, putem implementa serviciile Web recurgnd la script-uri CGI sau diverse
servere de aplicaii. Interaciunea tradiional poate decurge n urmtoarele dou moduri.
Prima manier este cea funcional (de tip cerere/rspuns): utilizatorul (nu neaprat
uman) viziteaz o pagin i formuleaz o cerere, fie traversnd o legtur hipertext, fie
prin intermediul unui formular. Serviciul (implementat de un program conceput ntr-un
anumit limbaj, precum Perl, PHP, C# ori Java) ntoarce un rspuns, adic o reprezentare
uzual, marcat n HTML a resursei solicitate. Astfel, se acceseaz de la nivelul clientu-
lui o anumit funcionalitate specific pus la dispoziie de un server Web.
Cea de a doua este una conversaional (de tip solicitare/rspuns). Suplimentar, se d
posibilitatea exprimrii unor ntrebri suplimentare n vederea rafinrii cererii: serviciul
solicit date de la utilizator pentru a returna un rspuns mai bun.
Se poate observa c serviciul Web, respectnd tradiia, expune o interfa-utilizator
(conceput n limbajul de marcare HTML n marea majoritate a cazurilor) prin interme-
diul creia are loc interaciunea. Cererile sunt captate via formulare, utilizatorii umani tre-
buind s interpreteze etichetele (labels) ataate cmpurilor de dialog, pentru a cunoate ce
tipuri de date pot fi introduse se asigur cmpuri textuale, liste de opiuni, butoane de
tip checkbox i radio etc. De asemenea, utilizatorii umani trebuie s interpreteze rspunsul
oferit de serviciu prin parcurgerea rezultatului redrii de ctre browser a reprezentrii
(HTML) expediate de server.
Pentru un calculator, activitile expuse mai sus sunt dificil de realizat, deoarece pro-
gramul de interpretare a rezultatului depinde de succesiunea de marcaje ale paginii Web
recepionate. Orice modificare, minor sau nu, a tag-urilor din cadrul documentului con-
duce la rescrierea script-ului de prelucrare a ieirii oferite de serverul Web. Aceast metod
de capturare a informaiilor incluse ntr-un document HTML se mai numete i
Web/HTML scrapping i se dovedete dificil de aplicat n cazul prelucrrii de structuri
complexe de date.
Serviciile Web bazate pe XML fac explicite specificaiile implicite, putnd fi folosite n
cadrul interaciunii dintre maini. Mai mult dect att, pot fi invocate i n cazul necu-
noaterii apriori a interaciunii cu alte aplicaii/servicii Web.
Nu exist o definiie unanim acceptat a conceptului de serviciu Web.
Conform IBM, reprezint o aplicaie modular bazat pe tehnologiile Internet
menit a ndeplini activiti specifice i conformndu-se unui format tehnic speci-
fic. Corporaia Microsoft consider serviciile Web ca fiind partea de procesare a
datelor unei aplicaii (application logic) disponibil la nivel de program i beneficiind
de funcionalitile oferite de Internet. Dup Sun, un serviciu Web este o aplicaie

111
Sabin Corneliu Buraga Tehnologii Web
care accept cereri din partea altor sisteme dispuse n Internet sau intranet, me-
diate de tehnologii de comunicaie neutre i agile.
Un serviciu Web ofer o funcionalitate specific accesat pe baza unui schimb de me-
saje marcate n XML. Acest schimb de mesaje e guvernat de anumite reguli. Suplimentar,
un serviciu Web se pot autodescrie, folosind meta-date (date referitoare la date).
Serviciile Web implic utilizarea unor protocoale de comunicaie, avnd asociate des-
crieri ale datelor procesate i alte interaciuni cu aplicaii tere. Identificarea unui serviciu
Web se realizeaz prin intermediul URI-urilor, transferul de date recurge n mod uzual la
HTTP, iar definirea structurat a datelor vehiculate se face via XML. Un serviciu Web
poate fi considerat ca fiind compus dintr-o colecie de funcii mpachetate, vzute drept
entitate unic i publicate n spaiul WWW cu scopul de a fi folosite de alte programe.
Ca exemple de operaii ce pot fi puse la dispoziie de serviciile Web, le amintim pe ur-
mtoarele:
transformarea datelor primite (e.g., conversii de valori n alte uniti de msur);
dirijarea mesajelor (mai ales n cazul magistralelor de date specifice, disponibile
la nivel de ntreprindere);
interogri asupra diverselor servere de baze de date relaionale, obiectuale sau na-
tive XML (de exemplu, furnizarea cataloagelor de produse, a coordonatelor unor
localiti, a situaiei unui cont bancar, a istoricului cumprturilor efectuate online
etc.);
orchestrarea conversaiilor ntre diferite entiti (jucnd, din acest punct de vede-
re, rol de mediatori sau ageni);
realizarea de procesri (calcule) diverse;
aplicarea de politici de acces asupra resurselor;
rezolvarea unor excepii ce pot surveni ntr-un context;
solicitarea de aprobri de la utilizator (e.g., a execuiei unor aplicaii de ctre o alt
entitate).
Drept principale caracteristici ale serviciilor Web menionm:
accesarea, n manier public, se realizeaz printr-o adres; serviciile Web pot fi
considerate ca reprezentnd puncte terminale (end points) ale comunicrii ntre ma-
ini, similar modelului folosit de protocoalele de transport ale stivei TCP/IP;
abilitatea de a prelucra orice tip de date, din moment ce datele de intrare sunt do-
cumente XML (conforme unei scheme de validare);

112
Sabin Corneliu Buraga Tehnologii Web
posibilitile de dezvoltare pe baza platformelor, arhitecturilor i limbajelor exis-
tente;
adaptabilitatea (un serviciu Web poate fi extins, utiliznd eventual, n mod trans-
parent, alte aplicaii sau invocnd la rndul su alte servicii Web).
Serviciile Web sunt crmizile pentru crearea de sisteme distribuite deschise, permi-
nd organizaiilor i dezvoltatorilor independeni s-i fac disponibile pe Web bunurile
digitale ntr-un mod rapid i facil.
Orice aplicaie-client (script Perl, applet Java, program C cu interfa text sau grafic,
aplicaie .NET, pagin ori serviciu Web etc.) poate consuma ntr-o varietate de mo-
daliti datele obinute de la un serviciu invocat printr-o metod standardizat, bazat
pe standardele Web n vigoare.
Componentele arhitecturale ale serviciilor Web
Vom puncta n continuare principalele componente folosite n invocarea, definirea i re-
gsirea serviciilor Web.
n primul rnd, apare necesitatea dezvoltrii unui protocol de comunicare (transport)
ntre maini eterogene care s faciliteze vehicularea de mesaje permind interaciunile
complexe dintre calculatoare i avnd un coninut orict de complex. Mai mult dect att,
trebuie oferit suport pentru asigurarea extensibilitii, lundu-se n calcul problemele de
securitate, fiabilitate i performan ce pot surveni. Acest protocol va trebui s pun la
dispoziie un mecanism de invocare i de transmitere structurat a datelor.
Trebuie, astfel, gsit un limbaj pentru transmisia n format XML a parametrilor de in-
trare i ntoarcerea rspunsului primit de la serviciul Web invocat.
Principalele protocoale de comunicare utilizate n prezent sunt XML-RPC i SOAP.
XML-RPC ofer o specificaie i un set de implementri pentru realizarea de apeluri
de proceduri la distan, n spiritul mecanismului RPC (Remote Procedure Call). A fost pro-
iectat pentru a fi ct mai simplu, n acelai timp ns permind i transmiterea, procesarea
i returnarea unor structuri complexe.
SOAP reprezint o recomandare a Consoriului Web, propunnd faciliti sofisticate
i oferind o palet larg de posibiliti de reprezentare (serializare i deserializare) a date-
lor vehiculate vezi capitolul 4 din L. Alboaie, S. Buraga, Servicii Web, Polirom, Iai, 2006.
Un mesaj SOAP este compus din trei pri:
Un plic (envelope) care definete cadrul de lucru pentru a descrie ceea ce coni-
ne mesajul i modul de procesare a acestui coninut. Datele din corpul mesa-

113
Sabin Corneliu Buraga Tehnologii Web
jului pot fi transportate indiferent de protocolul folosit (uzual, e folosit
HTTP);
Un set de reguli de codificare (encoding rules) pentru exprimarea instanelor ti-
purilor de date definite n aplicaie;
O convenie de reprezentare (representation) a apelurilor de metode implemen-
tate de serviciul Web i rspunsurilor furnizate n urma invocrii acestora.
De asemenea, SOAP poate specifica i o cale de la expeditor la destinatar, via un in-
termediar (proxy) opional, n vederea realizrii de dirijri de mesaje (SOAP routing). O
eroare (excepie) privitoare la funcionalitatea serviciului este semnalat printr-un mesaj
special, denumit SOAP fault.
n vederea exploatrii funcionalitilor puse la dispoziie de un serviciu Web, trebuie
oferit o descriere a acestuia. Apare necesitatea unui limbaj de descriere, menit a rspun-
de la ntrebri precum Care e sintaxa mesajelor vehiculate?, Cum se desfoar trans-
ferul de date? i Cum gsim un serviciu Web?.
Soluia este furnizat de WSDL (Web Service Description Language). Limbajul permite
separarea descrierii abstracte a funcionalitii oferite de un serviciu de detaliile concrete
(de tipul cum i unde este disponibil acea funcionalitate). WSDL descrie serviciile
Web ncepnd cu mesajele interschimbate ntre entitatea care ofer i cea care invoc un
anumit serviciu. Mesajele sunt povestite n manier abstract i apoi sunt asociate unui
protocol de reea, precizndu-se de asemenea i un format (o sintax). Un mesaj const
dintr-o colecie de date de anumite tipuri, iar schimbul de mesaje este descris ca o opera-
ie. Tipurile de date se definesc via scheme XML, la nivel conceptual folosindu-se un
model de date reprezentat printr-un set de componente mesaj, port, manier de ataare,
serviciu avnd specificate diverse proprieti. La nivel sintactic, se recurge la XML.
Apare nc o cerin: instituirea unui mecanism pentru publicarea i regsirea, n ma-
nier public, a unui serviciu Web. Este posibil ca o anumit funcionalitate oferit de un
grup de servicii Web s poat fi regsit prin intermediul unor interogri formulate de
partea care intenioneaz s foloseasc acea funcionalitate.
Pentru aceasta, s-a constituit un catalog al tuturor furnizorilor de servicii Web publice
n vederea regsirii informaiilor dorite: UDDI (Universal Description, Discovery, and Integra-
tion), oferind o baz de date distribuit a serviciilor Web din prisma tipurilor de afaceri
electronice pe care acestea le pot modela.
Conceptual, datele stocate ntr-un catalog UDDI pot fi mprite n urmtoarele trei
categorii:

114
Sabin Corneliu Buraga Tehnologii Web
paginile albe (white pages) semnific informaii generale referitoare la o compa-
nie furnizoare de servicii (numele companiei, descrierea tipurilor de afaceri
efectuate, adresa etc.);
paginile aurii (yellow pages) includ scheme de clasificare a companiilor i/sau
serviciilor disponibile (de exemplu, coduri de clasificare pe criterii geografice,
ale categoriei de afaceri, taxonomii referitoare la produsele comercializate i
altele);
paginile verzi (green pages) specific informaii tehnice despre un serviciu Web
specific (e.g., o adres Web spre descrierea acestuia, o adres privitoare la in-
vocarea serviciului etc.).
Uzual, cutarea n cadrul UDDI se realizeaz n funcie de clasa din care face parte
afacerea, dup un nume de serviciu sau dup locaia geografic a furnizorului. Detalii sunt
furnizate la adresa www.uddi.org.

Maniera de interogare a registrului UDDI
Funcionalitile de cutare sunt implementate via servicii Web, astfel nct accesul la
registrul UDDI se realizeaz prin intermediul protocolului SOAP descris mai sus. UDDI
va pune la dispoziie documentul WSDL corespunztor unui serviciu compatibil cu cere-
rea formulat.

115
Sabin Corneliu Buraga Tehnologii Web
Suplimentar, actualmente sunt disponibile o serie de specificaii i iniiative adiionale
privitoare la diverse aspecte referitoare, printre altele, la adresarea, descoperirea, securita-
tea i asigurarea inter-operabilitii serviciilor Web.
Modaliti de implementare i exploatare
Existena serviciilor Web este insuficient, fr a avea la ndemn instrumente suplimen-
tare de implementare, exploatare i integrare. Un aspect important este dat de faptul c
informaiile i serviciile trebuie s fie accesibile de pe orice tip de calculator i de oriunde,
aprnd necesitatea utilizrii unei platforme independente de dispozitiv, al crei rol poate
fi jucat de o main virtual.
Noile servicii dezvoltate pot fi compuse din serviciile Web deja existente, accesibile n
mod transparent. Ne situm astfel la nivel de middleware oferind att funcionaliti (im-
plementate de codul-surs al unor programe concepute n limbaje diverse), ct i suport
pentru inter-operabilitate.
Soluia este oferit de implementarea i exploatarea unui cadrul de lucru (framework)
Web cu suport pentru SOA. Un astfel de cadru de lucru trebuie s asigure suportul pen-
tru protocoalele Web i cele nrudite (HTTP, SMTP, FTP etc.), plus pentru familia XML.
De asemenea, trebuie s se pun la dispoziie mijloace pentru catalogarea, descoperi-
rea i integrarea serviciilor Web via UDDI i descrierea funcionalitii i intrri-
lor/ieirilor graie limbajului WSDL, cu posibilitatea generrii automate de documente
WSDL asociate serviciilor Web implementate. Suplimentar, dezvoltatorii vor putea re-
curge la faciliti de specificare i ataare a unui context de execuie, lundu-se n calcul
factori precum autorizarea (cine poate invoca un anumit serviciu), localizarea (unde e lo-
calizat serviciul: platform, server, port folosit i altele), planificarea (cnd poate fi rulat
serviciul) etc.
Pentru accesul la aplicaii i sisteme tradiionale (legacy) sau la servere de stocare
(backend servers), cadrul de lucru va trebui s ofere un nivel de integrare. Mai mult dect
att, este necesar existena unui nivel de interfaare (frontend) via un server Web, care pre-
supune existena unei/unor maini virtuale i a unui motor de asigurare a fluxului de acti-
viti (workflow engine). La nivelul cel mai de sus, se afl ofertantul de servicii Web sau utili-
zatorul direct al acestora.
Actualmente, exist o sumedenie de tehnologii, produse i ofertani de servicii Web,
dintre care le enumerm doar pe urmtoarele: Apache Axis implementat n Java, Borland
Delphi/JBuilder Web Services, IBM Web Services Toolkit, JBoss, Microsoft .NET
Framework, NuSOAP i PEAR::SOAP pentru PHP, modulul SOAP::Lite pentru Perl,
Web Services Developer Pack pus la dispoziie de mediul Java. De asemenea, exist im-
plementri oferite i alte companii precum Apple, BEA, Fujitsu, Hewlett-Packard,
Oracle, SAP, Sybase etc.

116
Sabin Corneliu Buraga Tehnologii Web
Mai trebuie s remarcm faptul c au aprut diveri ofertani de servicii Web, dintre
care i enumerm pe Amazon, Blogger, cddb (CD DataBase), eBay, European
Bioinformatics Institute, Google, Interfax, LiveJournal, PayPal, RedHat, MSN (Virtual
Earth), Shopsync, Xignite i Yahoo!.
Dezvoltarea i invocarea de servicii Web
n majoritatea cazurilor, serviciilor Web funcioneaz conform paradigmei client/server:
serverul ruleaz permanent, unul sau mai muli clieni trimit spre acesta cereri SOAP via
un protocol de transport (cel mai uzual, HTTP), iar serverul ntoarce un rspuns.
n cazul serviciilor Web, standardele sunt eseniale pentru asigurarea inter-
operabilitii. Codificarea coninutului mesajelor vehiculate (cererea i rspunsul) prin
SOAP adopt formatul XML, iar descrierea serviciului Web se bazeaz pe limbajul
WSDL.
Trebuie s remarcm, nc o dat, c nu exist nici o restricie n alegerea limbajului
de programare n care se vor implementa serviciul Web i posibilii lui clieni (programe
desktop, aplicaii Web, alte servicii Web etc.). Indiferent ce limbaj, instrument, platform
sunt folosite, n esen dezvoltarea i utilizarea serviciilor Web prezint aceleai caracteris-
tici i adopt abloane de proiectare similare.
Unele instrumente SOAP implementeaz propriul server Web, folosind HTTP (de
exemplu, SOAP::Lite sau Microsoft Visual Web Developer). Altele precum extensia Soap
pentru PHP sau biblioteca gSOAP presupun instalarea n cadrul unui server Web parti-
cular, astfel nct daemonul HTTP va manevra mesajele SOAP spre o component proxy,
care realizeaz invocarea serviciului Web n manier transparent pentru programator. O
serie de instrumente SOAP suport un mecanism de transport configurabil care permite
selecia, la nivel de aplicaie, a protocolului de transport.
Instrumentele SOAP furnizeaz o component proxy, menit a procesa i interpreta
mesajul SOAP n vederea invocrii codului aplicaiei. Aceast component trebuie s aib
n responsabilitate recunoaterea stilului de codificare, translatarea datelor din format na-
tiv de exemplu, obiecte Java sau .NET n XML (i invers) i altele.
n ciuda diferenelor de implementare, instrumentele pentru dezvoltarea de servicii
Web prin SOAP urmeaz acelai model.
n continuare, ne propunem s detaliem modul de implementare i de invocare a
unor servicii Web pe baza uneltelor open source existente pentru PHP. Pentru nceput, vom
construi un server i un client SOAP simplu n PHP, utiliznd extensia Soap disponibil
n versiunea 5 a acestui server de aplicaii (ca alternativ, se poate recurge i la biblioteca
NuSOAP care poate fi folosit i n PHP 4).

117
Sabin Corneliu Buraga Tehnologii Web
Astfel, trebuie s implementm un server SOAP care va oferi accesul la un serviciu
Web incluznd o singur metod f ur ni zeazaCant i t ( ) . Aceasta va avea ca parametru
de intrare un ir de caractere desemnnd un sortiment de portocale i va returna cantita-
tea existent, dac acel sortiment exist. Nu vom furniza o descriere WSDL asociat ser-
viciului, invocarea putndu-se realiza explicit, dup cum vom vedea mai jos. Codul-surs
al acestui serviciu simplu este dat n continuare:
<?php
t r y {
/ / nu of er i mni ci o descr i er e WSDL,
/ / st abi l i mURI - ul ser vi ci ul ui
$ser ver = new SoapServer( nul l ,
ar r ay( ' ur i ' => ' ur n: por t ocal e. i nf o' ) ) ;
/ / adugmmet odel e i mpl ement at e
$ser ver - >addFunction( ' f ur ni zeazaCant i t ' ) ;
/ / at ept mcer er i SOAP
$ser ver - >handle( ) ;
} cat ch ( SOAPFault $except i on) {
echo ' A apr ut o excepi e: ' . $except i on;
}

/ / f unci e car e f ur ni zeaz cant i t at ea
/ / di nt r - un sor t i ment de por t ocal e
f unct i on f ur ni zeazaCant i t ( $numeSor t i ment ) {
/ / de obi cei , ai ci vomef ect ua o i nt er ogar e SQL
swi t ch ( $numeSor t i ment ) {
case ' j aponeze' : r et ur n 33;
case ' al bast r e' : r et ur n 74;
def aul t : r et ur n ' i nexi st ent ' ;
}
}
?>
Primul argument al constructorului desemneaz adresa (URL-ul) documentului
WSDL descriind serviciul, n acest caz fiind nul l . Spaiul de nume prin care e identificat
serviciul dezvoltat este dat n situaia de fa de un URN ur n: por t ocal e. i nf o. Fieca-
re funcie implementat va fi adugat cu addFunct i on( ) . De asemenea, unui serviciu i
se poate asocia o clas prin intermediul metodei set Cl ass( ) . Cererile SOAP vor fi re-
zolvate via handl e( ) care va avea n responsabilitate i (de)serializarea datelor.
Deoarece extensia Soap este inclus n distribuia standard PHP 5, pentru rularea pro-
gramului de mai sus nu va trebui instalat nimic suplimentar. n exemplificrile de fa am
recurs la PHP versiunea 5.0.4 sub diverse versiuni ale serverului Apache 2.0.

118
Sabin Corneliu Buraga Tehnologii Web
Recurgnd tot la extensia Soap, vom concepe acum un client care va invoca metoda
expus de serviciul Web pentru o serie de sortimente de portocale. Liniile de cod PHP
sunt urmtoarele:
t r y {
$cl i ent = new SoapClient( nul l ,
ar r ay( ' l ocat i on' =>
' ht t p: / / l ocal host / sxml / or anges- ser ver . php' ,
' ur i ' => ' ur n: por t ocal e. i nf o' ) ) ;
/ / r eal i zmo sui t de i nvocr i al e met odei dor i t e
f or each ( ar r ay( ' al bast r e' , ' j aponeze' , ' cel est e' )
as $sor t i ment ) {
$r ez = $cl i ent - >__call( ' f ur ni zeazaCant i t ' ,
ar r ay( $sor t i ment ) ) ;
echo " <p>St ocul de por t ocal e $sor t i ment
est e <st r ong>$r ez</ st r ong>. </ p>" ;
}
} cat ch ( SOAPFault $except i on) {
echo ' A apr ut o excepi e: ' .
$except i on- >faultstring;
}
Deoarece nu avem la dispoziie descrierea WSDL a serviciului, vom folosi __cal l ( )
pentru invocarea metodei f ur ni zeazaCant i t ( ) . Excepiile ce pot surveni sunt captura-
te graie construciei t r y . . . cat ch incluse n PHP 5.
Obiectul SOAPFaul t ncapsuleaz informaiile privitoare la un fault SOAP; n cazul de
fa, am utilizat proprietatea f aul t st r i ng pentru a afia mesajul de excepie. Euarea
unui apel SOAP poate fi verificat i cu i s_soap_f aul t ( ) .
n urma iteraiilor realizate, vom obine un rezultat precum cel din captura-ecran ur-
mtoare.
Tipul rspunsului primit este unul eterogen (fie ntreg, fie string), n funcie de existen-
a sortimentului de portocale pentru care realizm invocarea metodei.

119
Sabin Corneliu Buraga Tehnologii Web

Invocarea serviciului Web implementat n PHP 5


Pentru aprofundarea subiectului, recomandm consultarea lucrrilor
L. Alboaie, S. Buraga, Servicii Web, Polirom, 2006 i S. Buraga, Tehnologii
XML, Polirom, 2006.

120
Sabin Corneliu Buraga Tehnologii Web

121
P Pa ar rt t e ea a I IV V R Re eg g s si i r re ea a i i n nf f o or rm ma a i i i i l l o or r p pe e W We eb b
Unde se gsete ultimul port de unde nu vom mai ridica ancora?
Herman Melville

1. Preliminarii
2. Motoare de cutare
3. Meta-cuttoare
4. Alte mijloace de regsire a informaiilor



Sabin Corneliu Buraga Tehnologii Web


122
Sabin Corneliu Buraga Tehnologii Web

1. Preliminarii
Fiind bazat pe hipertext, spaiul WWW are ca prim obiectiv oferirea unui mecanism facil
de a stoca i de a furniza, ulterior, informaii, ntr-o manier non-secvenial.
Conform studiilor ntreprinse n ultimii ani, utilizatorii care petrec mai mult de cinci
ore pe Internet aloc peste 70% din timp cutrii de informaii. Pentru a localiza resursele
dorite, un procent de 85%-90% dintre utilizatori apeleaz la motoarele de cutare.
Astfel, importana acestor aplicaii se dovedete de necontestat, actualmente existnd
disponibile pe Web o multitudine de cutatoare i meta-cutatoare, generale sau speciali-
zate.
Motoarele de cutare pot oferi servicii de cutare pe baz de indeci (i.e. Altavista) sau
pe baza unor ierarhii de termeni aa-numitele servicii director (cum ar fi Yahoo!). n ulti-
ma perioad, aceste tipuri de servicii au devenit hibride, primul dintre motoarele de cuta-
re care a adoptat tehnicile mixte fiind Excite.

123
Sabin Corneliu Buraga Tehnologii Web

2. Motoare de cutare
Preambul
Au fost evideniate mai multe modaliti de regsire a informaiilor disponibile pe Web,
n funcie de inteniile utilizatorilor. Printre cele mai importante se enumer:
scanarea (scanning) utilizatorii parcurg, superficial, o arie larg de informa-
ii, aparinnd de obicei unui anumit subiect sau unui grup de subiecte conexe;
rsfoirea (browsing, surfing) utilizatorii viziteaz locaiile care le capteaz in-
teresul, fr a avea stabilit un model mental al informaiilor dorite;
cutarea (searching) utilizatorii sunt motivai s gseasc o categorie parti-
cular de informaii int. De cele mai multe ori este folosit cutarea bazat pe
cuvinte-cheie (e.g. procesare XML) sau pe construcii formulate n limbaj natu-
ral, cum ar fi Unde gsesc documentaii despre design Web?;
explorarea (exploring) utilizatorii investigheaz legturile referitoare la o
anumit resurs informativ i pe cele conexe;
hoinreala (wandering) utilizatorii realizeaz o navigare complet nestructu-
rat.
De remarcat faptul c, n mod frecvent, utilizatorii nu parcurg la un moment dat dect
o singur pagin WWW, aparinnd unui server particular, fr a avea o vedere de an-
samblu a modului de structurare a tuturor documentelor de la acea adres. Astfel, spaiul
Web prezint urmtoarele caracteristici negative:
modelul plat de memorare a datelor
Documentele nu sunt stocate n mod structurat pe serverele Web. Structura
hipertext pe care, eventual, o formeaz acestea poate fi recunoscut de cele mai
multe ori doar examinnd URI-urile asociate. Uzual, paginile nu posed legturi
ctre documentul printe (rdcina sitului un fiier al crui nume difer n
funcie de serverul Web folosit, pentru Apache i IIS de exemplu fiind
/ i ndex. ht ml , respectiv / def aul t . ht m).
legturile unidirecionale
Limbajul HTML nu ofer dect posibilitatea de specificare a legturilor unidi-
recionale, simple. Este dificil de alctuit o hart local care s ilustreze toate sur-
sele i destinaiile legturilor dintre paginile Web ale unui sit. Reelele sofisticate
de legturi conduc la o navigare greoaie i pot deveni frecvent surse de confuzie.

124
Sabin Corneliu Buraga Tehnologii Web
lipsa unei hri globale de navigare
Nu poate fi realizat o hart global de navigare prin ntreg spaiul WWW, ntr-
o manier ierarhic (arborescent), deoarece structura hipertext de ansamblu a
Web-ului este necunoscut.
meninerea legturilor
Legturile fiind stocate n interiorul documentelor, posibilitatea de a aduga di-
rect adnotri sau de a modifica legturile dintr-o pagin este deinut doar de
proprietarul acesteia. Meninerea integritii legturilor pentru situri Web care
conin un numr foarte mare de documente se dovedete dificil. De cele mai
multe ori se apeleaz la programe de verificare a validitii legturilor i de con-
struire a ierarhiilor de legturi ntre paginile unui sit Web.
n concluzie, pentru a avea acces la informaiile dorite, de cele mai multe ori se recurge
la facilitile oferite de unul sau mai multe dintre motoarele de cutare disponibile.
Interaciunea cu un motor de cutare
Interfaa de cutare a unui motor de cutare este o component important a sistemului,
oferind n funcie de motor posibiliti de formulare a cererilor prin intermediul diverilor
operatori logici, n limbaj natural, explornd ierarhii de domenii catalogate (directoare
Web), stabilind localizarea paginilor etc.
Majoritatea motoarelor de cutare utilizeaz o convenie de compunere a interogrilor.
Pot fi introduse i relaii desemnate prin intermediul operatorilor AND, OR, NOT i
NEAR. Urmeaz o descriere succint a fiecruia dintre aceti operatori:
termen
1
AND termen
2

Se folosete atunci cnd dorim ca paginile returnate de motor s aib n com-
ponen ambii termeni. De multe ori, semnul plus (caracterul +) prefixnd fie-
care termen nlocuiete funcia lui AND: +termen
1
+termen
2
.
termen
1
OR termen
2

l vom folosi n situaia cnd dorim ca paginile cutate s conin mcar unul
dintre cei doi termeni specificai.
NOT termen
Dac vrem ca paginile s nu includ termenul specificat vom utiliza acest ope-
rator (o construcie echivalent este - termen).

125
Sabin Corneliu Buraga Tehnologii Web

termen
1
NEAR termen
2

Vom specifica acest operator pentru situaiile n care dorim ca paginile cutate
s conin cei doi termeni localizai la mic deprtare unul de cellalt (vecintate
de 20-200 de cuvinte, n funcie de serviciul de cutare ales).
Pentru gruparea i schimbarea precedenei operatorilor se pot utiliza parantezele ( ) .
Se mai poate folosi i construcia " l i st de t er meni " , ghilimelele nsemnnd fap-
tul c se va realiza o cutare exact a secvenei de termeni din lista dat. De exemplu:
" Pr oi ect ar e Web" +sf at ur i - ut i l i t ar e
De asemenea, se ofer i posibilitatea de cuta n titlurile paginilor Web, prin interme-
diul unui construcii de forma:
t i t l e: ir cutat
De exemplu, pentru a cuta Linux n titlurile paginilor, vom putea scrie:
t i t l e: Li nux
O alt facilitate este aceea de a gsi toate paginile care includ ancore ctre o adres spe-
cificat, prin folosirea cuvntului-cheie l i nk. Astfel, pentru a obine lista tuturor docu-
mentelor care includ o anumit adres e-mail am putea introduce:
l i nk: busaco@i nf oi asi . r o
n mod obinuit, ne vom sluji foarte rar de toate aceste faciliti puse la dispoziie, pre-
fernd formularea unui interogri compuse dintr-un singur cuvnt sau a unei propoziii n
limbaj natural. Tehnologia Ask Jeeves www.askjeeves.com ncorporat de Altavista
este utilizat pentru procesarea cererilor formulate n limbaj natural (n spe, n limba
englez), problemele care trebuie s fie rezolvate fiind cele legate de dezambiguizarea
termenilor, eliminarea cuvintelor nerelevante sau expandarea interogrii (de exemplu, pot
fi automat formulate noi cereri coninnd sinonime ale cuvintelor furnizate de utilizator).
De asemenea, majoritatea motoarelor ofer posibilitatea de rafinare (refine) a interogrii
sau de specificare a unor cereri avansate de cutare (advanced search).
De reinut ns faptul c nici un motor nu poate fi perfect, serviciile de cutare oferite
neputnd avea o acuratee de 100%. Pentru testarea serviciilor de cutare se iau n consi-
deraie mai muli factori, dintre care pot fi amintii: acurateea, posibilitatea de cutare
avansat, ergonomia n utilizare i acordarea de alte faciliti.
La finalul acestei seciuni, putem meniona c actualmente cele mai bine cotate sau po-
pulare motoare de cutare sunt Google, Yahoo!, Ask Jeeves, All The Web, AOL Search i

126
Sabin Corneliu Buraga Tehnologii Web
HotBot. Alte alegeri se pot ndrepta ctre Altavista, Gigablast sau LookSmart. Printre noii
venii, se enumer Clusty i MSN Search.
Structura intern a unui motor de cutare
n general, un motor de cutare este constituit din trei componente de baz:
1. o aplicaie, denumit robot Web (spider, crawler), avnd misiunea de a parcurge spaiul
WWW i de a vizita anumite pagini, extrgnd informaii despre ele. Aceste infor-
maii vor fi stocate pe serverul/serverele motorului de cutare, ntr-o baz de date
sau ntr-un index. Roboii Web vor fi prezentai n cadrul urmtoarei seciuni;
2. un depozit de memorare a informaiilor despre paginile parcurse de robot, numit
index (catalog). Acest index conine de cele mai multe ori cte o copie a fiecrei pa-
gini i a URI-ului corespunztor acesteia, organizarea informaiilor n cadrul inde-
xului efectundu-se conform unor criterii specifice;
3. un mecanism de evaluare (ranking) a importanei paginilor din index n conformitate cu
cererea formulat de utilizator, cerere introdus prin intermediul unei interfee Web
(partea vizibil a motorului de cutare). n ordinea importanei, adresele paginilor
(plus alte informaii) sunt returnate sub forma unui document Web utilizatoru-
lui care a formulat cererea. Utilizatorul este cel care va decide care pagin (sau grup
de pagini) ntrunete preferinele sale.
Diferenele dintre motoarele de cutare operaionale n acest moment sunt date de fie-
care component n parte.

127
Sabin Corneliu Buraga Tehnologii Web

Arhitectura intern a unui motor de cutare
Roboii Web
Roboii Web, regsii i sub numele de pianjeni (spiders), sunt programe care tra-
verseaz n mod automat structura hipertext a spaiului WWW, cu scopul extrage-
rii unor informaii.
Trebuie s facem o distincie clar ntre roboii Web i navigatoarele Web, acestea din
urm fiind aplicaii acionate de om.
Activitatea unui robot Web const n a transmite o cerere HTTP ctre un server Web
pornind de la un identificator uniform de resurse (URI) i n a extrage informaiile
corespunztoare dintr-o reprezentare a unei resurse i din toate documentele desemnate
de legturile acesteia.
Roboii Web se pot utiliza n diverse scopuri, principalele fiind cele detaliate mai jos:
analiza statistic prin traversarea complet a unui sit Web particular, robotul poate
furniza diverse statistici preioase referitoare la resursele procesate, precum media
documentelor stocate pe acel server, procentul de documente de un anumit tip,

128
Sabin Corneliu Buraga Tehnologii Web
lungimea medie a unei pagini, gradul de interconectare cu alte documente, locale
sau la distan etc. De fapt, primul robot implementat a fost conceput tocmai cu
scopul declarat de a contoriza toate serverele Web din lume, pentru a se cerceta ct
de ntins este spaiul hipertext.
De asemenea, roboii Web pot fi utilizai la descoperirea diverselor modele de date
(pattern-uri) prin explorarea unei cantiti apreciabile de informaii disponibile pe
Web, fiind astfel implicai n activiti de descoperire a resurselor cunoscute n li-
teratura de specialitate prin sintagma minerit al datelor (data mining); de asemenea,
se poate efectua i un minerit al relaiilor (relation mining), pentru descoperirea
posibilitelor relaii stabilite ntre resursele Web. Aceste aspecte sunt imperios nece-
sare n domenii precum comerul electronic;
meninerea legturilor n prezent, este foarte important s fie meninut n bune
condiii starea legturilor stabilite ntre diverse documente Web. Un robot poate
ajuta la descoperirea i rezolvarea aa-numitelor legturi moarte care indic resur-
se inexistente. Dei serverele Web pot nregistra toate cererile care nu pot fi satisf-
cute din cauza specificrii adreselor invalide, administratorul unui sit Web de pro-
porii poate recurge la asisten din partea unui robot pentru descoperirea automat
a legturilor eronate.
Roboii pot verifica, de asemenea, i structura documentelor (X)HTML, semnalnd
erorile de design i de stil ale acestora, precum i eludarea unor reguli privind acce-
sibilitatea coninutului. Serviciul de validare oferit de Consoriul Web reprezint
tocmai un astfel de robot;
oglindire tehnica oglindirii (mirroring) este preluat de la arhivele FTP i const n
copierea ntr-o alt locaie a ntregii structuri arborescente a unui sit (adic a tuturor
fiierelor sale, n mod recursiv) i n reactualizarea periodic a acestor copii. Oglin-
direa resurselor asigur fiabilitate, vitez mai mare de transfer, evitarea ncrcrii
traficului de reea, acces neconectat (off-line) etc.
Pentru Web, oglindirea poate fi realizat de un robot, care trebuie s aib n res-
ponsabilitate i rescrierea referinelor la alte documente, pstrarea integritii hiper-
textului i actualizarea regulat a paginilor WWW. Oglindirea poate fi evitat,
folosindu-se n mod inteligent memoria cache a serverelor proxy (intermediare), care
ofer posibiliti de actualizare selectiv i de organizare a resurselor. O categorie
special de astfel de roboi este cea a programelor aa-numite download managers, ca
exemple putnd fi menionate utilitarele wget sau ProZilla din distribuiile Linux ori
programele Download Express, FreshDownload, GetRight, LeechGet i Teleport disponibi-
le n Windows;
descoperirea resurselor probabil cea mai important aplicaie a roboilor Web este uti-
lizarea acestora la descoperirea resurselor. Creterea progresiv a volumului de in-
formaii disponibile pe Web are drept consecin principal conceperea de aplicaii
pentru sumarizarea, indexarea i monitorizarea modificrilor resurselor WWW.

129
Sabin Corneliu Buraga Tehnologii Web
Astfel, fiecare motor de cutare, coninnd baze de date privind localizarea i tipul
de informaii dorite de utilizatori, apeleaz la serviciul roboilor Web pentru desco-
perirea resurselor care nglobeaz aceste informaii.
Un avantaj suplimentar al roboilor este cel dat de capacitatea acestora de a moni-
toriza schimbrile survenite n cadrul unor pagini Web indicate de utilizatori;
utilizri combinate desigur, roboii pot ndeplini sarcini multiple, ca de exemplu
descoperirea resurselor n paralel cu realizarea de statistici Web sau meninerea in-
tegritii legturilor i, concomitent, detectarea schimbrilor survenite n cadrul do-
cumentelor Web.
E necesar s facem o serie de observaii:
Un aspect important care trebuie luat n consideraie n exploatarea roboilor
Web este timpul de actualizare a bazelor de date ale motoarelor de cutare. Robo-
ii de cutare a informaiilor sunt cei care vor trebui s decid care informaii sunt
importante pentru a fi transmise programelor de indexare.
Rularea n manier necontrolat a roboilor Web de ctre utilizatorii finali care
ar putea folosi opiuni inadecvate sau ar rula mai multe instane de program poate
conduce la abuzuri nedorite asupra unui sit sau grupuri de situri Web.
Roboii Web, n special cei netestai insuficient, pot fi ineficieni sau pot avea
vicii de arhitectur astfel nct s duneze traficului de informaii, mai ales dac
sunt folosii de persoane neavizate ori de neprofesioniti. Implementri eronate
pot determina roboii s intre n arii aproape infinite denumite guri negre (atunci
cnd, de exemplu, un document are o legtur care se refer la el nsui, iar pro-
gramul nu detecteaz acest aspect). De asemenea, roboii nu trebuie s acceseze
tipuri de date fr relevan, avnd dimensiuni considerabile (e.g.: arhive, fiiere
executabile, fiiere multimedia etc.).
De cele mai multe ori, fiecare motor de cutare are implementat propriul
robot, sensibil la diverse situaii care pot surveni pe Web. De exemplu, roboii de
la Excite (Inktomi), Go (InfoSeek) i Lycos nu pot indexa paginile coninnd
cadre, iar cei de la FAST i Google au probleme cu hrile de imagini senzitive
(care pot ngloba legturi spre alte documente).
Trebuie de menionat faptul c fiecare creator al unui robot Web trebuie s ofere in-
formaii privind identificarea acestuia (nume, locaie, grup de programatori etc.). De
exemplu, unii roboi personali (utilizai de aplicaiile de oglindire a siturilor sau de motoa-
rele de cutare experimentale) pot fi recunoscui prin nume ca BackRub (folosit n perioa-
da pre-Google), WebMapper ori wget. De asemenea, roboii principalelor motoare de cuta-
re actuale se identific prin Googlebot (de la Google), Infoseek sau Scooter (de la Altavista).

130
Sabin Corneliu Buraga Tehnologii Web
Pentru evitarea accesului roboilor n zone Web lipsite de relevan, coninnd date
temporare ori private, s-a adoptat un standard pentru excluderea roboilor. Acesta stipuleaz c
orice robot care acceseaz un anumit server Web va accesa n primul rnd un fiier text
denumit r obot s. t xt . Acest fiier va trebui stocat n directorul rdcin al serverului,
specificnd prile din sit care vor fi evitate la parcurgerea automat (pentru evitarea gu-
rilor negre sau din alte raiuni).
Un exemplu de astfel de fiier este dat mai jos:
# / r obot s. t xt pent r u ht t p: / / www. i nf oi asi . r o
User - agent : * # t oi r oboi i
Di sal l ow: / t mp/ # dat e t empor ar e
Di sal l ow: / busaco/ wor k/ # spai u pr i vat
Anumii roboi pot utiliza tag-uri specifice (ascunse) dintr-o pagin Web care s dicteze
un anumit comportament pentru acea pagin (aa cum se ntmpl n cazul programului
de oglindire Teleport).
Nu toate paginile vor avea aceeai importan pentru robot, inndu-se cont de mai
muli factori. Se pot lua n calcul:
compatibilitatea cu posibilele cereri ale utilizatorilor,
numrul legturilor care au, la rndul lor, legturi spre pagina analizat pe
robot gradul de citare a documentului,
relevana coninutului paginii,
numrul de legturi coninute de pagin i metrica locaiei (o pagin din
domeniul .com se consider a fi mai important dect una a domeniului .za).
Importana unui document Web depinde, aadar, de contextul apariiei acestuia.
Managementul indexului
Component secund a unui motor de cutare, indexul (catalogul) este alctuit dintr-o serie
de baze de date stocate de un server (modul) de stocare, constituindu-se un depozit (distribu-
it) de date. Acest depozit va avea o capacitate considerabil, memornd documentele in-
dexate returnate de robotul asociat motorului de cutare.
Modulul de stocare realizeaz diverse activiti, cele mai importante fiind:
inserarea datelor noi privitoare la paginile parcurse de roboi,
actualizarea coninutului vechilor documente stocate,
programarea diverselor cereri de accesare a informaiilor despre o serie de docu-
mente.
De cele mai multe ori aceste date sunt comprimate.

131
Sabin Corneliu Buraga Tehnologii Web
Modulul de indexare i meta-date este responsabil cu extragerea meta-datelor din paginile
colectate i cu indexarea att a meta-datelor, ct i a documentelor (X)HTML. Pentru in-
dexarea coninutului textual al documentelor, uzual vor fi luate n consideraie toate cu-
vintele, exceptnd aa-numitele cuvinte stop (cu o lungime mai mic sau egal cu trei carac-
tere i desemnnd prepoziii, conjuncii sau interjecii; de exemplu a, the, in din
limba englez). Unele motoare de cutare (e.g.: Google sau Lycos) vor contoriza i num-
rul de apariii ale celor mai frecvente cuvinte dintr-o pagin Web i vor realiza indeci
suplimentari i/sau vor stabili categoria n care va fi ncadrat acea pagin.
Desigur, pot fi adoptate i alte tehnici (eventual, mai complexe).
Extragerea meta-datelor variaz n funcie de motorul de cutare. Cea mai popular
tehnic este cea a indexrii documentelor pe baza cuvintelor-cheie furnizate fie explicit de
creatorul acestor documente, fie n urma unei catalogri automate realizate de un robot.
Trebuie s menionm aici i faptul c indexarea se poate realiza manual, de ctre experi
umani este cazul catalogului Open Directory.
Anumite motoare de cutare (i.e. Altavista) permit nscrierea unei pagini n baza de da-
te, solicitnd introducerea unor cuvinte-cheie pe baza crora s se efectueze operaiunea
de indexare.
n activitatea de catalogare a informaiilor, de multe ori intervine ierarhizarea datelor n
funcie de subiectul pe care-l trateaz, aceast clasificare conducnd la apariia serviciilor
director (de genul Yahoo! sau dmoz.org), bazate pe generarea de taxonomii (arbori de con-
cepte).
De asemenea, pentru fiecare document se calculeaz numrul de legturi care se refer
la o anumit pagin i numrul total de legturi coninute de acea pagin. Aceste valori
sunt denumite tehnic hit-uri.
Indecii pot cuprinde indeci text obinuii, dar i indeci ai meta-datelor extrase.
Meta-datele i indecii se stocheaz pe dispozitive separate de cele ale depozitului de
date (de cele mai multe ori se utilizeaz un sistem de management al bazelor de date rela-
ionale).
Depozitul de documente indexate ofer trei moduri de acces:
acces direct (random access) se realizeaz pe baza identificatorului unic asociat fiecrei
pagini indexate;
acces bazat pe interogri (query-based access) vor fi furnizate toate documentele care sa-
tisfac o anumit cerere. Cererea poate s se refere la diverse atribute ale me-
ta-datelor (e.g.: autor, titlu, locaie) sau la coninutul textual al paginilor;

132
Sabin Corneliu Buraga Tehnologii Web
acces flux de date (streaming access) este folosit atunci cnd din depozitul de date se
extrage un grup de pagini pentru a fi trimis ca flux de date spre o anumit aplicaie
(de exemplu, atunci cnd se reindexeaz o serie de pagini).
n cadrul depozitului de date este de dorit s se memoreze cea mai recent versiune a
paginilor traversate de roboii Web. Trebuie avute n vedere aspecte importante precum
consistena indecilor i eliminarea paginilor vechi/inexistente pe Web. Astfel, corespunztor fiec-
rei pagini pot fi ataate dou valori numerice pentru a specifica timpul de via permis i
respectiv pentru a contoriza acest timp. Timpul de via permis reprezint perioada de
stocare a unui document fr a necesita actualizarea ori tergerea sa din depozit. Contorul
este decrementat periodic pn cnd devine nul, caz n care robotul Web va trebui s
proceseze noi informaii referitoare la acea pagin. Desigur, fiecare motor de cutare va
adopta propria manier de stabilire a timpului de via. De asemenea, roboii Web pot
avea proprii lor parametri pentru realizarea acestei actualizri regulate, innd cont de di-
verse raiuni, cum ar fi cele legate de congestia reelelor.
Pentru asigurarea scalabilitii, depozitul de date poate fi unul distribuit, constituindu-
se n acest scop o colecie de noduri de stocare interconectate, controlul realizndu-se prin
intermediul unui server de management al nodurilor. Acest server menine o tabel cu
starea fiecrui nod de stocare: capacitatea total de memorare, spaiul liber, nivelul frag-
mentrii datelor, numrul i tipul de accesri, modul de operare a nodului etc. Pentru
sporirea eficienei, nodurile pot conine pagini grupate pe diverse criterii (cuvinte-cheie,
tematic, localizare etc.). Depozitul de date distribuit poate fi considerat ca fiind o singur
resurs de calcul, constituind un cluster sau un Grid.
Mecanismul de cutare i de evaluare
A treia component a unui motor este reprezentat de mecanismul de cutare i de evaluare a
paginilor Web furnizate utilizatorului n urma cererii acestuia, formulat prin intermediul
unei interfee puse la dispoziie de motorul de cutare.
Interfaa de cutare (denumit frecvent motor de interogare) este o component importan-
t a sistemului, oferind, n funcie de motor, posibiliti de formulare a cererilor prin in-
termediul diverilor operatori logici, n limbaj natural, explornd ierarhii de domenii cata-
logate (directoare Web), stabilind localizarea paginilor etc.
Am discutat mai sus despre modul de formulare a interogrilor adresate motorului de
cutare.
Procesul de evaluare a interogrii specificate de utilizator poate fi derulat conform ur-
mtoarelor etape:
1. analizarea cererii formulate de utilizator;
2. cutarea n indecii corespunztori termenilor rmai dup analiza cererii;

133
Sabin Corneliu Buraga Tehnologii Web
3. scanarea tuturor documentelor care ntrunesc ntregul set de condiii de
cutare;
4. evaluarea gradului de relevan a fiecrei pagini n funcie de cererea for-
mulat;
5. eliminarea duplicatelor i sortarea n ordinea relevanei;
6. afiarea adreselor celor mai relevante N documente (eventual furnizndu-
se i alte informaii, precum lungimea documentului, formatul, limba, con-
textul apariiei etc.).
Nu toate motoarele de cutare urmeaz toate fazele descrise mai sus. Unele dintre ele
nu realizeaz dect parial sau chiar deloc eliminarea duplicatelor (e.g.: Excite sau Lycos).
Alte motoare vor afia paginile gsite grupate pe termeni sau vor oferi legturi ctre al-
te documente stocate pe acelai server Web.
Sistemul de evaluare depinde de motorul de cutare ales. Calculul relevanei documen-
telor se poate baza pe:
tehnici de clasificare uman resursele sunt clasificate manual, de ctre experi (la
o astfel de abordare recurge, de exemplu, Open Directory);
informaii privitoare la utilizarea unei resurse n acest caz, sunt importante tim-
pul de via al resursei i periodicitatea vizitei;
conectivitate se are n vedere analizarea relaiilor resursei considerate cu altele
(similare).
De exemplu, n cazul lui Google, sunt meninute mai multe meta-date despre docu-
mentele indexate dect la alte motoare, ceea ce conduce la o precizie ridicat. Sunt me-
morate chiar i poziia n cadrul documentului, tipul de font i modul de scriere ale in-
formaiilor. n plus, rezultatele obinute n urma fiecrei interogri emise de utilizator
sunt salvate temporar, putnd fi folosite la evaluarea unor cereri similare viitoare.
Relevana paginii (page rank) se calculeaz i pe baza corelaiilor dintre relevana calcu-
lat de motor i cea observat din interaciunea cu utilizatorul (gradul de relevan a unei
resurse poate scdea, dac se observ ca acea resurs nu este considerat spre vizitare de
ctre utilizator, dei e plasat printre primele). Motorul Google calculeaz acest page rank
n funcie de structura hipertext, o legtur de la pagina A la pagina B reprezentnd un
vot dat paginii B de ctre A. Cu ct un sit e mai important, cu att page rank-ul asociat
lui este mai mare.
Cititorii interesai de mai multe detalii referitoare la page rank pot consulta adresa
http://www.iprcom.com/papers/pagerank.

134
Sabin Corneliu Buraga Tehnologii Web
3. Meta-cuttoare
Pentru a formula interogri i a primi rezultate de la o multitudine de motoare de cutare,
utilizatorii au posibilitatea de a apela la serviciile oferite de un meta-cuttor. Funcia prin-
cipal a acestuia este cea de a compila toate listele de pagini obinute de la motoarele
obinuite (interogate eventual n manier paralel) i de a prezenta utilizatorului cele mai
relevante documente gsite. Deseori, un meta-cuttor are implementat propriul sistem
de evaluare a relevanei paginilor, n funcie de anumite criterii proprii sau formulate de
utilizator. Un exemplu este Mamma www.mamma.com.
De asemenea, un meta-cuttor poate oferi o vedere ierarhizat a paginilor gsite, de
genul structurii de directoare Web (ierarhii de termeni) pe care acestea le formeaz.
O serie de meta-cuttoare sunt direcionate spre domenii specifice, folosind bazele de
date furnizate de unul sau mai multe motoare de cutare de succes. Prin astfel de meta-
cuttoare, putem avea acces la diverse servicii specializate (e.g., software, adrese potale,
documente multimedia etc.).
Structura unui meta-motor
Anatomia unui meta-motor de cutare este ilustrat n figura de mai jos.
Dispecerul de cereri poate diviza interogrile complexe date de utilizator n sub-cereri,
fiecare sub-cerere fiind expediat unui motor de cutare clasic. Nu toate meta-motoarele
de cutare trimit n manier concurent cereri motoarelor de cutare.
Monitorul de performan supravegheaz starea fiecrui motor de cutare. Atunci cnd
unul dintre motoare devine neoperaional sau inaccesibil din raiuni legate de reea, se
poate decide n mod automat ca respectiva cerere s fie dat spre prelucrare altui motor.
De asemenea, monitorul de performan are ca misiune i primirea listelor de adrese ale
paginilor gsite.
Modulul responsabil de interfaa cu utilizatorul va furniza un formular electronic pen-
tru a fi completat cu interogarea dorit. Dup primirea rezultatelor de la motoarele de
cutare, listele cu URI-uri vor fi compilate, eliminndu-se informaiile redundante i cele
contradictorii. Deoarece fiecare motor de cutare va returna o list de pagini ntr-un for-
mat propriu, meta-motorul de cutare va realiza i o convertire la un format comun care
va fi prezentat clientului.
Unele meta-motoare de cutare pot oferi informaii privind relevana resurselor cutate
sau legturile dintre ele este cazul meta-motorului Kartoo, disponibil la adresa
www.kartoo.com.


135
Sabin Corneliu Buraga Tehnologii Web

Structura general a unui meta-motor de cutare

136
Sabin Corneliu Buraga Tehnologii Web
4. Alte mijloace de regsire a informaiilor
n cadrul acestei seciuni, vom prezenta o serie de detalii interesante privitoare la alte sur-
se de informare disponibile pe Web: forumurile, siturile de tip wiki, blog-urile i portalurile
Web toate, componente ale Web-ul social (denumit i Web 2.0), alturi de alte tehno-
logii, paradigme i stiluri arhitecturale de aplicaii Web.
Forumurile Web
O prim soluie este oferit de forumurile on-line, scopul acestora fiind acela de a pune la
dispoziie un cadru Web de realizare a unor discuii (uzual, n regim asincron), pe diferite
teme.
O platform de management al forumurilor poate, eventual, oferi suport pentru a
structura firele (thread-urile) subiectelor abordate, n vederea regsirii facile a mesajelor
dorite, n funcie de tematic. De asemenea, un astfel de sistem poate permite, printre
altele: accesul autorizat sau anonim, realizarea de sondaje (poll-uri), notificarea automat a
utilizatorilor asupra apariiei unui rspuns la un mesaj, cutarea pe diverse criterii, redac-
tarea facil a mesajelor prin folosirea marcajelor (X)HTML etc.
Exist diverse aplicaii care ofer suport pentru crearea i ntreinerea de forumuri, din-
tre care se pot meniona phpBB, un popular instrument open-source, i JForum.
Siturile colaborative de tip wiki
Un wiki reprezint un sit Web care permite utilizatorilor s adauge diverse tipuri de con-
inuturi, semnnd n acest sens cu forumurile Web, dnd n plus posibilitatea vizitatori-
lor s editeze acel coninut.
Termenul wiki se refer i la software-ul colaborativ utilizat pentru crearea acestor ti-
puri de situri. Denumirea provine din limba hawaian (n aceast limb, wiki wiki n-
seamn foarte rapid).
Primul sit de tip wiki s-a numit WikiWikiWeb i a fost folosit ncepnd cu anul 1995 n
cadrul comunitii specialitilor n proiectare software. Printele (creatorul) lui este Ward
Cunningham. Pe parcursul anilor, diverse alte comuniti virtuale au dezvoltat sisteme
wiki, n prezent considerndu-se c Wikipedia (lansat n 2001) este situl wiki cel mai cu-
prinztor, reprezentnd o veritabil surs de cunoatere.

137
Sabin Corneliu Buraga Tehnologii Web

Varianta n limba romn a enciclopediei Wikipedia
Caracteristica principal a unui sit wiki este aceea c permite ca documentele Web s
poat fi redactate uor n manier colectiv folosind un limbaj de marcare. O pagin f-
cnd parte dintr-un wiki este referit ca fiind o pagin wiki, iar o colecie de pagini
uzual, puternic interconectate prin intermediul hiperlegturilor se numete un wiki.
Crearea i actualizarea documentele sunt facil de realizat, n general orice modificare fi-
ind reflectat instantaneu n cadrul sitului (nu se opereaz o cenzur prealabil, iar utili-
zatorii nu trebuie s fie autentificai pentru a efectua schimbri). Marcarea paginilor wiki
recurge la un limbaj de adnotare simplu, dar unele servere wiki ofer faciliti suplimenta-
re de editare. Legturile hipertext spre alte pagini wiki sunt marcate prin intermediul unor
simboluri speciale (de genul parantezelor acolade sau a caracterului /).
Pentru controlul istoricului modificrilor, exist dou funcii importante: istoricul revi-
ziilor (revision history) i managementul diferenelor de coninut (diff feature). Persoana care
menine wiki-ul poate folosi astfel de instrumente pentru a elimina unele schimbri efec-
tuate de vizitatori. n vederea prevenirii vandalismului, unele sisteme wiki limiteaz drep-

138
Sabin Corneliu Buraga Tehnologii Web
turile de editare ori impun autentificarea utilizatorilor care intenioneaz s opereze modi-
ficri de coninut.
Pentru a dezvolta un sit wiki, se pot folosi aplicaii precum MediaWiki, MoinMoin,
TWiki, UseMod sau XWiki, disponibile n regim open-source. Serverul XWiki este folosit ca
platform pentru situl Facultii de Informatic a Universitii A. I. Cuza din Iai.
Ca i n cazul altor sisteme de management al coninutului, criteriile principale care
trebuie avute n vedere pentru a decide ce sistem wiki este cel optim sunt gradul de popu-
laritate al software-ului, facilitile oferite pentru editare, managementul utilizatorilor, fa-
cilitile groupware (forum, galerie de fotografii, sistem intern de mesagerie etc.), controlul
accesului, abilitatea de import/export a altor tipuri de coninut (e.g.: documente HTML,
fiiere PDF, documente Word), suportul multilingv, extensibilitatea, portabilitatea i
scalabilitatea. Pentru mai multe detalii, putei consulta i lucrarea S. Buraga (coord.), Ten-
dine actuale n proiectarea i dezvoltarea aplicaiilor Web, Matrix Rom, Bucureti, 2006.
Weblog-urile
Un Weblog (sau blog, pe scurt) reprezint o pagin Web care conine diverse fragmente de
informaie puse la dispoziie de ctre o persoan posibililor vizitatori. Termenul provine
de la cuvintele Web (WWW) i log (jurnal) i a fost introdus n premier de Jorn
Barger n decembrie 1997.
La adresa www.usemod.com/cgi-bin/mb.pl?WebLog sunt disponibile informaii
privitoare la istoricul i adresele unor situri referitoare la blog-uri.
Un blog poate fi considerat un mijloc de comunicare inter-personal, natura sa
putnd varia de la o form de jurnal on-line pn la depozit de informaii privitoare
la un domeniu (tehnic sau nu).
Un astfel de blog este redactat (ntreinut) fie de o singur persoan, fie de un grup. Lu-
nd n consideraie tematica abordat, un blog poate fi ncadrat n urmtoarele categorii
principale: personal, comunitar, oferind nouti, specializat, colaborativ, politic, corpora-
tist.
Dup Greg Hard, blogging-ul nu reprezint doar un blog. Este o manier de partajare la
nivelul ntregii lumi a opiniilor i gndurilor personale. Dac punem la dispoziie informa-
ii de interes, atunci trebuie s partajm hiper-legturi i s facem disponibile comentariile
din cadrul altor blog-uri. Legturile hipertext reprezint punctul forte al Web-ului, iar n
cazul Weblogging-ului ele sunt elementul cheie.
Din punctul de vedere al strategiei realizrii afacerilor electronice sau a instituirii unei
comuniti on-line, blogging-ul este una dintre cele mai rapide ci de actualizare a sitului
propriu (Eric Dolecki).

139
Sabin Corneliu Buraga Tehnologii Web
Unele blog-uri devin depozitare a unor informaii tiinifice de excepie sau sunt folosite
pentru organizarea de concursuri la nivel regional, naional sau chiar mondial un astfel
de exemplu este cel al competiiei Imagine Cup iniiate n lumea ntreag de ctre corpora-
ia Microsoft, folosind tehnologiile Web proprii n cadrul sitului TheSpoke.
La fel, n domeniul e-learning, siturile dedicate unor discipline pot avea asociate astfel de
blog-uri, folosite att la prezentarea unor informaii suplimentare referitoare la anumite
subiecte ale materiei predate la curs i/sau laborator, ct i ca instrumente de comunicare
de cele mai multe ori, informal dintre studeni i cadrele didactice (titularul discipli-
nei, persoanele implicate n predarea seminarului sau laboratorului etc.).
De asemenea, un alt context de utilizare a blog-urilor este cel reprezentat de intranetul
ntreprinderilor virtuale, un blog putnd deveni un instrument indispensabil de inter-
comunicare la nivel de echipe de lucru n cadrul unui proiect. Din aceast perspectiv,
blog-ul poate fi o component important a aplicaiilor de tip groupware (teamware).
Coninutul unui blog nu trebuie s fie exclusiv textual, existnd blog-uri care ofer pre-
zentri multimedia (audio de succes sunt MP3 blog-urile, fotografii, video denumirea
acestei categorii fiind videoblog sau, pe scurt, vlog).
Anatomia unui blog este relativ simpl, structura sa incluznd:
un titlu (eventual un subtitlu acest subtitlu poate fi considerat ca fiind un slogan
asociat blog-ului),
o list a mesajelor (intrrilor) curente, redactate de autorul/autorii blog-ului ori de
teri vizitatori,
o list de legturi spre alte situri sau blog-uri de interes (aa-numitul blogroll),
eventual, diverse alte componente (sigl, adrese spre liste de discuii, statistici etc.).
Unele subiecte interesante pot fi discutate separat, utilizatorii avnd posibilitatea via
unor formulare Web s-i introduc propriile opinii sau sugestii n cadrul blog-ului. Une-
le blog-uri ofer faciliti de inserare a emoticon-urilor sau de detectare automat a adreselor
Web introduse. Desigur, discuiile pot fi monitorizate de proprietarul blog-ului, iar unele
mesaje necorespunztoare pot fi eliminate complet sau parial de ctre acesta.
Pentru a putea referi un anumit mesaj (care poate disprea de pe prima pagin a blog-
ului, atunci cnd dinamica sa este mare), utilizatorii pot s se foloseasc de aa-numita
legtur permanent (permanent link) asociat acestuia. Astfel, un mesaj poate fi accesat fie
direct, fie parcurgnd lista mesajelor (numite i post-uri) existente.
O component opional o reprezint motorul de cutare intern, vizitatorii avnd po-
sibilitatea s regseasc, pe baza unor criterii (e.g.: cuvinte-cheie incluse n subiect, data
redactrii, autor etc.), informaiile cuprinse n lista mesajelor care compun blog-uri.

140
Sabin Corneliu Buraga Tehnologii Web
De asemenea, cele mai multe sisteme de management al Weblog-urilor dau posibilitatea
programelor (roboi sau ageni Web) s indexeze ori s manipuleze coninutul mesajelor
via fiierele RSS (Really Simple Syndication) sau Atom asociate. Formatul RSS/Atom permite
calculatoarelor s interschimbe informaii privitoare la coninutul siturilor Web (n acest
caz, al blog-urilor). Fiind bazat pe meta-limbajul XML, un document RSS/Atom este uor
de procesat sau de creat, existnd diverse instrumente numite agregatori de coninut care
extrag, sumarizeaz i stocheaz datele RSS/Atom.
Disponibile de cele mai multe ori n regim open-source, pot fi folosite o serie de instru-
mente de administrare comod a blog-urilor (att din punct de vedere al coninutului pro-
priu-zis, ct i al configurrii i modificrii preferinelor referitoare la interfaa Web), pre-
cum Blogger, Blosxom, Blojxom, LiveJournal, Manila, MovableType sau WordPress. Aceste aplica-
ii se ncadreaz n categoria sistemelor de management al coninutului (CMS Content
Management System).
Portalurile Web
Web-ul reprezint un mediu de partajare a diverselor informaii, specifice unui domeniu
de interes: afaceri, comuniti umane, divertisment etc. Unul dintre mijloacele de punere
la dispoziie a informaiilor i serviciilor este portalul Web. Dezvoltarea portalurilor este
susinut de faptul c organizaiile trebuie i pot s ofere informaiile i serviciile bazate
pe Web n formatul necesar utilizatorului. Aceasta este o schimbare important, n primul
rnd deoarece majoritatea organizaiilor, inclusiv universitile, iau organizat informaia
rareori n alt format dect cel necesar membrilor comunitilor. Acest nou i interesant
aspect al managementului Web oferit de portaluri se bazeaz pe ideea crerii i adminis-
trrii sistemelor informaionale al cror scop de baz este meninerea relaiilor pozitive
dintre susintorii unei instituii i acea instituie.
Portalurile Web pot pune, n plus, la dispoziie i alte servicii, precum accesarea unui
cont de pot electronic, cursul valutar, starea meteo, nscrierea la liste de discuii i alte-
le. Astfel, un portal poate fi privit drept integrator de coninut, fr a oferi ns doar o
colecie nestructurat de legturi spre alte situri.
Principalele categorii de portaluri sunt:
portalurile generale destinate unei largi categorii de utilizatori;
portalurile academice folosite n e-science, oferind acces la resursele distribuite (in-
formaii, aplicaii, servicii de cercetare etc.) ale unei reele de excelen ntr-un
anumit domeniu;
portalurile educaionale utilizate n e-learning, pentru a pune la dispoziie diverilor
cursani materiale cu caracter educaional;
portalurile de ntreprindere disponibile n intranet-ul sau extranet-ul unei organizaii
aliniate problematicilor e-business.

141
Sabin Corneliu Buraga Tehnologii Web
Ca exemple de portaluri generale putem meniona Yahoo! sau MSN (Microsoft Network),
care ofer printr-o interfa unic acces la mai multe categorii de servicii standard
(pot electronic, tiri, starea vremii, cotaiile bursiere etc.). Un exemplu autohton de
portal este reprezentat de home.ro. Unele aplicaii de tip portal dau posibilitatea accesului
la informaii i servicii via dispozitive mobile, de cele mai multe ori wireless.
Pentru facilitarea colaborrii on-line dintre cercettori, se poate recurge la funcionalit-
ile unui portal academic. De cele mai multe, un astfel de portal reprezint interfaa cu o
infrastructur de calcul destinat unor proiecte tiinifice de anvergur, desfurate la ni-
vel de stat, continental sau chiar mondial, graie tehnologiilor Grid. Portalul poate oferi
suport pentru cutarea i regsirea informaiilor, indiferent de localizarea lor fizic, dar
poate permite i executarea de activiti (task-uri) pe mai multe maini, privite ca un sis-
tem unic de calcul. Ca exemple de astfel de aplicaii putem enumera Large Hadron Collider
Computing Grid funcionnd la CERN, CrossGrid utilizat n chirurgia vascular virtual ori
myGrid n domeniul bioinformaticii.
Drept exemple de aplicaii pentru implementarea portalurilor putem meniona BEA
Secure Portal, eZ Publish, IBM Enterprise Information Portal, Microsoft SharePoint, Oracle Portal
sau PHP Nuke. Tehnologiile Java pun la dispoziie componente de tip portal numite
portlet-uri.


142
Sabin Corneliu Buraga Tehnologii Web

143
E Ex xe er rc ci i i i i i i i t t e em me e p pr ro op pu us se e
nainte s v suprai pe cel care v pune la treab, amintii-v c fr presiune nu se formeaz diamantele.
Mary Case
1. Ce deosebire este ntre un proxy i un server Web?
2. Precizai care dintre urmtoarele URI-uri sunt corecte:
t el net : f enr i r . i nf oi asi . com: 8080
mai l t o: w3. com@w3. or g
ht t p: / / st udent s. i nf oi asi . r o/ ~busaco/ www/
ht t p: / / MyDocument s. or g/ scr i soar e. cgi ?quer y=Li st i ng
f t p; / / f t p. uai c. r o/ Readme. t ex
3. Fie formularul stocat intr-o pagina de pe serverul www.neu.ro:
<f or mnet hod=" POST" act i on=" / cgi - bi n/ add. cgi " >
<i nput name=" Un nume" st yl e=" wi dt h: 300px" val ue=" dat i un nume" / >
<i nput t ype=" hi dden" name=" Cont r ol " val ue=" W" / >
<i nput t ype=" submi t " val ue=" Tr i mi t e" st yl e=" col or : bl ue" / >
</ f or m>

n urma apsrii butonului de tip submit, fr ca utilizatorul s modifice formularul, ce
URI va primi serverul Web? Ce metod de transfer HTTP a fost folosit?
4. Se consider programul de mai jos:
<?php
cl ass Ani mal {
var $nume=" C" , $ani , $kg=" 0" ;
f unct i on Ani mal ( $n=" r ocodi l escu" ,
$a=" 33" , $k=" 333" ) {
$t hi s- >nume. =$n; $t hi s- >ani =$a;
$t hi s- >kg=( $k | | $t hi s- >nume) ?
$k+$t hi s- >kg++: $k+$ani ; }
f unct i on set eazaAni ( $a=" 3" ) {
$t hi s- >ani . = $a. $a;
}

f unct i on f ur ni zeazaAni ( ) {
Sabin Corneliu Buraga Tehnologii Web
r et ur n $t hi s- >ani ;
}
}

$m= new Ani mal ( ) ;
#m- >set eazaAni ( $m- >kg- $m- >kg[ 1] ) ;
$t = new Ani mal ( " oar ne" ,
$m- >f ur ni zeazaAni ( ) ) ;
$ani = $t - >f ur ni zeazaAni ( ) - $m- >ani +$ani . " 0" ;
?>
Ce tip i valoare vor avea variabilele $ani , $m- >kg, $t - >kg i $kg? Argumentai.
5. Fie urmtorul script PHP:
<?php
cl ass S {
var $s1 = " WEB" ;
var $s2 = " wEb" ;
f unct i on S( $s1 = " s1" ) {
$m= " S" . f unc_num_ar gs( ) ;
$t hi s- >$m( $s1) ;
}
f unct i on S0( ) {
echo $t hi s- >s1;
}
f unct i on S1( $s1) {
echo $s1?" - >$s2" : $t hi s- >s2;
}
f unct i on S2( $s1) {
echo " $t hi s- >s2" ;
}
}
$s = new S( $s1) ;
echo $s2;
$s = new S( ) ;
?>
Precizai ce va afia navigatorul Web n urma apelrii acestui script (presupunem c
motorul PHP este operaional).
6. S se marcheze n XML datele privitoare la medicamentele dintr-o farmacie: nu-
mele medicamentului, productorul, furnizorul, cantitatea, preul, indicaiile i contra-
indicaiile, valoarea livrrilor dintr-o lun etc.
7. S se imagineze un set de documente XML care sa stocheze informaii relative la
mersul trenurilor (orar, staii intermediare, tipuri de trenuri) i la rezervarea locurilor si
eliberarea de bilete la anumite trenuri. Se vor specifica spaii de nume i maniere de vali-
dare (DTD-uri i/sau scheme XML) pentru fiecare document n parte.
8. S se organizeze n format XML datele referitoare la proprietile imobiliare ale
unei persoane, n vederea realizrii ulterioare de programe pentru determinarea tuturor
imobilelor unei persoane, listarea persoanelor dintr-un imobil, situaia imobilelor dintr-un
cartier etc.

144
Sabin Corneliu Buraga Tehnologii Web
9. S se modeleze ca documente XML informaiile privitoare la cursele aeriene fur-
nizate de o anumit companie i apoi s se realizeze o aplicaie Web care s le proceseze.
Eventual, se vor implementa i diverse servicii Web pentru a furniza detalii referitoare la
cursele disponibile pe un anumit traseu ori la o dat calendaristic.
10. S se stocheze ca document(e) XML informaiile incluse de o agend de birou,
permindu-se realizarea de adnotri pe zile, sptmni, luni, includerea de legturi Web,
programarea de ntlniri etc. S se implementeze aplicaia Web care s proceseze aceste
informaii, folosindu-se att modelul DOM, ct i interfaa SAX.
11. S se conceap, n orice limbaj de programare preferat, un script CGI care s fie
utilizat pentru evaluarea expresiilor matematice cu paranteze.
12. S se realizeze o aplicaie (sit) Web pentru vizualizarea i trimiterea de ilustrate
electronice, pe diverse teme (peisaje, orae celebre, figuri de personaliti, opere de art
etc.). Informaiile vor fi stocate exclusiv n documente XML.
13. S se realizeze un studiu comparativ al manierelor de procesare (SAX i DOM) a
aceluiai document XML, pe mai multe platforme (e.g., Linux i Windows), recurgndu-se
la mai multe limbaje de programare (de exemplu, Perl i PHP). O posibil statistic va
putea lua n calcul numrarea elementelor unui document XML avnd structura:
<doc><el ement at r i but =val oar e / ></ doc>, unde <el ement > va putea aprea
de zece mii, zece sute de mii i, respectiv, zece milioane de ori.
14. S se implementeze o aplicaie Web pentru stocarea n manier distribuit a dife-
ritelor tipuri de teste de cunotine care pot fi folosite n regim de testare sau auto-testare
la diverse discipline. Pe baza autentificrii, titularii de curs vor putea gestiona colecia de
teste de la discipline diferite (accesare ntrebri i rspunsuri, realizare de teste prin alege-
rea ntrebrilor dup diverse criterii sau aleatoriu etc.). Studenii vor putea avea acces la
module de auto-testare pe diverse domenii, contra-cronometru sau nu (demo-uri ale unor
teste reale n regim de examen). Testele vor putea fi de mai multe tipuri (single/multiple
choice, cu diferite modaliti de acordare a punctajelor, cu ntrebri dependente una de cea-
lalt etc.), bazate sau nu pe cronometrare. Aplicaia va putea oferi rapoarte privitoare la
prestaia unui anumit student la o disciplin, eventual diferite statistici numerice i gra-
fice referitoare la gradul de cunotine ale studenilor (e.g., numrul rspunsurilor erona-
te, timpul realizat, ntrebrile la care n-a rspuns nici unul dintre studenii testai etc.).
Se vor oferi posibiliti de cutare de teste pe diverse criterii domeniu de interes (i.e.
limbajul PHP), cuvinte cheie (e.g., motenire multipl), grad de dificultate etc. i de res-
tricionare a accesului (de exemplu, doar studenii nscrii la cursul de programare Web
vor beneficia de (auto-)testare la acest obiect).
Toate informaiile vor fi stocate n cadrul unor documente XML.

145
Sabin Corneliu Buraga Tehnologii Web
15. S se creeze o aplicaie Web care s ofere accesul la coninut documentar, struc-
turat pe teme i sub-teme de interes (e.g., Programare :: Limbaje :: Scripting :: Perl ori IA ::
Recunoatere forme :: Reele neurale :: Auto-nvare). Se va avea n vedere faptul c documenta-
iile:
pot fi stocate n diverse formate (proprietare sau nu), n manier distribuit (pe
mai multe maini),
vor putea fi accesibile n limbi multiple (e.g.: englez i/sau romn),
vor putea fi de un anumit tip (carte, manual de referin, specificaie, tutorial
etc.), ntr-un anumit stadiu (ciorn, propus pentru standardizare, final etc.).
Pentru fiecare resurs, se vor reine cel puin urmtoarele date:
autor(i);
titlu;
tip (carte, articol, raport tehnic, referat etc.);
editor (e.g., Springer Verlag, Prentice-Hall,);
an al apariiei;
loc al apariiei;
rezumat;
cuvinte cheie (i.e. Web, XML, cutare structurat, DOM);
legtur spre documentul complet (dac exist) sau spre o oglindire local.
Acest sit va putea oferi statistici privind cele mai accesate documente, localizarea clien-
ilor i va oferi posibilitatea de a fi administrat via Web, de la distan. Soluiile de stocare
a datelor vor recurge la tehnologiile XML.

146
Sabin Corneliu Buraga Tehnologii Web

147
R Re es su ur rs se e b bi i b bl l i i o og gr ra af f i i c ce e
Este bine s existe un sfrit n fiecare cltorie, dar n final cea mai important este chiar cltoria.
Ursula K. LeGuin

Alboaie, L, S. Buraga, Servicii Web, Polirom, Iai, 2006:
http://www.infoiasi.ro/~busaco/books/ws/
Anghel, T., Programarea n PHP. Ghid practic, Polirom, Iai, 2005
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
Berlung, A. et al. (eds.), XML Path Language (XPath) 2.0, W3C Working Draft, Boston, 2005:
http://www.w3.org/TR/xpath20/
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
Booth, D., Liu, C. (eds.), Web Services Description Language (WSDL) Version 2.0 Part 0: Primer, W3C
Candidate Recommendation, Boston, 2006: http://www.w3.org/TR/wsdl20-primer
Bray, T. et al. (eds.), Extensible Markup Language 1.0 (4
th
Edition), W3C Recommendation, Boston,
2006: http://www.w3.org/TR/xml
Bray, T. et al. (eds.), Namespaces in XML (2
nd
Edition), W3C Recommendation, Boston, 2006:
http://www.w3.org/TR/REC-xml-names
Buraga, S., Tehnologii XML, Polirom, Iai, 2006:
http://www.infoiasi.ro/~busaco/books/xml/
Buraga, S., Proiectarea siturilor Web (ediia a doua), Polirom, Iai, 2005:
http://www.infoiasi.ro/~design/
Buraga, S., Semantic Web, Matrix Rom, Bucureti, 2004: http://www.infoiasi.ro/~sweb/
Buraga, S. et al., Programare Web n bash i Perl, Polirom, Iai, 2002:
http://www.infoiasi.ro/~cgi/
Buraga, S. (coord.), Tendine actuale n proiectarea i dezvoltarea aplicaiilor Web, Matrix Rom, Bucu-
reti, 2006: http://www.infoiasi.ro/~busaco/books/nw05/
Buraga, S. (coord.), Situri Web la cheie. Soluii profesionale de implementare, Polirom, Iai, 2004:
http://www.infoiasi.ro/~busaco/books/webapps/
Buraga, S. (coord.), Aplicaii Web la cheie, Polirom, Iai, 2003:
http://www.infoiasi.ro/~phpapps/
Sabin Corneliu Buraga Tehnologii Web
Cabrera, L.F., Kurt, C., Web Services Architecture and Its Specifications, Microsoft Press, 2005
Clark, J. (ed.), XSL Transformations (XSLT) Version 1.0, W3C Recommendation, Boston, 1999:
http://www.w3.org/TR/xslt
Clark, J., DeRose, S. (eds.), XML Path Language (XPath) Version 1.0, W3C Recommendation, Bos-
ton, 1999: http://www.w3.org/TR/xpath
Daum, B., Merten, U., System Architecture with XML, Elsevier Science, 2003
Erl, T., Service-Oriented Architecture: Concepts, Technology, and Design, Prentice Hall PTR,
2005
Fallside, D., Walmsley, P. (eds.), XML Schema Part 0: Primer (Second Edition), W3C
Recommendation, Boston, 2004: http://www.w3.org/TR/xmlschema-0/
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
Geroimenko, V., Dictionary of XML Technologies and the Semantic Web, Springer-Verlag, 2004
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
Guruge, A., Web Services: Theory and Practice, Digital Press, 2004
Jacobs, I., Walsh, N., Architecture of the World Wide Web, Volume One, W3C Recommendation, Bos-
ton, 2004: http://www.w3.org/TR/webarch/
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
Mitra, N. (ed.), SOAP Version 1.2 Part 0: Primer, W3C Recommendation, Boston, 2003:
http://www.w3.org/TR/soap12-part0/
Shiflett, C., HTTP Developers Handbook, Sams Publishing, 2003
Tanas, ., Olaru, C., Dezvoltarea aplicaiilor Web folosind Java, Polirom, 2005
Weerawarana, S. et al., Web Services Platform Architecture, Prentice Hall PTR, 2005
* * *, Apache2Triad: http://apache2triad.sourceforge.net/
* * *, Apache XML: http://xml.apache.org/
* * *, Caf con Lche: http://www.cafeconleche.org/
* * *, Exemple privitoare la limbajele XML: http://www.xmlpitstop.com/
* * *, Expat: http://expat.sourceforge.net/
* * *, Fundaia Mozilla: http://www.mozilla.org/
* * *, IBMs DeveloperWorks Web Services:
http://www-136.ibm.com/developerworks/webservices
* * *, libxml: http://xmlsoft.org/
* * *, MSDN (Microsoft Developer Network): http://msdn.microsoft.com/
* * *, Organizaia OASIS (Organization for the Advancement of Structured Information Standards):
http://www.oasis-open.org/
* * *, OReilly OnLAMP: http://www.onlamp.com/
* * *, Resurse privind programare pe partea de server: http://www.devshed.com/Server_Side/
* * *, SAX (Simple API for XML): http://www.saxproject.org/

148
Sabin Corneliu Buraga Tehnologii Web
* * *, Situl dedicat dezvoltatorilor MySQL: http://dev.mysql.com/
* * *, Situl oficial PHP: http://www.php.net/
* * *, Suns XML Technologies: http://java.sun.com/xml
* * *, The Open Sourcery: http://theopensourcery.com/
* * *, UDDI (Universal Description, Discovery, and Integration): http://www.uddi.org/
* * *, Web Services Activity: http://www.w3.org/2002/ws/
* * *, World-Wide Web Consortium, Boston, 2007: http://www.w3.org/
* * *, XML.com: http://www.xml.com/
* * *, Yahoo! Developer Network: http://developer.yahoo.net/
* * *, ZVON: http://www.zvon.org/



149

S-ar putea să vă placă și