Sunteți pe pagina 1din 473

Algoritmi si structuri de date

Autori: Cristian Bologa, G.C. Silaghi


1. NOIUNI INTRODUCTIVE; ALGORITMI DE SORTARE
1.1. Definiii
Un algoritm este o procedur de calcul bine definit care primete
o valoare sau o mulime de valori ca date de intrare i produce o valoare
sau mulime de valori ca date de ieire. Este deci un ir de pai care
transform datele de intrare n date de ieire.
Putem lua ca exemplu definirea problemei de sortare a unui ir de
numere. Datele de intrare (inputul) l reprezint o secven de n
numere (a1, a2, an). Datele de ieire (outputul) l reprezint o
permutare (sau o reordonare) (a1, a2,

an ) a secvenei de numere furnizat la intrare astfel nct a 1< a2<


<an.
Un algoritm de sortare, pentru o anumit secven de numere
(reprezentnd inputul) 31, 41, 59, 26 va produce la ieire drept output
secvena 26, 31, 41, 59.
O instan a problemei reprezint mulimea tuturor datelor de
intrare (care satisface restriciile impuse n definirea problemei) date
necesare pentru a determina o soluie a problemei.
Un algoritm se spune c este corect dac pentru orice secven
de intrare care satisface condiiile problemei va produce la ieire un
rezultat (output) corect. Spunem c algoritmul respectiv rezolv
problema computaional furnizat.
O structur de date reprezint un mod de a organiza i stoca
datele astfel nct s facilitm accesul la ele i modificarea acestora.
Pseudocodul este o modalitate de a descrie algoritmi; este similar
cu schemele logice. Un algoritm descris n pseudocod poate apoi s fie
implementat n orice limbaj de programare (C, Pascal etc).
1.2. Necesitatea studierii algoritmilor
Analiza unui algoritm nseamn identificarea resurselor necesare
execuiei algoritmului (memorie, lime de band pentru comunicaii,
hardware necesar etc). n analiz, considerm c utilizm un model
generic de calculator cu urmtoarele caracteristici:
Un singur procesor

Model random-access machine pentru procesor: instruciunile se


execut secvenial (una dup alta) i nu exist posibilitate de
concuren
Se presupune c instruciunile permise pe procesor se execut
toate ntr-un timp constant
Presupunem c procesorul poate lucra cu date de tip ntreg sau
flotant, fr ca precizia s fie de larg interes (n demersul nostru
de analiz a algoritmului)
Dac calculatoarele ar avea o vitez de execuie infinit, atunci
orice metod corect de rezolvare a unei probleme ar fi potrivit. Dar
calculatoarele au viteze de execuie limitate. n acelai timp, spaiile de
memorare ale calculatoarelor sunt ieftine dar nu gratuite. Problema este

c nu orice algoritm corect funcioneaz n mod utilizabil pe orice


resurse de calcul.

Eficiena unui algoritm se refer la resursele de calcul i memorie


necesare pentru execuia algoritmului. Practic este un studiu teoretic al
performanei (n primul rnd) i al resurselor utilizate. Progresele
tehnologice din ultima perioad fac ca importana mrimii memoriei
solicitate de un algoritm s scad ca importan. Ceea ce trebuie s
intereseze programatorul este reducerea timpului de execuie al
programului. Exist aplicaii real time la care constrngerile de timp
sunt cruciale.
Un algoritm la care timpul de execuie nu depinde de dimensiunea
problemei este un algoritm de timp constant a crui complexitate se
noteaz cu O(1). Timpul de execuie al unui algoritm de complexitate
O(n) crete liniar (direct proporional) cu valoarea lui n. Un algoritm
liniar are complexitatea O(n), unul ptratic O(n2) iar unul cubic O(n 3).
Un algoritm se numete polinomial dac are o complexitate egal cu
O(p(n)) unde p(n) este o funcie polinomial. Alt clas de algoritmi sunt
cei exponeniali.
Un algoritm este mai eficient dect altul dac are o rat de
cretere mai mic, pentru cazul cel mai defavorabil. Vorbim de eficiena
asimptotic a algoritmilor atunci cnd rata de cretere a timpului de
execuie devine esenial considernd mrimi mari ale setului de date
de intrare.
1.3. Sortarea
Sortarea este o operaie des ntlnit n rezolvarea problemelor de
natur algoritmic. Problema sortrii unei mulimi de obiecte se poate
reduce la problema sortrii cheilor asociate acestora. Dup ce cheile
sunt sortate, folosind informaia de asociere (care leag cheia de
obiectul creia i aparine), se pot rearanja obiectele n ordinea n care
au fost aranjate cheile lor.
Dndu-se o secven de elemente caracterizate de valorile e1,
e2, ... en E, operaia de sortare este operaia de gsire a unei permutri a
secvenei ei1, ei2, ... ein astfel nct eij eik, oricare ar fi ij ik, unde este o
relaie de ordine definit peste mulimea E.
O metod de sortare se spune c este stabil dac dup sortare,
ordinea relativ a elementelor cu chei egale coincide cu cea iniial,
element esenial n special n cazul n care se execut sortarea dup mai
multe chei.
O cerin fundamental care se formuleaz fa de metodele de
sortare a tablourilor se refer la utilizarea ct mai economic a zonei de
memorie disponibile. Astfel, algoritmii care utilizeaz doar zona de
memorie alocat tabloului, fr a fi necesar un tablou suplimentar se
numesc sortri "n situ".
1.3.1 Sortarea prin inserie
Ideea sortrii prin inserie este urmtoarea:
Pornim cu un ir gol de numere
Lum cte un numr din irul iniial i l plasm n irul sortat la
poziia corespunztoare
Plasarea numrului n ir la poziia corespunztoare se face prin
comparare succesiv de la stnga la dreapta sau invers
Pseudocodul aferent sortrii prin inserie este prezentat n figura
1.1:

Figura 1.1 Algoritmul de sortare prin inserie


1.3.2. Metoda Divide-and-conquer
Numit i divide et impera (divide i stpnete), aceasta este o
tehnic sau o metod de programare n care:
problema iniial se sparge n subprobleme cu structur
similar cu problema original, dar de dimensiune mai
mic.

aceste subprobleme sunt rezolvate recursiv


soluiile recursive sunt combinate pentru a produce soluia
problemei iniiale
Metoda se poate aplica n rezolvarea unei probleme care
ndeplinete urmtoarele condiii:
se poate descompune n dou sau mai multe subprobleme
aceste suprobleme sunt independente una fa de alta (o
subproblem nu se rezolv pe baza alteia i nu folosete
rezultatele celeilalte)
aceste subprobleme sunt similare cu problema iniial
la rndul lor subproblemele se pot descompune (dac este
necesar) n alte subprobleme mai simple
aceste subprobleme simple se pot soluiona imediat prin
algoritmul simplificat
111111 Sortarea prin interclasare (Merge Sort)
Sortarea prin interclasare se bazeaz pe urmtorul principiu:
pentru a sorta un vector cu n elemente, l mprim n 2 vectori, care,
odat sortai, se interclaseaz. Conform strategiei Divide and Conquer,
descompunerea unui vector n ali doi vectori care urmeaz a fi sortai
are loc pn cnd avem de sortat vectori de un element.
Sortarea prin interclasare are deci 3 pai:

Divide irul A de n elemente se mparte n dou subiruri


de n/2 elemente (n cazul n care n este impar dimensiunea
primului ir este cu 1 mai mare dect dimensiunea celui de
al doilea ir)
Conquer se sorteaz recursiv cele dou subiruri
Combine se combin prin interclasare cele dou iruri
sortate obinute la pasul Conquer, rezultnd un singur ir
sortat
Recursivitatea se ncheie la iruri de lungime 1, care sunt implicit
deja sortate.
n continuare vom descrie procedura MERGE(A,p,q,r) care primete ca
i parametru irul A, poziia p de la care ncepe sortarea, poziia r la care se
ncheie sortarea i q o valoare ntre p ir, valoare care va mpri irul
A[p]..A[q] n dou subiruri A[p..q] i A[q+1]..A[r].
Complexitatea procedurii Merge este (n) unde n=r-p+1 este numrul
elementelor interclasate. Merge sort nu este o sortare in situ, ea
necesit spaiu suplimentar pentru a pstra subirurile care apoi se vor
interclasa.
Figura 1.2 prezint algoritmul procedurii MERGE(A,p,q,r):

Figura 1.2 Algoritmul de interclasare a dou iruri ordonate


cresctor
n figura 1.3 este prezentat algoritmul procedurii Merge-Sort:

Figura 1.3. Algoritmul sortrii prin interclasare


1.3.4. Heap Sort
Heap Sort sau Sortarea prin metoda ansamblelor este cunoscut
i sub denumirea de sortare pe baz de arbore, deoarece vectorul de

sortat, organizat ca o movil, corespunde unui arbore. Heapsort


utilizeaz o structur de date numit heap.

Un heap (o movil) este un vector care poate fi vizualizat sub


forma unui arbore binar aproape complet cu proprietatea c cheia
fiecrui nod din arbore este mai mare dect cheile descendenilor (deci
fiecare nod are o cheie mai mic sau egal cu cea a tatlui su). Ultimul
rnd al arborelui se completeaz de la stnga la dreapta.
Un heap poate fi reprezentat sub forma unui arbore binar sau sub
forma unui vector. Astfel, dac v este un vector care conine
reprezentarea unui heap avem urmtoarea proprietate:
Elementele v[left]..v[n] ndeplinesc condiia de structur a
heapului:
i>left avem: v[i]>v[2*i], dac 2*i n, respectiv
v[i]>v[2*i+1] dac 2*i+1 n.
Evident, pentru valori ale lui i mai mari dect n/2 nu se pune
problema ndeplinirii condiiilor de mai sus.
Figura 1.4 prezint un heap descris att sub forma unui arbore ct
i sub form de ir de elemente.

Figura 1.4 Un exemplu de heap descris printr-un arbore respectiv


printr-un ir Ca s putem folosi Heap Sort va trebui s transformm
irul de intrare ntr-un heap.

Vom crea iniial procedura MAX-HEAPIFY(A,i) care primete ca i


parametri un vector A i un indice i din vector. Atunci cnd apelm MAXHEAPIFY se presupune c subarborii avnd ca rdcini nodurile Left(i) i
Right(i) sunt heapuri. Dac elementul A(i) este mai mic dect cel puin
unul din descendenii Left(i) i Right(i), nseamn c acest element nu
respect proprietatea de heap (deci nu avem un heap i va trebui
transformat ca s devin heap). Sarcina procedurii MAX-HEAPIFY este s
scufunde n heap valoarea A(i) astfel nct subarborele care are n
rdcin valoarea elementului de indice i sa devin un heap.
Figura 1.5 prezint algoritmul MAX-HEAPIFY:

Figura 1.5 Algoritmul MAX-HEAPIFY de refacere a proprietii de


heap
Vom construi heapul de jos n sus (de la frunze) (care sunt heapuri de heapsize=1) (figura 1.6).

Figura 1.6. Algoritmul de creare a unui heap


Prezentm n figura 1.7 algoritmul de sortare utiliznd un heap
bazat pe algoritmii
BUILD-MAX-HEAP i MAX-HEAPIFY.

Figura 1.7 Algoritmul de sortare utiliznd un heap


1.3.5. Sortarea rapid (Quick Sort)
Quick Sort este un algoritm de sortare (inventat de Tony Hoare in
1962) care pentru un ir de n elemente are un timp de execuie (n 2) n
cazul cel mai defavorabil. n ciuda acestei comportri proaste pentru
cazul cel mai defavorabil, acest algoritm este deseori cea mai bun
soluie practic deoarece are o comportare medie remarcabil: timpul
mediu de execuie este (nlgn) i constanta ascuns n formula lui
(nlgn) este destul de mic. Este o sortare in situ (adic e o sortare n
spaiul alocat irului de intrare).
Algoritmul Quick Sort se bazeaz pe tehnica de programare
Divide and Conquer, bazndu-se pe urmtorii 3 pai:
Divide: irul A[p..r] este mprit (rearanjat) n dou subiruri
nevide A[p..q-1] i A[q+1..r] astfel nct fiecare element al
subirului A[p..q-1] s fie mai mic sau egal cu A[q] (element
denumit element pivot) i orice element al subsirului A[q+1..r]
este mai mare sau egal cu A[q]. Indicele q este calculat de
procedura de partiionare. Deci elementele mai mici dect pivotul
vor fi mutate n stnga pivotului iar elementele mai mari dect
pivotul vor fi mutate n dreapta pivotului.

Conquer: Cele dou subiruri A[p..q-1] i A[q+1..r] sunt sortate


prin apeluri recursive ale algoritmului de sortare rapid
Combine: Cele dou subiruri sunt sortate pe loc, nu este nevoie
de nici o combinare, irul A[p..r] este ordonat.
Prezentm n figura 1.8 algoritmul procedurii QUICKSORT:

Figura 1.8 Algoritmul QUICK-SORT


Pentru ordonarea ntregului ir A, iniial se apeleaz
QUICKSORT(A,1,lungime[A]).

Prezentm n figura 1.9 algoritmul procedurii PARTITION care


realizeaz partiionarea irului:

Figura 1.9 Partiionarea unui ir n cazul QUICK-SORT


Un algoritm se numete aleator dac comportarea lui depinde nu
numai de valorile de intrare ci i de valorile produse de un generator de
numere aleatoare. Vom presupune c dispunem de un generator de
numere aleatoare numit RANDOM. Un apel al procedurii RANDOM(p,r) va
produce un numr ntreg aleator ntre p i r (inclusiv). Fiecare numr
ntreg din acest interval va avea aceeai probabilitate de apariie.
n Quick Sort vom selecta aleator un element din subirul A[p..r]
care va juca rolul pivotului. La fiecare pas al sortrii rapide, nainte de
partiionarea vectorului vom interschimba elementul A[p] cu acest
element aleator ales. Practic, aceast modificare a algoritmului asigur
c elementul pivot x=A[p] s fie cu aceeai probabilitate orice element
dintre cele r-p+1 elemente ale vectorului A[p..r]. Rezultatul este c
partiionarea vectorului de intrare va fi n medie, rezonabil de
echilibrat. Modificrile n algoritmul deja prezentat sunt minore. Vom
avea implementat schimbarea elementului ce va deveni pivot nainte
de apelul propriu zis al procedurii PARTITION. Prezentm n figura 1.10
algoritmul de alegere aleatoare a elementului pivot:

Figura 1.10 Algoritmul de alegere aleatoare a elementului pivot


pentru QUICK-SORT

De asemenea, noua procedur QUICKSORT va apela procedura


RANDOMIZED-PARTTION n loc de vechea procedur PARTITION.
Prezentm n figura 1.11 algoritmul noii proceduri denumit
RANDOMIZED-QUICKSORT:

Figura 1.11 Algoritmul de sortare rapid n cazul alegerii


aleatoare a elementului pivot

TEHNICI DE PROGRAMARE: PROGRAMARE DINAMIC; GREEDY;


BACKTRACKING

Programarea dinamic
Tehnicile de programare sunt modaliti generale de elaborare a
algoritmilor. Ele reprezint doar nite tipare de organizare a aciunilor
("scheme" de algoritmi), nu garanteaz i succesul acestora. Pentru a
avea succes trebuie ndeplinite nite condiii suplimentare, care sunt
specifice i se demonstreaz separat pentru fiecare problem n parte.
Programarea dinamic este o tehnic de proiectare a unui
algoritm care permite rezolvarea unei clase de probleme. Programarea
dinamic, la fel ca i metoda Divide and Conquer, rezolv problemele
combinnd soluiile unor subprobleme. Spre deosebire de abordarea din
Divide and Conquer, programarea dinamic este aplicabil atunci cnd
subproblemele nu sunt independente, adic subproblemele au n comun
sub-subprobleme. Astfel, un algoritm de tipul Divide and Conquer ar
presupune mai multe calcule dect ar fi necesar dac s-ar rezolva
repetat aceste sub-subprobleme comune.
Programarea dinamic rezolv fiecare sub-subproblem o singur
dat i salveaz rezultatul ntr-o tabel cu rezultate. Se evit astfel ca o
sub-subproblem s fie rezolvat de mai multe ori.
Programarea dinamic se aplic la probleme de optimizare,
probleme cu urmtoarele caracteristici:
Au mai multe soluii posibile, fiecare caracterizate printr-o
valoare

Dorim s identificm o soluie cu valoarea cea mai mic/cea


mai mare. O asemenea soluie se numete o soluie
optim a problemei, prin contrast cu soluia optim
deoarece pot fi mai multe soluii care realizeaz soluia
optim.
Dezvoltarea unui algoritm bazat pe programarea dinamic poate fi
mprit ntr-o secven de 4 pai:
1. Se caracterizeaz structura unui soluii optime

2. n mod recursiv, se definete valoarea unui soluii optime


3. Se calculeaz valoarea unei soluii optime pornindu-se de jos n
sus
4. Se calculeaz soluia optim pe baza informaiei obinute pn n
acest pas
Paii 1->3 sunt baza unei abordri de tip programare dinamic.
Pasul 4 poate fi omis dac se dorete doar calculul unei singure soluii
optime.

10

2.1.1. Problema tierii barei de oel


Compania Sterling Enterprises cumpr bare de oel lungi i le
taie n buci mai scurte pe care apoi le revinde. Se cunoate preul p i cu
care compania vinde o bar de lungime i (i este o valoare ntreag). Se
cere determinarea locurilor unde se vor face tieturile la o bar de
lungime n, astfel nct s se obin ctigul maxim rn.
Input: n ca fiind lungimea iniial a barei precum i preurile p i
pentru i=1..n. Deci pi este preul unei bare de lungime i.
Output: Soluia optim va nsemna tierea barei n k buci, deci
obinerea partiiei i1, i2, ik cu i1+i2+ik=n astfel nct suma
rn=pi1+pi2++pik s fie maxim
Observaii: Tierile nu cost nimic (sunt gratis) iar lungimile sunt
ntotdeauna numere
ntregi.
Avnd n vedere c din 1 n 1 avem posibilitatea de a tia sau nu
bara, nseamn c pentru n-1 poziii avem posibilitatea de a tia sau nu.
Numrul maxim de partiii posibil pentru o bar de lungime n este deci
2n-1.
n figura 2.1 prezentm un exemplu de cum vom tia bare de
lungime 1, 2, ...10 pornind de la preul unei bare de lungime 1, 2, 10.

Figura 2.1 Un exemplu de tiere optim a unei bare de oel de diverse


lungimi (1->10) Problema tierii barei de oel este o problem cu
structur optim: soluia optim a

acestei probleme incorporeaz soluii optime ale subproblemelor.


Rezolvarea problemei se va baza pe o soluie recursiv.
Descompunerea recursiv a problemei tierii barei de oel se va face
astfel:
Se taie o pies de lungime i

Bara rmas de lungime n-i se taie n mod recursiv


rn= max1<=i<=n(pi+rn-i)
Algoritmul recursiv de tiere a barei de oel este descris n figura
2.2:

Figura 2.2 Algoritmul recursiv de tiere a unei bare de oel

11

Va trebui s maximizm profitul la tierea bucii de lungime i


respectiv bucii de lungime n-i care a rmas. Recursivitatea continu
doar pentru a doua bucat care a rmas.
Abordarea n algoritmul descris n figura 2.2 este de
tip top-down. Linia 5 este echivalent cu a
scrie:
rn =max(pn, r1+rn-1, r2+rn-2, , r n1+ r1) unde pn este echivalentul de a nu
tia deloc bara.
Problema este c algoritmul CUT-ROD este foarte lent. Pentru
n=40 rezolvarea va
ine cel puin cteva minute, poate chiar o or. La fiecare cretere a lui n
cu 1, timpul de execuie se va dubla. De ce este ineficient acest CUTROD? Pentru c el se autoapeleaz de mai multe ori cu aceeai
parametri, rezolvnd astfel aceleai subprobleme n mod repetat (adic
acelai apel CUT-ROD(p,j) se face de mai multe ori ceea ce este
ineficient).
ncercm s elaborm un algoritm astfel nct fiecare
subproblem s fie rezolvat o singur dat. Vom utiliza o zon de
memorie suplimentar unde s se salveze rezultatele fiecrei
subprobleme. Timpul de execuie exponenial se poate reduce astfel la
un timp de execuie polinomial dac numrul de subprobleme este
polinomial i rezolvarea unei subprobleme este polinomial.
Vom putea folosi 2 abordri:
Abordare top-down cu memo-izare: se scrie procedura
recursiv n mod obinuit, dar o modificm astfel nct s
salvm rezultatul fiecrei subprobleme ntr-un ir. nainte s se
apeleze recursivitatea, se verific dac rezultatul dorit este
deja salvat n ir
Abordare bottom-up: sortm subproblemele n funcie de
ordinul lor de mrime i le rezolvm cele mai mici la nceput
n figura 2.3 prezentm algoritmul de tiere a barei de oel
utiliznd programarea dinamic cu o abordare top-down:

Figura 2.3 Algoritmul top-down de tiere a barei de oel utiliznd


programare dinamic Acelai algoritm dar utiliznd o abordare
BOTTOM-UP este prezentat n figura 2.4:

12

Figura 2.4 Algoritmul bottom-up de tiere a barei de oel utiliznd


programare dinamic Algoritmul prezentat n anterior ofer
valoarea optim n cazul tierii barei de oel
dar nu ofer i soluia adic lista mrimilor bucilor tiate. Pentru a
reconstrui soluia, vom extinde abordarea anterioar prin memorarea n
fiecare pas nu doar a valorii soluiei optime ci i a alegerii fcute pentru
a se ajunge la soluia optim.
Prezentm n figura 2.5 algoritmul de tiere a barei de oel cu
memorarea n irul s a mrimilor bucilor ce vor fi tiate.

Figura 2.5 Algoritmul de tiere a barei de oel cu memorarea


mrimilor bucilor ce vor fi tiate
2.1.2. Problema nmulirii unui ir de matrici
Urmtorul exemplu de programare dinamic este algoritmul care
rezolv problema nmulirii unui ir de matrici. Se d un ir (o secven A 1,
A2, An) de n matrici care trebuie

nmulite, dorindu-se calcularea produsului A1A2 An


Spunem c un produs de matrice este complet parantezat fie dac
este format dintr-o unic matrice, fie dac este produsul a dou produse
de matrice care sunt la rndul lor complet parantezate. Datorit faptului
c nmulirea matricilor este asociativ, toate parantezrile conduc la
acelai rezultat (matrice produs).
Pseudocodul aferent nmulirii a 2 matrici este prezentat n figura
2.6.

13

INMULTIRE-MATRICE(A,B)

If coloane[A]!=linii[B]

scrie dimensiuni incompatibile

else

for i=1 to linii[A]


5:
for j=1 to coloane[B]
6:
C[i,j]=0
7:
for k=1 to coloane[A]
C[i,j]=C[i,j]
8:
+A[i,k]*B[k,j]

returneaza C
Figura 2.6 Algoritmul de nmulire a 2 matrici
Dac avem o matrice A(p,q) pe care dorim s o nmulim cu o
matrice B(q,r) pentru a rezulta matricea produs C(p,r) vor fi necesare
p*q*r nmuliri scalare.
Exemplu: Considerm A1(10,100), A2(100,5) i A3(5,50). Se pune
problema cnd vom avea un numr minim de nmuliri scalare pentru a
obine produsul celor 3 matrici: cnd vom calcula (A1A2)A3 sau cnd vom
calcula A1(A2A3)
A1A2 vom avea 10*100*5=5000 de nmuliri scalare pt a calcula A 1A2
de dimensiune 10x5. Apoi vom avea 10*5*50=2500 nmuliri scalare
pentru a calcula (A1A2)A3 deci n total 7500 de nmuliri scalare.
A2A3 -vom avea 100*5*50=25000 de nmuliri scalare pentru a calcula
A2A3 de dimensiune 100x50. Apoi vom avea 10*100*50=50000 nmuliri
scalare pentru a calcula A1(A2A3) deci n total 75000 de nmuliri scalare
n concluzie prima variant de parantezare ne ofer un algoritm de 10
ori mai rapid. Problema pe care urmeaz s o rezolvm are
urmtorul enun: Se d un ir de
matrici (A1A2An) care trebuie nmulite. Matricea Ai are dimensiunile pi1 x pi. S se pun parantezele pentru a rezolva produsul celor n matrici
astfel nct numrul de nmuliri scalare s fie minim.
P(n) va fi numrul de parantezri distincte ale unui ir de matrici
(altfel spus va fi numrul de posibile soluii pentru un ir de n matrici).
Vom demonstra c verificarea exhaustiv a tuturor parantezrilor nu
conduce la un algoritm eficient.
Formula recursiv de calcul a lui P(n) este prezentat n figura 2.7:
Figura 2.7 Formula recursiv de calcul a numrului de
parantezri posibile pentru un produs de n
matrici
Soluia recurenei pentru calculul lui P(n) va fi (2 n). Numrul de
soluii este exponenial n n i n concluzie metoda forei brute a cutrii
exhaustive este o strategie proast de determinare a modalitii de
parantezare a irului de matrici.
Pentru a calcula AiAi+1..Aj (vom nota acest produs cu Ai..j) va trebui
s gsim un k optim astfel nct s punem o parantez ntre Ak i Ak+1.
n consecin:
Costul lui Ai..j este egal cu costul lui Ai..k plus costul lui
Ak+1..j plus costul
nmulirii acestor dou matrici
Dac costurile lui Ai..k i Ak+1..j sunt optime, atunci i costul lui
Ai..j este optim

O soluie optim a unei instane a problemei nmulirii irului de


matrice conine soluii optime pentru instane ale subproblemelor.
Existena substructurilor optime n cadrul unei soluii optime este una
din caracteristicile cadrului de aplicare a metodei programrii dinamice.
14

Pentru a determina subproblemele necesare abordrii prin prisma


programrii dinamice, observm c avem cte o subproblem pentru
fiecare alegere a lui i i j, cu
1<=i<=j<=n. n total vom avea Cn2+n=(n) subprobleme.
Un algoritm recursiv poate ntlni fiecare subproblem de mai multe
ori pe ramuri diferite ale arborelui su de recuren. Aceast proprietate de
suprapunere a subproblemelor este una din caracteristicile programrii
dinamice. Astfel, rezolvarea fiecrei subprobleme Ai..j o pstrm ntr-un tabel
de dimensiuni nxn cu liniile i i coloanele j.
Figura 2.8 prezint algoritmul bottom-up de determinare a
costurilor nmulirii irului de matrici precum i a indicilor pentru care s-a
obinut costul optim.

Figura 2.8 Algoritmul bottom-up de determinare a costurilor


nmulirii unui ir de matrici
Algoritmul recursiv prezentat n figura 2.9 ne ofer afiarea
parantezrii optime a produsului (AiAi+1Aj) pe baza tabelului s calculate
de procedura MATRIX-CHAIN-ORDER i a indicilor i i j. Apelul iniial
PRINT-OPTIMAL-PARENS(s,1,n) ne ofer parantezarea optim pentru
produsul (A1A2..An).

Figura 2.9 Algoritmul recursiv de afiare a parantezrii optime


pentru un produs de n matrici
Descoperirea sub-structurii optimale:
1. Artm c solutia problemei se obtine printr-o alegere, care
implic rezolvarea a unei sau mai multe subprobleme

15

La o problem, presupunem c ni se furnizeaz alegerea care s


conduc la soluia optimal

Avnd aceast alegere, determinm care sunt subproblemele, i


cum caracterizm cel mai bine spaiul rezultat al subproblemelor

Artm c solutiile la subproblemele utilizate in cadrul solutiei


optimale sunt ele la rndul lor optimale, prin repetarea
raionamentului de mai sus
Identificm urmtoarele:
Primul pas al rezolvrii unei probleme de optimizare utiliznd
programarea dinamic const n caracterizarea structurii unei soluii
optime. Spunem c problema prezint o substructur optim dac o
soluie optim a problemei include soluii optime ale subproblemelor. n
consecin,
Avem dou elemente cheie pe care o problem de optimizare
trebuie s le aib pentru ca s putem aplica programarea dinamic:
Cnd o problem prezint o sub-structur optimal, este un
candidat pentru programarea dinamic

Se construiete soluia optim a problemei prin combinarea unor


soluii optimale la subprobleme
Substructura optim variaz n funcie de domeniile problemei n
dou moduri:
1. Cte subprobleme utilizeaz soluia optimal a problemei
2. Cte posibiliti de alegere avem pentru a determina
subproblemele utilizate de soluia optimal
n cazul tierii barei de oel de dimensiune n, avem o subproblem
de dimensiune n-i, dar trebuie s considerm n variante pentru i pentru
a determina care din ele conduce spre o soluie optim. n cazul
problemei parantezrii irului de matrici n vederea nmulirii lor, avem
dou subprobleme prin mprirea irului AiAi+1...Aj n dou subiruri
AiAi+1Ak respectiv Ak+1Ak+2Aj care necesit apoi rezolvarea
amndurora n mod optim. Practic exist j-i candidai pentru alegerea
indexului k.
2.2. Metoda Greedy
Metoda Greedy (greedy = lacom) este o metod general de
proiectare a algoritmilor care const n construirea soluiei globale
optimale printr-un ir de soluii cu caracter de optim local atunci cnd
este posibil exprimarea optimului global ca o combinaie de o
optime locale. Algoritmii greedy sunt n general simpli i sunt folositi la
probleme de optimizare, cum ar fi: s se gseasc cea mai bun ordine
de executare a unor lucrri, s se gseasc cel mai scurt drum ntr-un
graf etc.

2.2.1Problema seleciei activitilor


Se pune problema planificrii unor activiti care necesit
utilizarea unei resurse comune.

Datele de intrare (inputul) este reprezentat de o mulime S={a1, a2,


an} de activiti care necesit o resurs ce poate fi utilizat doar de o
singur activitate la un moment dat.

16

Fiecare activitate ai are un moment de start si i un moment de


terminare fi cu 0<=si<fi<.
O activitate ai are loc n intervalul [si,fi). Dou activiti ai i aj sunt
compatibile dac si>=fj sau sj>=fi (intervalele lor nu se suprapun).
Datele de ieire (outputul) reprezint subsetul maximal de
activiti compatibile. Prezentm n figura 2.10 un exemplu format
din 11 activiti (i=1,2, ..11) fiecare cu
momentul su de start si i momentul de terminare fi.

Figura 2.10 Un exemplu de 11 activiti avnd irul momentelor


de terminare sortat ascendent
n exemplul prezentat n figura 2.10, {a3, a9, a11} reprezint un
subset de activiti compatibile; acesta nu este un subset maximal
deoarece {a1, a4, a8, a11} este mai mare.
Acesta din urm este cel mai mare subset de activiti compatibile; n
acelai timp un alt subset maximal este i {a2, a4, a9, a11}.
Substructura optimal a problemei seleciei activitilor putem
uor constata c problema seleciei activitilor expune substructura
optim. Vom considera Sij mulimea activitilor care ncep dup
finalizarea activitii ai i se termin nainte de nceputul activitii a j
(slide corectai se termin n loc de ncep).
Presupunem c subsetul maximal de activiti compatibile din S ij
este Aij i acesta include o activitate ak.
Incluznd ak n soluia optim pentru Sij, am mprit problema Sij n
dou subprobleme Sik i Skj crora trebuie s le gsim subsetul maximal de
activiti. Sik sunt activiti care ncep dup ce activitatea ai s-a terminat i
se termin nainte ca activitatea ak s nceap iar Skj sunt activiti care
ncep dup ce activitatea ak s-a terminat i se termin
nainte ca activitatea aj s nceap.
Dac Aik = AijSik i Akj=AijSkj atunci Aij=Aik {ak} Akj unde Aik
conine activitile din Aij care se termin nainte ca ak s nceap iar Akj
conine activitile din A ij care pornesc dup ce ak se termin.
Deci soluia optimal pentru Sij include soluiile optimale pentru Sik
i Skj. Acest mod de a caracteriza substructura optim ne sugereaz c
am putea rezolva problema seleciei activitilor utiliznd programarea
dinamic.
Dac c[i,j] este mrimea unei soluii optimale pentru S ij atunci
c[i,j]=c[i,k]+c[k,j]+1. Pentru sij trebuie s determinm acea activitate
ak pentru care are loc recurena din
figura 2.11.

Figura 2.11 Formula recurent pentru calculul mrimii soluiei


optimale la problema seleciei
activitilor
Putem elabora un algoritm recursiv top-down pe care s l
memoizm sau putem s folosim o abordare bottom-up i s completm
succesiv intrrile n aceast matrice.
ntrebarea este dac am putea s adugm o activitate la soluia
optim fr s rezolvm mai nti toate subproblemele? Aceasta ne-ar
ajuta s scpm de luarea n considerare a tuturor variantelor care apar
n formula recurent 2.11. Astfel, n problema alegerii activitilor vom
considera o singur alegere i anume alegerea greedy.

17

Intuitiv, alegerea greedy este acea activitate care las resursele


disponibile pentru ct de multe activiti disponibile, deci vom alege
activitatea cu cel mai devreme moment de terminare (dac mai mult de
o activitate din S are cel mai devreme moment de terminare atunci vom
putea alege oricare din aceste activiti). Altfel spus, dac activitile
sunt sortate n ordinea cresctoare a timpului de terminare, atunci
alegerea greedy este activitatea a1.
Fcnd o alegere greedy, ne rmne o singur subproblem de
rezolvat: gsirea activitilor care pornesc dup ce a1 s-a terminat. De ce
nu putem considera activitile care se termin nainte ca a1 s nceap?
Deoarece avem s1<f1 i f1 este cel mai devreme moment de terminare al
oricrei activiti i deci nici o activitate nu poate avea timp de
terminare mai mic sau egal dect s1. Deci toate activitile compatibile
cu a1 trebuie s nceap dup ce a1 se termin.
Condiia structurii optimale ne spune c dac alegerea greedy
este optimal atunci i rezultatul optim al problemei se compune din
alegerea greedy i rezultatul optimal al subproblemei rmase.
O soluie greedy recursiv care rezolv problema seleciei
activitilor este prezentat n figura 2.12. Procedura RECURSIVEACTIVITY-SELECTOR primete ca parametri timpii de nceput i de sfrit
al activitilor (reprezentai de vectorii s i f), indicele i care definete
subproblema care trebuie rezolvat i mrimea j a problemei originale.
Aceast procedur va returna mulimea maxim de activitilor
compatibile din Si. Presupunem c cele j activiti primite ca date de
intrare sunt deja ordonate cresctor dup timpul de terminare a lor.
Dac nu sunt sortate, am putea face sortarea lor ntr-un timp de
complexitate O(nlgn).

Figura 2.12 Algoritmul recursiv greedy de selecie a


activitilor
Procedura GREEDY-ACTIVITY-SELECTOR este o versiune iterativ a
procedurii RECURSIVE-ACTIVITY-SELECTOR. i ea presupune c pornim
de la un ir de activiti sortat ascendent dup timpul de finalizare a
activitilor. Procedura prezentat n figura 2.13 colecteaz activitile
selectate ntr-o mulime A i o returneaz cnd aceast activitate este
finalizat.

Figura 2.13 Varianta greedy iterativ a algoritmului de selecie a


activitilor

18

n concluzie, proprietatea alegerii greedy poate fi enunat astfel:


alegem alternativa care apare ca i cea mai promitoare la problema
curent, fr a rezolva subproblemele. De fapt, aceasta difereniaz
tehnica greedy de programarea dinamic prin faptul c aceasta din urm
rezolv subproblemele (cte o singur dat) pentru a putea decide care
este cea mai bun alegere. Utiliznd greedy, facem alegerea care ni se
pare cea mai bun la un anumit moment, dup care rezolvm
subproblema rmas. Programarea dinamic rezolv subproblemele
nainte s fac alegerea, n timp ce greedy face alegerea nainte s
rezolve orice subproblem. Programarea dinamic lucreaz n general cu
o strategie bottom-up (sau top-down cu memo-izare) n timp ce greedy
folosete n general o strategie top-down, fcnd alegeri greedy una
dup alta, reducnd astfel instana problemei la o instan mai mic.
2.3. Metoda Backtracking
n practic se ntlnesc un numr mare de probleme care au un
numr mare de variante ce se pot ncerca, dar doar o parte din ele
ndeplinesc condiiile specifice problemei. O abordare simplist a acestui
gen de probleme poate fi urmtoarea: Se genereaz toate variantele
posibile dup care se elimin cele care nu ndeplinesc condiiile specific
(brute force attack). n cele mai multe cazuri o astfel de abordare este
pguboas, dac nu chiar imposibil.
O astfel de problem poate fi caracterizat astfel:
soluia lor poate fi pus sub forma unui vector S=v1,v2,v3vn cu v1
S1,v2 S2,.....,vn Sn;
mulimile S1,S2,S3Sn sunt multimi finite, iar elementele lor se
consider c se afl ntr-o relaie de ordine bine stabilit
exist anumite relaii ntre componentele v1, v2, vn, numite condiii
interne
Practic, dac nu cunoatem tehnica backtracking, suntem tentai
s generm toate elementele produsului cartezian S1 S2 S3 Sn i fiecare
element s fie testat dac este soluie. Metoda de generare a tuturor
soluiilor posibile i apoi de determinare a soluiilor rezultat prin
verificarea ndeplinirii condiiilor interne necesit foarte mult timp
(timpul cerut de aceast investigare exhaustiv este exponenial). n
cadrul tehnicii backtracking nu se genereaz toate soluiile posibile, ci
numai acelea care ndeplinesc anumite condiii specifice problemei,
numite condiii interne (n unele lucrri de specialitate acestea mai sunt
numite i condiii de validare). n cadrul acestei tehnici, elementele
vectorului x primesc pe rnd valori, n sensul c lui vk i se atribuie o
valoare numai dac au fost atribuite deja valori lui v1, v2, vk-1. Odat o
valoare pentru vk stabilit, nu se trece direct la atribuirea de valori lui
vk+1, ci se verific condiiile de continuare referitoare la v1, v2, vk care
stabilesc situaiile n care are sens s trecem la determinarea unei valori
pentru vk+1.
Conceptual, tehnica backtracking caut sistematic soluia ntr-un
spaiu al soluiilor organizat sub forma unui arbore. Fiecare nod din
arbore definete o stare a problemei. Toate drumurile de la rdcin la
frunze formeaz spaiul strilor. O soluie a problemei reprezint acele
stri pentru care exist drum de la rdcin la un nod etichetat cu un nuplu. Pot exista arbori statici (n cazul n care arborele astfel construit nu
depinde de instana problemei) i arbori dinamici (n cazul n care
alegerea valorii vi depinde de una sau mai multe valori din mulimea {v1,
v2, vi-1})
Algoritmul acestei tehnici poate fi descris astfel:
1)se alege primul element v1 ce aparine lui S1

19

2)se presupun generate elementele v1,v2,v3vk-1 aparinnd mulimilor


S1 S2 S3Sk-1 pentru generarea lui vk se alege primul element din Sk
disponibil i pentru valoarea aleas se testeaz ndeplinirea condiiilor
de continuare.
Pot aprea urmtoarele situaii :
a)nu s-a gsit un astfel de element, caz n care se reia cutarea considernd
generate elementele v1,v2,v3vk-1 iar vk se reia de la urmatorul element al
mulimii Sk rmas netestat

b)a fost gsit, caz n care se testeaz dac acesta ndeplinete


condiiile de continuare, aparnd astfel alte dou posibiliti:
b1) vk ndeplinete condiiile de continuare. Dac s-a ajuns la soluia
final (k=n) atunci se afieaz soluia obtinut. Dac nu s-a ajuns la
soluia final se trece la generarea elementului urmtor vk+1;
b2) vk nu ndeplineste condiiile de continuare. Se ncearc urmtoarea
valoare disponibil din Sk. Dac nu se gsete nici o valoare n S k care s
ndeplineasc condiiile de continuare, se revine la elementul v k-1 i se reia
algoritmul pentru o nou valoare a acestuia.

Algoritmul se ncheie cnd au fost luate n considerare toate elementele


lui v1.
Algoritmul general al metodei backtracking este prezentat n
figura 2.14.

Figura 2.14 Algoritmul general de rezolvare a unei probleme utiliznd


metoda backtracking

Backtracking este o metod care poate furniza toate soluiile unei


probleme.
2.3.1 Problema reginelor
Problema reginelor (sau a damelor) are urmtorul enun: S se
afieze toate posibilitile de a aeza pe o tabl de ah de dimensiune nxn,
n dame astfel nct oricare 2 din acestea s nu se atace reciproc. Dou
dame se atac una pe cealalt dac sunt aezate pe aceeai linie sau pe
aceeai coloan sau pe aceeai diagonal (principal sau secundar).
Vom considera xi linia pe care vom aeza dama de pe coloana i.
Printr-o astfel de reprezentare ne asigurm c nu vom aeza dou dame
pe aceeai coloan. Atunci, pentru o soluie parial Sk={x1, x2, x k}
condiiile de continuare includ:

xixj oricare ar fi j=1,..k {i} (sau altfel spus 1<=ij<=k) (prin

acesta verificm c nu am aezat dama k pe o linie pe care s se


gseasc deja o alt dam)

20

|xi-xj||i-j| pentru orice j=1,..k-{i} (prin aceasta ne asigurm c


dama k pe care am aezat-o nu se atac pe una din diagonale cu
damele deja aezate).
Un algoritm nerecursiv de rezolvare a problemei damelor se prezint
n figura 2.15:

Figura 2.15 Algoritmul nerecursiv de rezolvare a problemei


damelor

21

3. NOIUNI DESPRE STRUCTURI DE DATE


3.1. Tipuri abstracte de date
Un tip abstract de date (Abstract Data Type ADT) este un tip
de date necesar unui analist, dar care este posibil s nu existe n
limbajul de programare ceea ce impune necesitatea implementrii lui.
De exemplu tipul abstract Boolean reprezentat prin cele dou valori
de adevr true i false. n limbajul Basic acesta este implementat prin iruri
de caractere (true i false) dar n limbajul C nu exist acest tip de date,
programatorii putndu-se folosi de faptul c valoarea 0 nseamn
ntotodeauna false iar orice valoare diferit de 0 (exemplu valoarea 1)
nseamn true. Dac dorete, programatorul poate s-i implementeze un
tip abstract de date Boolean. Specificarea unui ADT presupune specificarea:
Mulimii valorilor admisibile
Mulimii operaiilor pe acele valori
Utilizrilor posibile ale acelei ADT
De exemplu, avem cazul unei structuri abstracte de date de tip
coad (queue) (structur de date de tip FIFO First In First Out primul
intrat primul ieit). Cunotinele necesare unui analist privesc doar
comportamentul unui ADT. n cazul unei ADT queue, analistul trebuie
s cunoasc cum se face:
Inserarea in coad: la sfrit
Extragerea de elemente din coad: la nceput
Analistul nu trebuie s tie implementarea cozii, programatorul
ADT-ului se va ocupa de acest aspect. Exist 2 implementri posibile
pentru o coad:
Un masiv + o variabil auxiliar care memoreaz sfritul
cozii
Un masiv + 2 variabile auxiliare: sfritul cozii i nceputul
acesteia
Implementare cu pointeri: 2 variabile auxiliare: sfritul
listei i nceputul acesteia
Acesta are implicaii pentru programatorul ADT-ului care poate
alege structuri de date corespunztoare pentru implementare n timp ce
pentru utilizatorul ADT-ului, comportamentul ADT-ului este observat prin
efectul i rezultatul realizrii operaiilor specificate.
3.2. ADT Lista
O list este o secven de 0 sau mai multe elemente de acelai tip
denumite noduri noduri ntre care exist o relaie de ordine determinat de
poziia lor relativ. Ea este deci o mulime ealonat de elemente de acelai
tip avnd un numr arbitrar de elemente. Numrul n al nodurilor se
numete lungimea listei. Dac n=0, lista este vid. Dac n>=1, a1 este
primul nod iar an este ultimul nod. Pentru 1<i<n, ai precede pe ai+1 i
succede pe ai-1.
O list se poate implementa n 2 moduri: folosind un ir sau
folosind pointeri.

Figura 3.1 prezint structura unei liste implementate cu ajutorul


unui ir.

22

Figura 3.1 O implementare static a unei liste cu ajutorul


unui ir
Implementarea unei liste utiliznd un ir prezint avantaje i
dezavantaje. Avantajul este accesul rapid la oricare din
elementele listei, acces care se face cu
ajutorul indicelui elementului din ir. Dac dorim o regsire pe baza
numrului de ordine al elementelor, vom utiliza indici (sau indeci), n
acest caz timpul de acces la oricare din elementele listei (elemente de
tablou) este constant, indiferent de poziie. De aceea, accesul la
elementele listei prezint o complexitate O(1).
Dezavantajul unei astfel de structuri statice de memorie este c
dimensiunea ei trebuie specificat la compilare, nemaiputndu-se apoi
modifica aceast dimensiune. Deci este necesar estimarea dimensiunii
tabloului (cu ajutorul creia se va implementa lista) nainte de compilare.
Tot ca dezavantaj, operaiile de insert i delete sunt de complexitate
sporit.
n cazul implementrii unei liste ca i structura dinamic (utiliznd
pointeri), accesul la elementele unei liste liniare se face secvenial,
pornind de la capul listei (adresa primului nod al listei) pn la ultimul
element al ei, ceea ce mrete uneori considerabil timpul de acces la un
anumit element.
Figura 3.2 prezint o list de n elemente implementat cu ajutorul
pointerilor. Regsirea unui element se face destul de ncet, vorbind de o
complexitate O(n). n schimb operaiile de insert i delete se fac uor. Un
alt avantaj al implementrii unei liste folosind pointeri este c nu trebuie
specificat dimensiunea maxim, gestiunea spaiului de stocare este
optim, utiliznd alocarea dinamic de memorie.

Figura 3.2 O implementare dinamic a unei liste utiliznd


pointeri
Exist dou variante de implementare a unei liste utiliznd
pointeri:
Acces la list printr-un pointer
Santinele la nceput i/sau sfrit

Santinela reprezint un element de list gol care marcheaz


nceputul sau sfritul listei. Avantajul santinelei este c permite
inserarea uoar de elemente la nceput / sfritul listei.

23

Lista nlnuit este o structur de date n care obiectele sunt


aranjate ntr-o ordine liniar. La implementarea prin iruri, ordinea este
determinat de indici n timp ce la implementarea prin pointeri, ordinea
este determinat de un pointer care arat ctre obiectul urmtor.
Pentru o list liniar este obligatoriu s existe o variabil,
declarat n timpul compilrii, denumit cap de list (head) care s
pstreze adresa primului element al listei. Pierderea acestei valori va
duce la imposibilitatea accesrii elementelor listei liniare.
n cazul unei liste dublu nlnuite, la un element x, x.next arat
ctre elementul succesor iar x.prev arat ctre elementul predecesor.
Dac x.prev == NULL, atunci x este primul element, denumit head.
Dac x.next == NULL, atunci x este ultimul element, denumit tail.
n cazul listelor simplu nlnuite, fiecare element al listei conine
adresa urmtorului element al listei. Ultimul element poate conine ca
adres de legtur fie constanta NULL sau NIL (sau constanta 0 care nu
indic nici un alt element), fie adresa primului element al listei, n cazul
listelor liniare circulare. n cazul unei liste circulare dublu
nlnuite, ultimul element din list pointeaz ctre head iar primul
element din list pointeaz ctre tail.
Dac lista este sortat, cheile apar n ordine sortat.
3.2.1. Operaia de cutare ntr-o list
Figura 3.3 prezint algoritmul de cutare a elementului k n lista L
folosind o cutare liniar simpl i returnnd un pointer ctre primul
element cu cheia k din lista L. Dac nu se gsete nici un obiect cu cheia
k n list, atunci se returneaz NIL.

Figura 3.3 Algoritmul de cutare unui element ntr-o list


nlnuit
Pentru a cuta ntr-o list cu n elemente, timpul de execuie al
procedurii LIST-SEARCH este (n), n cazul cel mai defavorabil, caz n
care trebuie traversat ntreaga list pentru a gsi elementul cu cheia k.
3.2.2. Inserarea unui element la nceputul listei
Figura 3.4 prezint algoritmul de inserare a unui element x ntr-o
list L.

Figura 3.4 Algoritmul de inserare a unui element ntr-o list


nlnuit
3.2.3. tergerea unui element dintr-o list
Pentru a terge un element dintr-o list avem nevoie de un pointer
ctre acesta. Dac nu avem acest pointer, atunci va trebui gsit prin
LIST-SEARCH.

Figura 3.5 prezint algoritmul de tergere a elementului indicat de


pointerul x.

24

Figura 3.5 Algoritmul de tergere a unui element ntr-o list


nlnuit
LIST-DELETE terge un element ntr-un timp (1), dar dac dorim
s tergem un element cu o cheie dat atunci n cel mai defavorabil caz
vom avea nevoie de un timp (n) datorit necesitii apelului procedurii
LIST-SEARCH care s ne ntoarc un pointer ctre elementul care conine
cheia k.
Dac ignorm condiiile de head i tail ale listei, operaia de delete
se transform
ntr-un algoritm mult mai scurt, prezentat n figura 3.6.

Figura 3.6 Algoritmul simplificat de tergere a unui element ntr-o


list nlnuit
3.2.4. Cutarea i inserarea unui element ntr-o list cu santinel
O santinel este un obiect dummy care marcheaz nceputul sau
sfritul listei. De exemplu, noi vom introduce n lista L un obiect L.NIL
care reprezint un NIL dar care are toate atributele celorlalte elemente
din list. De cte ori vom avea n pseudocod o referin ctre NIL noi o
vom nlocui cu o referin ctre L.NIL.
Atributul L.nil.next indic capul listei (head) iar L.nil.prev indic
coada (sfritul) listei (tail). Atributul next al lui tail respectiv atributul
prev al lui tail indic spre L.nil. Figura 3.7 indic modificrile care apar n
procedura de cutare respectiv inserare ntr-o list dublu nlnuit
circular cu santinel.

Figura 3.7 Algoritmul de cutare respectiv inserare ntr-o list dublu


nlnuit circular cu santinel
3.3. Stiva
Stiva este o structur de tip LIFO (Last In First Out) elementul ce ar
urma s fie ters este ultimul element adugat ntr-o astfel de structur.
Exist dou modaliti de a implementa o stiv: folosind un ir (un array)
sau folosind o structur nlnuit cu pointeri.

25

Operaia de inserare ntr-o stiv este cel mai adesea denumit


PUSH iar operaia de extragere este denumit POP. Figura 3.8 prezint
un exemplu de stiv cu cel mult n elemente implementat folosind un
array S[1..n].

Figura 3.8 Un exemplu de stiv implementat cu un ir


irul are un atribut S.top care indexeaz ultimul element adugat
n stiv. Stiva conine elementele S[1..S.top], unde S[1] este elementul
de la baza stivei iar S[S.top] este elementul din vrf. Cnd S.top=0 stiva
nu conine nici un element i este deci goal. Putem testa dac stiva
este goal cu ajutorul operaiei STACK-EMPTY din figura 3.9. ntr-o stiv
goal (vid) nu se poate face operaia POP de extragere a unui element.
Dac S.top este mai mare dect n atunci stiva este plin. n pseudocodul
prezentat n figura 3.9 nu ne facem griji cu privire la aceast posibilitate.

Figura 3.9 Procedurile de depunere i extragere dintr-o


stiv
Fiecare din cele 3 operaii pe stiv din figura 3.9 au un timp de
execuie O(1).
3.4. Coada
Coada este o structur de tip FIFO (First In First Out). ntr-o
elementul care va fi ters este ntotdeauna cel mai vechi element
adugat n coad. Operaia de adugare a unui element ntr-o coad se
numete ENQUEUE iar operaia de extragere a unui element dintr-o
coad se numete DEQUEUE. La fel ca operaia POP de extragere a unui
element dintr-o stiv, i operaia DEQUEUE de extragere a unui element
dintr-o coad nu primete nici un argument.
Figura 3.10 prezint operaiile de inserare respective extragere din
coad, fr a se verifica dac nu cumva ncercm s extragem un
element dintr-o coad goal sau dac ncercm s inserm un element
ntr-o coad plin.

26

Figura 3.10 Operaiile de inserare respectiv extragere dintr-o


coad
Fiecare din cele 2 operaii pe coad din figura 3.10 au un timp de
execuie O(1).
3.5. Tabele direct adresabile; Tabele de dispersie
Multe aplicaii necesit o structur de date care s suporte doar
operaii eseniale pentru un dicionar: INSERT, SEARCH i DELETE. O
tabel de dispersie (hash table) este o structur de date care
implementeaz dicionare. Dei cutarea unui element ntr-o tabel de
dispersie poate ine (n anumite condiii) la fel de mult ca i cutarea
unui element ntr-o list nlnuit ((n)), n practic aceast structur
se comport foarte bine. n anumite circumstane, timpul mediu de
cutare a unui element ntr-o astfel de structur este de complexitate
O(1).
Un hash table generalizeaz noiunea unui ir (array) care
folosete un indice pentru adresarea direct a elementelor lui. Astfel,
orice poziie poate fi examinat ntr-un timp O(1). Cnd numrul de chei
stocate ntr-o astfel de structur este relative sczut fa de numrul
total de posibile chei, tabelele de dispersie sunt o alternativ foarte bun
la adresarea direct pe care o are un array. n loc de a utiliza cheia direct
ca i index pentru a adresa un element al irului, ntr-o tabel de
dispersie indexul este calculat pe baza cheii
(conceptul de hashing).
3.5.1 Tabele direct adresabile
Adresarea direct este o tehnic care funcioneaz bine dac
universul U al cheilor este rezonabil de mic. Presupunem c o aplicaie
necesit elemente dintr-un dicionar n care fiecare element are o cheie
asociat din mulimea U={0,1,m-1}. Vom presupune c nu exist dou
elemente cu aceeai cheie. Pentru reprezentarea mulimii dinamice se
folosete un ir (o tabel direct adresabil) T[0..m-1] n care fiecare
poziie (sau slot) corespunde unei chei din U. Figura 3.11 ilustreaz acest
concept: Fiecare element din universul U={0,1,9} corespunde unui
index n tabela direct adresabil T. Mulimea K={2,3,5,8} a elementelor
mulimii determin sloturi n tabel care conin pointeri ctre elemente.
Slotul k pointeaz spre un element din mulime avnd cheia k. Dac

mulimea K nu conine un element cu cheia k, atunci valoarea din tabela


T este T[k]=NIL.

27

Figura 3.11 Exemplificarea conceptului de tabel direct


adresabil
Uneori, pentru a salva spaiu, n loc s pstrm cheia i datele
adiionale ntr-un obiect extern tabelei direct adresabile, cu un pointer
ntr-un slot al tabelei ctre obiect, am putea stoca stoca obiectul chiar n
slot. n acest ultim caz, un element cu cheia k este stocat n slotul k.
Figura 3.12 prezint operaiile pe astfel de tabele direct
adresabile.

Figura 3.12 Operaiile pe tabele direct adresabile


Fiecare din aceste operaii au un timp de execuie O(1).
3.5.2. Tabele de dispersie
Dac universul de chei U este mare (adic m are o valoare mare),
alocarea unui ir de dimensiune m nu este fezabil iar uneori este
imposibil. n general n aceste cazuri, numrul de chei K care se
stocheaz este mic n comparaie cu mrimea lui U.
Cnd numrul de chei K stocat n dictionar este mult mai mic
dect universul U al tuturor posibilelor chei, o tabel de dispersie va
necesita mult mai puin spaiu dect o tabel direct adresabil. Scopul
de fapt este reducerea spaiului de stocare cu meninerea n acelai timp
a facilitii de cutare a unui element ntr-un timp de complexitate O(1).
In cazul tabelelor de dispersie, timpul O(1) de cutare este valabil pentru
cazul mediu de utilizare, n timp ce la tabelele direct adresabile timpul
O(1) are loc i pentru cazul cel mai defavorabil.
n cazul tabelelor de dispersie, pentru a determina locul n care va
fi stocat elementul cu cheia k, vom utiliza o funcie de dispersie (hash
function):
h:U->{0,1,m-1}
Funcia h mapeaz universul U al cheilor n sloturile tabelei hash
T[0..m-1].
Mrimea m a tabelei T este n mod obinuit mult mai mic dect
universul U. Fiecare element cu cheia k este salvat n locaia T[h[k]]. Se

spune c h[k] este valoarea hash a cheii k. Figura 3.13 ilustreaz aceste
concepte.

28

Figura 3.13 Ilustrarea conceptului de tabel de dispersie


n figura 3.13, cheile k2 i k5 ocup acelai slot n acest caz
spunem c cele 2 valori intr n coliziune. Exist tehnici de rezolvare a
conflictelor create de coliziuni. Bineneles, ideal ar fi s se evite
coliziunile aceasta se poate face printr-o alegere potrivit a funciei h.
Totui, datorit faptului c mrimea universului U este mai mare dect
m, obligatoriu vor exista cel puin dou valori care s aibe acelai cod
hash. Alegerea funciei hash trebuie s minimizeze numrul de coliziuni.
Cea mai folosit tehnic de rezolvare a coliziunilor este cea prin
nlnuire. Toate elementele care au acelai cod hash vor fi plasate n
aceeai list nlnuit. Slotul j conine un pointer ctre lista care
salveaz elementele care au j ca i valoare hash. Dac nici un element
nu are valoare de hash pe j, atunci T[j] = NIL.
Figura 3.14 prezint modalitatea de rezolvare a coliziunilor prin
nlnuire.

Figura 3.14 Rezolvarea coliziunilor prin liste nlnuite


Figura 3.15 prezint operaiile care se fac pe o tabel de dispersie
atunci cnd rezolvarea coliziunilor se face prin nlnuire.

29

Figura 3.15 Operaiile pe o tabel de dispersie ce utilizeaz liste


nlnuite pentru valorile n coliziune
n adresarea direct, elementele vor fi salvate direct n tabela de
dispersie. Deci fiecare slot din tabela de dispersie conine fie un element fie
NIL. La cutare, se examineaz fiecare slot unde fie vom identifica
elementul fie vom avea NIL. ntr-o astfel de abordare nu vom avea liste
nlnuite sau elemente stocate n afara tabelei precum n tabelele cu
nlntuire. La inserare, se testeaz locaiile din tabel pn s se gseasc
una liber pentru inserare. Tabela de dispersie se poate umple, deci n mod
maxim vom avea =1.

n loc s urmrim pointerii, vom calcula secvena de sloturi care


va fi examinat. Pentru a realiza inserarea utiliznd adresarea direct,
vom examina tabela hash pn vom gsi un slot n care s punem cheia.
n loc s lucrm ntr-o ordine 0,1,...m-1 (care necesit un timp de
cutare (n)), secvena poziiilor depinde de cheia care va fi inserat.
Pentru a determina care sloturi s fie examinate, vom extinde funcia de
dispersie astfel:
h:U x {0,1m-1}->{0,1,m-1}.
Cu adresarea direct, vom solicita pentru fiecare k o secven de
analizat:
{h(k,0), h(k,1), h(k,m-1)} care reprezint o permutare a lui {0,1,m1}, fiecare poziie a tabelei de dispersie fiind eventual considerat ca un
slot pentru o nou cheie pe msura umplerii tabelei.
n pseudocodul prezentat n figura 3.16, presupunem c
elementele tabelei de dispersie T sunt chei fr informaii adiionale,
cheile k sunt identice cu elementele coninnd coninnd cheia k.
Fiecare slot conine o cheie sau NIL dac slotul este gol.

Figura 3.16 Inserarea i cutarea ntr-o tabel de dispersie


Trei tehnici sunt folosite pentru a calcula secvena de chei necesar
adresrii directe:
1.
Probarea liniar:
Dac h:U->{0,1,m-1} este o funcie de dispersie obinuit
auxiliar, atunci probarea liniar va utiliza urmtoarea funcie de
dispersie: h(k,i)=(h(k)+i) mod m cu i=0,1,m-1.

30

Dndu-se cheia k, vom ncerca slotul T[h(k)] dac este liber; apoi
vom ncerca slotul T[h(k)+1] i tot aa pn la slotul T[m-1]. Vom
continua apoi cu sloturile T[0], T[1] pn la T[h(k)-1].
2. Probarea ptratic
Dac h:U->{0,1,m-1} este o funcie de dispersie obinuit
auxiliar, atunci h(k,i)=(h(k)+c1i+c2i2) mod m, cu c1 i c2 dou
constante pozitive iar i=0,1,m-1. Prima poziie ncercat va fi T[h (k)]
apoi urmtoarele poziii depind ntr-o manier ptratic de valorile lui i.
3. Dispersia dubl
Dac se consider dou funcii de dispersie auxiliare h1 i h2, atunci
h(k,i)=(h1(k)+ih2(k)) mod m.
De exemplu se poate considera h1(k)=k mod m i h2(k)=1+(k mod (m1)) cu m numr prim. Pentru k=123456 i m=701 vom aveam h1(k)=80
i h2(k)=257 deci vom proba nti poziia 80 apoi vom ncerca to al 257lea slot (modulo 701) pn vom gsi slotul liber.

31

STRUCTURI DE DATE AVANSATE


4.1. Arbore binar de cutare
Un arbore binar de cutare se poate reprezenta ca o structur
nlnuit n care fiecare nod este un obiect. Fiecare nod al arborelui
conine cheia, date auxiliare i 3 referine: left care pointeaz spre nodul
copil stnga, right care pointeaz spre nodul copil dreapta i p care
pointeaz spre nodul rdcin. Dac un copil lipsete atunci referina
spre acel copil va fi NIL.
Un arbore binar de cutare este un arbore binar (adic fiecare nod
are cel mult 2 copii) care are urmtoarele proprieti:
Dac x este un nod oarecare n arbore i y este un nod n
subarborele stng atunci y.key<=x.key i
Dac x este un nod oarecare n arbore i y este un nod n
subarborele drept atunci x.key<=y.key
4.1.1. Traversarea unui arbore binar de cutare
Pentru arborii binari, se pot considera urmtoarele traversri:
Traversare n preordine: se viziteaz nodul rdcin, apoi
subarborele stng i n final subarborele drept (R St Dr).
o Traversare n inordine: se viziteaz subarborele stng, apoi nodul
rdcin i n final subarborele drept (St R Dr)
o Traversare n postordine: se viziteaz subarborele stng, apoi
subarborele drept i n final nodul rdcin (St Dr R)
Pentru fiecare din cele 3 traversri, la vizitarea fiecrui subarbore
se aplic din nou aceeai regul de vizitare
Considerm arborele binar de cutare din figura 4.1:
o

Figura 4.1. Un exemplu de arbore binar de cutare


Traversarea n preordine a arborelui din figura de mai sus d
natere urmtorului ir: 15 6 3 2 4 7 13 9 18 17 20.
Pentru traversarea n inordine vom avea: 2 3 4 6 7 9 13
15 17 18 20. Pentru traversarea n postordine vom avea:
2 4 3 9 13 7 6 17 20 18 15.
Consecina acestei proprieti a arborelui binar de cutare este c
traversnd n inordine nodurile unui astfel de arbore obinem un ir
cresctor (dup valoarea cheii) de articole.

32

Figura 4.2 prezint algoritmul de afiare a elementelor unui arbore


binar traversat
n inordine:

Figura 4.2 Parcurgerea n inordine a unui arbore binar de


cutare
4.1.2. Cutarea ntr-un arbore binar de cutare
Figura 4.3 prezint algoritmul de cutare ntr-un arbore binar de
cutare. Procedura primete un pointer ctre rdcina arborelui i o cheie
dat k care urmeaz s fie cutat n arbore. Procedura va returna un
pointer ctre nodul cu cheia k (dac acest nod exist) sau

NIL n caz contrar.

Figura 4.3 Algoritmul recursiv de cutare ntr-un arbore binar de


cutare
Figura 4.4 prezint acelai algoritm dar iterativ (deci fr a utiliza
recursivitatea):

Figura 4.4. Algoritmul iterativ de cutare ntr-un arbore binar de


cutare
4.1.3. Minimul, maximul i succesorul unui nod ntr-un arbore binar de
cutare
ntr-un arbore binar de cutare, ntotdeauna vom putea gsi
elementul minim folosind un pointer care pornete de la rdcin i urmeaz
ntotdeauna copilul din stnga.

Figura 4.5 ilustreaz acest algoritm.

Figura 4.5 Algoritmul de cutare a minimului ntr-un arbore binar


de cutare

Analog, poate avea loc cutarea elementului maxim ntr-un arbore


binar de cutare urmrind de data aceasta ntotdeauna copilul din
dreapta. Figura 4.6 prezint acest algoritm.

33

Figura 4.6 Algoritmul de cutare a maximului ntr-un arbore binar


de cutare
Dndu-se un nod ntr-un arbore binar de cutare, uneori dorim s
cunoatem succesorul acestui element n ordinea sortat determinat de
parcurgerea n inordine a acestui arbore. Dac toate cheile sunt distincte,
atunci succesorul unui nod cu cheia x este nodul cu cea mai mic cheie mai
mare dect x.key. Proprietatea unui arbore binar de cutare ne permite s
determinm succesorul unui nod fr s comparm cheile. Procedura
prezentat n figura 4.7 returneaz un pointer ctre succesorul nodului x
(dac acesta exist) i NIL n cazul n care x deja conine cea mai mare
cheie n arborele binar de cutare.

Figura 4.7 Algoritmul de gsire a succesorului unui element ntr-un arbore


binar de cutare

4.1.4. Inserarea ntr-un arbore binar de cutare


Inserarea unui element va trebui s menin proprietatea de baz
a unui arbore binar de cutare.
Procedura TREE-INSERT din figura 4.8 primete ca i parametru un
nod z pentru care z.key=v (unde v este valoarea care urmeaz s fie
inserat), z.left=NIL i z.right=NIL.

Figura 4.8 Inserarea unui element ntr-un arbore binar de


cutare

34

4.1.5. tergerea unui nod ntr-un arbore binar de cutare


n cadrul operaiei de tergere a unui nod ntr-un arbore binar de
cutare vom avea nevoie de un algoritm care nlocuiete un subarbore
cu un alt subarbore.
Procedura TRANSPLANT din figura 4.9 nlocuiete un subarbore ca
i copil al printelui su cu un alt subarbore. Procedura nlocuiete
subarborele avnd ca rdcin nodul pointat de u cu subarborele pointat
de v. Astfel, printele nodului u va deveni printele nodului v.

Figura 4.9 nlocuirea unui subarbore cu un alt subarbore


Figura 4.10 prezint algoritmul de tergere a unui nod dintr-un
arbore binar de cutare.

Figura 4.10 Algoritmul de tergere a unui nod ntr-un arbore binar


de cutare

4.2 Arbore rou i negru


Operaiile pe un arbore binar de cutare se fac ntr-un timp O(h)
unde h este nlimea arborelui. Aceste operaii sunt rapide n cazul n
care nlimea arborelui este

35

mic. Dac nlimea este mare (arbori creai dezechilibrai sau


dezechilibrai n urma unor inserri sau tergeri succesive) atunci timpul
acestor operaii nu este mai bun dect n cazul unei liste nlnuite.
Arborii rou i negru garanteaz un timp O(lgn) n cazul cel mai
defavorabil pentru operaiile de baz n acest arbore.
Un arbore rou-i-negru este un arbore binar de cutare la care
fiecare nod are bit suplimentar, reprezentnd culoarea: rou sau negru.
Fiecare nod de arbore conine urmtoarele campuri: cheia, culoarea,
nodul stng, nodul drept i printele.
Un arbore rou i negru este un arbore binar de cutare cu
urmtoarele proprieti:
1.Fiecare nod este sau rou sau negru
2.Rdcina este negru
3.Fiecare frunz (NIL) este neagr
4.Dac un nod este rou, atunci amndoi copii sunt negrii
5. Pentru fiecare nod, toate cile simple de la nodul respectiv la frunzele
descendente conin acelai numr de noduri negre
Punnd constrngeri asupra culorilor nodurilor oricrei ci simple
de la rdcin la frunze, arborii rou i negru asigur c nici una din
aceste chei nu este de dou ori mai lung dect oricare alta; n
consecin arborele este aproximativ balansat.
ntr-un arbore rou i negru vom utiliza o singur santinel pentru
a reprezenta NIL. Santinela T.nil este un obiect cu aceleai atribute ca un
nod oarecare din arbore. Culoarea santinelei este negru iar celelalte
atribute p, left, right i key pot avea valori arbitrare. Aa cum se vede n
figura 4.11 punctul b, toi pointerii spre NIL au fost nlocuii cu pointeri
ctre santinela T.nil. Vom utiliza santinela astfel nct vom putea trata
orice copil NIL al unui nod x ca un nod ordinar a crui printe este x.

36

Figura 4.11 Un exemplu de arbore rou i negru


Operaiile TREE-INSERT i TREE-DELETE ntr-un arbore cu n noduri
se execut ntr-un timp O(log(n)). Aceste operaii schimb arboreal, deci
este posibil ca arborele rezultat s nu mai ndeplineasc condiiile de
arbore rou i negru. Vor fi necesare corecii n arbore pentru a pstra
proprietile arborelui. Pentru a restaura aceste proprieti, vor trebui
schimbate culori ale unor noduri ale arborelui i de asemenea schimbat
structura de pointeri.
Vom schimba structura de pointeri prin intermediul operaiei de
rotaie care este o operaie local ntr-un arbore de cutare care menine
proprietile arborelui binar de cutare. Figura 4.12 prezint cele dou tipuri
de rotaii: rotaii la stnga i rotaii la dreapta.

37

Figura 4.12 Operaiile de rotaie pe un arbore binar de


cutare
Cnd facem o rotaie la stnga a unui nod x, presupunem c
copilul dreapta y nu este T.nil; x poate fi orice nod n arbore a crui copil
dreapta nu este T.nil. Operaia de rotaie la stnga (transformarea
configuraiei din dreapta figurii 4.14 n configuraia din stnga) l face pe
y noua rdcin a subarborelui, cu x ca i copilul stnga a lui y iar
copilul stnga a lui y (adic ) devine copilul dreapta a lui x.
Algoritmul LEFT-ROTATE din figura 4.13 presupune c x.rightT.nil
i c printele rdcinii este T.nil.

Figura 4.13 Algoritmul de rotaie la stnga ntr-un arbore binar de


cutare Procedura RB-INSERT din figura 4.14 va insera n arborele
rou i negru T nodul z
(cu cheia deja ncrcat n acest nou nod).

38

Figura 4.14 Algoritmul de inserare a unui nod ntr-un arbore rou


i negru Datorit faptului c colorarea n rou a nodului proaspt
inserat ar putea nclca
proprietatea de colorare a arborilor rou i negru, vom apela procedura
RB-INSERT-FIXUP(T,z) (prezentat n figura 4.15) la linia 17 pentru a
restaura aceast proprietate.

Figura 4.15 Algoritmul de restaurare a proprietilor unui arbore


rou i negru dup inserarea unui nod
Ca i alte operaii de baz ntr-un arbore rou i negru, operaia de
tergere a unui nod se va face ntr-un timp O(lg n). n primul rnd este
necesar modificarea procedurii TRANSPLANT (figura 4.9) fcut la
arborii binar de cutare. Noua procedur RB-TRANSPLANT este
prezentat n figura 4.16.

39

Figura 4.16 Procedura de nlocuire a unui arbore cu un alt subarbore


pentru un arbore rou i negru
4.3. Elemente legate de grafuri
Vom considera un graf G=(V,E) unde V reprezint mulimea
nodurilor iar E reprezint mulimea arcelor (sau mulimea muchiilor).
Exist dou moduri standard de a reprezenta un graf G: ca o
mulime de liste de adiacen sau ca o matrice de adiacen. Fiecare din
cele dou variante se aplic att grafurilor neorientate ct i grafurilor
orientate. Reprezentarea prin liste de adiacen este de preferat pentru
reprezentarea grafurilor rare adic a grafurilor pentru care mulimea
arcelor este mult mai mic dect multimea nodurilor (grafuri cu
densitate mic). Pentru grafurile dense este de preferat reprezentarea
cu ajutorul matricilor de adiacen.
O list de adiacen ca modalitate de reprezentare a unui graf
reprezint un ir Adj de V liste, cte una pentru fiecare nod din graf.
Pentru fiecare nod uV, Adj[u] conine toate nodurile v din graf pentru
care exist o muchie (un arc) (u,v)E. Deci Adj[u] este format din
totalitatea vrfurilor adiacente lui u n G. Notaia G.Adj[u] se folosete
pentru a ne referi la lista de adiacen a nodului u.
Dac G este un graf orientat, suma lungimilor tuturor listelor de
adiacen este |E| deoarece un arc (u,v) este reprezentat doar prin v
Adj[u]. Dac G este un graf neorientat, suma lungimilor tuturor listelor de
adiacen este 2|E| deoarece un arc (u,v) apare att in lista de adiacen a
lui u (v apare n Adj[u]) ct i n lista de adiacen a lui v (u apare n
Adj[v]).
Att pentru grafuri orientate ct i pentru grafuri neorientate,
spaiul de memorie necesar este (V+E).
Dac graful este ponderat (graf cu costuri) cu ponderile dat de o
funcie de cost w:E->R, atunci ponderea w(u,v) al muchiei (u,v)E va fi
memorat mpreun cu vrful v n lista de adiacen a lui u.
Un dezavantaj al listelor de adiacen este c nu ofer un mod
mai rapid de a determina dac exist un arc (u,v) ntre cele dou noduri
altfel dect a cuta pe v n lista de adiacen a lui u adic n Adj[u].
Matricea de adiacen rezolv aceast problem dar folosind asimptotic
mai mult memorie.
ntr-o matrice de adiacen presupunem c nodurile sunt
numerotate arbitrar cu
1,2,|V|. Vom folosi o matrice A de dimensiuni |V|x|V| astfel nct
elementele aij
ndeplinesc condiia din figura 4.17:
Figura 4.17 Matricea de adiacen a unui graf
Matricea de adiacen ocup un spaiu (V2), indiferent de
numrul de arce
(muchii) ale grafului.

40

La un graf neorientat, (u,v) i (v,u) reprezint aceeai muchie, n


consecin matricea este simetric fa de diagonala principal (deci
matricea de adiacen este propria sa transpus AT=A).
Pentru un graf ponderat, putem stoca costurile arcelor ca
elemente ale matricii de adiacen, iar acolo unde arcul nu exist putem
stoca NIL, sau 0.
Vom putea accesa un atribut d al unui unui nod v folosind notaia
v.d. De asemenea, vom putea accesa un atribut f al unui arc (u,v)
folosind notaia (u,v).f.
4.3.1 Parcurgerea n lime a unui graf
Exist dou modaliti de parcurgere a grafurilor: parcurgerea n
lime (breadth first) respectiv parcurgerea n adncime (depth first).
n cazul parcurgerii n lime, pornind de la un graf G(V,E) i un
nod s de start, vom explora n mod sistematic arcele din G pentru a
descoperi fiecare nod care este accesibil pornind de la nodul s.
Algoritmul calculeaz distana (cel mai mic numr de muchii) de la nodul
s la fiecare nod care este conectat la s. Algoritmul exploreaz frontiera
dintre nodurile descoperite i cele nedescoperite n lime, adic
descoper toate nodurile la distan k, apoi cele la distan k+1 etc.
Algoritmul este funcional att pentru un graf neorientat ct i pentru un
graf orientat.
Parcurgerea n lime coloreaz fiecare nod cu alb, gri sau negru
pentru a ine evidena avansrii. Se presupune c iniial toate nodurile
din graf sunt colorate n alb (adic sunt nedescoperite), devin mai trziu
gri i apoi negre. Nodurile gri i negru sunt noduri care au fost
descoperite. Dac avem arcul (u,v)E i u este nod negru, atunci v va fi
negru sau gri (toate nodurile adiacente unui nod negru au fost
descoperite).
Algoritmul produce un arbore de lime avnd ca rdcin nodul s,
care conine toate aceste vrfuri conectate la s. Pentru fiecare vrf v
accesibil din s, calea din arborele de lime de la s la v corespunde celui
mai scurt drum de la s la v n G, adic un drum care conine un numr
minim de muchii. De fiecare dat cnd cutarea descoper un nod alb v n
cursul scanrii listei de adiacen al unui nod deja descoperit u, nodul v i
arcul (u,v) este adugat n acest arbore. Vom spune c u este predecesorul
sau printele lui v n arborele de lime. Deoarece un vrf este descoperit
cel mult o dat, el poate avea cel mult un printe.
Procedura de cutare n lime din figura 4.18 presupune c graful
de intrare G(V,E) este reprezentat utiliznd liste de adiacen.

41

Figura 4.18 Algoritmul de parcurgere n lime pentru un graf


reprezentat cu liste de adiacen
4.3.2. Noiunea drumului de lungime minim
Vom defini calea cea mai scurt (sau drumul de lungime minim)
(s,v) din s n v ca
fiind numrul minim de muchii ale oricrui drum de la s la v sau dac
nu exist un drum de la s la v.
Dac avem un graf G=(V,E) i s un nod arbitrar din V, atunci
pentru orice arc (u,v)E avem (s,v)<=(s,u)+1. (dac u este accesibil
din s atunci i v este accesibil din s. n acest caz, cel mai scurt drum de
la s la v nu poate fi mai lung dect cel mai scurt drum de la s la u la care
se adaug 1 corespunztor muchiei (u,v)).
Dac se execut BFS pornind de la un nod s, la terminare, pentru
fiecare nod v pentru care exist o cale de la s, valoarea v.d calculat de
algoritmul BFS satisface v.d=(s,v).
Procedura PRINT-PATH din figura 4.19 prezint algoritmul de
afiare a drumurilor de lungime minim pornind de la nodul surs s pn
la nodul destinaie v.

Figura 4.19 Procedura de afiare a drumurilor de lungime minim


pornind de la s la v
4.3.3. Parcurgerea n adncime a unui graf
Parcurgerea n adncime presupune o cutare n graf ct mai
adnc oricnd acest lucru este posibil. n cutarea in adncime,
muchiile sunt explorate pornind de la vrful v cel mai recent descoperit
care mai are nc muchii neexplorate care pleac din el. Dac toate
muchiile unui nod v au fost explorate, atunci algoritmul face backtracking la

42

urmtorul nod care trebuie explorat dup v. Aceast operaie continu


pn cnd au fost descoperite toate nodurile accesibile din vrful surs
iniial.
Vom folosi aceeai convenie de colorare i anume alb, gri i
negru. Pentru fiecare nod folosim 2 tampile de timp:
v.d momentul n care nodul a fost descoperit pentru prima
dat (cnd este marcat gri)
v.f momentul n care parcurgerea termin lista de adiacen
a lui v (cnd nodul va fi marcat negru)
Acest marcaj de timp este o valoare ntreag cuprins ntre 1 i 2|
V| deoarece exist un moment de descoperire i un moment de
terminare pentru fiecare din cele |V| noduri ale grafului.

Figura 4.20 Algoritmul de cutare n adncime


Figura 4.20 prezint algoritmul de cutare n adncime pentru un
graf neorientat sau orientat.
4.3.4. Sortare topologic
Cutarea n adncime poate fi folosit pentru o sortare topologic a
unui graf orientat aciclic. O sortare topologic a unui graf orientat aciclic
G=(V,E) este o ordonare liniar a tuturor vrfurilor sale astfel nct, dac G
conine o muchie (u,v) atunci u apare naintea lui v n ordonare. Dac graful
nu este aciclic, atunci nu este posibil sortarea topologic. O sortare
topologic a unui graf poate fi vzut ca o ordonare a vrfurilor sale de-a
lungul unei linii orizontale astfel nct toate muchiile sale merg de la stnga
la dreapta.
Figura 4.21 prezint un exemplu de sortare topologic a unor obiecte
de mbrcminte care trebuie mbrcate ntr-o anumit ordine. De exemplu,
ciorapii trebuie mbrcai naintea pantofilor. O muchie orientat (u,v) din
graful aciclic din figura 4.21 punctul (a) indic faptul c articolul de
mbrcminte u trebuie mbrcat naintea articolului v. Punctul (b) prezint
graful orientat aciclic sortat topologic ca o ordonare a vrfurilor de-a

43

lungul unei linii orizontale. Muchiile orientate merg de la stnga la


dreapta. Vrfurile sunt aranjate de la stnga la dreapta n ordinea
descresctoare a timpului de terminare.

Figura 4.21 Un exemplu de sortare topologic


Algoritmul din figura 4.22 sorteaz topologic un graf orientat
aciclic:

Figura 4.22 Algoritmul simplu de sortare topologic a unui graf


orientat aciclic

44

4.3.5. Component tare conex a unui graf


O component tare conex a unui graf orientat G=(V,E) este o
mulime maximal de vrfuri U V, astfel nct, pentru fiecare pereche de
vrfuri u i v din U exist un drum de la u la v precum i de la v la u. Altfel
spus, ntre oricare dou noduri din component exist cel puin un drum i
nu mai exist nici un nod n afara componentei legat printr-un drum de un
nod al componentei.
Algoritmul din figura 4.23 determin componentele tare
conexe ale unui graf orientat G=(V,E) folosind dou cutri n
adncime, una n G i una n GT.

Figura 4.23 Algoritmul de determinare a componentelor tare conexe dintrun graf orientat

4.4. Arbori de acoperire minimi


La proiectarea circuitelor electronice, de multe ori este necesar
legarea pinilor mai multe componente, conectndu-i cu fire, fiecare fir
conectnd doi pini. Pentru interconectarea unei mulimi de n pini vor fi
necesare n-1 fire. Avnd n vedere c pot fi mai multe aranjamente de
interconectare, se cere s se determine cablarea care folosete cea mai
mic cantitate de cabluri.
Vom folosi un graf neorientat conex, G=(V,E) unde V este
mulimea pinilor i E este mulimea interconectrilor posibile dintre
perechile de pini; pentru fiecare pereche de pini (u,v)E, avem un cost
w(u,v) ce reprezint costul cablului de la pinul u la pinul v. Dorim s
determinm submulimea aciclic T E care conecteaz toate nodurile
din V i al crei cost total w(T)=(u,v)T w(u,v) este minim.
Deoarece mulimea T este aciclic i conecteaz toate nodurile,
ea trebuie s formeze un arbore care va fi denumit arbore de acoperire
deoarece acoper graful G. Problema determinrii arborelui T va fi
numit problema arborelui de acoperire minim.
Vom prezenta doi algoritmi de determinare a arborelui de acoperire
minim: algoritmul lui
Kruskal i algoritmul lui Prim.
Algoritmii pe care i vom prezenta pentru determinarea arborelui de
acoperire minim sunt algoritmi greedy. Aceast strategie greedy este
implementat n algoritmul generic din figura 4.24, care dezvolt arborele
de acoperire minim adugnd o muchie o dat. Algoritmul folosete o
mulime A care este ntotdeauna o submulime a unui arbore de acoperire
minim. La fiecare pas este determinat o muchie (u,v) care poate fi
adugat la A, respectnd proprietatea de mai sus, adic AU{(u,v)} este, de

asemenea, o submulime a unui arbore de acoperire minim. Numim o astfel


de muchie o muchie sigur (safe) pentru
A, deoarece poate fi adugat, n siguran, mulimii A, respectnd
proprietatea de mai sus.

45

Figura 4.24 Algoritmul generic de determinare a unui arbore de


acoperire minim Partea dificil este gsirea unei muchii sigure n
linia 3 a algoritmului. Vom defini o
tietur (S, V-S) a unui graf neorientat G=(V,E) ca o partiie a lui V.
Spunem c o muchie (u,v)E traverseaz tietura (S,V-S) dac unul din
punctele sale terminale este n S i cellalt este n S-V. Spunem c o
tietur respect mulimea de muchii A dac nici o muchie din A nu
traverseaz tietura. O muchie este o muchie uoar care traverseaz o
tietur dac are costul minim dintre toate muchiile care traverseaz
tietura. Pot exista mai multe muchii uoare care traverseaz o tietur
dac ele au costuri egale. Generaliznd, spunem c o muchie este o
muchie uoar care satisface o proprietate dat dac are costul minim
dintre toate muchiile care satisfac acea proprietate.
4.4.1. Algoritmul lui Kruskal de determinare a unui arbore de acoperire
minim
Algoritmul lui Kruskal de determinare a unui arbore de acoperire
minim se bazeaz pe algoritmul generic prezentat n figura 4.24.
Algoritmul gsete o muchie sigur (u,v) dintre toate muchiile care
conecteaz 2 arbori n pdurea de arbori pentru a o aduga la pdurea
dezvoltat. Muchia sigur (u,v) este muchia cu costul minim care unete
doi arbori din pdurea respectiv.
Algoritmul lui Kruskal, prezentat n figura 4.25, folosete o
structur de date pentru mulimi disjuncte pentru a reprezenta mai
multe mulimi de elemente disjuncte. Fiecare mulime conine vrfurile
unui arbore din pdurea curent. Funcia FIND-SET(u) returneaz un
element reprezentativ din mulimea care l conine pe u. Astfel, putem
determina dac dou vrfuri u i v aparin aceluiai arbore testnd dac
FIND-SET(u) este egal cu FIND-SET(v). Combinarea arborilor este
realizat de procedura UNION.

Figura 4.25 Algoritmul lui Kruskal de determinare a unui arbore de


acoperire minim
4.4.2. Algoritmul lui Prim de determinare a unui arbore de acoperire minim
Precum algoritmul lui Kruskal, algoritmul lui Prim este un caz
particular al algoritmului generic pentru determinarea unui arbore de

acoperire minim pentru un graf conex. Algoritmul lui Prim are proprietatea
c muchiile din mulimea A formeaz ntotdeauna un singur arbore. Arborele
se formeaz pornind de la un vrf arbitrar r i crete

46

pn acoper toate vrfurile din V. La fiecare pas, se adaug arborelui o


muchie uoar care unete mulimea A cu un vrf izolat din GA=(V,A). La
fel ca algoritmul lui Kruskal, algoritmul lui Prim folosete o tehnic gredy
deoarece arborelui ii este adugat la fiecare pas o muchie care adaug
cel mai mic cost la costul total al arborelui.
n procedura MST-PRIM din figura 4.26, graful G, rdcina r a
arborelui minim de acoperire care urmeaz s fie dezvoltat i costurile w
sunt parametri de intrare. n timpul execuiei, toate vrfurile care nu
sunt n arbore sunt ntr-o coad de prioritate Q bazat pe un cmp cheie.
Pentru fiecare vrf v, atributul v.key este costul minim al oricrei muchii
care unete pe v cu un vrf din arbore.

Figura 4.26 Algoritmul lui Prim de determinare a unui arbore de


acoperire minim
4.5. Drumuri minime ntr-un graf
Problema drumului minim apare deseori n practic. Un exemplu
ar fi gsirea drumului cel mai scurt dintre 2 orae.
Fiind dat un graf orientat cu costuri G=(V,E) i avnd funcia de
cost w:E->R care asociaz fiecrei muchii cte un cost exprimat printr-un
numr real. Costul w(p) al unei ci p={v0, v1, vk} este suma costurilor
de pe calea p (figura 4.27).
Figura 4.27 Costul unei ci exprimat ca suma costurilor muchiilor de
pe acea cale
Costul unui drum minim (costul optim) de la u la v se definete n
figura 4.28.

Figura 4.28 Costul drumului minim


Un drum minim de la u la v este orice drum p cu proprietatea
w(p)=(u,v).
n continuare ne vom axa pe problema drumului minim de surs
unic. ns, exist mai multe variante ale problemei drumului minim, i
anume:
Problema drumurilor minime de destinaie unic: S se gseasc de la
fiecare nod vV drumul minim pn la un vrf destinaie t prestabilit.
Aceast problem poate fi pus i invers: calea cea mai scurt de la o
surs s la fiecare nod v dintr-un graf.

Problema drumurilor minime de surs i destinaie unic: S se determine


un drum minim de la u la v pentru u i v date. Dac rezolvm problema
drumurilor minime de surs unic pentru vrful u atunci rezolvm i aceast
problem. De fapt, nu se cunosc algoritmi pentru

47

rezolvarea acestei probleme care s fie asimptotic mai rapizi dect cel
mai bun algoritm pentru determinarea drumurilor minime de surs
unic, n cazul cel mai defavorabil. Problema drumurilor minime pentru
surse i destinaii multiple: S se determine drumul minim de la u la v
pentru fiecare pereche de vrfuri u i v. Aceast problem poate fi
rezolvat, de exemplu, prin aplicarea algoritmului pentru surs unic
pentru fiecare vrf al grafului.
De regul, algoritmii pentru determinarea drumurilor minime
exploateaz proprietatea c un drum minim ntre dou vrfuri conine
alte drumuri optimale. Aceast proprietate de optimalitate
substructural este specific att programrii dinamice ct i metodei
greedy. Algoritmul Dijkstra aplic metoda greedy iar algoritmul FloydWarshall pentru determinarea drumurilor minime pentru toate perechile
de vrfuri este un algoritm de programare dinamic.
Proprietatea de optimalitate substructural a drumurilor minime
poate fi enunat
astfel:
Dac se d un graf orientat G=(V,E) i o funcie de cost w:E->R pe
graful G, i fie p={v0, v1, vk} calea de cost minim ntre 2 noduri v0 i
vk; atunci pentru orice 0<=i<=j<=k, p-ij={vi,v i+1, vj} este calea de
cost minim ntre vi i vj.
Considernd un graf G=(V,E), pentru fiecare nod vV vom
memora predecesorul acestuia v., care poate fi un alt nod sau NIL.
Algoritmii de determinare a drumului minim seteaz predecesorii astfel
nct dac se merge de la un nod v napoi, vom gsi calea minim
(printr-o traversare n ordine invers) de la sursa s pn la nodul v.
4.5.1. Reprezentarea drumurilor minime
Deseori dorim nu doar s determinm lungimea drumului minim ci
i vrfurile care compun acest drum minim. Pentru reprezentarea
acestor drumuri minime vom utiliza o reprezentare similar celei
considerate la parcurgerea n lime a arborilor. Dndu-se un graf
G=(V,E) vom pstra pentru fiecare nod vV un predecesor v. care este
fie un alt nod fie NIL. Algoritmii pentru determinarea drumurilor minime
ce urmeaz s fie prezentai determin astfel nct pentru fiecare vrf
v, lanul de predecesori care ncepe cu vrful v s corespund unei
traversri n ordine invers a unui drum minim de la s la v. Astfel, pentru
orice vrf v pentru care v.NIL vom putea utiliza procedura PRINTPATH(G,s,v) pentru tiprirea unui drum minim de la s la v.
Vom considera subgraful predecesor G=(V,E) indus de valorile
lui , unde V este mulimea nodurilor din V care au proprietatea c au
predecesor diferit de NIL reunit cu mulimea constnd din nodul surs:
V={vV:v.NIL}{s}
Mulimea de muchii orientate E este mulimea de muchii indus
de valorile lui pentru vrfurile din V:
E={(v.,v)E:vV-{s}}
Atunci G este un arbore al drumurilor minime adic este un
arbore cu rdcina s coninnd cte un drum minim de la sursa s la
fiecare vrf al grafului G care este accesibil din s.
4.5.2. Relaxarea
Algoritmii care urmeaz s fie prezentai n continuare utilizeaz
tehnica de relaxare. Pentru fiecare vrf vV vom pstra un atribut v.d
reprezentnd o margine superioar a costului unui drum minim de la
sursa s la vrful v. Numim d.v o estimare a

48

valorii drumului minim. Estimrile drumurilor minime i predecesorii sunt


iniializai prin procedura din figura 4.29.

Figura 4.29 Iniializarea estimrilor drumurilor minime i a


predecesorilor ntr-un graf G cu sursa
s
Termenul de relaxare semnific de fapt o operaie care determin
decrementarea unei margini superioare. n procesul de relaxare a unei
muchii (u,v) se verific dac drumul minim pn la vrful v (determinat
pn n acel moment) poate fi mbuntit pe baza unui drum care s
treac prin u, i dac da, atunci se reactualizeaz v.d i v.. Practic, un
pas de relaxare poate determina descreterea valorii v.d reprezentnd
valoarea drumului minim de la s la v i reactualizarea cmpului v. care
conine predecesorul vrfului v. Procedura RELAX este prezentat n
figura 4.30.

Figura 4.30 Procedura de relaxare a unei muchii (u,v) ntr-un graf


cu costuri
4.5.3. Algoritmul Bellman-Ford
Algoritmul Bellman-Ford rezolv problema drumurilor minime cu
surs unic n cazul general al unui graf care poate avea i costuri
negative. Dndu-se un graf orientat G=(V,E), un vrf surs s i funcia de
cost w:E->R, algoritmul Bellman Ford returneaz o valoare boolean
indicnd dac exist sau nu un ciclu de cost negativ accesibil din vrful
surs s considerat. n cazul n care un astfel de ciclu exist, algoritmul
semnaleaz c nu exist soluie iar dac nu exist un astfel de ciclu,
algoritmul produce drumurile minime i costurile corespunztoare lor.
Procedura BELLMAN-FORD este prezentat n figura 4.31 i utilizeaz
tehnica relaxrii prin descreterea estimrii valorii v.d adic valoarea
drumului minim de la vrful surs s pn la fiecare vrf vV pn la
obinerea adevratului cost minim (s,v). Algoritmul returneaz TRUE
dac i numai dac nu conine cicluri de cost negativ accesibile din
surs.

Figura 4.31 Algoritmul Belmann-Ford

49

4.5.4. Drumuri minime de surs unic n grafuri orientate aciclice


Prin relaxarea arcelor ntr-un graf orientat aciclic (DAG directed acyclic
graph) cu costuri conform unei ordonri topologice a vrfurilor sale putem calcula
drumurile minine de surs unic ntr-un timp (V+E). Drumurile minime sunt
ntotdeauna bine definite ntr-un DAG datorit faptului c acesta nu poate avea
cicluri de cost negativ, chiar dac graful conine arce de cost negativ.
Algoritmul ncepe prin sortarea topologic a grafului pentu impunerea unei
ordini liniare a vrfurilor. Dac exist un drum de la u la v atunci u precede v n
ordinea topologic. Algoritmul efectueaz o singur trecere peste vrfurile
sortate topologic i pe msur ce fiecare vrf este procesat, sunt relaxate toate
muchiile care pornesc din acel vrf.
Algoritmul de cutare a drumurilor minime ntr-un graf orientat aciclic este
prezentat n figura 4.32.

Figura 4.32 Algoritmul de cutare a drumurilor minime ntr-un graf orientat


aciclic
4.5.5. Algoritmul lui Dijkstra
Algoritmul lui Dijkstra rezolv problema drumurilor de lungime minim cu
surs unic
ntr-un graf orientat G=(V,E) cu costuri nenegative. Deci n acdrul acestui
algoritm vom avea w(u,v)>=0 pentru orice arc (u,v)E.
Algoritmul lui Dijkstra gestioneaz o mulime S de noduri pentru a crui elemente
algoritmul a calculat deja costurile finale ale drumurilor minime de la sursa s.
Algoritmul selecteaz cte un vrf u din mulimea V-S pentru care estimarea
drumului minim este minim, introduce acest vrf u n mulimea S i relaxeaz
arcele divergente din din vrful u. Figura 4.33 prezint algoritmul lui Dijkstra.

Figura 4.33 Algoritmul lui Dijkstra de determinare a drumurilor de lungime


minim
ntr-un graf orientat cu costuri nenegative

50

1. SISTEME DE OPERARE
Autor: George Sebastian Chi

1.1 Sisteme de Operare - Definiie i funcionalitate


Un sistem de calcul modern este alctuit dintr-unul sau mai multe procesoare, memorie principal, discuri,
display, tastatur, display, interfe e de re ea i alte interfe e de intrare/ie ire. Toate aceste elemente mpreun
formeaz un sistem complex[TANENBAUM06]
Peste arhitectura hard a unui calculator este un program de baz numit i sistem de operare care are
sarcin s administreze dispozitivele din sistem i s ofere programelor utilizatorilor modalit i de interfa are mai
simple cu structura hard. Structur hard mpreun cu instruc iunile n limbaj de asamblare alctuiesc nivelul ISA
(Instruction Set Arhitecture - Arhitectura setului de instruc iuni) numit i limbaj ma in.
Programe de aplicaii

Dezvoltat
de
Pachete de programe
utilizatori
Biblioteci, Browsere Editoare
Soft de baz
SO Translatoare
Editoare de legturi
Hard
Limbaj main
Microprograme (Firmware)
Componente fizice
Figura 2. 1 Sistem de calcul alctuit din structura hard, SO i aplicaii
Software de baz (sistem) fac sistemul s funcioneze:
Translatoare
Interpretoare de comenzi
Editoare de legturi
Programe de comunica ie etc.
Software de aplicaii ale unor utilitare pentru
utilizatori: Pachete de programe
Editoare de texte
SGBD-uri
Navigatoare Web

Instrumente de dezvoltare de
aplicaii Editoare de imagini
Sisteme financiar contabile, ERP (Entreprise Resource Planning), HRM, CRM, SCM, FMS
Bibliotecare etc.
Sistemele de operare realizeaz dou func ii de baz ntre care nu exist nici o legtur: extinderea
func ionalit ii ma inii i gestionarea resurselor,ceea ce nu putem spune este care din aceste func ii este mai
important. Prin func ia de extindere ascunde detalii neplcute precum: ntreruperile, timer-ele, gestiunea memoriei
i alte elemente de nivel sczut. Tot func ia de extindere ascunde programatorului adevrul despre structur hard
i prezint numai partea frumoas a fi ierelor cu nume nu i cu octe i i reprezint o vedere de sus n jos a SO.
n abordarea de jos n sus este prezen a func ia de gestionare a resurselor care are c sarcin s realizeze
o alocare ordonat i controlat a proceselor, memoriilor i dispozitivelor de I/O n diversele programe scrise
pentru ele. Administrarea resurselor include partajarea resurselor n timp i spa iu (multiplexarea). Cnd este n
timp programele sau utilizatorii le folosesc pe rnd resursele (exemplu: tiprirea) formndu-se o coad SO este acela
care spune cine urmeaz i ct timp are alocat. Cnd este n spa iu fiecare client folose te o parte din resursa
(exemplu: memoria principal este mpr it ntre mai multe programe, sau HDD este o alt resursa multiplexat n
spa iu.

1.2 Evoluia i clasificarea sistemelor de calcul


Abacul - sistem de bile Asia - introdus cu 2000-3000 de ani [Price77].
1614 - John Napier logaritmi i tabel de calcul;
1620 - Wiliam Oughtred - bazat pe logaritm.
1642 - Blaise Pascal (19 ani) - mainilor mecanice. Maina Pascal fcea adunri i scderi; conceptul de
complement - preluat n informatica modern. O limitare - nmulirea - adunri repetate. Nicolaus Wirth limbajul
PASCAL.
1671 - Gottfried von Leibnitz - nmuliri i mpriri.
1822 - Charles Babbage, profesor de matematic la Universitatea din Cambridge (Anglia) - a construit un
sextant - motor diferenial prezentat Societ ii Regale de tiine.
1834 - dispozitiv complex - main analitic, care a avut o arhitectur asemntoare cu cea a calculatoarelor
moderne. Motivele nerealizrii: suport tehnologic adecvat i epoca industrial era n faza incipient.
Ada Augusta Byron, contes de Lovelace prima programatoare din lume; limbajul Ada (Bull).
1802-1804 - Calculatoarelor electromecanice - cartele perforate - Joseph Jacquard introduce automatizarea
rzboaielor de esut. Hermann Hollerith - compania Hermann Hollerith Tabulating Recording Company sisteme
Hollerith sau tabulatoare.
1911, fuzionarea a 3 firme The Computing Tabulating Recording Company, - din 1924 IBM (International
Business Machine Corporation).
1937-1944, Howard Aitken de la Harvard University - Mark I, cu ajutorul IBM. John von Neumann - unul
dintre fondatorii informaticii moderne principiile.
Principiile von Newmann de construire a unui calculator
John von Neumann fcea analogii cu comportamentul creierului uman. Aceast arhitectur descrie un
calculator cu patru module importante: unitatea aritmetic-logic (UAL, arithmetic logic unit sau ALU), unitatea de
control, memoria central (care bine-neles se deosebete aproape total de memoria omului), i dispozitivele de
intrare/ieire I/E (sau I/O , de la input/output). Acestea sunt interconectate cu un mnunchi de fire numit magistral
(bus) i sunt conduse n tactul unui ceas (clock).
maina va executa frecvent operaiile aritmetice: adunarea, scderea, nmulirea i mprirea rezultnd existena
unei componente specializate destinat calculului (aritmetico-logic, unitate de calcul etc.).
operaiile se vor executa secvenial. Distincie ntre instruciunile necesare rezolvrii unei probleme particulare
i controlul general asupra acestor instruciuni. (componenta de control) - unitatea de calcul + CPU (Control and
Processing Unit) / procesor.
memorie n care se in minte" instruciunile & datele necesare rezolvrii problemei (intern sau memorie
operativ).
senzor recepioneze / transmit semnalele vin / la din exterior (astzi le numim dispozitive de intrare/ieire, I/E,
sau periferice).
volatilitatea;
memorie permanent (memoria extern de astzi).
transfer ntre memoria intern la cea permanent.

1.3 Istoria sistemelor de operare


Sistemele de operare se mpart n 5 generaii dup cum urmeaz:
Prima generaie 1945 1955 - Primele calculatoare digitale construite: relee electro-mecanice, tuburi;
programare se fcea manual, n limbaj ma in; nu existau compilatoare sau asambloare; nu existau sisteme de
operare; primul bug descoperit n 1947 (Harvard Mark II).
n 1941 inginerul german Konrad Zuse dezvolta computerul Z3 pentru a proiecta avioane i rachete. 1943:
Forele Aliate produc un computer sprgtor de coduri, denumit Colossus. 1944: SUA produce Mark I, primul
computer complet electronic, cu dimensiunile unei jumti de teren de fotbal. Al doilea computer produs de SUA a

fost ENIAC. Era de 1.000 de ori mai rapid ca Mark I i consuma 160 de kilowati. 1951: apare UNIVAC I, primul
computer disponibil comercial. 1952: UNIVAC I prezice matematic alegerea ca presedinte a lui Eisenhower.
A doua generaie 1955 1965 - tranzistoare, batch systems; tranzistoare; mainframeuri; apare conceptul de batch; sisteme de operare: FMS, IBSYS.
Inventarea tranzistorului aduce schimbari radicale. Introdus n computere n 1956 i cuplat cu memoria cu
miez magnetic, el da na tere unei genera ii de ordinatoare mai mici i mai eficiente. Primele supercomputere au
fost Stretch, produse de IBM i LARC pentru laboratoarele de energie atomica. La nceputul anilor 60 apare IBM
1401, considerat piatra de temelie a conceptului actual. Apar de asemenea limbajele de programare COBOL
(Common Business-Oriented Language) i FORTRAN (Formula Translator), care nlocuiesc codul binar criptic cu
cuvinte i formule matematice.
A treia generaie 1965 1980 - ICs i multiprogramarea; circuite integrate; apare conceptul de familie de
calculatoare (IBM System/360): aceea i arhitectura i set de instruc iuni.
De i tranzistorii reprezentau o evolu ie semnificativa, ei generau intens cldur, care deteriora restul
componentelor interne. A a ncepe folosirea cristalelor de cuar . n 1958, Texas Instruments produsese circuitul
integrat, care combina trei componente electronice pe un disc de siliciu. Un alt pas l-a constituit apari ia sistemelor
de operare, care au permis computerelor sa ruleze mai multe aplicaii simultan, cu un program central de
monitorizare i coordonare a memoriei.

Sistemul de operare pentru System/360: OS/360 aduce:

Multiprogramare - Partiionarea memoriei n mai multe segmente, ct timp un job ateapt la I/O alt job se execut

Spooling - Citirea joburilor de pe cartele perforate i pstrarea lor pe disc pna la execuie
Multitasking (time-sharing):

CTSS (Compatible Time Sharing System)

MULTICS (Multiplexed Information and Computing Service)

MIT, Bell Labs, General Electric Lansat n 1960 are un succes comercial sczut, ns are o influen masiv
asupra dezvoltrii ulterioare a SO

UNIX

versiune mult redus a MULTICS, implementat de Ken Thompson System V, BSD


A patra generaie 1980 prezent- calculatoarele personale CP/M - Dezvoltat de Kidall pentru Intel 8080. Dup
circuitele integrate, direc ia principal a rmas reducerea dimensiunilor. Deja, n anii 80, integrarea la scara foarte
larga putea concentra sute de componente pe un singur cip. n 1971, cipul Intel 4001 integra toate
componentele unui computer pe o pastila minuscula. Acum se naste microprocesorul. Computerele vndute sunt
nsoite de pachete de software. Pionieri ai domeniului sunt Commodore, Radio Shack i Apple Computers. La
nceputul anilor 80 apar primele jocuri arcade, precum Pac Man, i primele sisteme casnice de jocuri, precum Atari
2600. 1981: IBM lanseaz PC (Personal Computer), care va deveni standard n domeniu. Dup 1984 este folosit pe
scar larg invenia MacIntosh, pe care azi o cunoatem ca mouse. 1992: ncepe folosirea intensiv a re elelor i
Internetului n accep iunea actual a conceptului.
A cincea generaie Definirea acestei genera ii este dificil, deoarece se afl n faza de nceput. Cel mai
bun exemplu ar putea fi celebrul, dar fictivul, HAL 9000 (care era dotat cu inteligen artificial), din romanul
Odiseea spaial 2001 al lui Arthur C. Clarke. Considerat utopic la data apariiei crii (1968), acest calculator se va
nate n laboratoarele viitorului, confirmnd, nc o dat, aser iunea conform creia cuvintele creeaz realitatea.

Perioada

Tehnologie

Generaia

I
II

CPU

1946-1956

Tuburi electronice

1957-1963

Tranzistori

1964-1981

Circuite integrate

Dup-1982

Circuite integrate
pe scar foarte larg

Dup 1990

Circuite integrate
pe scar extrem de
larg; maini LISP
i Prolog

Tehnologie
memorie

Tambur
magnetic
Inele de ferit
Memorii
semiconductori
discuri
magnetice
Memorii cu
bule,
discuri
optice
Arhitecturi
paralele

Limbaje
Utilizate

Asamblare
nivel nalt:
FORTRAN,
COBOL etc.
Pascal, Lisp, limbaje grafice

ADA, limbaje obiectuale,


limbaje vizuale etc.
Limbaje concurent, limbaj
natural,limbaje funcionale
i logice

Performane,
memorie i CPU

Memorie 2 Ko., Viteza:


104 I/S
Memorie: 32 Ko, Vitez:
2*105 I/S
Memorie: 2Mo, Vitez:
5*106 I/S
Memorie de peste 256
Mo, Vitez 5*107 I/S,
Supercalculatoare
Vitez: 1012
I/S;
memorare i prelucrare
cunotine, vedere
artificial, tehnologia

vorbirii

Clasificarea sistemelor de operare:


SO pentru mainframe: OS/360, VM/370
SO pentru servere: UNIX, Windows NT/2000/2003/2008, Linux
SO pentru sisteme multiprocesor
SO pentru calculatoare personale
Real Time OS: QNX, RTLinux
SO pentru sisteme embedded
SO pentru PDA-uri i telefoane mobile (Windows Mobile, Symbian, Android, iPhone OS (bazat
pe Mac OS))
Componentele sistemului de operare:
1 Gestiunea proceselor
2 Gestiunea memoriei
3 Gestiunea fiierelor
4 Gestiunea operaiilor de I/E
5 Gestiunea reelei

3:

Concepte ale SO

Procesul - este n fapt un program n execuie. Fiecrui proces i se asociaz un spaiu de adrese, adic o list
de locaii n memorie din care programul poate ci sau n care poate scrie. Locaiile cuprinse ntre dou limite, una
minim (de obicei 0) i una maxim. Spaiul de adrese conine programul executabil, datele programului i stiva.
Procesului i se asociaz, de asemenea, un set de registre care cuprinde contorul program, indicatorul de stiva i alte
registre hard, precum i diverse alte informaii necesare rulrii programului.[TANENBAUM06]
La multe SO toate informaiile despre fiecare proces, altele dect cele aflate n propriul spaiu de adrese,
sunt memorate ntr-un tabel al sistemului de operare numit tabel de procese, care este un tablou de structuri pentru
fiecare proces existent.

Figura 3. 1 Arbore de proces. Procesul A a creat dou procese- copii: B i C Procesul B a creat 3 procese
copii D, E, F
Pentru a implementa un proces a SO folosete o tabel (un vector de structuri) numit tabel de procese cu
o intrare pentru fiecare proces. Aceast intrare conine informaii despre: starea procesului, contorul program,
indicatorul de stiva, alocarea memoriei, starea fiierelor deschise, detalii de contabilizare, i planificare i orice alte
informaii despre un proces, care trebuie salvate atunci cnd procesul comut ntre strile n execuie, gata de
execuie i blocat, astfel nct s poat fi repornit mai trziu ca i cum nu ar fi fost oprit niciodat.
n tabelul de mai jos se poate vedea cteva din cmpurile importante dintr-un sistem obinuit:
Gestiunea procesului
Registrare
Contorul program
Cuvntul de stare al programului

Gestiunea memoriei
Indicator spre segmentul de text
Indicator spre segmentul de date
Indicator spre segmentul de
stiv

Gestiunea fiierelor
Directorul rdcin
Directorul de lucru
Descriptorii de fiiere

Indicatorul de stiv
Starea procesului

Identificatorul
utilizatorului
Identificatorul grupului

Prioritate
Parametri de planificare
Identificatorul procesului
Proces primar
Grupul procesului
Semne
Momentele nceperii procesului
Durata de utilizare UCP
Durata de utilizare UCP de ctre
copii
Momentul urmtoarei alarme
Figura 3. 2 Cteva din cmpurile unei intrri obinuite din tabela de procese
Firele de execuie n sistemele de operare tradiionale, fiecare proces are un spaiu de adrese i un singur fir
de control. Dar de cele mai multe ori este de dorit existena mai multor fire de control n acelai spaiu de adrese
rulnd pseudo-paralel, c i cum ar fi procese separate(cu excepia partajrii spaiului de adrese).
Un proces este c o grupare de resurse nrudite i are spaiu de adrese ce conine textul programului i
date, precum i alte resurse. Aceste resurse pot include fiiere deschise, procese copil, semnale de alarm n
ateptare, rutine de tratare a semnalelor, informaii de contabilizare i altele. Acestea pot fi gestionate uor prin
gruparea lor sub form de proces.
Firul de execuie (thread) are un contor de program care ine evidena urmtoarei instruciuni de executat,
totodat deine i registre care in variabilele curente de lucru. Are de asemenea o stiva care conine istoricul execuiei, cu
un cadru pentru fiecare procedura apelat din care nu s-a revenit nc. Dei un fir de execuie trebuie s ruleze ntr-un
proces,firul i procesul sunt concepte diferite i pot fi tratate separat. Procesele sunt utilizate pentru a grup resurse, n
timp ce firele de execuie sunt entiti planificate pentru execuie n cadrul UCP (unitate central de procesare).

Modul de lucru al firelor de execuie este: partajeaz spaiul de adrese, fiiere deschise i ale resurse sau
partajeaz memoria fizic , discurile, imprimantele i alte resurse.
Prin comutarea ntre mai multe procese, sistemul ofer iluzia unor procese secveniale separate care se
execut n paralel. Programarea cu fire de execuie multiple funcioneaz n acelai mod: UCP comut rapid ntre
firele de execuie oferind iluzia c acestea ruleaz n paralel, dei pe o UCP mai lent dect pe cea real. n cazul
unui proces cu trei fire de execuie, toate efectund calcule, acestea pr s se execute n paralel, fiecare pe o UCP cu
o vitez de trei ori mai mic dect a UCP reale.
Situaiile n care dou sau mai multe procese citesc i scriu date partajate i rezultatul final depinde de cine
ce execut exact cnd, se numesc condiii de curs (race conditions). Rezolvarea acestora o reprezint excluderea
mutual (mutual exclusion), adic o cale prin care s fim asigurai c dac un proces folosete o variabila partajat
sau un fiier, celelalte procese nu vor putea face acelai lucru. Pentru a avea o soluie bun trebuie ndeplinite patru
condiii:
oricare dou procese nu se pot afla simultan n regiunile lor critice1;
nici un fel de presupunere nu se poate face asupra vitezelor sau numrului de UCP-uri;
nici un proces care ruleaz n afara regiunii lui critice nu poate bloca alte procese;
nici un proces nu trebuie sa atepte la infinit pentru a intra n regiunea lui critic.

Partea de program n care memoria partajat este accesat

Figura 3.2A Excluderea mutual folosind regiuni critice


Interblocrile sunt situaiile cnd dou sau mai multe procese interacioneaz, i se ajunge la situaii
conflictuale din care nu mai pot iei(exemplu: ca i n traficul rutier dintr-o intersecie).
Dispozitivele de I/O sunt acele dispozitive care preiau intrri i genereaz ieiri. La ce ar fi bun un
calculator dac utilizatorii n-ar putea s-i spun ce s fac i n-ar putea prelua rezultatele activitii solicitate.
Fiier - un sistem de administrare al fiierelor const ntr-o asociaie de date abstracte necesare pentru
memorarea, organizarea ierarhic, manipularea, accesul i recuperarea informaiilor stocate ntr-un sistem de calcul.
Cele mai familiare sisteme de operare folosesc pentru memorarea informaiilor un ir de blocuri de
dimensiune fix, numite de obicei sectoare, de regul, de 512 octei fiecare. Sistemul de operare este responsabil cu
organizarea acestor blocuri de date n fiiere i directoare i controlul sectoarelor care aparin unor fiiere sau sunt
libere.
Sistemul de fiierele conine directoare sau foldere i fiiere acestea fiind administrate, de regul, prin asocierea
numelui lor la un tabel de indexare, n stilul FAT pentru DOS sau INODE pentru UNIX. Structura folderelor poate fi
liniar sau ierarhizat, situaie n care folderele conin i subfoldere. Unele sisteme folosesc nume structurate de fiiere cu
o sintax special pentru extensie i numr de versiune; alte sisteme folosesc drept nume de fiiere iruri simple de
caractere, metadatele (diverse proprieti ale fiierelor) fiind memorate n alt parte. [Silberschatz04]

Sistemele de fiiere se pot clasifica n: sisteme de fiiere pe disc, sisteme de fiiere de reea i sisteme de
fiiere cu destinaie special.
Un sistem al fiiere pe disc este destinat memorrii fiierelor pe un disc care este direct sau indirect legat la
un calculator.
Cele mai cunoscute astfel de sisteme, n ordine alfabetic, sunt:
EXT2 (second extended file system) este folosit de majoritatea sistemelor de operare din familia LINUX.
EXT3 (third extended file system) este o perfecionare a lui EXT2 n sensul monitorizrii n diverse jurnale
a tuturor activitilor efectuate; are tendina de a nlocui EXT2 dar nc are erori.
FAT (File Allocation Table) este sistemul de fiiere de baz dezvoltat pentru DOS i Windows; este
considerat cel mai simplu i, datorit popularitii sale, este cel mai folosit pentru discurile flexibile.
FAT este principalul sistem de administrare al fiierelor dezvoltat pentru DOS i Windows. Sistemul FAT
este considerat relativ simplu, acesta fiind unul din motivele pentru care este cel mai popular format pentru discurile
flexibile. Este suportat, virtual, de multe sisteme de operare i adesea este folosit pentru distribuirea informaiilor
ntre mai multe sisteme de operare instalate pe acelai calculator ntr-un mediu multibooting.
FAT a fost dezvoltat de mult timp, acesta fiind unul din motivele pentru care astzi este destul de criticat:
FAT induce n timp o fragmentare important a fiierelor pe disc, aceasta avnd drept consecin scderea
vitezei de accesare a fiierelor;
FAT nu pstreaz informaii redundante necesare pentru recuperarea datelor n cazul unei defeciuni a
sistemului; ntr-adevr, exist o copie a tabelului de alocare ns aceasta, de cele mai multe ori nu poate rezolva
problemele aprute;
FAT nu dispune de nici un mecanism pentru prevenirea accesului neautorizat la fiiere, atributele asociate
fiierelor fiind minimale;
primele versiuni de FAT aveau limitate numrul de caractere pentru numele i extensia fiierului (8+3); prin
VFAT, o variant modernizat, s-a extins totui la 255 numrul de caractere al numelui i extensiei;
organizarea, prin clustere2 de mari dimensiuni, irosete spaiul pe discurile de mare capacitate, spaiu
inaccesibil sistemului dar accesibil unor aplicaii perfide; spaiul respectiv este denumit slack file.
FAT a debutat o dat cu DOS 1.0 n 1983. Varianta iniial era destinat numai discurilor flexibile i nu
admitea existena directoarelor. Datorit dimensiunii reduse a discurilor, primele sisteme FAT erau realizate pe 12
2

Termen traductibil prin grmad, ciorchine; const ntr-un spaiu continuu pe disc obinut prin alipirea a mai multor sectoare
consecutive.

bii, dimensiune acceptabil pentru discurile flexibile cu care lucra sistemul de operare DOS1.0 (12 bii semnific
4096 de sectoare adresabile adic o capacitate de 2MB, mai mare dect cei 1.44 MB ai discului). Acest sistem de
administrare a cptat denumirea de FAT12.
Ulterior, DOS 2.0 a inclus i suportul pentru subdirectoare, precum i FAT pe 16 bii necesar pentru
utilizarea primelor hard discuri de 5 MB. Cele 65536 de locaii permiteau adresarea unui disc de 32 MB, suficieni la
data respectiv. Sistemul a cptat denumirea de FAT16.
Odat ce hard discurile au ncepu s creasc n dimensiuni, FAT16 a nceput s aib probleme n
administrarea ntregului spaiu util de pe un hard disc. Soluiile au constat n partiionarea discului (mprirea n mai
multe volume logice de sine stttoare) i n introducerea clusterelor care au mrit, virtual, capacitatea de stocare a
unei uniti de alocare. n principal, aceste faciliti au aprut odat cu Windows 95 care a mai eliminat o limitare a
sistemului clasic: prin VFAT (virtual FAT) era eliminat regula numelor de fiiere 8+3.
Din 1997, creterea n dimensiuni a clusterelor a fost epuizat: clusterul maxim era de 32768 octei, ceea ce
nsemna c Windows 95 nu putea vedea discuri mai mari de 2 GB. n consecin, pentru urmtorul sistem de
operare, Windows 95 OSR2, s-a introdus FAT32, sistem care permitea adresarea a 268 435 456 clustere (deocamdat
nu sunt folosii dect 28 de bii din cei 32; valoarea reprezint 228). n aceste condiii, dimensiunea clusterelor a
putut fi redus napoi la 4 KB (8 sectoare), fiind totui posibil adresarea unui disc de 1TB. O consecin pozitiv
rezultat din scderea dimensiunii clusterului a fost i utilizarea mai eficient a spaiului pe disc.
Sistemele de operare alternative pentru PC, de exemplu OS/2, BeOS, FreeBSD, LINUX etc. dispun i ele
de variante care suport VFAT i FAT32.
FAT32 - utilizeaz spaiul mai eficient. FAT32 utilizeaz clustere mai mici (adic clustere de 4 KO pentru
uniti de pn la 8 GO), avnd ca rezultat o utilizare a spaiului de disc cu 10-15 la sut mai eficient fa de
unitile mari FAT sau FAT16, este mai robust, poate relocaliza folderul rdcin i poate utiliza copia de rezerv a
tabelului de alocare a fiierelor n locul copiei implicite. n plus, nregistrarea de ncrcare a unitilor FAT32 este
extins pentru a include o copie de rezerv a structurilor de date critice, sunt mai puin predispuse la un singur punct
de eroare dect unitile FAT16, este mai flexibil. Folderul rdcin de pe o unitate FAT32 este un lan obinuit de
clustere, astfel nct poate fi plasat oriunde pe unitate. Limitrile anterioare n ceea ce privete numrul de intrri n
folderul rdcin nu mai exist. n plus, se poate dezactiva oglindirea tabelului de alocare de fiiere, permind s fie
activ o alt copie a tabelului de alocare a fiierelor n loc de prima copie. Aceste caracteristici permit
redimensionarea dinamic a partiiilor FAT32.
UMSDOS este un sistem de fiiere pentru LINUX care simuleaz cele mai avansate faciliti UNIX folosind
un sistem de fiiere de tip FAT.
HFS (Hierarchical File System) este folosit de sistemul de operare Apple Mac OS.
HPFS (High Performance File System) a fost creat pentru sistemul de operare OS/2.
ISO 9660 (mpreun cu extensiile Rock Ridge i Joliet) este un standard care definete sistemul de fiiere pentru
CD-ROM; este implementat n Windows, Mac OS, LINUX, UNIX etc.
JFS (Journalizing File System) sistem de fiiere cu monitorizarea activitilor dezvoltat de IBM; este disponibil
pe AIX, OS/2 i LINUX.
MINIX (Mini Unix) este unul din numeroasele clone de UNIX aprute n perioada n care AT&T (proprietarul
UNIX) refuza vnzarea acestuia; a stat la baza dezvoltrii LINUX.
NTFS (New Technology File System) este sistemul de fiiere standard pentru Windows NT i predecesoarele
sale Windows 2000 i Windows XP; capacitatea de a recupera automat dup anumite erori legate de disc, ceea ce
FAT32 nu poate realiza. Suport mbuntit pentru hard disk-uri mai mari. Are securitate mai bun, deoarece avei
posibilitatea s utilizai permisiuni i criptare pentru a restriciona accesul la anumite fi iere numai la utilizatorii
autorizai. Acest sistem de fiiere folosete adrese de disc de 64 de bii i poate suporta partiii de pn la 264 bytes,
totodat ofer posibilitatea folosirii caracterelor Unicode n numele de fiiere, permite folosirea numelor de fiiere
de pn la 255 de caractere, inclusiv spaii i puncte; permite indexare general a fiierelor; ofer posibilitatea
managementului dinamic al sectoarelor; datorit compatibilitii POSIX, permite crearea hard-link-uri, face
distincie ntre litere mari i mici n cadrul numelor de fiiere i pstreaz informaii de timp referitoare la fiier;
permite utilizarea fiierelor cu seturi multiple de date.

1.5 Gestiunea memoriei i dispozitivelor I/O


Memoria ocup locul doi ca importan n structura unui sistem de calcul dup procesor i este de tip
ierarhic i este caracterizata astfel:

puin memorie cache foarte rapid, scump i volatil mult


RAM3 de vitez medie, nu foarte scump i volatil foarte
mult spaiu de stocare pe disc lent, ieftin i nevolatil.

BIOS4-ul este un program de mrime mic (< 2MB) fr de care computerul nu poate funciona, acesta
reprezint interfaa intre componentele din sistem i sistemul de operare.
n zilele noastre un calculator personal - PC are n prezent mai mult memorie dect calculatorul IBM 7094,
cel mai mare calculator din lume la nceputul anilor 1960.n zilelor noastre programele cresc n dimensiune mai
repede dect memoria. Legea lui Parkison spune ca programele se extind pentru a ocupa toat memoria care le este
pus la dispoziie.
Ideea este c orice programator ar vrea ca memoria sa fie infinit de mare, infinit de rapid, nevolatil,
adic s i pstreze coninutul cnd nu este alimentat de curent.
Partea sistemului de operare care gestioneaz aceast memorie ierarhic se numete manager de memorie.
Este sarcina sa s urmreasc ce pri de memorie sunt libere, s aloce memorie proceselor cnd acestea au nevoie,
s dealoce memoria cnd procesele au terminat i s fac transferul dintre memoria principala i disc atunci cnd
memoria principal este insuficient pentru a conine toate procesele.
Sistemele de gestiune a memoriei pot fi mprite n dou categorii: cele care mut procesele ntre memorie
i disc n timpul execuiei acestora (interschimbare swapping i paginare) i cele care nu fac aceste operaii.
Trebuie s nelegem c interschimbarea i paginarea sunt n mare parte metode ce compenseaz lipsa unei
memorii principale suficient de mare nct s poat conine toate programele ce ruleaz la un moment dat. De exemplu,
Microsoft recomand urmtoarele specificaii pentru sistemul de operare Windows 7: Procesor: 1 GHz; RAM - 1 GB -2
GB i spaiu pe Hard Disk - 16 GB, asta n timp ce pentru Windows XP recomanda: Procesor: 200 MHz; RAM

128 MB i spaiu pe Hard Disk 1,5 GB.


Sistemul de operare cnd este n RAM ca i n cazul (a) a fost folosit n trecut pe mainframe-uri 5 i
minicalculatoare, dra n prezent nu mai este ntlnit aproape nicieri. Cnd este inut ca i n cazul (b) n ROM l
ntlnim pe PDA-uri6 i sisteme ncorporate, iar al treilea model a fost folosit pe primele calculatoare personale
(exemplu: cele pe care rulau MS-DOS, unde poriunea sistemului care se afla n ROM se numete BIOS.
Driverele
Sistemul
de echipament n
de operare n
Programul
ROM
ROM7
utilizatorului
Programul
utilizatorului
Programul
Sistemul
de operare n

utilizatorului

RAM

Sistemul
de operare n
RAM

(a)
(b)
(c)
Figura 3. 3 Trei moduri simple de organizare a memoriei pentru un sistem de operare i un singur
proces al utilizatorului
Cu excepia sistemelor ncorporate simple, monoprogramarea nu mai este folosit aproape nicieri. Cele mai
multe sisteme moderne permit rularea mai multor procese n acelai timp. A avea mai multe programe care ruleaz

Random Access Memory Memorie cu Acces Aleator


Basic Input Output Sistem Sistem elementar de Intrare/Ieire
Sisteme mari de calcul

Personal Digital Assistant - Asistente personale digitale sunt calculatoarele de tinut in mana care au fost initial proiectate

sa fie agende personale electronice, dar, in timp, au devenit mai polivalente. PDA-urile sunt de asemenea calculatoarele de
buzunar avand reputatia de calculatoarele sau de palmtop. Intrebuintari : calculator aritmetic, ceas de buzunar si agenda
calendaristica, pentru a juca jocuri electronice, accesarea internetul, receptionarea si transmiterea de e-mail-uri,
inregistrarea video, editarea de documente de tip text, agende electronice de contacte, editarea foilor de calcul tabelar,
receptor radio sau redarea fisierelor multimedia, si chiar Global Positioning System (GPS).

Read Only Memory Memorie cu access doar pentru citire

simultan nseamn c atunci cnd unul din procese este blocat ateptnd ca o operaie de I/E sa se termine, alt proces
poate utiliza procesorul. Deci multiprogramarea creste gradul de utilizare al procesorului. Dac n trecut numai
serverele de reea aveau ntotdeauna capacitatea de a rula mai multe procese n acelai timp pentru mai mul i clien i,
n zilele noastre PC-urile personale au aceast capacitate.
Cea mai simpl modalitate de a face multiprogramarea este de a diviza memoria n N parti ii posibil inegale
ca dimensiune, iar aceste partiii pot fi fcute manual la pornirea sistemului de operare. Cnd un proces trebuie
executat, va fi pus n coada de intrare a celei mai mici partiii care este suficient de mare pentru a-l cuprinde.
Deoarece partiiile sunt fixe, orice spaiu care nu este folosit de un proces, va fi pierdut.
Dezavantajul sortrii proceselor apare cnd o coada pentru o partiie mare este goal i o coad pentru o
partiie mic este plin (exemplu partiiile 1 i 3 din figura de mai jos).

Figura 3. 4 Partiii fixe ale memoriei cu cozi separate pentru fiecare partiie / Partiii fixe ale
memoriei cu o singur coad de intrare
Aici procese mici trebuie s atepte pentru a fi ncrcate n memorie, dei este suficient memorie liber,
alternativa ar fi s fie organizate ntr-o singur coad de ateptare. Deoarece cnd o partiie devine liber, procesul
cel mai apropiat de nceputul cozii care ncape n partiia respectiv va fi ncrcat i rulat n spaiul liber creat.
Deoarece este de preferat sa nu se piard o partiie mare pentru un proces mic, deci o strategie ar fi atunci cnd se
elibereaz o partiie s se caute prin toat coada de intrare cel mai mare proces care se potrivete. ns acest algoritm
dezavantajeaz procesele mici care se consider c nu merit o partiie pentru ele, n condi iile n care este de
preferat s se ofere proceselor mici cea mai buna servire, nu cea mai proast. Soluia ar reprezenta-o alocarea unei
partiii mici pentru rularea acestor procese, sau o alt soluie ar fi o regul care s nu permit ca un proces s fie srit
mai mult de k ori.
Acest sistem cu partiii fixe alese de operator dimineaa i care nu se mai schimb, a fost muli ani de
OS/260. Pe marile sisteme de calcul IBM, i se numeau MFT8, ns n prezent acest model nu mai este implementat
decat de foarte puine sisteme de operare (Exemplu: mainframe-uri).
n funcie de echipamentul folosit exist dou strategii de gestiune a memoriei: interschimbare (swapping)
aducerea unui proces n memorie, execuia sa pentru un timp, apoi trecerea lui napoi pe disc i memorie virtual
permite programelor s ruleze chiar dac nu sunt ncrcate complet n memorie.

Figura 3. 5 Alocarea memoriei se schimba pe msur ce procesele vin i pleac din memorie
Observaie: Regiunile haurate reprezint memoria nefolosit.

Multiprogramming with a fixed number of Tasks- Multiprogramare cu un numr fix de sarcini

Figura 3. 6 Gestiunea memoriei cu hri de bii

Figura 3. 7 Gestiunea memoriei cu liste nlnuite


Atunci cnd procesele i spaiile libere sunt pstrate ntr-o list sortate dup adresa, exist algoritmi care pot
fi folosii pentru alocarea de memorie pentru un nou proces (sau un proces care este adus de pe disc n memorie)
Algoritmul prima potrivire gestionarul de memorie caut n lista de segmente un spaiu suficient de
mare liber, l sparge n dou: o parte pentru proces i cealalt parte rmne liber, este rapid deoarece caut ct mai
puin posibil.
Algoritmul urmtoarea potrivire funcioneaz ca i algoritmul prima potrivire, dar n plus memoreaz
poziia unde a gsit spaiul, la urmtoarea cutare nu mai parcurge lista nc o data, este mai lent dect prima
potrivire conform simulrilor lui Bays din 1977.
Algoritmul cea mai bun potrivire - caut n toat lista i alege spaiul liber cel mai mic care este potrivit,
este mai lent dect prima potrivire deoarece trebuie s caut n toat lista.
Algoritmul cea mai proast potrivire - alege spaiul cel mai mare astfel nct spaiul rmas s fie suficient
de mare s fie util, simulrile au artat c nu este cea mai bun soluie.
Toi 4 algoritmii pot fi mbuntii prin pstrarea a doua liste separate una pentru spaii i una pentru
procese. Ins preul pltit pentru viteza este complexitatea suplimentar i ncetinirea dealocrii memoriei.
Algoritmul potrivirea rapid - ine liste separate pentru cele mai uzuale dimensiuni cerute.
Memoria virtual - cele mai multe sisteme de memorie virtual folosesc o tehnic numit paginare.

Figura 3. 8 Poziia i funcia MMU9 , dup cum se vede este parte a cipului procesorului.
Algoritmi de nlocuire a paginilor apar atunci cnd eroarea din pagina ne indic:
Ce pagin trebuie s nlocuim
9

Memory Management Unit Unitatea de gestiune a memoriei

S facem loc paginii ce urmeaz


Modificarea paginii trebuie prima dat
salvat Nemodificrile sunt rescrise
Este bine s alegem s utilizm o pagin care nu este deja
deschis Va fi nevoie s o aducem napoi curnd.
Dispozitive de Intrare / Ieire:
Device-urile de Intrare: sunt cele utilizate pentru a converti datele de intrare nonsens ale utilizatorilor n
cod intern pe care calculatorul le nelege, utilizeaz i stocheaz ca i cod ASCII
Device-urile Ieire: sunt utilizate pentru a decoda rezultatele dup ce sunt procesate de calculator n
ieiri. Vitezele de transfer a componentelor de I/O:
Device
Keyboard
Mouse
56K modem
Telephone Channel
Dual ISDN lines
Laser printer
Scanner
Classic Ethernet
USB ( Universal Serial Bus)
USB 2.0
USB 3.0
Digital camcorder
IDE disk
40x CD-ROM
Fast Ethernet
ISA Bus
EIDE (ATA-2) disk
FireWire (IEEE 1394)
XGA Monitor
SONET OC-12 network
SCSI Ultra 2 disk
Gigabit Ethernet
Ultrium tape
PCI bus
Sun
Gigaplane
XB
Backplane

Date rate
10 bytes/sec
100 bytes/sec
7 KB/sec
8 KB/sec
16 KB/sec
100 KB/sec
400 KB/sec
1.25 MB/sec
1.5 MB/sec
480MB/sec
4800MB/sec
4 MB/sec
5 MB/sec
6 MB/sec
12.5 Mb/sec
16.7 MB/sec
16.7 MB/sec
50 MB/sec - 800MB/sec
60 MB/sec
78 MB/sec
80 MB/sec
125 MB/sec
320 Mb/sec
528 Mb/sec
20 GB/sec

Tabel 3. 1 Rate de transfer pe componente de I/O

1.6 RAID - Redundant Array of Inexpensive Disks


RAID combin hard discuri fizice ntr-o singur unitate logic folosind o component hardware sau o
aplicaie software. Soluiile hardware sunt proiectate cu scopul de a se prezenta sistemului ataat ca un singur hard
disc, fr ca sistemul de operare s cunoasc arhitectura fizic.
Soluiile software sunt implementate n sistemul de operare, dar aplicaiile vor utiliza arhitectura RAID ca o
singur unitate.
Sunt trei tipuri principale n RAID: mirroring (oglindirea), copierea datelor pe mai multe discuri; striping
(ntreesute), mprirea datelor pe mai multe discuri; i error correction (cu corectarea erorilor) unde discuri de
verificare redundante stocheaz datele pentru a fi detectate i corectate eventualele erori. Diferitele niveluri RAID
folosesc unul sau mai multe dintre tipurile enumerate mai sus, n funcie de cerinele sistemului. Scopul principal n
folosirea arhitecturii RAID este mrirea siguranei datelor, important pentru protejarea informaiilor critice pentru
afaceri, de exemplu o baz de date a comenzilor date de clieni; sau a mririi vitezei, de exemplu un sistem care
transmite programe TV la cerere mai multor telespectatori.
Diferitele configuraii afecteaz stabilitatea i performana n mod diferit. Problema folosirii mai multor
discuri este creterea probabiliti ca unul dintre ele s se strice, dar folosind funcii de verificare a erorilor ntreg
sistemul poate fi mai stabil i capabil de a supravieui i repara eventualele erori. Oglindirea simpl poate crete
viteza la citire deoarece sistemul poate accesa date diferite de pe cele dou discuri, dar va fi mai ncet la scriere dac
sistemul insist ca ambele discuri s confirme corectitudinea datelor scrise. Formatul ntreesut este ndeosebi folosit
pentru mrirea performanei, deoarece permite citirea secvenelor de date de pe mai multe discuri simultan.
Verificarea erorilor n mod obinuit va ncetini sistemul deoarece datele vor fi citite din mai multe locaii i apoi
comparate. De aceea n arhitectura RAID un compromis i o nelegere a necesitilor sistemului este important.
Ariile de disc moderne furnizeaz n general faciliti de selecie al configuraiilor RAID apropiate.
Sistemele RAID pot fi concepute s ruleze chiar i n caz de cdere discurile pot fi schimbate la cald i
datele recuperate automat n timp ce sistemul ruleaz n continuare. Alte sisteme trebuie oprite pn cnd datele sunt
recuperate. RAID este adeseori folosit la sistemele cu accesibilitate ridicat, unde este important ca sistemul s
ruleze ct mai mult cu putin.
RAID este n general folosit la servere dar poate fi folosit i n cazul staiilor de lucru. Cel din urm folosit
n general la computerele cu stocare intensiv ca cele folosite la editri video i audio.
RAID 0
cea mai performant metod de stocare
RAID;
se nsumeaz capacitile discurilor.
Avantajul este dat de distribuia
operaiilor de scriere/citire pe mai multe
discuri, simultan;
performanta crecut a matricii;
lipsa redundanei, defectarea oricrui
disc ducnd la compromiterea ntregii
matrice.
Figura 3. 9 RAID 0
RAID 1
este oglindirea dispozitivelor
(mirroring);
dac se folosesc dou discuri n RAID1
informaia va fi stocat pe ambele, n
oglind;

Figura 3. 10 RAID 1

RAID 3
oricare din ele poate ceda, fr s
afecteze integritatea matricei;
Performana este afectat, deoarece
scrierea/citirea se face simultan;
spaiul de stocare este de
jumtate; numr par de discuri.

Figura 3. 11 RAID 3
RAID 5
redundan de nivel N+1;
viabil de la mai mult de 3 discuri/partiii
ntr-o matrice;
scrierea informaiilor de paritate se face
pe toate discurile,
pentru un numr mare de discuri este cea
mai eficient metod;
capacitate de stocare este data de
(capacitatea unui disc)*(numrul de
discuri -1).

Figura 3. 12 RAID 5

RAID
RAID

RAID 0

RAID 1

RAID 5

RAID 6

10

Nr minim de
HDD

RAID
50

RAID 60

NU

un hdd
czut

un hdd czut

dou hdd czute

6
de la un de la un
disk
disc
czut n czut n
fiecare
fiecare
sub-ir
sub-ir

Ridicat

Ridicat

Ridicat

Ridicat

Ridicat Ridicat

Ridicat

Performanta
Scriere

Ridicat

Medie

Sczut

Sczut

Mediu

Mediu

Mediu

Performanta
Citire
(degradata)

N/A

Medie

Sczut

Sczut

Ridicat Mediu

Mediu

Protecia
Datelor
Performanta
Citire

8
de la doua
discuri czute
n fiecare subir

RAID
Performanta
Scriere
(degradata)
Capacitatea
de utilizare

Aplicaii

RAID 0

RAID 1

N/A

Ridicat

100%
Staii de
lucru,
loguri de
date,
redarea n
timp real,
date
foarte
tranzitorii

50%

Sisteme
de
operare,
tranzacii
n DB

RAID 5

Sczut

67% - 94%

Depozite BD,
servicii web,
arhivari

RAID 6

RAID
10

sczut

Ridicat

50% - 88%

50%

arhive DB,
backup pe disc,
soluii de
disponibilitate
foarte mare,
servere cu
cerine mari de
capacitate

BD
rapide,
servere
de
aplicaii

RAID
50

RAID 60

Mediu
67%94%
BD
mari,
Servere
de
fiiere,
servere
de
aplicaii

Sczut

50% - 88%
arhive DB,
backup pe
disc, soluii de
disponibilitate
foarte mare,
servere cu
cerine mari
de capacitate

1.7 Securitatea sistemelor de operare


Tehnologiile de securitate ale calculatorului sunt bazate pe logic. Deoarece cele mai multe cereri ale
calculatorului nu sunt legate de securitate, proiectarea unui program cu siguran inclusa adesea impune restricii
asupra comportamentului acest program. Exist mai multe abordri pentru a lua n calcul securitatea, uneori, o
combinaie de abordri este valabil:
ncredere ca software-ul s respecte o politic de securitate, dar software-ul nu este de ncredere.
ncredere n toate software-ul s respecte o politic de securitate i software-ul este validat ca de ncredere.
(prin filiala tedious i analiz calea de exemplu).
ncrederea software-ul, dar nu pune n aplicare o politic de securitate, cu mecanisme care nu sunt de
ncredere (din nou acest lucru este nesiguran calculator).
ncrederea software-ul, dar nu pune n aplicare o politic de securitate, cu mecanisme de ncredere.
Multe sisteme au avut ca rezultat n mod neintenionat n prima posibilitate. Din moment ce abordare doi
este costisitoare i non-determinist, utilizarea sa este foarte limitat. Abordrile unu i trei duc la eec. Deoarece
numrul de abordare patru este adesea bazat pe mecanisme de hardware i evit o multitudine de grade de libertate,
este mai practic. Combinaiile de abordri dou i patru sunt adesea folosite ntr-o arhitectur stratificat cu straturi
subiri de dou i straturi groase de patru.
Exist diverse strategii i tehnici utilizate pentru proiectarea sistemelor de securitate. Strategiile de toate
acestea, exist puine, dac este cazul, eficiente pentru a spori securitatea, dup proiectare. O tehnic impune
principiul de cel privilegiul de a mare msur, n cazul n care o entitate are doar privilegiile de care sunt necesare
pentru funcia sa. n acest fel, chiar dac ctigurile de un atacator acces la o parte a sistemului, amenda-bob de
securitate asigur c acesta este la fel de dificil pentru ei pentru a accesa restul.
n plus, prin ruperea de sistemul de pn n componente mai mici, complexitatea componentele individuale
este redus, deschide posibilitatea de a folosi tehnici, cum ar fi teorema automate dovedesc a dovedi corectitudinea
subsistemelor software de o importan crucial. Acest lucru permite o soluie nchis formular pentru securitate care
funcioneaz bine atunci cnd doar un singur bine caracterizat de proprietate poate fi izolat ca fiind eseniale, i c
proprietatea este, de asemenea assessible la matematica. Deloc surprinztor, nu este practic pentru corectitudinea
generalizate, care, probabil, nu poate fi nici mcar definite, mult mai puin dovedite. n cazul n care dovezile
corectitudinea formal nu sunt posibile, utilizarea riguroas a revizuirii cod i de testare unitate reprezint cel mai
bine o abordare efort pentru a face module n deplin siguran.
Design-ar trebui s utilizeze tehnica de aprare n profunzime, n cazul n care mai mult de un subsistem
trebuie s fie nclcate de a compromite integritatea sistemului i informaiile pe care le deine. Aprrii n profunzime
funcioneaz atunci cnd nclcarea de o msur de securitate nu ofer o platform pentru a facilita pclirea altul. De
asemenea, principiul cascad recunoate c mai multe obstacole de sczut, care nu face un obstacol mare. Deci, n cascada
de mai multe mecanisme de slab, nu ofer sigurana unui singur mecanism mai puternic.

Subsistemele trebuie s funcioneze implicit pentru a asigura setrile, i ori de cte ori este posibil ar trebui
s fie concepute pentru c nu reuesc sigure, mai degrab dect nu reuesc nesigure (a se vedea nu reuesc n

condiii de siguran pentru echivalentul n inginerie de siguran). n mod ideal, un sistem sigur ar trebui s solicite
o deliberat, decizie contient, cunotine i gratuit din partea autoritilor legitime n scopul de a face nesigure.
n plus, securitatea nu ar trebui s fie o problem de totul sau nimic. Designerii i operatorii de sisteme ar
trebui s presupun c nclcrile de securitate sunt inevitabile. Pistele de audit completa ar trebui s fie pstrate de
activitate de sistem, astfel nct atunci cnd se produce o nclcare a securitii, mecanismul i gradul de nclcare
poate fi determinat. Stocarea pistele de audit de la distan, n cazul n care acestea pot fi doar anexate, se poate
pstra intrui de la care s acopere urmele lor. n cele din urm, dezvluirea complet ajut s se asigure c, atunci
cnd sunt gsite bug-uri la fereastra de vulnerabilitate este meninut ct mai scurt posibil.

1.7.1 Tipuri de atac

Atacuri DOS

Atacurile de tip Denial of Service10 sunt o cauz major de operare defectuoas a sistemelor n Internet i
reprezint cea mai serioas ameninare de astzi. Primul atac major a ngenunchiat reeaua Universitii Minnesota
n august 1999, iar 6 luni mai trziu un tnr canadian a atacat unele dintre cele mai importante site-uri Internet:
Yahoo, CNN, Amazon, Buy i eBay. De atunci atacurile par s fie n cretere.
Din nefericire, utilizatorii sunt mai interesai de software-ul cu mai multe faciliti dect de cel robust, fr
erori. n plus, securitatea are preul su. Software-ul modern cheltuiete un numr imens de cicluri main pentru a
desena ferestre tri-dimensionale cu alpha-blending sau alte asemenea mbuntiri vizuale, dar aceste lucruri nu aduc
nimic din punct de vedere al funcionalitii. Dei securitatea este o problem major, muli utilizatori nu se arat
dispui s cheltuiasc o putere de calcul similar pentru securitate. De asemenea, multor utilizatori nu le pas dac
sistemul lor este sigur sau poate fi utilizat ca int sau ramp de lansare a unor atacuri de diferite feluri.
Falsul sentiment de securitate este probabil mai ru dect lipsa total a securitii. nc exist suficient de
muli administratori care las sistemele lor neprotejate, neaplicnd ultimele patch-uri i neconformndu-se
procedurilor de bun practic adoptate de fiecare organizaie. Dac avem n vedere faptul c numrul de locuine,
coli, biblioteci i alte locuri publice conectate la Internet a crescut exponenial n ultima vreme, dimensiunea
problemei apare n toat mreia sa.
Ameninrile de securitate se pot categorisi, dup cum urmeaz:
Scurgeri de informaii (confidenialitate)
Autentificri nereuite

Denial of Service (DOS)


n timp ce primele dou atacuri au fost analizate extensiv n literatura de specialitate, atacurile DOS nu au
primit atenia cuvenit pn de curnd.
Un atac Denial of Service poate lua una din cele dou forme posibile. Un atacator poate cauza
netransmiterea de ctre reea a mesajelor pe care ar trebui s le transmit n mod normal clienilor si. De cealalt
parte se afl reelele care trimit mesaje pe care nu ar trebui s le trimit. De departe cel mai cunoscut atac DOS este
cauzarea de trafic fals (inundarea reelei) n direcia un server particular, lucru care n final va duce la mpiedicarea
clienilor legitimi s obin serviciul pe care l cer de la acel server.
Comunitatea Internet cunoate o serie ntreag de atacuri DOS, care se pot mpri n dou categorii: atacuri
prin inundare (flooding) i atacuri prin pachete modificate.
O cauz evident a atacurilor TCP SYN este c dialogul iniial ntre pri are loc naintea unei minime
autentificri. Serverul este incapabil de a distinge traficul legitim de cel fals, fapt ce are toate ansele s rmn aa.
Impunerea necesitii de a autentifica toate cererile ar nsemna un atac DOS n sine, din moment ce serverul ar fi
ocupat cu verificarea semnturilor digital, indiferent dac acestea sunt sau nu valide. Aceast nou cale de atac ar fi
la fel de periculoas ca i simpla umplere a tabelei TCP.
O cauz mai puin cunoscut a atacurilor DOS este contabilizarea resurselor, mai precis lipsa acestora.
Spatscheck i Peterson [SPAT99] consider c sunt trei ingrediente cheie pentru protejarea de atacuri DOS:
contabilizarea tuturor resurselor consumate de un client;
detecia momentului cnd resursele alocate unui client depesc un prag stabilit apriori;
constrngerea capacitatea de a revendica resursele blocate dup detectarea unui atac prin alocarea de
resurse minime unui atacator, lucru ce nseamn automat evitarea unui atac DOS ulterior;
10

Termenul se traduce aproximativ prin interzicerea serviciului, dar am ales s folosim aici terminologia original
din limba englez deoarece este un termen de referin n articolele de specialitate

n perioada cnd Internetul nsui era proiectat, contabilizarea resurselor era scopul cu prioritatea cea mai
mic, lucru ce ne afecteaz astzi cel mai mult. n contrast cu reelele de telefonie omniprezente unde folosirea
resurselor era atent controlat, cei care au proiectat reeaua Internet nu au prut s acorde importan acestui aspect.
Astfel, serverele aloc aceeai putere de calcul tuturor cererilor care sosesc la un moment dat ceea ce mpiedic o
degradare elegant a performanei n cazul unui atac sau n cazul unei ncrcri excesive.
Scenariul anterior este oarecum similar cu mecanismul rudimentar de procesare a pachetelor de intrare
datorit arhitecturii bazate pe ntreruperi a subsistemului de reea. Toate sistemele de operare implementeaz acest
tip de arhitectur care s-a dovedit neadecvat n condiii de ncrcare mare. Pachetele de la intrare sunt procesate cu
prioritatea maxim pentru ca apoi s fie distruse pentru c nu exist nici o aplicaie care s le deserveasc. Aceast
situaie se numete receiver livelock. Mai mult, chiar dac exist o aplicaie care s deserveasc aceste pachete,
prioritatea procesului nu este luat n calcul. Astfel, aplicaiile cu prioritate mic primesc aceeai cantitate de trafic
ca cele cu prioritate mai mare. n lucrarea lor, Druschel i Banga propun o arhitectur cu de procesare ntrziat care
se bazeaz pe demultiplexarea timpurie a pachetelor i procesarea cu prioritatea destinatarului. Ei susin c noua
arhitectur ar mbunti stabilitatea, justeea i capacitatea sistemelor n condiii de ncrcare mare n timp ce
performana nu ar avea de suferit n condiii normale. O noua clas de atacuri de band ngust exploateaz
deficienele structurilor de date n diferite aplicaii. Structurile de date folosite n mod uzual au un timp de rulare n
cazul mediu mult mai bun dect n cazul cel mai defavorabil.
Spre exemplu, att tabelele de dispersie ct i arborii binari degenereaz n liste nlnuite atunci cnd la
intrare se prezint date alese corespunztor. Folosind banda tipic a unui modem, autorii citai au adus un server Bro
n pragul colapsului; n ase minute de la nceputul atacului, serverul ignora 71% din trafic i consuma ntreaga
putere de calcul disponibil.
Avnd n vedere tendina global a pieelor de a se muta on-line, atacurile DOS se dovedesc mult mai periculoase
dect s-a prevzut la nceput ntruct acestea pot bloca victimele pe durate lungi de timp. De la momentul la care a nceput
atacul i pn cnd acesta este detectat i eliminat, victima este paralizat i nu poate rspunde la cererile legitime. Pentru
site-urile comerciale mari aceasta se traduce prin pierderi de ordinul miliardelor de dolari.

Dei atacurile DOS nu amenin datele n mod direct, nu avem nici un motiv s credem c un altfel de atac
nu ar putea uram cu exact acest scop. Aceste atacuri de urmare pot distruge date critice, cauznd astfel mai multe
daune dect atacul DOS n sine, ceea ce nu este de dorit.
Acest fel de atacuri n lan pot avea loc dac protocoalele continu dialogul cu atacatorul chiar i dup
detectarea unor anomalii n dialogul purtat ntre pri. Ideea de baz n spatele protocoalelor rezistente (numite
protocoale fail-stop sau fail-safe) este c schimbul de mesaje s nceteze cu orice client care nu urmeaz cursul
firesc al protocolului.

Atacuri asupra protocoalelor de autentificare

Atacuri prin inundare (flooding)


Atacurile prin inundare sunt comune i sunt lansate cu intenia de a satura legturile de reea pentru a prbui
router-ele i switch-urile sau inundarea cu trafic peste posibilitile de prelucrare. Din nefericire, uneltele necesare pentru
un asemenea atac sunt disponibile pe Internet i chiar utilizatorii fr experien le pot folosi cu succes.

Smurf Flood
Smurf Flood este un atac DOS cunoscut i sub numele de reflector. Un atacator trimite un numr mic de
pachete echo ICMP la o adres de broadcast care definete mai multe gazde. Rspunsurile tuturor acelor gazde sunt
trimise simultan ctre victim, epuiznd toat banda de comunicaie i posibil puterea de calcul.
TCP SYN
Atacul de tip TCP SYN este posibil datorit schimbului de mesaje de la nceputul protocolului TCP. Un
client trimite o cerere (SYN) ctre un server, anunndu-i intenia de a porni o conversaie. La rndul su, serverul
desemneaz o intrare n tabela cu conexiuni pe jumtate deschise i trimite napoi un mesaj de ncuviinare (SYN
ACK), semnaliznd astfel disponibilitatea sa. n acest moment clientul trebuie s rspund cu un pachet SYN ACK
ACK pentru a putea ncepe comunicaia de fapt. Un atacator ar putea s nu trimit niciodat aceast confirmare,
cauznd umplerea tabelei de conexiuni, cererile legitime ulterioare fiind astfel blocate. Daca un atacator trimite o
rafal de astfel de cereri, acesta poate paraliza activitatea unui server de 100 MIPS care poate deservi 2000 de
conexiuni pe secund [SPAT99], dimensiunea tipic a tabelei TCP fiind de 2048 de intrri [DEC96].
UDP Flood (Fraggle)

Acest atac este posibil datorit naturii protocolului UDP care nu este orientat pe conexiune. Din moment ce
nu este necesar nici un dialog n prealabil, un atacator poate trimite pachete ctre porturi aleatoare ale sistemului
vizat. Victima va aloca resurse pentru determinarea aplicaiilor care ascult porturile pe care sosesc date, iar cnd i
d seama c nici o aplicaie nu face acest lucru, va trimite ca rspuns un pachet ICMP. Dac numrul de pachete
aleatoare este suficient de mare, exist posibilitatea ca sistemul s aib probleme.
ICMP Flood
Acest atac const din trimiterea unui numr mare de pachete ICMP ctre victim. Aceasta nu poate ine
pasul cu volumul de informaie primit i poate observa o degradare a performanei.
E-mail bombing
E-mail bombing nseamn trimiterea unui numr mare de mesaje electronice ctre un server cu scopul de
a epuiza spaiul de pe disc i limea de band.
Cu excepia atacului UDP, restul se pot evita prin msuri luate la nivelul sistemului de operare. Atacul UDP
este dificil de contracarat ntruct exist o multitudine
de aplicaii care ascult la o multitudine de porturi. Filtrarea cu ajutorul firewall-urilor ar avea un impact
puternic asupra funcionalitii iar acest pre nu l vor plti foarte muli utilizatori.

Atacuri prin pachete modificate

Atacul prin pachete modificate este un alt fel de atac DOS rspndit. Scopul acestui tip de atac este
exploatare greelilor de proiectare a codului care prelucreaz pachete din diferite sisteme de operare. Efectele merg
de la degradarea performanei pn la cderea sistemului.
Aproximativ jumtate din totalul problemelor pe Internet au ca i cauz depirile de buffer. Acestea se
cunosc de mai bine de 40 de ani i cam din aceeai perioad dateaz i soluia. Limbajul Algol a introdus limitele
obligatorii la tablouri dar programatorii nc refuz s foloseasc instrumente mai bune. Acest lucru este comparabil
cu un fabricant de maini care nzestreaz mainile cu rezervor din hrtie cerat [DEWA01].
Principalele atacuri cu pachete modificate sunt:
Ping of Death
Acest atac const n trimiterea unui pachet ICMP mult mai mare dect pachetul maxim IP, i anume 64
KBytes. La destinaie, unele implementri nu pot decodifica pachetul, cauznd prbuirea sau reboot-ul sistemului.
Dou implementri binecunoscute care au acest comportament sunt Windows 95 i unele versiuni timpurii de
Windows NT.
Chargen
Acest atac este o variant a atacului de tip UDP Flood i folosete portul 19 (chargen) al unui sistem
intermediar folosit ca amplificator. Atacatorul trimite un pachet UDP fals ctre un sistem intermediar care la rndul
su rspunde cu un ir de caractere victimei, pe portul su echo. Victima trimite napoi un ecou al irului primit i
bucla creat consum rapid banda dintre victim i sistemul intermediar.
Teardrop
Datorit implementrii defectuoase, unele sisteme nu pot asambla fragmente de pachete care au deplasamente
eronate. n loc s ignore elegant aceste pachete, aceste implementri blocheaz sau reboot-eaz sistemul.

Land
Dei este greu de crezut, unele sisteme se blocheaz cnd primesc pachete avnd aceeai adresa ca surs i
destinaie.
WinNuke
Acest tip de atac este specific sistemelor de operare Windows. Atacatorul trimite date aleatoare la un port
anume, ceea ce cauzeaz blocarea sau reboot-ul sistemului.
O alt clasificare a atacurilor DOS este dup numrul de participani:
Atacuri uni-surs: un singur atacator are ca int o singur victim.

Atacuri multi-surs: mai multe gazde (numite zombie) particip fr s tie n rolul atacatorilor, fiind
compromise de capul operaiunii. Dei mai greu de pus n practic, acest tip de atac este i cel mai periculos i cel
mai greu de luptat mpotriva lui. Mai este cunoscut i sub numele de atac Distributed Denial of Service (DDOS).
[RAZM00] d un echivalent al atacului DOS n lumea real: Alice nu l place pe Bob i n consecin
telefoneaz mai multor companii de pizza, comandnd cte o pizza de la fiecare i cernd ca acestea s fie trimise la
domiciliul lui Bob la o or anume. Cnd timpul sosete, Bob este copleit de mulimea de distribuitori de pizza care
ajung la domiciliul su, fiecare pretinznd banii cuvenii. Simplu i eficient, acest atac poate s rmn cu autor
necunoscut dac Alice a sunat de la un telefon public (n esen ascunzndu-i identitatea).

2
Nichi

tefan Ioan

1. BAZE DE DATE - CONCEPTE


FUNDAMENTALE
1.1. DEFINIIA I CLASIFICAREA BAZELOR DE
DATE. BAZE DE DATE RELAIONALE
1.1.1. Conceptul de baz de date
La baza prelucrrii datelor stau fiierele. Odat cu dezvoltarea
informaticii, numrul acestora a crescut, ajungndu-se ca ntr-o
firm s existe mai multe zeci sau sute de fiiere permanente i
temporare legate de gestiunea personalului, materialelor,
produciei, vnzrilor etc. Aceast cretere a avut o serie de
dezavantaje, dintre care amintim:
redundana este proprietatea unei informaii de a se repeta
nejustificat; de exemplu codul materialelor, care poate ajunge
la 20-30 de cifre, se repet n majoritatea acestor fiiere,
mrind nejustificat spaiul fizic ocupat;
inconsistena este legat de apariia distorsionat a unor
informaii n diferite contexte; una dintre cauzele
inconsistenei este redundana, deoarece este suficient ca la o
apariie (copie) a informaiei redundante, aceasta s fie
introdus greit i informaia poate deveni inconsistent;
validarea datelor este clar c diferite aplicaii care
gestioneaz fiiere disparate pot valida datele diferit;
nevalidarea uniform a datelor poate duce la compromiterea
ntregului sistem de fiiere;
disponibilitatea i securitatea datelor reprezint o
problem de asemenea foarte spinoas. Datele aflndu-se n
fiiere disparate, acestea pot fi reinute de proprietari, nefiind
disponibile i comunitii utilizatorilor. De asemenea,
neexistnd un control centralizat asupra lor, nu se poate
asigura securitatea acestora.
Pornind de la toate acestea i multe altele, cum ar fi dezvoltarea
tehnicii de calcul, s-a ajuns la ideea bazelor de date.
O prim definiie a bazelor de date este [Nichi&Racovian04]:
baza de date este un sistem integrat, coerent i partajat

de fiiere. Integrat - nseamn c baza de date poate fi gndit


ca o unificare a mai multor fiiere distincte de date, unde fiecare
utilizator are viziunea sa proprie asupra datelor. Partajat nseamn c pri distincte din baza de date pot fi folosite de
ctre mai muli utilizatori. Coerent nseamn c se asigur
caracterul neredundant i coerent al datelor.

Definiia i clasificarea bazelor de date. Baze de date relaionale


3

O definiie mai plastic, ntlnit n literatura francez de larg


circulaie, este: baza de date reprezint revenirea la un nivel
superior de la registrul unic al micului burghez.
Una dintre caracteristicile de baz ale organizrii datelor n baze
de date const n posibilitatea folosirii n comun a datelor din baza
de date de ctre mai muli utilizatori.
Pentru a asigura folosirea n comun a acelorai date de ctre mai
muli utilizatori era necesar asigurarea independenei aplicaiilor
fa de structura logic a datelor. Astfel, n cazul fiierelor clasice,
orice modificare n structura datelor efectuat pentru a asigura de
exemplu cerinele unui nou utilizator, putea atrage dup sine
modificri ale tuturor aplicaiilor care exploatau structura de date
respectiv.
Din acest motiv, era necesar desprinderea din cadrul
programelor de aplicaie a descrierii structurii datelor. Acest lucru
a fost posibil prin definirea unui fiier de descriere global a bazei
de date, denumit dicionar de date. Extragerea i modificarea
datelor, adic lucrul cu fiierele de date, se deruleaz exclusiv
prin intermediul dicionarului de date, considerat i ca un fiier de
metadate (date despre date), care conine informaii privind
structura datelor, restriciile aferente acestora i chiar relaii ntre
date.
Bazele de date au aprut n anii 60, odat cu lansarea
programului Apollo, n 1964, pornind de la ceea ce formau
sistemele de fiiere nlnuite, introduse de IBM pentru
gestionarea lansrii i urmririi produciei. Astfel au aprut aa
zisele baze de date arborescente sau de generaia 1-a.
Conceptul de baz de date, sub aceast denumire, a aprut
pentru prima dat n anul 1969, an n care CODASYL a publicat, n
cadrul unei conferine dedicate limbajelor de gestiune a datelor,
un raport tehnic despre acest concept. Fa de modelul bazat pe
fiiere clasice (file-based), noul model de organizare a datelor n
baze de date include un fiier de descriere global a bazei de date
(dicionar de date) care s poat asigura independena
programelor fa de structura datelor.

Pornind de la aceste considerente, se pot da i alte definiii


bazelor de date, cum ar fi [Fotache01]: O baz de date reprezint
o colecie de date, organizate ntr-o structur descris printr-un
model conceptual sau colecie de date aflate n interdependen,
mpreun cu descrierea datelor i a relaiilor dintre ele.
Principala caracteristic a aplicaiilor cu baze de date const n
faptul c accentul este pus pe operaiile de memorare i regsire
efectuate asupra unui volum mare

4
Nichi

tefan Ioan

de date i mai puin pe operaiile de prelucrare a acestora. Mai


mult, n sistemele client-server sau multi-etajate, operaiile de
prelucrare sunt complet rupte de cele de gestiune a datelor. Dup
cum este normal, operaia cel mai frecvent ntlnit n
exploatarea bazelor de date este aceea de regsire a datelor sau
de interogare, n scopul obinerii unor informaii utile.
Totalitatea informaiilor stocate n baza de date la un moment dat
reprezint coninutul (denumit i extensia) bazei de date.
Coninutul are un caracter volatil, n sensul c se modific
permanent n funcie de volumul i complexitatea proceselor i
fenomenelor economice la care se refer. Structura datelor
mpreun cu legturile dintre entiti i restriciile de integritate
formeaz schema (denumit i intensia) bazei de date, care, de
obicei, rmne constant pe durata utilizrii bazei de date.
Gestionarea datelor dintr-o baz de date este asigurat de un
sistem de gestiune a bazelor de date sau SGBD (n limba
englez DBMS - Data Base Management System).
Un SGBD reprezint un ansamblu de programe pentru gestiunea
datelor sau un mediu de programare destinat gestiunii datelor din
baza de date. Prin urmare, el este cel care asigur ncrcarea
bazei de date, actualizarea i interogarea acesteia, ct i interfaa
cu sistemul de operare n vederea simplificrii accesului la date.
In general, SGBD-urile au implementate limbaje gazd, care
conin att instruciuni specifice exploatrii datelor din bazele de
date, ct i unele instruciuni din limbajele de programare clasice.
Un SGBD include, n general, o serie de componente [Date05]
grupate n jurul dicionarului de date, dintre care amintim:
sistemul de gestiune a fiierelor i suporturilor la nivel fizic,
care se ocup cu afectarea spaiilor de memorie pe disc,
structurile fizice de date i gestionarea acestora la nivelul fizic;
sistemul de gestiune a fiierelor la nivel logic, care face
legtura dintre datele fizice i structurile bazei de date;
limbajul de manipulare a datelor (LMD) i
translatorul aferent; limbajul de descriere a
datelor (LDD) i translatorul aferent;

limbajul de consultare sau interogare (Query Language) i


procesorul aferent, care traduce instruciunile limbajului de
consultare n instruciuni inteligibile pentru sistemul de
gestiune la nivel logic;
componente de interfa cu programele de aplicaii;

Definiia i clasificarea bazelor de date. Baze de date relaionale


5

componente de serviciu, legate de jurnalizri, securitate etc.


Trebuie s specificm, ns, c n majoritatea SGBD-urilor, cum
este i cazul xBase sau Visual FoxPro, mai multe componente,
cum ar fi de exemplu cele trei limbaje i translatoarele lor, sunt
integrate, formnd o singur component.
Principalele funcii ale unui SGBD sunt urmtoarele:
Funcia de descriere date, care permite descrierea
structurii datelor i a legturilor dintre entiti. Pentru a realiza
aceast funcie, SGBD-urile dispun de un limbaj de descriere
date LDD (Data Description Language - DLL), care este specific
fiecrui SGBD.
Funcia de manipulare date, care permite crearea,
consultarea (interogarea) i actualizarea bazei de date.
Aceast funcie se realizeaz prin intermediul limbajului de
manipulare date LMD (Data Manipulation Language - DML),
numit adesea i limbaj de interogare. Acesta conine un set de
comenzi necesare exploatrii n condiii optime a bazei de
date.
Funcia de utilizare, care permite comunicarea dintre utilizator
i baza de date prin intermediul unei interfee ct mai simple i
mai apropiate de utilizator
(ferestre, meniuri etc.).
n ncheiere, trebuie s menionm faptul c n limbajul curent se
face de regul confuzie ntre baze de date i bnci de date. Dintre
principalele diferene ntre cele dou, amintim:
Bazele de date conin informaii directe (factuale), n timp ce
bncile de date conin informaii refereniale [Deitel90]. Astfel,
interognd o baz de date referitor la numrul , aceasta va
returna valoarea 3,14159 sau faptul c informaia n-a fost
introdus. Adresnd aceeai cerere unei bnci de date,
aceasta va indica bibliografia care ar trebui consultat.
Datele din bncile de date se memoreaz pe baza unor
cuvinte cheie ataate documentelor prin procesul de
indexare. Relaiile existente ntre cuvintele cheie se
memoreaz ntr-un fiier denumit tezaur. Regsirea

informaiilor realizndu-se pe baza unor combinaii booleene


dintre cuvintele cheie, precum i a relaiilor existente n
tezaur, apar o serie de fenomene de bruiaj, adic documente
care rspund fr s trebuiasc (datorit nefiltrrii suficiente)
sau fenomene de linite, adic documente care nu sunt
regsite (datorit superfiltrrii). Astfel de fenomene nu sunt
acceptabile n domeniul bazelor de date.
Putem deci concluziona c cele dou domenii sunt
distincte.

6
Nichi

tefan Ioan

1.1.2. Arhitectura unei baze de date


Intre sistemul de calcul care realizeaz prelucrarea datelor i
utilizatorul bazei de date, care opereaz cu diferite concepte mai
mult sau mai puin abstracte, se interpun mai multe nivele de
abstractizare a datelor.
Asigurarea independenei logice i fizice a datelor impune
adoptarea unei arhitecturi a bazei de date pe trei nivele astfel:

nivelul intern
nivelul conceptual
nivelul extern

Nivelul intern (baza de date fizic) definete baza de date ca


fiind o colecie de fiiere, coninnd datele din cadrul bazei de
date, la care se adaug i alte structuri auxiliare de date i un set
de programe, care interacioneaz cu sistemul de operare pentru
mbuntirea managementului bazei de date. La acest nivel
structura bazei de date se concretizeaz n schema intern. Aici
apare independena fa de cile de acces, adic utilizatorul nu
trebuie s fie preocupat de organizarea i modul de acces la date
la nivel fizic.
Nivelul conceptual este nivelul imediat superior celui fizic,
datele fiind privite prin prisma semanticii lor, respectiv a
coninutului i relaiilor cu alte date. Acesta este i primul nivel de
abstractizare a lumii reale, avnd ca obiectiv principal modelarea
realitii existente prin definirea i descrierea unitilor logice cu
care se lucreaz i a legturilor dintre acestea. Aceast schem
este descris n general de administratorul bazei de date, el fiind
singurul care cunoate i manipuleaz schema conceptual a
bazei de date, degrevnd utilizatorii de cunoaterea ntregii
structuri a bazei de date.
Nivelul conceptual se definete cu ajutorul schemei entitaterelaie (E-R) [Gardarin86] sau obiect-entitate-relaie (OLE)
[Miranda&Busta86].
Prin entiti se neleg concepte cu care opereaz utilizatorii i
prin care acetia i modeleaz aplicaiile, cum ar fi: PRODUSE,

BENEFICIARI, FACTURI (n cazul unei firme productive) sau


PROFESORI, STUDENTI, SALI, MATERII (n cadrul unei faculti).
Fiecare entitate poate avea una sau mai multe atribute. De
exemplu, un STUDENT are MATRICOLA, NUME, DATA-NATERII etc.

Definiia i clasificarea bazelor de date. Baze de date relaionale


7

Prin urmare, la acest nivel baza de date se definete ca fiind o


mulime de entiti (uniti logice) rezultat din reuniunea
entitilor aferente unor categorii de utilizatori, n vederea
realizrii unei viziuni globale asupra bazei de date. n acest scop,
entitile sunt legate prin relaii, care exprim semantica
organizrii datelor.
La acest nivel se specific:
ce anume poate face parte din baza de date, respectiv
entitile sau unitile logice i legturile (relaiile) dintre
acestea;
ce nu poate face parte din baza de date, fapt care rezult pe
baza unor constrngeri explicite asupra datelor.
Constrngerile reprezint proprieti ale datelor i se refer la
restricii privind valorile pe care le pot lua aceste date sau la
restricii privind legturile dintre diferite entiti. n cadrul oricrei
operaii de actualizare a datelor din baza de date sau de ncrcare
a acesteia cu date, se verific aceste constrngeri, pentru a
asigura integritatea bazei de date.
Trebuie precizat faptul c nivelul conceptual permite o descriere a
coninutului bazei de date i prin urmare nu include informaii
privind modul de memorare a datelor pe suportul extern i
strategiile de acces la aceste date.
Prin nivelul conceptual se asigur independena fizic a datelor
din baza de date. In acest sens, nivelului conceptual i se ataeaz
o transformare prin care se definete modul n care structura
conceptual se transpune n structura fizic de memorare a
datelor i care reprezint interfaa dintre cele dou nivele.
Ca urmare, orice modificare n structura de memorare a datelor
sau schimbarea suportului magnetic va afecta doar interfaa
dintre nivelul conceptual i cel fizic, fr a modifica nivelul
conceptual. Rezultatul imediat al independenei fizice a datelor l
reprezint imunitatea aplicaiilor fa de structura fizic de
memorare a datelor. La acest nivel structura bazei de date se
concretizeaz n schema conceptual.

Nivelul extern este ultimul nivel de abstractizare la care se poate


descrie o baz de date. Dac la nivelul conceptual baza de date este
abordat n ansamblul ei, n practic, un utilizator sau un grup de
utilizatori lucreaz numai cu o poriune specific din baza de date, n
funcie de locul su n departamentul n care i desfoar
activitatea. Astfel, de exemplu, un profesor nu are nevoie de datele
complete ale unui student, cum ar fi cele legate de domiciliul
permanent, data i locul naterii etc., ci doar de datele de identificare
i unele date legate de activitatea profesional, deci are nevoie doar
de o parte din datele memorate n baza de date.

8
Nichi

tefan Ioan

Nivelul extern conine, deci, o parte din unitile logice descrise


la nivel conceptual, dar poate include i uniti logice care nu apar
la nivel conceptual i care nu au corespondent direct n baza de
date fizic, obinute de exemplu prin calcule. Ca urmare, nivelul
extern este derivat din nivelul conceptual i reprezint ceea ce
vede utilizatorul din baza de date. Fiecrui utilizator i va
corespunde un model externpropriu, n funcie de cerinele
informaionale ale acestuia.
Unitile logice folosite la nivel extern se numesc uniti logice
virtuale, imagini sau vederi i formeaz o baz de date virtual.
Aceste vederi se pot obine n unul din urmtoarele moduri:

prin modificarea unor uniti logice reale;


prin combinarea a dou sau a mai multor uniti logice reale.
Vederile asigur, printre altele, urmtoarele funcii n cadrul unei
baze de date:
securitatea bazei de date, prin limitarea accesului la datele
din baza de date a anumitor categorii de utilizatori. Ca urmare,
prin definirea unor vederi utilizatorii au acces la pri bine
definite din baza de date, fiindu-le ascunse acele pri care nu
trebuie s le vad sau nu-i intereseaz;
definirea modului de acces la date; astfel, pentru unele
vederi utilizatorii pot avea doar drept de consultare, iar n
cazul altor vederi pot avea drept de modificare sau tergere;
ofer utilizatorului o viziune simplificat i personalizat
asupra bazei de date.
Unitile logice virtuale, sau vederile, pot fi referite n cadrul
programelor de aplicaie i pot participa la prelucrri ca orice
unitate logic din baza de date. Ca urmare, orice operaie asupra
unei vederi care modific datele din cadrul acesteia, se va reflecta
la nivelul unitilor logice din care aceasta este derivat i, n
final, n baza de date fizic.

Prin nivelul extern se realizeaz independena logic a datelor din


baza de date. Astfel, fiecrei vederi i corespunde o descriere a
datelor de la nivelul conceptual. Mecanismul independenei logice
asigur faptul c o modificare n structura conceptual va
determina modificri la nivelul interfeei prin care se obine
vederea din schema conceptual, dar nu va afecta vederea n
sine, aa cum este perceput de utilizator.

Definiia i clasificarea bazelor de date. Baze de date relaionale


9

Independena logic se refer aadar la imunitatea modelului


propriu extern i deci a programelor de aplicaie fa de
modificrile din structura global a bazei de date. La acest nivel
structura bazei de date se reprezint prin intermediul schemei
externe sau al unor subscheme, n funcie de cerinele
informaionale ale unui utilizator sau grup de utilizatori.
Interfaa dintre utilizator i SGBD se poate realiza n mai multe
moduri, dintre care amintim:
printr-un mecanism de apel (cuvnt cheie urmat eventual de
parametri) inserat n programele scrise ntr-un limbaj
tradiional (C, COBOL etc), numit limbaj gazd;
prin comenzi speciale utilizate autonom (specifice SGBD-urilor,
n afara limbajelor tradiionale), n cazul SGBD-urilor
autonome.
Observaii:
n literatura de specialitate din ara noastr, cei trei termeni
au fost tradui n mod diferit: fizic, virtual i logic sau fizic,
conceptual (global) i logic.
n literatura de specialitate strin, unii autori definesc un
al patrulea nivel de abstractizare, numit intermediar, situat
ntre cel fizic i conceptual [ Date05]. Acesta este de fapt
nivelul utilizat de administratorul bazei de date pentru
descrierea structurii acesteia cu ajutorul SGBD-urilor, de
exemplu n Visual
FoxPro sau SQL. n acest caz apar dou noi independene, una
ntre nivelul conceptual i cel intermediar i alta ntre cel
intermediar i cel fizic.

1.1.3. Modele de organizare a datelor


Utilitatea oricrei colecii de date const n obinerea de informaii
i depinde n mare msur de modul de organizare i manipulare
a acestora.

Analiza, proiectarea i implementarea structurii bazei de date se


realizeaz utiliznd un anumit model de date.
Un asemenea model reprezint un ansamblu de instrumente
conceptuale, care permit descrierea datelor,a relaiilor dintre
ele, a semanticii lor, ct i a restriciilor la care sunt supuse
aceste date [Fotache02, Popescu02]. Un model de date reprezint,
deci, un instrument teoretic care ne ajut s identificm
semnificaia sau coninutul unei colecii de date (structura de
organizare a acestora) ct i

10
Nichi

tefan Ioan

modul de utilizare a acestora, prin intermediul operaiilor


permise asupra datelor respective.
Modelul de organizare a datelor este deci o reprezentare a
obiectelor lumii reale i a evenimentelor asociate lor, avnd rolul
de a pune la dispoziia utilizatorilor conceptele de baz i
notaiile, care s le permit acestora s comunice clar i rapid
informaiile despre datele firmei [Dollinger98].
Ca urmare, un model de date include urmtoarele componente
[Dollinger98]:
un set de reguli de structurare a datelor, numite i reguli
generatoare. Ele exprim proprietile statice ale modelului i
sunt materializate prin limbajul de descriere a datelor (LDD).
Aceste reguli includ de obicei dou pri:
partea de specificare a structurii, prin care se definesc
entitile, caracteristicile acestora i legturile dintre
entiti;
partea de specificare a constrngerilor, care include
regulile de integritate referenial i restriciile utilizator.
un set de reguli de manipulare a datelor. Ele exprim
proprietile dinamice ale modelului i sunt materializate n
cadrul unui SGBD prin limbajul de manipulare a datelor (LMD).
Limbajul de manipulare include operaiile prin care se produc
schimbri n starea bazei de date, stare reprezentat de
valoarea datelor la un moment dat. Aceste schimbri pot
afecta datele din baza de date, dar nu afecteaz structura
bazei de date, deci ele conserv modelul conceptual al bazei
de date.
Modelele utilizate de bazele de date se pot grupa n trei categorii
[Fotache98]: modele bazate pe obiect, modele bazate pe
nregistrare i modele fizice.
Modelele bazate pe obiect permit descrierea datelor la nivel
conceptual i extern. Din aceast categorie fac parte:
modelele entitate-asociaii (E-A), entitate-relaie (E-R) sau
obiect-entitate-relaie (OLE)
modelul semantic
modelul funcional

modelul orientat pe obiecte.


Din categoria modelelor orientate pe nregistrri fac parte:
modelul ierarhic
modelul reea
modelul relaional.

Definiia i clasificarea bazelor de date. Baze de date relaionale


11

Aceast din urm orientare a dat natere i clasificrii bazelor


de date pe generaii [Miranda&Busta86, Gardarin86].
Astfel, prima generaie de baze de date a fost cea bazat pe structuri
arborescente, adic relaii de tip 1:n. Dintre SGBD-urile cele mai
cunoscute din domeniu amintim:
IMS al IBM (utilizat i azi), Total, System2000, Nomad etc.

A doua generaie de baze de date a fost cea bazat pe reele sau


relaii de tip n:m. Aceste baze de date au fost denumite i baze de
date de tip CODASYL, deoarece aceast organizaie a ncercat s
dezvolte un standard pentru ele i s le introduc
n standardul COBOL 81. Dintre SGBD-urile cele mai utilizate n
Romnia, din aceast categorie, amintim SGBD-urile de tip
Socrate, dezvoltate de firma francez CII dup proiectul
profesorului M.Abrial de la Universitatea din Grenoble i DBMS-11,
al firmei DEC.
n prezent, cel mai rspndit dintre modelele de baze de date este
cel relaional, adic de tip n:1, dezvoltat de E.F.Codd de la IBM, al
crui obiectiv este acela de simplificare a accesului la date de
ctre utilizatorii finali. Aceasta reprezint a treia etap sau
generaie n evoluia SGBD-urilor.
Ca i n cazul limbajelor, i n cazul SGBD-urilor relaionale s-a
extins modelul relaional prin includerea tehnologiei obiectuale.
Astfel au aprut SGBD-urile obiectuale. La ora actual exist
discuii aprinse legate de faptul dac acestea reprezint sau nu o
a patra generaie de SGBD-uri. Problematica bazelor de date
obiectuale depete domeniul nostru de interes, fiind larg
dezbtut n [Date04].

1.1.4. Entiti i tipuri de entiti


Entitatea reprezint unul dintre conceptele de baz cu care se
opereaz n cadrul modelelor de organizare a datelor n baze de
date.
O entitate este o realitate obiectiv care exist prin ea nsi.
Orice entitate, aa dup cum s-a mai artat, se caracterizeaz
prin anumite proprieti, care n cadrul modelului de date sunt
reprezentate prin atribute.

Entitile la rndul lor sunt reprezentate prin tipuri de entiti. Un


tip de entitate este o reprezentare a unei categorii de obiecte din
lumea real sau a unei mulimi de entiti de acelai fel i
atributele sale reprezint caracteristicile generale (intensionale)
ale acelei categorii. Pentru fixarea ideilor, s considerm
urmtorul exemplu: mulimea de entiti reprezentnd studenii
unei faculti este definit prin tipul sau clasa de entiti
STUDENT cu urmtoarele proprieti sau atribute: Nume, An,
Secie, Situaie colar, care reprezint proprieti generale sau
intensionale ale tipului de entitate respectiv.

12
Nichi

tefan Ioan

Mulimea entitilor descrise prin tipul de entitate dat reprezint


extensiunea tipului de entitate respectiv, atributele unei instane
ale entitii fiind proprietile particulare sau extensionale ale
acesteia. Astfel, un student oarecare este o extensiune a clasei
STUDENT, iar atributele sale, care iau de exemplu valorile:
Popescu, an II, CIG, bursier, reprezint proprieti extensionale ale
unei instane a tipului de entitate STUDENT.
Pentru reprezentarea unei mulimi de entiti din lumea real
printr-un tip de entitate, se iau n considerare acele proprieti
care sunt relevante pentru acel tip de entitate.
Ideea fundamental a lui E.F.Codd, de la IBM, a fost c mulimile
de entiti se modeleaz convenabil prin tabele a cror descriere,
adic antetul, definete tipul de entitate prin atribute sau
proprieti, iar liniile reprezint entiti din mulime, sau instane
ale tipului de entitate respectiv.
Exemplu: tipul de entitate STUDENT se poate modela prin
urmtorul tabel:

Nume
Ionescu
Popescu

An
II
III

Secie
CIG
FA

Situaie colar
BURSIER
NEBURSIER

Antet reprezentat prin


atribute care definete tipul
de entitate STUDENT
Entiti sau instane ale
tipului de entitate
STUDENT

Tabelul 3.1 Tipul de entitate STUDENT

1.1.5. Modelul de date relaional


Caracteristici generale
Primul model de date relaional, aa dup cum s-a amintit, a fost
propus de ctre cercettorul american E.F. Codd de la laboratorul din
Palo Alto al IBM. Principiile matematice care stau la baza acestui
model pornesc de la teoria matematic a relaiilor, extins la
cerinele de gestiune a datelor. Mai exact, teoria lui Codd se bazeaz
pe faptul c ntre relaiile finite i tabele se poate realiza o
coresponden biunivoc. n baza acestei observaii, operaiile din

bazele de date efectuate asupra tabelelor pot fi realizate prin operaii


matematice (algebrice) asupra relaiilor.

Modelul relaional st la baza majoritii SGBD-urilor comerciale


care exist sau apar n prezent. Rspndirea acestui model se
datoreaz faptului c SGBD-urile relaionale dispun de un limbaj
de manipulare a datelor foarte puternic i simplu i

Definiia i clasificarea bazelor de date. Baze de date relaionale


13

de o interfa prietenoas, care permite folosirea bazelor de


date relaionale de ctre o categorie foarte larg de utilizatori.
O baz de date relaional este definit ca fiind un
ansamblu de tabele sau relaii ntre care exist anumite
legturi, fiecare tabel fiind alctuit din coloane,
denumite atribute, i linii, denumite i tuple.
Definirea entitilor i structurii acestora
Reamintim c n cadrul modelului relaional entitile se
reprezint prin intermediul tabelelor, sau a relaiilor statice,
precum i a legturilor dintre ele, sau a relaiilor dinamice.
Conceptele cu care se opereaz n cadrul modelului relaional n
vederea definirii entitilor i structurii acestora sunt urmtoarele:

111111

linia sau tuplul

111111

atributul sau caracteristica

111111

domeniul

111111

nregistrarea logic

111111

cardinalitatea relaiei

111111

rangul relaiei

1111111 cheia relaiei

Pentru exemplificarea conceptelor anterior prezentate se


consider relaia sau tabelul FACULTI avnd urmtoarea
structur:
Atribut

Cod facultate
STE
FIL
BIO
MED

Denumire facultate
T. ECONOMICE
FILOLOGIE
BIOLOGIE
MEDICIN

Adresa
Mihali 58+60
Horea 5
Hajdeu 10
E. Isac 20

nregistrare logic
(antet relaie)
Linie (tuplu)

Domeniu

Tabelul 3.2 Tabelul


FACULTATI

14
Nichi

tefan Ioan

Semnificaia acestor concepte este urmtoarea:


Linia sau tuplul reprezint o succesiune de valori de diferite
tipuri i conine informaii referitoare la un obiect sau la o
entitate, cum ar fi: o carte dintr-o bibliotec, un angajat din
tabelul ANGAJATI sau o facultate din cadrul tabelului FACULTATI
i corespunde noiunii de nregistrare folosit la organizarea
datelor n fiiere. Teoretic, orice tuplu reprezint o relaie ntre
clase de valori. Astfel, linia sau tuplul:

FIL FILOLOGIE HOREA 5


conine trei valori asociate, care definesc codul, denumirea i
adresa unei faculti. Numrul de linii sau tuple din cadrul unei
relaii, sau a unui tabel, determin cardinalitatea relaiei.
Astfel, tabelul FACULTATI are cardinalitatea egal cu 4.
Atributul reprezint, aa dup cum s-a mai amintit, o
caracteristic sau o proprietate a unui tip de entitate sau clase
de entiti i definete ansamblul valorilor de acelai tip din
cadrul unei coloane a tabelului.
Domeniul reprezint totalitatea valorilor acceptate sau
autorizate pentru un atribut al relaiei. Astfel, pentru atributul
STARE_CIVILA din tabelul PERSONAL, domeniul este alctuit din
valorile .T. (adevrat) sau .F. (false). Pentru atributul UM
(unitate de msur) dintr-un tabel CATALOG, domeniul poate
include valorile: "Buc" (bucat), "Kg", "MP" etc., n schimb,
pentru atributul pre din acelai tabel, domeniul poate fi mult
mai larg, coninnd valori ntregi cuprinse ntre 1 i
10.000.000.
Putem considera c un atribut reprezint o utilizare sub un anumit
nume a unui domeniu. Din acelai domeniu pot deriva mai multe
atribute, fiecare cu nume diferite la nivelul unui tabel. Astfel, dac
considerm domeniul numerelor ntregi sau reale, din acest
domeniu pot deriva atribute cum ar fi: SALAR, IMPOZIT, VALOARE,
PRET, CANTITATE etc.
Fundamentul matematic al conceptului de relaie i atribut
Din punct de vedere matematic, prin relaie se nelege o
submulime a produsului cartezian al unor domenii.

Avnd domeniile D1D2Dn, produsul lor cartezian se definete


astfel:
V=D1 x D2 x . x Dn ={ (d1, d2,.,dn)}

Definiia i clasificarea bazelor de date. Baze de date relaionale


15

i reprezint o asociere ntre elementele fiecrui domeniu, sau


mai exact, este mulimea tuturor combinaiilor sau tuplelor de
forma {d1, d2,.,dn}, unde di Di.
De exemplu, considernd mulimile A=(1,2) i B=(1,2,3) avem
produsul cartezian
AxB={(1,1), (1,2),(1,3), (2,1), (2,2),(2,3)}.
O submulime a mulimii V reprezint o relaie n msura n care
aceast submulime conine acele tuple ale cror elemente se pot
asocia logic ntre ele.
De exemplu, s considerm din produsul cartezian definit anterior,
relaia obinut punnd condiia a 1 2. Astfel se va obine:
R={ (2,1), (2,2),(2,3) }
Deci, relaia se definete astfel:
R D1 x D2 x x Dn
unde D1, D2,,Dn reprezint domeniile relaiei R comparabile ntre
ele, iar "n" reprezint rangul relaiei. Dup rang, relaia poate fi:
primar, binar, ternar sau,
n general, n-ar.
Desigur c definiia anterioar dat relaiei nu este unica posibil.
Astfel, Date [Date04] definete o relaie ca fiind compus din
dou pri:
Antetul relaiei, ca fiind o mulime de atribute definite pe
cte un domeniu (nu neaprat distinct), astfel:
{A1 : D1, A2 : D2,.An:Dm}
Corpul relaiei, ca fiind o mulime de tuple, fiecare tuplu
coninnd o mulime de valori aferente atributelor definite n
antetul relaiei, astfel:
{t1, t2,tk.tm} mulime de tuple
ti = {di1,di2din} mulime de valori aferente unei tuple

pentru i=1,2,...,m
Ilustrarea acestui mod de abordare rezult din figura urmtoare:

tefan Ioan
Nichi

16

t1
t2

A2
d

1,1
2,1


tk

k,1


tm

A1
d

m,1

1,2
2,2

k,2

m,2

An
d

Antetul relaiei

1,n
2,n

Corpul relaiei

k,n

m,n

Figura 3.1 Antetul i corpul unei relaii


Deci, o relaie poate fi simbolizat prin mulimea atributelor sale
astfel:
R(A1,A2..,An) sau (A1:D1,A2:D2,.,An:Dn)
Din definiiile noiunii de relaie, rezult urmtoarele proprieti ale
acesteia:

Ordinea atributelor n cadrul unei relaii este nesemnificativ


(atributele nu sunt ordonate).

Atributele unei relaii trebuie s fie distincte, chiar dac pe


acelai domeniu sunt definite mai multe atribute.
Orice atribut are valori atomice, adic la intersecia dintre o
linie i o coloan se afl o singur valoare i nu o colecie de
valori sau grupuri repetitive. In acest caz, se consider c
relaia se afl n forma ntia normal.
In cadrul corpului relaiei, tuplele nu sunt ordonate n mod
obligatoriu.
Intr-o relaie nu exist tuple duplicate.
Trebuie menionat c unele implementri particulare ale noiunii
de relaie nu respect toate aceste restricii. Astfel, de exemplu,
n cazul SQL Server unicitatea tuplelor nu este obligatorie.
Legturi ntre relaii
Definirea cheilor unei relaii

Pornind de la ideea c tuplele unei relaii sunt unice, nseamn c


fiecare tuplu poate fi identificat prin valoarea unui atribut sau
grup de atribute.
Dac ntr-o relaie exist mai multe atribute sau combinaii de
atribute care permit identificarea unic a tuplelor, acestea sunt
denumite chei candidat. O astfel de cheie reprezint un atribut sau o
mulime de atribute (K) cu urmtoarele proprieti
[Gardarin86] :

Definiia i clasificarea bazelor de date. Baze de date relaionale


17

5. identificare unic, ceea ce nseamn c mulimea de


atribute K identific n mod unic fiecare tuplu din relaie;
6. ireductibilitate, ceea ce nseamn c nu exist nici o
submulime proprie a mulimii K, care s identifice n mod unic
un tuplu al mulimii R;
7. valorile atributului sau ale ansamblului de atribute care
definesc cheile candidat sunt ntotdeauna specificate, adic nu
pot fi nule.
O entitate poate conine mai multe chei candidat, dar numai una
dintre ele se alege pentru a fi folosit la identificarea tuplelor.
Aceast cheie se numete cheie primar. O cheie candidat care
nu este desemnat ca i cheie primar se numete cheie
alternativ.
Pe lng noiunile de cheie candidat i cheie primar, n cadrul
modelului relaional se mai folosete i noiunea de cheie strin.
Ea se utilizeaz la stabilirea legturilor dintre dou tabele, numite
tabela principal sau printe i tabela secundar sau copil. Prin
definiie, valoarea cheii strine trebuie s se regseasc n
mulimea cheilor primare ale tabelei principale. Ea reprezint deci
o referin ctre un tuplu din tabela printe care are aceeai
valoare a cheii primare.
Pentru clarificarea noiunilor, s considerm urmtorul exemplu.
Fie o baz de date care conine tabela PERSONAL i tabela COPII.
Tabela are atributele: MARCA,
NUME-PRENUME, DATA-NASTERII, VECHIME, SALAR-BRUT. Aceast
tabel poate avea mai multe chei candidat: MARCA, NUMEPRENUME, sau dac aceasta nu are valori unice, perechea (NUMEPRENUME, DATA-NASTERII). Se observ fr dificultate c soluia
cea mai avantajoas este s se aleag ca i cheie primar MARCA.
Fiecare angajat poate avea unul sau mai muli copii ale cror date
sunt pstrate n tabela COPII, care are printre altele atributele:
NUME-PRENUME, DATA-NASTERII, SITUATIA-SCOLARA. Pentru a
lega ntre ele cele dou tabele, n tabela COPII se va introduce
cheia stin MARCA, care reprezint marca angajatului ai crui
copii sunt. Astfel, de exemplu, pentru angajatul Ionescu Ion care

are marca 142, toi copiii vor avea valoarea cheii strine MARCA,
142.
Tipuri de legturi ntre relaii
Una din componentele modelului relaional se refer la legturile
dintre relaii sau tabele. O legtur (relaie dinamic) se definete
ca fiind o asociere ntre mai multe tipuri sau clase de entiti. Cea
mai frecvent legtur ntlnit n practic este cea dintre dou
tipuri de entiti, numit i legtur binar.
Legturile binare, aa cum s-a amintit, dup cardinalitatea lor
(numrul entitilor din fiecare clas de entiti care intr n
cadrul legturii) se pot clasifica astfel:

18
Nichi

tefan Ioan

legturi de tip 1-1, prin care unei entiti din mulimea sau
clasa M1 i corespunde o singur entitate n mulimea sau clasa
M2. Exemplu: legtura ntre tabelele SALARII i ANGAJATI legate
prin cheia COD_ANGAJAT; unui angajat din tabela ANGAJATI i
corespunde o singur entitate (nregistrare) n tabela SALARII i
invers; n relaiile sociale aceste relaii se numesc monogamie sau
relaii de tip iudeo-cretine;
legturi de tip 1-n, prin care unei entiti din mulimea M1 sau
din tabelul M1 i corespund mai multe entiti n mulimea sau
tabelul M2, iar unei entiti din M2 i corespunde o singur
entitate n M1. Exemplu: n cazul tabelelor DEPARTAMENTE i
ANGAJATI, un departament poate avea mai muli angajai, dar un
angajat nu poate face parte dect dintr-un departament; n cadrul
relaiilor sociale, acestea se numesc relaii de tip poligamie sau
poliandrie, dup caz;
legturi de tip m-n, prin care unei entiti din M1 i corespund mai
multe entiti n M2 i reciproc; relaiile sociale de acest tip se
numesc relaii de grup sau hyppie.
Observaii.
n unele materiale apar i legturile de tip n:1, care ns pot
fi considerate ca legturi de tip 1:n inversate.

Legturile de tip 1-1 se implementeaz introducnd n una


din tabele (secundar) o cheie strin care va face legtura
cu cheia primar din tabela principal, folosind procedeul
propagrii cheii dintr-o relaie n alta.

Legturile de tip m-n se implementeaz prin intermediul


unei tabele suplimentare, care are ca i atribute cheile
celor dou relaii.
Definirea restriciilor pentru datele dintr-o baz de date

Pentru datele dintr-o baz de date pot fi definite mai multe tipuri de
restricii, cum ar fi: restricia de domeniu, de atomicitate, referenial
i restricii utilizator. Dintre acestea, ne vom referi n continuare la
restricia referenial sau integritatea referenial, pe care se
bazeaz stabilirea legturilor dintre dou tabele.

Integritatea referenial, denumit n unele sisteme (ca de exemplu


n SQL Server), integritate referenial static deoarece se pstreaz
n dicionarul de date, se definete ca fiind un ansamblu de reguli
impuse tabelelor ntre care s-au stabilit anumite legturi. Astfel,
pentru a asigura integritatea referenial trebuie ca atunci cnd se
fac modificri ale valorii unui cmp de tip cheie primar sau strin
dintr-un tabel, s nu fie afectat relaia dintre cele dou tabele, adic
s se modifice automat valorile cheii n toate tuplele
corespunztoare. Integritatea referenial

Definiia i clasificarea bazelor de date. Baze de date relaionale


19

cere ca valorile cheii strine s se regseasc printre valorile cheii


primare. Aceast condiie introduce n baza de date constrngeri
numite constrngeri refereniale.
Operaiile de adugare, modificare i tergere pot afecta
integritatea referenial astfel:
In tabela principal (tabela referit sau printe):
operaia de adugare se va face fr nici un fel de
restricii din punct de vedere al condiiilor de
integritate referenial;
operaia de tergere - deoarece prin tergerea unui tuplu
din relaia sau tabela principal, n relaia secundar pot
rmne tuple care fac referire la tuplul ters, pentru a
menine integritatea referenial se poate introduce
tergerea restricionat sau n cascad;

n primul caz, nu se poate terge un tuplu din


tabela principal dac acesta are corespondent tuple
n tabela secundar, deoarece tuplele din tabela
secundar rmn orfane, adic vor avea referine
nesatisfcute;

n al doilea caz, tergerea unui tuplu din tabela


principal va fi urmat de tergerea tuturor tuplelor
din relaia secundar care fac referire la tuplul ters;
operaia de modificare poate fi privit ca i n cazul
operaiei de tergere, iar restriciile refereniale sunt
cele folosite la operaia de tergere.
n tabela secundar (de referin sau tabela copil):
operaia de adugare se poate face numai dac
valorile cheii strine pentru articolele adugate se
regsesc printre valorile cheii primare din tabela
principal, altfel operaia de adugare este interzis;

operaia de tergere se poate realiza fr nici o


restricie din punct de vedere al condiiilor de
integritate referenial;
operaia de modificare se poate realiza cu condiia s
nu apar nregistrri fr corespondent n tabela
principal.

20
Nichi

tefan Ioan

Constrngerile refereniale pot fi reprezentate printr-o diagram


referenial.
Aceasta apare sub forma unui graf, avnd ca noduri tabelele, iar
arcele reprezentnd constrngerile, dup cum se va vedea n
cazul Visual FoxPro.
Schema i coninutul unei baze de date relaionale
Exist dou modaliti de abordare a bazelor de date relaionale i
anume
[Fotache01]:
schema relaional (intensia sau structura
bazei de date); coninutul unei relaii
(extensia bazei de date).

Schema relaional sau intensia unei baze de date poate fi


definit ca un ansamblu de relaii asociate semantic prin
domeniul de definiie i prin restricii de integritate. Ea conine:
una sau mai multe scheme de relaie, unde fiecare schem de
relaie include numele relaiei i atributele aferente;
restricii de integritate, care pot fi:
restricia cheilor primare, adic fiecare cheie primar
trebuie s fie unic, nenul i cu compoziie minimal;
restricii refereniale, care decurg din existena cheilor
strine;
alte restricii, cum ar fi cele definite de utilizator
(dependene ntre atribute, valori limit, unicitate, caracter
nenul etc.).
Schema relaional descrie ntotdeauna modelul conceptual din
cadrul unei baze de date. O posibil schem relaional pentru o
baz de date care conine informaii referitoare la studeni este
urmtoarea:
JUDETE (CodJud, DenumireJude, Regiune)
LOCALITATI (CodPotal, Localitatea, CodJud)

STUDENI
(NrMatricol, CNP,
Nume,
Prenume, AdresaDomiciliuStabil,
AdresaFlotant, AdresaE-mail, DataNasterii, LoculNasterii, Sectia,
An, Grupa)
NOTE (NrMatricol,
CodMaterie,
Semestru, TipExaminare, Nota,
NrCredite)
MATERIE(CodMaterie, DenumireMaterie)

An,

Definiia i clasificarea bazelor de date. Baze de date relaionale


21

PROFESOR(CodProfesor, Nume, Prenume, GradDidactic,


CodMaterie)
Schema relaional poate fi reprezentat grafic prin mai multe
metode. Una dintre ele [Ullman90] se bazeaz pe urmtoarele
reguli:
o tabel se reprezint pe dou linii, unde prima linie conine
numele tabelei, iar a doua linie, numele atributelor;
cheia primar este plasat n stnga tabelei, reprezentat de
primul atribut;
numele atributului sau atributelor care formeaz cheia primar
se subliniaz;
o restricie se indic printr-o sgeat care pleac de la numele
coloanei de referin (care reprezint cheia strin) spre
coloana refereniat (care reprezint cheia primar).
Trebuie s menionm ns c n cazul unor SGBD-uri concrete,
cum este cazul Visual FoxPro, aceast reprezentare a schemei
relaionale este mai clar i mai riguroas.
Coninutul sau extensia unei baze de date se reprezint sub
form de tabele, unde fiecare tabel corespunde unei scheme de
relaie.
Pe parcursul exploatrii bazei de date, extensia se poate modifica
(crete sau scade). Prin urmare, ea reprezint componenta
dinamic a bazei de date, n timp ce schema relaional reprezint
componenta permanent sau static i nu este dependent de
timp sau de volumul de activiti.
Pentru fixarea ideilor referitoare la noiunile mai sus menionate,
s considerm urmtorul exemplu. Fie tabela FACULTATI din
figura de mai jos:
Cod_fac

Den_fac

Adresa

FSE

STIINTE EC.

Mihaly 58-62

Tabelul 3.3
Relaia

FIL

FILOLOGIE

Horea 5

BIO

BIOLOGIE

Hajdeu 10

MED

MEDICINA

1 Mai 15

FACULTI

Elementele definite mai sus sunt reprezentate n exemplul nostru astfel:

2
2
1.Relaie / tabel
nregistrare logic / antet
2. tabel

tefan Ioan
Nichi
FACULTA
TI
Cod_fac

Den_fac

Adresa

3.Atribute

Cod_fac, Den_fac,
Adresa

4.Tuple / Linii

FSE, T. ECONOMICE, Mihali 58-62

7. Domeniu

FSE, FIL, BIO, MED

6.Colecie de date / fiier

FSE

STIINTE EC.

Mihaly 58-62

FIL

FILOLOGIE

Horea 5

BIO

BIOLOGIE

Hajdeu 10

MED

MEDICINA

1 Mai 15

Corespondena dintre termenii formali i informali nu trebuie luat


ca i o echivalen perfect, deoarece n practic exist anumite
particulariti de care trebuie s inem seama. Astfel:
n timp ce relaia este o mulime teoretic, tabela este un
obiect concret cu o anumit reprezentare (tablou
bidimensional);
n timp ce ntr-o relaie ordinea atributelor sau tuplelor nu este
semnificativ, ntr-o tabel exist o ordonare att a coloanelor,
dat de ordinea acestora la creare, ct i a nregistrrilor, dat
de ordinea n care au fost introduse n tabel sau ca urmare a
indexrii tabelei;
n timp ce o relaie teoretic este format ntotdeauna din tuple
distincte, n practic o tabel poate conine i linii duplicat, aa
dup cum s-a mai menionat
n cazul SQL Server.

n acest context, noiunea de relaie se identific cu cea de tabel


sau fiier, atributele, cu denumirea coloanelor unei tabele sau cu
cmpurile unui fiier, iar tuplele, cu liniile tabelei sau cu articolele
(respectiv nregistrrile) unui fiier.

Cele de mai sus justific faptul subliniat la definiia bazelor de


date, i anume c baza de date este o colecie de fiiere. n unele
SGBD-uri, cum este cazul Visual
FoxPro, fiecare fiier are articole de lungime fix, n timp ce la
altele, cum este cazul SQL Server, articolele pot fi de lungime
variabil. Spre deosebire ns de fiierele obinuite, fiierele bazei
de date prezint o serie de particulariti, dintre care amintim:

Definiia i clasificarea bazelor de date. Baze de date relaionale


23

2. fiecare fiier are asociat o nregistrare de structur sau un


antet, care include informaii despre coninutul fiierului i se
memoreaz n dicionarul de date;
3. dac fiierul are articole de lungime fix, articolele sau
nregistrrile de date conin un numr de ordine, folosit la
identificarea unei nregistrri n baza de date, numit i
indicatorul sau pointer-ul articolului respectiv; n Visual FoxPro
acest pointer poate fi obinut prin funcia RECNO();
4. de regul, unul dintre articolele bazei de date este cel tratat
curent; pointer-ul acestui articol se numete pointer-ul sau
indicatorul bazei de date;
5. fiierele din baza de date sunt interconectate ntre ele prin
legturi de tip 1-1, 1-n sau m-n.
Aplicaia 1
Aplicaia 2
Se memoreaz n

ANTET
nregistrri
de date

Dicionarul de
date

Se memoreaz n

...
Aplicaia n
Fiier 1

Extensia bazei
de date

Fiier 1

...
Fiier m
Baza de date fizic

Figura 3.2 O baz de date i relaia ei cu aplicaiile


Cu cele de mai sus, o baz de date i relaia ei cu aplicaiile se
poate reprezenta conform Figurii 3.2.

1.2. FORME NORMALE I MECANISMUL


NORMALIZRII
1.2.1. Introducere

Prin ntreprindere se nelege o structur organizat n vederea


realizrii unor produse sau servicii. Astfel, o fabric, o
universitate, un spital etc. reprezint
ntreprinderi. ntreprinderea este deci un univers real.
Model este un ansamblu de reguli pentru formalizarea
ntreprinderii. n practic exist: modele matematice, economice,
contabile, de date etc. Modelele de date reprezint un
ansamblu de reguli prin care ntreprinderii i se ataeaz structuri
de

24
Nichi

tefan Ioan

date. Aa dup cum se tie, modelele de date se clasific dup


nivel i semantic
n: modele conceptuale, logice, fizice, respectiv externe.

Modelul conceptual, fiind primul nivel i cel mai general de


abstractizare a ntreprinderii, se realizeaz fr utilizarea
calculatorului i poate lua diferite forme cum ar fi: modelele de tip
E-R sau OLE. Imaginea ntreprinderii prin modelul conceptual este
schema conceptual, care este format din obiecte i relaii sau
legturi ntre acestea.
La nivelul logicii globale modelul conceptual se traduce n:
modele arborescente, n reea sau relaionale.
Schema de date este imaginea la nivel relaional a schemei
conceptuale i deci, a ntreprinderii. Baza de datepoate fi
considerat, n aceast accepiune, ca fiind schema de date
mpreun cu datele care populeaz schema respectiv. Problema
central a proiectrii logice a unei baze de date este: stabilirea
ansamblului relaiilor care descriu corect schema conceptual, i
deci, ntreprinderea.
Prima problem pe care o are administratorul bazei de date
relaionale, dup stabilirea schemei conceptuale, este s
stabileasc schema de date a acesteia, cu alte cuvinte,
structura bazei de date. Pentru stabilirea structurii, el pornete
de la diferite tabele. Dup cum se tie, nu toate tabelele
reprezint relaii, n sens clasic, sau altfel spus, acestea sunt
relaii nenormalizate. n timpul proiectrii trebuie s se
urmreasc transformarea tabelelor n relaii normalizate.
Pentru a nelege problemele cu care se confrunt administratorul
bazei de date, s considerm urmtorul exemplu. Fie orarul slilor de
curs din FSEGA (tabelul 3.4)

Acest tabel nu este o relaie normalizat, deoarece nu toate


atributele sunt atomice; de exemplu, atributul Orar este format
din Zi i Ora.
Trebuie s remarcm i faptul c n tabel exist i dependene de
tip N:1 (funcionale), adic exist dependena:
Sala Capacitate

Astfel, mai multe sli (022, 033,...) au aceeai capacitate.


Aceste tipuri de dependene pot genera mai multe tipuri de
anomalii:
redundan logic perechile de forma (026, 100) sau
(022,150) apar de mai multe ori n tabel;
anomalii de stocare

Definiia i clasificarea bazelor de date. Baze de date relaionale


25

anomalii de inserare - s presupunem c se construiete


o nou sal de curs; aceasta nu poate fi introdus n
tabelul orarului pn nu se primete o valoare pentru
cheia primar Sala#, deoarece cheia primar nu poate fi
vid;
2.2.2
anomalii de tergere s presupunem c sala 022
trebuie scoas din orar datorit unor reparaii; prin
tergerea liniilor respective se va putea pierde legtura
(Sala, Capacitate) care n-are o legtur semantic cu
reparaia din acest caz i ar trebui s rmn n baza de
date.
anomalii de modificare s presupunem c s-a extins
capacitatea slii 022 la 120 de locuri. Rezult c trebuie
s se urmreasc toate tuplele din tabel care conin
relaia (022,100), deoarece altfel apare o anomalie
generat de faptul c aceeai sal poate apare cu dou
capaciti diferite.
probleme de reconexiune; s presupunem c descompunem
tabelul 3.4 n dou tabele (vezi tabelul 3.5). Dac se recompun prin
echijoin (asociere pe baza de egalitate) cele dou tabele, se obine
tabelul 3.6. Deoarece fiecare tuplu din tabelul din stnga se combin
cu fiecare tuplu din tabelul din dreapta i pe baza egalitii valorilor
cheii comune, nu se ajunge la tabelul iniial.

tefan Ioan
Nichi

26
Sala#

Capacitat
ea
Orar
Zi

An

Materia

Cadrul
didactic

Ora

026

100

Luni 8

IE IV

Baze de
date

Ionescu

026

100

Luni 10

MF III

MRU

Popescu

...
022

150

Luni 8

Contabilitat
CIG III e

022

150

Luni 10

IE IV

...

...

033
033

150
150

Georgescu

CSBD

Ionescu

IEIII

CSBD

Apolodor

Luni 10

MKIII

Cercetri
de
marketing

Alexa

...

...

..

Luni 8

..

Tabelul 3.4 Orarul slilor de


curs
Mecanismul la dispoziia proiectantului sau administratorului
bazei de date pentru rezolvarea acestor probleme se numete
normalizare.

Definiia i clasificarea bazelor de date. Baze de date relaionale


27

Sala1
Sala

Sala2:
An

Materia

Cadru
didactic

Luni 8

IE IV

Baze de
date

Ionescu

Luni 10

MF III

MRU

Popescu

Capaci

Capaci Orar

tatea

Tatea

Zi

026

100

100

026

100

100

Ora

...
022

150

150

Luni 8

Contabilitat
CIG III e
Georgescu

022

150

150

Luni 10

IE IV

...

...

..

CSBD

Ionescu

033

150

150

Luni 10

IE IV

CSBD

Apolodor

033

150

150

Luni 10

IE IV

CSBD

Alexa

...

...

..

Tabelul 3.5 Descompunerea relaiei orarul slilor

tefan Ioan
Nichi

28
Sala#

Capacitat
e
Orar
Zi

An

Materia

Cadru
didactic

Ora

026

100

Luni 8

IE IV

Baze de
date

Ionescu

026

100

Luni 10

MF III

MRU

Popescu

Ionescu
Popescu

...
026

100

Luni 8

IE IV

Baze de
date

026

100

Luni 10

MF III

MRU

...
022

150

Luni 8

Contabilitat
CIG III e

022

150

Luni 10

IE IV

...

...

..

CSBD

Georgescu
Ionescu

022

150

Luni 8

Contabilitat
CIG III e

Georgescu

022

150

Luni 10

IE IV

Ionescu

...

...

..

CSBD

Tabelul 3.6 Relaia orarul slilor recompus


Normalizarea este o operaie prin care se urmrete:
transformarea tabelelor n
relaii; nlturarea
redundanelor;

nlturarea dependenelor interne ntre atributele unei relaii,


transformndu-le n dependene ntre tabele obinute prin
descompunere;

nlturarea diferitelor anomalii (de inserare, modificare sau


tergere) existente iniial sau aprute n urma descompunerii
tabelelor;
asigurarea descompunerilor fr pierderi, adic, recompunnd
tabelele obinute n urma descompunerilor unui tabel trebuie
s se ajung la tabelul iniial.

Definiia i clasificarea bazelor de date. Baze de date relaionale


29

Normalizarea este deci procesul iterativ prin care baza de date


se aduce la o form standard n care dispare fenomenul de
redundan, nu exist anomalii i fiecare tabel conine o singur
entitate semantic (nu exist dependene ntre atribute).
Exist, aa dup cum se va vedea, mai multe forme normale, care
sunt parcurse piramidal de la Forma 1-a normal (1NF) pn la
Forma a 5-a normal (5NF). Aducerea unei relaii la 1NF este
obligatorie deoarece altfel tabelul nu poate fi reprezentat n cadrul
unui SGBD. Pentru a aduce un tabel la forma unei relaii, de
regul, n proiectare se merge pn la 3NF.
Teoria normalizrii este deosebit de vast, fiind tratat n toate
materialele referitoare la teoria sau proiectarea bazelor de date
relaionale, mai teoretic
[Ullmann80, Abidaboul01], sau mai pragmatic [Date04,
Connolly01, R.AvramNichi04].

1.2.2. Definiii preliminare


Algoritmul prin care, pornind de la o relaie dat ntr-o form
normal, se ajunge la o relaie n forma imediat superioar se
numete algoritm de descompunere.
Dependena funcional, fiind o dependen univoc, seamn cu
funcia din matematic, deoarece uneia sau mai multor valori ale
primului atribut i corespund 0 sau 1 valoare din al doilea atribut.
Deosebirea dintre cele dou noiuni este c n timp ce funcia
matematic este atemporal, dependena funcional depinde de
timp. Dependenele funcionale se noteaz de regul cu DF. Se
poate observa c, dac se noteaz cu A i B dou grupuri de
atribute, ntre acestea are loc o DF dac i numai dac din t 1(A) =
t2(A) rezult t1(B) = t2(B), unde cu ti(A), respectiv ti(B) pentru i=1,2 sau notat subtupluri corespunztoare lui A, respectiv B. A se numete
domeniul de definiie sau determinantul, iar B cel al valorilor sau cel
determinat.

Fie R o relaie, A i B fiind dou mulimi de atribute ale ei. Se


spune c ntre A i B exist o dependen funcional total i

se noteaz cu DFT: AB, dac i numai dac au loc urmtoarele


dou condiii:
(i) Exist DF: AB.
(ii) Nu exist nici o submulime proprie A a lui A as el ca s existe
DF: AB.

O dependen funcional care nu este total este o dependen


funcional parial.

30
Nichi

tefan Ioan

Dependenele funcionale au o serie de proprieti, dintre care


cele mai cunoscute sunt axiomele lui Armstrong, stabilite de
acesta n 1974. Fie R o relaie i A,B,C trei mulimi de atribute ale
ei. Pentru dependene funcionale au loc urmtoarele axiome:
A1. Reflexivitatea AA, sau mai general, dac A este o parte a lui
A, rezult AA.

A2. Creterea determinantului:


dac exist DF: AB
A este o submulime a
lui C Rezult c are loc i
DF: CB.
Se poate observa c DF: CB este o dependen funcional
parial, deoarece B depinde de o parte a lui C.
A3. Tranzitivitatea
din AB
i BC
rezult
AC.
DF:AC se mai numete nchiderea tranzitiva primelor dou
dependene, respectiv se spune c C depinde tranzitiv de A.
Observaie. Analog cu dependenele univoce se definesc i
dependenele multivoce, n care unui element din primul
atribut i corespund un ansamblu de elemente din al doilea
atribut. Acestea sunt de tip 1:n, deci dependene arborescente.
De exemplu, corespondena (Sal, An) sau (Sal, Cadru Didactic).
Dependena tranzitiv din cadrul dependenelor univoce se poate
extinde analog i pentru cele multivoce.

Fie E o mulime de dependene (univoce sau multivoce). Mulimea


E+ a tuturor dependenelor tranzitive obinute din E se numete
nchiderea lui E. Fie acum dou mulimi de relaii E i E, unde E
conine dependenele din E precum i unele dependene obinute

din E aplicnd proprietile acestor dependene. E se numete


acoperire a lui E dac i numai dac, E i E au aceeai nchidere.
Referitor la mulimile de axiome, se introduc dou noiuni care
permit caracterizarea lor:

Definiia i clasificarea bazelor de date. Baze de date relaionale


31

mulime de axiome este complet dac i numai dac pornind


de la o mulime de dependene E se pot obine pe baza
axiomelor toate dependenele
nchiderii lui E.
O mulime de axiome este nchis, dac i numai dac,
pornind de la mulimea E a dependenelor nu se pot deduce,
cu ajutorul axiomelor, dependene care nu fac parte din E.
Enunm fr demonstraie teorema lui Ullman dat n 1980:
Mulimea axiomelor
lui Armstrong este complet i nchis.
E se numete o acoperire minimal a lui E dac i numai dac
este o acoperire a lui E i nici o parte a lui E nu are aceast
proprietate. Referitor la acoperirea minimal trebuie remarcate
urmtoarele:
acoperirea minimal joac un rol important n
descompunerea relaiilor; o mulime de aplicaii poate avea
mai multe acoperiri minimale.
O descompunere se spune c este reversibil dac, recompunnd
relaiile obinute prin descompunere, se obine relaia iniial. O
relaie se numete ireductibil dac nu mai poate fi descompus n
mod reversibil. Se poate observa c o relaie ireductibil definete o
singur entitate semantic i, deci, relaiile ireductibile pot fi
considerate module logice pe baza crora se modeleaz
ntreprinderea.

Se numete o descompunere atomica unei relaii R, o


descompunere reversibil a lui R n relaii ireductibile.

1.2.3. Prima form normal


Fie tabelul PERSONAL al angajailor unei organizaii, care are
forma:
MARCA#Nume i Domiciliu
... Copil Copil Copil
Prenume
Localitat Strad Num
Jude e

r
...

...

...

...

...

...

... ...

...

...

Tabelul
3.7

Relaia
PERSONAL

Acest tabel nu este o relaie normalizat deoarece, pe de o parte,


cmpul Domiciliu este un cmp compus, fiind la rndul su format
din cmpuri (Jude, Localitate, Strad, Numr), deci nu este
atomic, iar pe de alt parte, cmpul Copil este repetitiv. Principala
problem legat de cmpurile repetitive este faptul c nu se tie
cte astfel de cmpuri s se rezerve. Astfel, dac se rezerv 5
cmpuri Copil i un angajat nu are dect 1 copil, 4 zone se pierd
inutil, n schimb, dac are 7 copii, spaiul alocat copiilor nu ajunge.

32
Nichi

tefan Ioan

O relaie este n prima form normal (1NF) dac fiecare


atribut (cmp) este atomic i nu conine grupuri repetitive.

Trecerea unui tabel la prima form normal se realizeaz astfel:


atributele care nu sunt atomice se transform n cmpuri
atomice prin proiectare (descompunere) i eventual
redenumire;
pentru cmpurile repetitive se introduc attea tuple cte
apariii are cmpul respectiv, fiecare tuplu coninnd o apariie
a cmpului.
Transformarea de mai sus poate fi rezumat grafic astfel:

Relaie 1NF

Tabel nenormalizat

Figura 3.3 Transformarea n prima norm


formal
Avnd n vedere cele de mai sus, tabelul PERSONAL
devine:
MARCA
D#
Nume i Jude
Prenum
e

DDLocalitate Strad

Copi
D-Numr ... l

...

...

... ...

Tabelul 3.8 Relaia PERSONAL


transformat

unde am izolat Jude, Localitate, Strad i Numr din Domiciliu i


le-am redenumit. n plus, pentru cmpul Copil s-a reinut o singur
apariie, fiecrui copil corespunzndu-i un tuplu. n baza celor de
mai sus, dac angajatul Ionescu are 3 copii, el va avea 3 tuple de
forma:

Tabelul
3.9

123Ionescu IonCJClujNapocaTh.Mihali2

..
. Petric

123Ionescu IonCJClujNapocaTh.Mihali2

.. Mrioar
. a

123Ionescu IonCJClujNapocaTh.Mihali2

.. Costic
. ...

Definiia i clasificarea bazelor de date. Baze de date relaionale


33

Se poate observa fr dificultate c acest tabel va avea o


cantitate nsemnat de informaie redundant datorit grupului
repetitiv. Pentru a nltura acest neajuns, se va descompune (prin
proiecie) tabelul n dou i anume, vom avea tabelul PERS1 cu
structura:
MARCA#

Nume i
Prenume

...

...

DJude

DD-Localitate Strad

D-Numr ...

Locul-

ituaia Alocaie

...

Tabelul
3.10
i tabelul COPII cu
structura:
MARCA
#

...

Nume i
Prenum
e
...

Data-

Naterii Naterii

colar

Tabelul
3.11
unde MARCA# este o cheie strin, prin care se asigur legtura cu
tabelul PERS1, restul datelor fiind proprii copilului n cauz. MARCA#
nu mai poate fi cheie primar, deoarece un printe poate avea mai
muli copii i deci nu se mai asigur unicitatea valorilor cheii. Rezult
deci c s-ar putea lua ca i cheie primar atributul Nume i
Prenume mpreun cu Data-Naterii, avnd n vedere faptul c un
printe poate, prin absurd, boteza doi sau mai muli copii cu acelai
prenume.

Se observ c astfel s-au obinut dou tabele n prima form


normal, iar prin recompunerea tabelelor (prin echijoin) se
ajunge la relaia iniial, deci descompunerea este fr pierderi,
adic:
PERSONAL = PERS1 [MARCA# = MARCA#] COPII

Teorema de descompunere
Descompunerea se utilizeaz pentru a evita anomaliile de stocare
mai sus amintite.
Teorema de descompunere reversibil se mai numete teorema
lui Delobel i se enun astfel: Fie R o relaie definit pe
mulimea atributelor , R() i fie A,B,C o partiionare a
lui , as el nct s existe DF:AB. Atunci R() poate fi
descompus fr pierderi n dou relaii R(1 ) i R(2 ),
unde
1=A U B este reuniunea atributelor din DF
2=A U C- este reuniunea lui A cu atributele care nu fac
parte din DF.

34
Nichi

tefan Ioan

Descompunerea permite izolarea a dou concepte care iniial se


gseau n acelai tabel, adic transform o dependen intra-relaie
ntr-o dependen inter-relaie.

Dezavantajul este reprezentat de faptul c apare o migrare de


atribute, n sensul c, atributele din grupul notat cu A (n cazul
exemplului Marca#) se dubleaz.

1.2.4. A doua form normal


O relaie se consider n a doua form normal (2NF), dac este n
prima form normal i orice atribut care nu face parte din cheia
primar, depinde funcional total de cheia primar; cu alte
cuvinte, nici un atribut care nu face parte din cheia primar nu
depinde funcional de o parte a cheii primare.
Se poate observa c relaia PERS1 este n a doua form normal,
deoarece cheia primar MARCA# este format dintr-un singur
atribut, deci toate celelalte atribute depind funcional total de
cheia primar, aceasta neavnd pri. In schimb, relaia COPII nu
este n a doua form normal, deoarece cmpul Alocaia depinde
funcional de Data-Naterii care reprezint o parte a cheii primare,
deci cheia primar format din Nume i Prenume i respectiv
Data-Naterii nu determin funcional total atributul Alocaia.
Se poate observa c i n acest caz avem o serie de anomalii:
anomalia de inserare nu se poate introduce alocaia unui
copil, care depinde de Data-Naterii, pn cnd nu se
introduce i numele copilului, dei alocaia nu depinde de acest
parametru;
anomalia de tergere prin tergerea numelui unui copil (care
face parte din cheia primar) exist riscul pierderii legturii
dintre data naterii i alocaie;
anomalii de punere la zi pentru a pune la zi perechea (DataNaterii, Alocaie) trebuie analizat fiecare articol, deoarece
altfel se risc apariia unor inconsistene, dar operaia este
foarte costisitoare.
Pentru nlturarea acestor anomalii, aceast relaie se aduce la a
doua form normal, prin aplicarea teoremei descompunerii lui

Delobel, deci relaia COPII se va descompune n dou relaii i


anume, COPIL1 i COPIL2 sub forma:

Definiia i clasificarea bazelor de date. Baze de date relaionale


35
COPIL1
MARCA#

COPII

Nume i
prenume

COPIL2

Datanaterii

Situaia
colar

Datanaterii

Loculnaterii

Alocaie

Figura 3.4 Aplicarea teoremei de descompunere relaiei COPII


n felul acesta se nltur redundanele i anomaliile, deoarece
dependena
DF: Data-NaeriiAlocaie
nu mai este n relaia COPIL1. Aceast descompunere este fr
pierderi, adic prin recompunerea celor dou tabele se regsete
tabela iniial. Avem deci:
COPII = COPIL1 [Data-Naterii = Data Naterii] COPIL2
n concluzie, cele prezentate mai sus se pot reprezenta grafic
astfel:

Relaie 1NF

Teorema de
descompunere
Se izoleaz dependena

Relaie 2NF

parial de cheia primar

Figura 3.5 Transformarea n forma 2-a normal


1.2.5. Forma a 3-a normal (3NF) i variantele (3 NF)
A treia form normal are mai multe definiii, dintre care 3 sunt
mai importante:
O relaie este n 3NF (Codd 1970) dac este n 2NF i ntre dou
atribute care nu sunt cheie nu exist o dependen tranzitiv.
Se spune c un atribut C depinde tranzitiv de atributul B dac au
loc dependenele funcionale ntre B i C, A i B, respectiv ntre A

i C. Cu alte cuvinte, schema dependenelor funcionale are


forma:

B
C

Figura 3.6 Dependen tranzitiv

36
Nichi

tefan Ioan

O formulare mai clar a definiiei anterioare este: o relaie este


n 3NF dac este n 2NF i nu exist dependene funcionale ntre
atributele care nu fac parte din cheie.
O a doua definiie pentru forma a 3-a normal a fost dat de
Boyce i Codd n 1971; ea se numete forma BCNF sau BoyceCodd Normal Form i se definete astfel: o relaie R este n BCNF
dac pentru orice mulime de atribute A pentru care exist un
atribut din C(A), unde C(A) este mulimea atributelor din R care nu
fac parte din A i care depind funcional de A, are loc proprietatea
c orice atribut din R depinde funcional de A.
O a treia definiie a formei a 3-a normale este cea dat de
Sharman n 1975 i se enun astfel: O relaie este n 3NF dac
orice determinant este o cheie (primar sau candidat).
Ideea de baz este deci aceea c: fiecare relaie n 3NF
conine un singur concept
semantic.
Fie relaia PERS1, care se mai poate reprezenta punnd n
eviden i alte cmpuri, astfel:
MARC
A
Nume i
Prenume

DataAngajrii

...

...

OreLucrate

SalarBrut

...

...

Tabelul 3.12
Aceasta, dei este n 2NF, nu este n 3NF, deoarece ntre
atributele care nu fac parte din cheie, Data-Angajrii i OreLucrate, pe de o parte, i Salar-Brut, pe de alt parte, exist o
relaie funcional. Izolnd aceast relaie, din tabelul PERS1 se
obin tabelele:
PERS11
MARCA#

PERS1

Nume i
prenume

Data
angajrii

PERS12
Dataangajrii

Ore
lucrate

Salar
brut

Ore
lucrare

Figura 3.7 Decompunerea relaiei


PERS1

Definiia i clasificarea bazelor de date. Baze de date relaionale


37

n felul acesta se elimin anomalii legate de prezena


dependenei funcionale DF: (Data Angajrii, Ore Lucrate Salar
Brut) i se poate demonstra, pe baza aceleiai teoreme, c
descompunerea este fr pierderi, adic:
PERS1 = PERS11 [Data-Angajrii, Ore-Lucrate = Data-Angajrii,
Ore-Locrate]
PERS12

Putem deci spune c trecerea de la 2NF la 3NF se realizeaz prin


izolarea DF tranzitive i aplicnd teorema de descompunere.
Schematic fenomenul se reprezint astfel:

Relaie 2NF

Teorema de
descompunere
Se izoleaz dependenele
tranzitive ntre atribute
care nu sunt chei

Relaie 3NF

Figura 3.8 Transformarea n forma 3-a normal


Observaie. Se poate remarca faptul c a doua i a treia definiie
sunt echivalente i sunt mai restrictive dect 3NF.

Pentru a arta c ntr-adevr forma BCNF este mai general ca


forma 3NF, s considerm relaia PERS12. Aceasta este n 3NF. S
considerm c realizarea salarului brut implic faptul c angajatul
lucreaz un numr de ore. Rezult c apare o dependen
funcional
DF: Salar-Brut Ore-Lucrate
deci relaia nu este n BCNF. Reprezentnd schematic relaiile, se
poate observa c au loc dependenele conform figurii:
Data-angajrii
Salar-brut

Ore-lucrate

(1)

Figura 3.9
Aplicnd teorema descompunerii i izolnd (1), vor rezulta dou
tabele:

38
Nichi

tefan Ioan

PERS121

PERS122

Data-angajrii Orelucrate

Ore-lucrateSalarbrut

2.

Tabelul 3.13
Este de remarcat faptul c relaia PERS121 este format numai din
cheie (ALL KEY), deci nu are nici un atribut care s nu fie cheie, i
c descompunerea este fr pierderi, deci:
PERS12 = PERS121 [Ore_Lucrate = Ore_Lucrate]
PERS122
Schematic operaia se poate reprezenta astfel:

Relaie 3NF

Teorema de
descompunere
Se izoleaz dependenele
dintre atributul non-cheie
i o parte a cheii primare

Relaie BCNF

Figura 3.14 Transformarea n BCNF


Observaii.
4.1.2. BCNF fiind mai restrictiv dect 3NF, se consider c este
forma 3 , deoarece se bazeaz totui pe dependene
funcionale, deci nu se justific s fie considerat 4NF.
4.1.3. Aa dup cum s-a mai amintit, orice baz de date pentru a
fi corect proiectat se aduce cel puin pn la 3NF.
Observaie. n literatura de specialitate se discut despre
formele normale 4, 5, 6 i alte teorii de normalizare.

1.2.6. Tipuri de conservare


Teorema lui Ullman. Fie o descompunere al lui R n dou relaii
R1i R2. Dac se noteaz cu D mulimea tuturor dependenelor
funcionale din R, descompunerea este fr pierderi de date, deci

reversibil, dac i numai dac dependenele funcionale de la


R1 R2 la R1- R2 , respectiv R2- R1, fac parte din nchiderea lui D.

Definiia i clasificarea bazelor de date. Baze de date relaionale


39

Observaie. Teorema lui Delobel satisface condiiile teoremei lui


Ullman. ntr-adevr, DF aplic A= R1 R2 n B= R1- R2. Din cele de
mai sus rezult c descompunerea pe baza teoremei lui Ullman
conserv datele.
Fie R o relaie, F, o mulime de dependene de tip DF n R i A un
grup de atribute. Se numete proiecia mulimii F pe A i se
noteaz cu F(A), mulimea tuturor dependenelor din nchiderea
lui F, de forma, DF:BC, cu B,C submulimi din A.
Fie {R1, R2,..., Rn} o partiionare a lui R. Aceast partiionare
conserv dependenele dac i numai dac nchiderea lui F ,
notat cu F+ este egal cu reuniunea dependenelor F(R i) pentru
i=1,2,...,n.
Observaie. Cele dou tipuri de conservri sunt independente.
Pentru argumentarea acestor afirmaii vom considera dou
exemple.
Fie R(A,B,C), o relaie definit pe atributele A,B,C cu F =
{AB, BC}. Fie descompunerea lui R n R1(A,B), R2(B,C). Se
poate observa c descompunerea conserv datele, deci este
reversibil, deoarece R1 R2 =BC= R2- R1. F nu conserv ns
dependenele deoarece AC care face parte din F +, dar nu
face parte din reuniunea lui F(R1) cu F(R2).
q Dac considerm ns analog R(A,B,C,D) i F = {AB, CD},
descompunerea lui R n R1(A,B), R2(C,D) conserv
dependenele, deoarece F+=F(R1)U F(R2), dar nu conserv
datele, deoarece R1 R2 = i deci nu exist DF la R1- R2 sau
R2R1.
Cele de mai sus se pot concluziona sub forma teoremei lui
Rissanen (1978): Fie R1, R2 o descompunere a lui R i F mulimea
dependenelor din R. Descompunerea este reversibil i conserv
dependenele din F dac i numai dac:
p

p
q

F poate fi dedus din F(R1) i F(R2) (conserv


dependenele).
Atributele comune ale lui R1 i R2 formeaz o cheie cel
puin n una din relaiile R1 sau R2, adic exist o
dependen de la R1 R2 la R1- R2 sau

R2- R1.
Observaii. Aceste probleme au fost tratate de foarte mult timp
n literatura de specialitate. Astfel, enumerm cteva rezultate
din domeniu, pe care le considerm interesante:
6. Teorema lui Delobel asigur reversibilitatea descompunerii dar
nu i conservarea dependenelor.
7. S-a demonstrat (Ullman 1980), c orice relaie are cel puin o
descompunere reversibil n 3NF, cu conservarea
dependenelor. El a dat i un algoritm pentru o astfel de
descompunere.

1. SISTEME DE BAZE DE DATE DISTRIBUITE

Autor: Dan Andrei Sitar Tut

1.1 Introducere n sisteme de baze de date distribuite


Bazele i sistemele distribuite au aprut ntr-un moment n care tehnologia bazelor
de date i cea a reelelor erau destul de avansate individual, ns la nivelul integrrii lor,
lucrurile nu stteau att de bine.
Un exponent al hibridizrii celor dou tehnologii amintite este sistemul cu
prelucrare distribuit, adic un sistem centralizat de baze de date. Este un precursor al
sistemelor distribuite i implic accesarea unei singure baze de date (baza de date central)
prin intermediul unei reele de calculatoare. Punctele forte ale acestor sisteme ar fi
integrarea aplicaiilor i a datelor din cadrul unei organizaii i simplitatea proiectrii.
Neajunsurile se refer la rezolvarea problemei accesului concurent, vulnerabilitatea i
disponibilitatea nodului central, numr relativ sczut de utilizatori i accese concomitente,
precum i viteza sczut i distana acceselor.
Dei considerate de muli ca fiind destul de primitive, sistemele centralizate dein
nc o cot destul de ridicat n implementrile existente i de multe ori constituie o
variant mult mai bun de regul pentru comunitile informatice de dimensiuni mici
dect sistemele distribuite. Totui, att comunitatea academic, ct i cea economic au
consimit c e nevoie s se fac un nou pas n evoluia integrrii bazelor de date cu reelele
de calculatoare.
De-a lungul timpului n literatura de specialitate au fost formulate o serie de
definiii ale bazelor de date distribuite.
Definiie: O baz de date distribuit reprezint o colecie de date integrate logic,
ns repartizate2 fizic pe siturile3 unei reele de calculatoare [Gardarin & Valduriez 1989],
[Lungu et al. 1995], [Connolly et al. 2001], [Messaoui 2001] etc.
Aadar, o baz de date distribuit e un ansamblu de baze de date administrate de
diferite situri, dar care apar pentru utilizator ca o baz unic. Ele sunt proiectate sub forma
unor colecii de date integrate, omogene sau nu, mprtiate cu discernmnt ntr-o reea de
calculatoare sub forma unei baze de date globale. [Schmitt & Saake 2005]
n majoritatea cazurilor definiiile surprind dou elemente importante:
Integrarea logic. Se refer la aspectul c datele nmagazinate nu sunt simple
colecii de fiiere. Ele reprezint o structur bine organizat pe care utilizatorul potrivit
unor principii ce vor fi enunate ulterior trebuie s-o perceap ca fcnd parte dintr-o
singur baz de date global, la fel ca i n cazul bazelor de date locale sau centralizate;
Repartizarea fizic. Relev faptul c baza de date nu este stocat ntr-o singur
locaie, precum n cazul bazelor de date locale i sistemelor centralizate, ci este mprit
ntre mai multe staii de lucru.

Acest material este preluat/adaptat dup [Sitar 2005]

n general n literatura de specialitate se folosete termenul distribuit. Am evitat utilizarea


unor definiii recursive, pentru a nu spune c bazele de date distribuite sunt ceva ... distribuit.

vom utiliza n general noiunea de sit, ca sinonim pentru site, nod, staie etc.

Sisteme de baze de date distribuite

Prin natura lor, datele din cadrul unei organizaii sunt dispersate att logic, ct i
fizic. Angajaii colaboreaz la realizarea unui proiectul prin intermediul a mai multe
calculatoare amplasate fizic n birouri, cldiri, ateliere specifice etc. Accesarea se poate face
de pe aceeai main de calcul sau de pe maini diferite, indiferent de apartenena
utilizatorului la un anumit departament sau birou. La fel, baza de date poate fi i ea plasat
ntr-o singur locaie sau n locaii diferite. Dispersarea poate s se fac depind bariera
unui birou sau a unei cldiri, ajungndu-se n seciile sau atelierele unitii de producie sau
n diferite sucursale, agenii sau puncte de lucru ale organizaiei respective rspndite n
diverse coluri ale unui ora, ar, continent, sau chiar ale lumii. n exemplele furnizate n
acest capitol vom considera o baz de date care reflect evidena studenilor facultii
noastre n condiiile unei activiti repartizate pe secretariate din doar dou locaii
posibile: Cluj-Napoca i Sighetu Marmaiei.
Apariia reelelor de calculatoare a fost un prim pas n integrarea informaiei existente
ntr-o companie. Integrarea tehnologiei bazelor de date cu cea a reelelor a dat natere unei
tehnologii mult mai puternice dect era fiecare dintre cele dou domenii anterior momentului
hibridizrii. Dei exploziv, dezvoltarea s-a fcut n trepte de evoluie. Cu toate acestea, nici
acum i niciodat nu vom putea spune c s-a epuizat cu totul acest domeniu.

Sistemele de Gestiune a Bazelor de Date Distribuite (SGBDD4) au ca obiectiv


crearea unei puni ntre insulele de informaii. Ideea unui astfel de sistem este de a face
accesibile toate datele necesare funcionrii unei organizaii, oriunde s-ar afla ele, i de a le
rspndi fizic, dac este cazul, n acele locaii unde vor fi utilizate cel mai des. [Date 2005]
SGBDD-ul este o extensie software i funcional a sistemelor SGBD locale.
Definiie: Un sistem de gestiune al bazelor de date distribuite reprezint sistemul
software care permite gestiunea bazelor de date distribuite, fcnd distribuirea fizic
transparent pentru utilizatori [Gardarin & Valduriez 1989], [Connolly et al. 2001].
Atunci cnd se vorbete despre sisteme distribuite, cei mai utilizai termeni sunt:
fragmentare, alocare i replicare.

1.2 Fragmentarea
n literatura de specialitate, pentru conceptul de fragmentare se folosete alternativ
i denumirea de partiionare.
Definiie: Fragmentarea reprezint procedeul de spargere a relaiilor utilizate ntrun sistem distribuit prin operaiuni relaionale de proiecie i selecie controlate, n vederea
plasrii aa-numitelor partiii (fragmente) rezultate n locul n care sunt cel mai frecvent
solicitate datele pe care le conin.
Fragmentarea reprezint o abordare a dimensiunii bazei de date, care se realizeaz
prin divizarea tabelelor de date n unul sau mai multe fragmente disjuncte, n scopul stocrii
fizice.
[Connolly et al. 2001] consider urmtoarele motive ca fiind premisele de baz n
favoarea recurgerii la fragmentare:
Uzana. n aplicaiile proiectate pentru baze de date n general, multiutilizator
se practic frecvent utilizarea tabelelor virtuale n detrimentul relaiilor ntregi. De cele mai
multe ori un operator nu are nevoie de toate informaiile, att ca i structur, ct i ca i
4

n literatura de specialitate se utilizeaz abrevierea DDBMS, acronim pentru Distributed


DataBase Management Systems

Sisteme de baze de date distribuite

coninut, pe care o relaie ntreag este capabil s le furnizeze. Astfel, acesta poate s se
concentreze strict asupra problemelor cu care interacioneaz i nu asupra unor aspecte
colaterale. Datorit acestui aspect, unitatea atomic de proiectare i utilizare n cadrul unor
astfel de sisteme, nu va fi relaia (de cele mai multe ori), ci o subdiviziune a acesteia;
Eficiena. Distribuirea unor relaii ntregi pe diferite staii de lucru ar anula
aspectul semantic al siturilor n funcionalitatea sistemului distribuit. Cu ce ar ajuta dac
n situl X localizat n Cluj-Napoca am avea stocat relaia ce conine materiile de studiu, iar
pe nodul Y aflat n Sighetu Marmaiei am avea relaia care conine datele de identificare a
tuturor studenilor? n mod uzual secretariatul din Cluj-Napoca (X) ar dori s utilizeze
informaiile privind studenii care frecventeaz cursurile n Cluj-Napoca, iar cel din Sighet
(Y), informaiile referitoare la cei din Sighet;
Paralelismul. Mai multe fragmente ale unei baze de date permit sporirea accesului
concurent. Mai mult, sistemul va fi capabil s rspund aproximativ n acelai timp la mai
multe cereri tocmai datorit acestui aspect. De exemplu, mult mai rapid se va rspunde
unor cereri lansate simultan, una de pe situl X i una de pe Y, n cazul n care X solicit
mediile studenilor ce frecventeaz cursurile n Cluj-Napoca, iar Y ale celor din Sighet.
Dac relaia ce conine toi studenii ar fi stocat ntr-un singur loc s zicem n Sighet
rezolvarea cererilor ar fi ncetinit de secvenialitatea procesrii (mai nti una din cereri,
apoi cealalt) sau ntrzieri datorate metodelor de gestionare a accesului concurent,
dimensiunea mai mare a relaiei (prelucrare mai greoaie), i nu n ultimul rnd, distana;
Securitatea. n ceea ce privete securitatea, un atac din partea unor persoane ruvoitoare n-ar afecta funcionarea ntregului sistem (i n general chiar deloc, datorit
replicrii datelor) n cazul unui atac asupra unui sit, care conine doar cteva fragmente ale
bazei de date i nicidecum ntreaga baz sau relaii ntregi. Pentru succesul atacului acesta
ar trebui s fie direcionat asupra mai multor noduri, iar probabilitatea unui asemenea
eveniment este mult mai mic dect cea a reuitei asupra unui singur nod.
Cu toate punctele tari, aceasta prezint i unele dezavantaje:
Complexitatea proiectrii. Un sistem distribuit este mai greu de proiectat dect
unul nedistribuit. Existena fragmentelor implic o serie de factori suplimentari, cum ar fi
de exemplu stabilirea locaiei unui fragment, optimizarea interogrilor etc.;
Performana. Chiar dac n general, datorit unei alocri eficiente a fragmentelor,
performanele unui sistem distribuit sunt mai mari dect ale unui sistem nedistribuit, lucrurile se
pot complica n cazul unor interogri mai complexe ce solicit informaii prea disparate

(de pe mai multe situri);


Controlul integritii. Pstrarea integritii bazei de date este dezideratul
primordial al oricrui sistem tranzacional. Fa de abordarea n cazul unui sistem
centralizat, existena fragmentelor rspndite pe siturile sistemului, complic lucrurile.
Fragmentarea nu poate fi fcut la voia ntmplrii. Fragmentele rezultate trebuie
s ndeplineasc anumite condiii de la care nu se poate face rabat:
Completitudinea fragmentrii. Divizarea unei relaii n fragmente trebuie fcut de
aa manier nct, fragmentele rezultate, s asigure acoperirea ntregii relaii iniiale.
Potrivit acestei cerine, fragmentarea are ca obiectiv eliminarea apariiei pierderilor
informaionale i nu cea a redundanelor.
Refacerea relaiei iniiale. Fragmentarea se face astfel nct, n orice moment s poat
fi reprodus relaia iniial din care fragmentele provin. Operatorii de recompunere
trebuie s fie strict relaionali.
Caracterul disjunct [Connolly et al. 2001]. Fragmentele provenite din aceeai relaie
trebuie s fie disjuncte, adic s nu se suprapun, att ca tuple ct i ca atribute. La
aceast condiie avem i o excepie de la regul, fireasc de altfel. Pentru a nu pierde

Sisteme de baze de date distribuite

legtura ntre datele unui tuplu i pentru a putea face recompunerea cu uurin, cheile
primare trebuie replicate pentru fiecare fragment creat de-a lungul atributelor.
n funcie de operatorii relaionali care se aplic asupra relaiilor, fragmentarea
(partiionarea) poate fi de mai multe tipuri: orizontal, vertical i mixt. Pe lng aceste
tipuri clasice, uneori situaia impune necesitatea unor fragmentri derivate sau chiar a unor
relaii nefragmentate. Toate acestea vor fi discutate mai pe larg n paragrafele urmtoare.
Limitele n care se ncadreaz fragmentarea sunt de la un tuplu, atribut, o valoare a
unui tuplu, pn la ntreaga relaie sau baz de date (n cazul fragmentrii derivate). ntre
aceste granie se afl granulaia fragmentrii. Ce, cum i ct fragmentm sunt ntrebrile pe
care i le pun toi proiectanii de baze de date.

1.2.1 Fragmentarea orizontal


Fragmentarea orizontal, dup cum sugereaz numele, se face de-a lungul tuplelor
unei relaii. Aadar, un fragment orizontal, este format dintr-o submulime a tuplurilor unei
relaii, submulime obinut n urma unei operaii de restricie. Restricia trebuie s asigure
o descompunere ortogonal n fragmente orizontale.
Reprezentarea simbolic a unui fragment orizontal F, realizat pe baza unei relaii
R, prin specificarea modalitii de obinere, este urmtoarea:
Fi: p(R), unde Fi reprezint numele fragmentului, p fiind un predicat bazat pe
unul sau mai multe atribute ale relaiei [Connolly et al. 2001], iar R reprezint denumirea
relaiei. este simbolul operaiei de restricie (selecie).
S presupunem c n relaia STUDENT avem atributul Locatia, a crui valori
indic locul unde urmeaz cursurile studenii de la FSEGA Cluj-Napoca. Considernd c
acetia pot s fie ntr-una din cele dou locaii posibile, avem fragmentele:
CJ_STUD: Locatia = Cluj-Napoca(STUDENT)
SM_STUD: Locatia = Sighetu Marmatiei(STUDENT)
Deci, vom avea dou fragmente. Fragmentul CJ_STUD pentru studenii nscrii la
FSEGA Cluj-Napoca i urmeaz cursurile n Cluj-Napoca i fragmentul SM_STUD pentru
studenii nscrii la FSEGA Cluj-Napoca, dar care frecventeaz cursurile n Sighetu
Marmaiei. Cele dou fragmente ndeplinesc cele trei reguli de baz.
Dup cum s-a vzut, fragmentarea orizontal se realizeaz prin operaiuni de
selecie aplicate relaiei globale. n proiectarea fragmentelor se ine cont de aspectul logic i
cel statistic. Componenta logic a unui fragment este dat de predicatul pe baza cruia se
face fragmentarea. Acesta poart numele i de calificare. Proprietile statistice se refer la
afinitatea (numr i frecven) unor aplicaii sau cereri pentru fragmentul n cauz. [Lungu
et al. 1995]
Predicatele pe baza crora se abordeaz problematica fragmentrii orizontale sunt
predicatele minterm. Ele sunt conjuncii de predicate simple sau negaii ale acestora.
Predicatele simple sunt de forma pi: Aj <valoare>, i=1, 2, ... ,n, iar A1, ...,Am reprezint
atributele relaiei, iar ia una din valorile {=, <, >, <=, >=}.
Fie urmtoarul set de predicate simple: p1: CodSectie = 1, p2: CodSectie = 2, p3:
CodSectie > 2, p4: Media < 8, p5: Media >= 8. Predicatele minterm aferente sunt:
m5: CodSectie = 2 Media < 8
m1: CodSectie = 1 Media < 8
m2: CodSectie = 1 ~(Media < 8)
m6: CodSectie = 2 ~(Media < 8)
m3: CodSectie = 1 Media >= 8
m7: CodSectie = 2 Media >= 8
~
m4: CodSectie = 1 (Media >= 8)

m8: CodSectie = 2 ~(Media >= 8)...

Sisteme de baze de date distribuite

n ceea ce privete aspectul semantic al acestui tip de predicate, putem spune c


unele sunt fr neles. Nu este cazul nostru, dect dac am fi construit predicate minterm i
ntre p1 i p2, respectiv ntre p3, p4 i p5. Un alt aspect se refer la faptul c unele predicate
minterm se suprapun (de exemplu m1 cu m4). Mai mult, pot s apar contradicii n cazul
unui astfel de predicat, ceea ce ar avea drept urmare constituirea unui fragment vid. Spre
exemplu, un predicat simplu ar referi studenii cu numrul matricol ntre 8.000 i 10.000,
iar un altul studenii din anul 3. ntmpltor, chiar aceti studeni din anul 3 au numerele
matricole chiar ntre intervalele stabilite. Acest lucru va conduce la eliminarea a dou
predicate minterm. Mai mult, n acest caz particular, cele dou predicate sunt echivalente.
Un predicat este considerat relevant n raport cu un set de predicate date dac
prezena sa influeneaz setul de tuple al seleciei referite de o aplicaie.
n termeni formali, fie dou predicate minterm mi i mj care difer prin faptul c

unul conine pi, iar cellalt pi. Cele dou predicate minterm determin fragmentele f i i fj. pi
este relevant n raport su setul de atribute dac i numai dac:
acc(mi)/card(fi) acc(mj)/card(fj). [Sacca & Wiederhold 1985]

Un set de predicate se consider complet dac i numai dac probabilitatea de


referire a dou tupluri din cadrul aceluiai fragment este egal.
Un set de predicate este minimal dac i numai dac toate predicatele sunt relevante. La
capitolul informaii cantitative putem defini selectivitatea predicatului minterm
(cardinalitatea seleciei); frecvena accesului: (frecvena accesrii datelor de ctre
aplicaii).
n cazul n care avem n predicate simple, atunci numrul predicatelor minterm ce
pot fi definite pe baza acestora este de 2n. Acesta este numrul maxim teoretic de fragmente
orizontale care pot fi constituite. Totui, acest numr poate fi redus prin simplul fapt c o
serie de predicate se pot suprapune sau devin contradictorii intern.

1.2.2 Fragmentarea vertical


Fragmentarea vertical reprezint o descompunere de-a lungul atributelor unei
relaii. Realizarea acesteia presupune operaii de proiecie asupra atributelor, prin
includerea n cazul fiecrui fragment a unei chei alternative a relaiei. Scopul includerii
acesteia este obinerea unei descompuneri fr pierderi, deci una care s verifice fr
probleme cele trei condiii impuse fragmentrii, de orice fel ar fi ea.
Simbolistica reprezentrii unui fragment vertical Fi obinut prin proiecia
atributelor a1, a2, ..., an ale unei relaii R este urmtoarea:
Fi: a1, a2, ... ,an(R), unde simbolul reprezint nsemnul proieciei din algebra
relaional.
Pentru exemplificarea acestui nou tip de fragmentare vom lua cazul relaiei
LOCALITATI(CodLoc, Loc, CodJud), prezentat n subcapitolele anterioare. Numrul
redus de atribute i dimensiunea unui tuplu, precum i a relaiei n sine, nu ar justifica o
astfel de fragmentare. Totui putem avea urmtoarele fragmente:
L_LOC: CodLoc, Loc(LOCALITATI)
J_LOC: CodLoc, CodJud(LOCALITATI)
n ambele fragmente a trebuit s includem cheia primar a relaiei LOCALITATI i
respect cele 3 reguli, recompunerea relaiei iniiale presupunnd operaia de JOIN.
Partiionarea vertical e mult mai complex dect cea orizontal. Am vzut c n
cazul fragmentrii orizontale numrul de variante posibile la un numr dat (n) de predicate

Sisteme de baze de date distribuite

simple este 2n. Exist preri cum c la un numr dat de m atribute non-cheie ale unei relaii,
numrul de variante este determinat de o funcia B(m), care reprezint al m-lea numr Bell.
[Niamir 1978] Pentru valori mai mari ale lui m, numrul de variante posibile tinde spre
10m. Pentru m=15, B(m) 109, iar pentru m=30, B(m) 1023.
Exist dou modaliti de abordare a proiectrii fragmentrii verticale:
Gruparea atributelor. A fost propus pentru prima dat spre a fi utilizat n
bazele de date centralizate n 1978 [Niamir 1978], iar mai apoi, n 1985 [Sacca &
Wiederhold 1985], n bazele de date distribuite. Presupune iniial stabilirea cte unui
fragment pentru fiecare atribut. Apoi, pn la satisfacerea unor criterii stabilite se agreg
noi atribute. Aceast tehnic ncalc proprietatea de disjunctivitate a fragmentelor. De
aceea, se recomand ca atributele replicate s nu fie deloc, sau eventual doar foarte rar
actualizate [Lungu et al. 1995];
Partiionarea atributelor. Tehnica a fost discutat i propus pentru bazele de
date centralizate [Hoffer & Severance 1975], pentru a fi extins [Navathe et al. 1984] i n
cazul bazelor de date distribuite. Se pornete de la schema iniial a relaiei i pe baza unor
criterii statistice (numr de accese din partea aplicaiilor).
n general se aplic cea de-a doua metod. Pentru stabilirea atributelor care vor
face parte dintr-un anumit fragment se vor identifica mai nti aplicaiile (cererile) care
acioneaz asupra acestor atribute. Se va determina matricea afinitilor dintre atribute, iar
apoi se va utiliza algoritmului energiei de angajament (BEA5), propus de Mc Cormick
[Mohan et al. 1986], care este special proiectat pentru a grupa atributele cu afiniti
apropiate. Efortul computaional al acestuia este rezonabil (O(n 2)), iar n plus permite i
determinarea legturilor secundare dintre diferitele grupuri de atribute. [Hoffer &
Severance 1975] Algoritmul se bazeaz pe permutarea coloanelor i liniilor matricei de
afinitate i obinerii matricei de afinitate partiionat. Permutrile trebuie fcute de aa
manier nct s se maximizeze cuantumul afinitii globale.
Deoarece i matricea care va rezulta este o matrice simetric, formula de
maximizare a afinitii globale poate fi redus la:
n

aff (Ai , Aj )[aff (Ai , Aj 1 )

aff (Ai , Aj 1 )]6

i1 j1

Crearea matricei este un proces iterativ care presupune mai nti mutarea unei
singure coloane n noua matrice, apoi plasarea celorlalte n aa manier nct s fie n acord
cu condiiile expuse anterior. Dup plasarea tuturor coloanelor, i liniile trebuie
interschimbate astfel nct s potriveasc poziia relativ a coloanelor.
Dup gsirea matricei de afinitate partiionat, pe diagonala matricei trebuie s
fixm un punct, numit punct de divizare, care mparte mulimea atributelor relaiei n dou
submulimi formate din atributele {A1, A2, Ai}, respectiv {Ai+1, An}, alctuind matricele
(ptratele) TA7 i BA8.
Dup identificarea posibilelor fragmente n funcie de afinitile atributelor i
frecvenelor aplicaiilor care le solicit este necesar efectuarea procedurii de verificare a
celor trei condiii definitorii ale fragmentrii. Singura de la care putem face rabat ntr-o
anumit msur ar fi cea de disjunctivitate a fragmentelor. Aa cum am mai menionat, n
1 Bond Energy Algorithm
2
formul preluat din [zsu & Valduriez 1991], pagina 126
3 Top Attributes
4 Bottom Attributes

Sisteme de baze de date distribuite

cazul fragmentelor verticale disjunctivitatea nu poate fi realizat n proporie de 100%,


dect atunci cnd se folosesc identificatoare de tuplu, invizibile pentru utilizator. n celelalte
cazuri, pentru fiecare fragment n parte trebuie s se replice cheia primar.

1.2.3 Fragmentarea mixt


Fragmentarea mixt numit i hibrid de ctre unii autori nu reprezint un tip
special de fragmentare, ci o combinaie a celorlalte dou enunate anterior. Combinaia se
datoreaz aplicrii celor doi operatori din algebra relaional utilizai pentru fragmentarea
pe orizontal i pentru cea pe vertical. n funcie de ordinea n care sunt aplicai, putem s
avem dou tipuri de fragmentri mixte. Dac mai nti avem o operaie de selecie, urmat
apoi pentru fiecare fragment, de operaii de proiecie obinem fragmente orizontale
partiionate vertical. Dac ordinea operaiilor este inversat, atunci vom avea fragmente
verticale partiionate orizontal.
n reprezentarea simbolic se vor folosi notaiile deja amintite. Un astfel de
fragment poate fi descris ca fiind rezultatul aplicrii fie a unei operaii de proiecie asupra
uneia de restricie, fie rezultatul unei restricii aplicat asupra rezultatului unei proiecii:
Fi: a1, a2, ... ,an(p(R)) sau Fj: p(a1, a2, ... ,an(R))
n Figura 6. 1 Tipuri de fragmente mixte sunt prezentate cele dou tipuri de
fragmentri mixte:

F1
F3

F2
F4

F1
F5

F6

F2

F3

F4
F5
F6

Figura 6. 1 Tipuri de fragmente mixte


Din imagine se poate observa caracterul complet al fragmentrii mixte, indiferent
de cazul analizat. Cele 6 fragmente acoper pe de-a-ntregul relaia studiat.
Reconstrucia se face prin operaii de uniune i reuniune.
R = (F1 F2) U (F3 F4 F5) U F6, sau
R = (F1 U F2) F3
(F4 U F5 U F6).
Caracterul disjunct poate fi sesizat cu uurin din figur prin faptul c niciun
fragment nu ncalc teritoriul unui alt fragment.

1.2.4 Fragmentarea derivat


Fragmentarea derivat reprezint un tip mai aparte de fragmentare, chiar dac n
practic este posibil a fi cel mai des ntlnit. Pn acum s-a vorbit de fragmentri a cror surs
erau relaii ntregi stocate n cadrul a diferitelor situri. Fragmentarea de care vorbim este impus
de anumite nevoi practice menite s optimizeze accesul la date prin reducerea timpului de
transmisie. Fragmentarea derivat este o fragmentare orizontal care se face ntre dou relaii:
una printe i cealalt fiu. Se va porni de la relaia copil, care va fi fragmentat conform
predicatului prestabilit. Predicatul implic n mod obligatoriu cheia extern.

Sisteme de baze de date distribuite

1.2.5 Relaii nefragmentate


n anumite cazuri fragmentarea ar fi mai degrab un disconfort dect un lucru care
s aduc ntr-adevr performane sistemului. Aadar, nu ntotdeauna fragmentarea va fi
eficient i de aceea nici nu va fi aplicat. Relaiile care se preteaz la o astfel de abordare
sunt acelea care au un numr relativ mic de nregistrri. n astfel de situaii se recomand
fie replicarea acestora pe fiecare sit n parte, fie meninerea lor n acele noduri unde se
utilizeaz cel mai des, iar n cazul unei cereri la distan care le solicit, strategia optim ar
fi cea de mutare a acestei relaii, i nu a celorlalte, fie n situl din care s-a solicitat cererea,
fie ntr-un alt sit n care exist deja una sau mai multe din relaiile implicate.

1.3 Replicarea
Unul din aspectele importante ce caracterizeaz sistemele distribuite este
fiabilitatea i disponibilitatea. Aceasta nseamn c o pan n unul dintre siturile sistemului
nu va paraliza funcionarea sistemului i nici nu va afecta disponibilitatea datelor care au
fost nmagazinate n situl respectiv. Atingerea acestei performane nu se poate realiza dect
cu ajutorul replicrii fragmentelor.
Replicarea cunoscut n literatura de specialitate i ca reproducere presupune
copierea unor fragmente n mai multe locaii. ntr-o baz de date distribuit exist mai
multe nivele de replicare. Astfel, avem:
Baze de date centralizate. Sunt sistemele cu prelucrare distribuit (centralizate),
n care avem o singur baz de date stocat pe nodul central. La fel avem un singur SGBD.
Caracterul local al referinei este cel mai sczut, deoarece doar nodul central poate face
accesri sau prelucrri locale. Securitatea, fiabilitatea i disponibilitatea sunt sczute i
depind n cea mai mare msur de nodul central. Costul comunicaiei este ridicat;
Baze de date partiionate, fragmentate sau nereplicate. Sunt acele baze de date
distribuite n care toate fragmentele apar o singur dat. Implementarea se face cu cel mai
sczut cost al stocrii. O astfel de baz de date nu ofer fiabilitate i nici disponibilitate prea
ridicate, ns este mai mare dect n cazul sistemelor centralizate. Caracterul local al
referinei este la un nivel acceptabil. Costurile de comunicaie sunt mai moderate.
Actualizrile i consultrile se fac eficient;
Baze de date replicate integral. Orice sit conine cte o copie a ntregii baze de
date. Caracterul local al referinei, disponibilitatea, securitatea i fiabilitatea sunt maxime.
Probleme ntmpinm la costul ridicat al echipamentelor de stocare, comunicaia
aglomerat n cazul actualizrilor. O rezolvare parial a acestor inconveniente ar fi
utilizarea instantaneelor, adic imagini ale bazei de date care se actualizeaz periodic.
Dezavantajul lor este c nu ntotdeauna ofer o situaie actualizat, iar n momentul
actualizrii se genereaz trafic mare pe reea;
Baze de date replicate parial sau selectiv. Anumite fragmente sunt replicate,
altele nu. Sunt replicate fie acele fragmente cu utilizare frecvent, fie relaii ntregi de
dimensiuni mici care nu merit s fie fragmentate, ci mai degrab memorate pe fiecare sit.
n aceast ultim situaie intr i acele relaii sau fragmente cu actualizri sporadice.
Aceast strategie este o mbinare a celor 3 enunate anterior. ncearc s le preia avantajele
i s le minimizeze dezavantajele. De aceea aceasta se implementeaz cel mai adesea.
Costurile de comunicaie i de stocare sunt relativ reduse. Caracterul local al referinei,
securitatea, fiabilitatea i disponibilitatea sunt apropiate de maxim. [Connolly et al. 2001]

Sisteme de baze de date distribuite

Replicarea favorizeaz performanele sistemului la consultare. Atunci cnd e ns


vorba de actualizri, replicarea poate constitui un impediment: se genereaz trafic
suplimentar, pot aprea inconsistene datorit indisponibilitii temporare a unei replici.

1.4 Proiectarea alocrii


Alocarea reprezint procesul de repartizare a fragmentelor pe situri. S presupunem c
avem un set de fragmente F = {F1, F2, ..., Fi, ..., Fn} ntr-o reea format din siturile S = {S1,
S2, ..., Sj, ..., Sm} i asupra crora se execut anumite aplicaii (interogri) Q = {q1, q2,

..., qk, ..., qq}. Problema proiectrii alocrii se refer la distribuirea optim cost minim,
performan maxim a fragmentelor F pe siturile S.
Alocarea poate s fie neredundant sau redundant. Alocarea neredundant este
cea mai ieftin n ceea ce privete efortul de proiectare i cea mai uor de realizat. Un alt
avantaj l confer posibilitatea de actualizare a fragmentelor. Realizarea unei astfel de
proiectri se bazeaz pe metoda celei mai bune alegeri, care stipuleaz c unei staii pe care
deja a fost plasat un fragment, nu poate s-i mai fie alocat un fragment nrudit. Alocarea
redundant este o problem de proiectare mult mai complex. Mai mult, att consultrile de
date ct i actualizrile sunt problematice. Exist dou variante de abordare a proiectrii n
acest caz:
2.2.1. Metoda selectrii. Identificarea acelor situri pentru care beneficiul
alocrii unei copii depete costul alocrii;
2.2.2. Metoda alocrii progresive. Se implementeaz mai nti o alocare
neredundant. Apoi, n funcie de gradul de profitabilitate al staiilor se vor rspndi replici
ale fragmentelor deja alocate, pn cnd nu mai exist candidai.
Suntem de prere c o abordare mai eficient, dar i mai selectiv, ar fi aplicarea
metodei celei mai bune alegeri i n etapa de proliferare a copiilor. Atta doar c se va ncepe cu
fragmentele considerate ca fiind cele mai importante, inndu-se cont la fiecare alocare de relaia
de rudenie a tuturor fragmentelor ce exist sau urmeaz a fi stocate ntr-un sit.

O arhitectur de referin a unui sistem distribuit

Dup o propunere iniial din partea grupului DataBase Task Group (DBTG) din 1971
de a standardiza sistemele de baze de date pe dou nivele schem i subschem n

1975 a fost abordat o arhitectur pe trei nivele: extern, conceptual i intern, care i-a
propus separarea viziunii utilizatorului de modul fizic de reprezentare a datelor. Astfel a
rezultat arhitectura ANSI-SPARC pentru sisteme centralizate, prin iniiativa comun a dou
organisme: Institutului Naional American pentru Standarde (ANSI) i Comitetul de
Planificare i Cerine privind Standardele (SPARC). Dei intenia era una de standardizare
a proiectrii acestor sisteme, arhitectura amintit s-a impus doar ca una de referin, larg
uzitat n mediile academice i chiar pragmatice ale bazelor de date. [Connolly et al. 2001]
Datorit complexitii domeniului bazelor de date distribuite fa de cele centralizate,
impunerea unei arhitecturi standardizate ar fi cu mult mai greu de realizat. Totui, ne
permitem s prezentm o astfel de variant (vezi Figura 6. 2).
Arhitectura este format din:
schemele externe globale, care reprezint viziunea fiecrui utilizator asupra sistemului;

Sisteme de baze de date distribuite

o schem conceptual global, adic o imagine complet a ntregii baze de date, fr


a ls mcar pentru vreun moment impresia c aceasta ar putea fi una distribuit;
schema de fragmentare, ce reprezint ideea proiectantului de partiionare a ntregii
baze de date;
schema de alocare se refer la modul de amplasare fizic a fragmentelor i replicilor
acestora n vederea deservirii optime a interogrilor i tranzaciilor sistemului distribuit;

Pentru fiecare sit avem o arhitectur ANSI-SPARC pe trei nivele:


schema de transformare reflect o armonizare de interese ntre fragmentele
amplasate conform schemei de alocare i vederile utilizatorilor bazei de date locale;
schema conceptual local este descrierea logic a bazei de date amplasate pe un
anumit sit;
schema intern local indic modalitatea de stocare a datelor locale (reprezentarea
fizic a bazei de date locale).

Figura 6. 2 O arhitectur de referin pentru un SGBDD9


Avem o singur baz de date cu o singur schem conceptual global. innd
cont de schema de fragmentare i de cea de alocare schema conceptual global este
implementat pe siturile sistemului distribuit. Fiecare sit prezint propria schem intern i
conceptual, precum i o schem de transformare local. Schemele externe sunt
independente de SGBD i asigur interfaa cu sistemul distribuit. Ele confer suport pentru
sistemele federative, despre care se va vorbi n subcapitolul Baze de date federative.

exemplu preluat din [Connolly et al. 2001], pagina 628

Sisteme de baze de date distribuite

Dup cum aminteam, arhitectura prezentat este una orientativ, de care se poate
sau nu, ine seama. n funcie de specificul sistemului distribuit, o serie de componente ale
acesteia pot fi ignorate.

1.6 Principiile lui C.J. Date referitoare la sistemele distribuite


Chris J. Date este autorul unor reguli 10 care privesc ndeaproape sistemele
distribuite. El a formulat un set de fapt, ad-literam, sunt dou seturi, o duzin de astfel
de principii pe care sistemele distribuite trebuie sau ar trebui s le respecte. Acestea sunt
completate de un principiu fundamental, intitulat Principiul 0, Regula 0, sau Regula
de aur. n cele ce urmeaz le vom trece succint n revist.
Principiul fundamental al bazelor de date distribuite stipuleaz c pentru
utilizator, sistemul distribuit trebuie s arate am completa noi: i s se comporte la fel
cu unul nedistribuit. [Date 2005]
Aadar, indiferent dac utilizatorul dorete s acceseze sau s prelucreze date care sunt
stocate n situl X, Y sau Z, acesta s nu perceap faptul c de oriunde i-ar lansa cererile

s spunem situl A, B sau C sistemul se comport n acelai mod ca i cum datele ar fi


fost locale (de pe A, B sau C), deci s nu trdeze faptul c ele au fost chemate din situl X, Y
sau Z. Conceptul fundamental este succint, ns prea sumar pentru un domeniu att de
complex precum sistemele distribuite. De aceea, autorul se simte obligat s fac o detaliere
a tuturor aspectelor de ordin mai tehnic, pe care regula de aur le presupune. Acestea sunt:
autonomia local, absena unei dependene de un sit central, operarea continu,
independena de fragmentare11, independena de localizare, independena de
replicare, prelucrarea distribuit a interogrilor, gestionarea distribuit a
tranzaciilor, independena de hardware, independena de sistemul de operare,
independena de reea i independena de sistemul SGBD.

1.7 Procesarea i optimizarea cererilor


La nceputuri, s-a lucrat destul de mult la capitolul prelucrare interogri pentru
bazele de date relaionale, deoarece acestea ofereau o gam generoas de oportuniti de
optimizare. Limbajul de interogare putea s fie bazat att pe algebr relaional, ct i pe
calcul relaional. n cazul limbajelor pe calcul relaional era necesar o faz suplimentar de
translatare a interogrilor n algebra relaional. Acum ns, n contextul sistemelor
distribuite, aceast etap este nglobat direct n sistem. [Gardarin & Valduriez 1989]
Potrivit aceleiai lucrri, procesarea interogrilor presupune 4 etape importante:
Descompunerea interogrilor, Localizarea datelor, Optimizarea cererilor globale i
Optimizarea cererilor locale.
Primele trei etape sunt executate la nivel centralizat, pe cnd ultima la nivelul
siturilor locale. Descompunere a interogrilor, mpreun cu localizare datelor sunt
considerate ca fiind modaliti de abordare a optimizrii cererilor globale. Mai mult, se
introduce i o extensie a algebrei relaionale intitulat algebra relaiilor calificate, utilizat
n optimizare.

aa au fost intitulate de ctre Date n prima lucrare pe aceast tem


n lucrarea original aceasta este prezentat dup independena de localizare

Sisteme de baze de date distribuite

1.8 Gestiunea accesului concurent n medii distribuite


Gestiunea tranzaciilor acoper problema accesului concurent i refacerea
sistemului n caz de defeciuni. Materialul de fa nu-i propune trecerea n revist a
protocoalelor care se refer la cel de-al doilea aspect al gestiunii tranzaciilor.
Fa de mediul cu prelucrare distribuit, ntr-un sistem de baze de date distribuite
protocoalele de acces sunt mai complexe, lucru care va putea fi observat i n cele ce urmeaz.

ntr-un sistem centralizat subsistemul tranzacional al unui SGBD este format din:
administratorul de tranzacii, planificator, administratorul de refacere i
administratorul de buffere (memorie-tampon). Administratorul de tranzacii dirijeaz
execuia tranzaciilor. n funcie de caracteristicile tranzaciei, planificatorul va hotr ce
strategie de control a concurenei se va impune n aceast situaie. Aceast strategie trebuie
s maximizeze gradul de concuren, fr ns s cauzeze interferen cu alte tranzacii.
Administratorul de refacere intervine atunci cnd execuia a fost ntrerupt sau perturbat
de anumite incidente. Rolul su este de a repune n funciune sistemul i de a aduce baza de
date n cea mai apropiat stare de consisten posibil. Administratorul de buffere
gestioneaz memoria tampon aferent execuiei tranzaciilor i asigur transferul
bidirecional ntre memoria de lucru i dispozitivul fizic de stocare.
Toate aceste componente exist n cadrul fiecrui sit al unui sistem distribuit. Pe
lng acestea mai avem i cte un administrator de tranzacii global sau coordonator de
tranzacii responsabil cu execuia tranzaciilor globale sau locale iniiate de situl respectiv.
Comunicarea dintre situri se realizeaz prin intermediul componentei de comunicaii de
date, care nu este specific procesului tranzacional.
n sistemele distribuite un mecanism de control al concurenei trebuie s fie
flexibil la cderile pariale ale sistemului, s permit un grad nalt de paralelism al
tranzaciilor n condiiile meninerii integritii bazei de date, s genereze un trafic
rezonabil al reelei i s nu suprasolicite resursele sistemului. [Kohler 1981]
Controlul concurenei tranzaciilor n cazul unui sistem centralizat se refer la
evitarea urmtoarelor posibile anomalii ce caracterizeaz execuia simultan a unor
tranzacii ce reclam aceleai resurse: actualizarea pierdut, dependena nefinalizat i
analiza inconsistent. O metod de evitare a acestora este transformarea accesului
concurent n acces secvenial. O soluie cu aplicabilitate doar teoretic, ns totui de
referin. Rezultatul execuiilor seriale este reperul n controlul corectitudinii execuiilor
paralele. Aadar, atunci cnd exist posibilitatea interferrii a dou sau mai multe tranzacii,
o planificare este considerat o soluie bun din acest punct de vedere dac i numai dac
rezultatul ei este identic cu al unei planificri seriale. O astfel de planificare se numete
serializabil. Identificarea tuturor sau doar uneia din aceste planificri n momentul
execuiei nu constituie o soluie pragmatic rezonabil. De aceea se recomand utilizarea
unor metode dovedite c garanteaz planificri serializabile. n funcie de gradul de
concuren al tranzaciilor dintr-un sistem, de probabilitatea de apariie a interferenelor i
de complexitatea i costul implementrii anumitor strategii se pot aplica metode pesimiste,
optimiste i mixte. [Sitar 2004-2], [Sitar 2004-3] i [Sitar 2005]
Pe lng anomaliile ce pot s intervin n cazul n care nu se aplic vreo metod
suplimentar de protecie, n mediul distribuit mai poate s apar problema incoerenei
copiilor multiple. Aceasta apare n special la bazele de date cu fragmente replicate total
sau parial, dar i atunci cnd e vorba de actualizarea dicionarelor sau cataloagelor.
Problematica tranzaciilor din cadrul unui sistem distribuit este ns mai complex. i
n sistemele distribuite, tranzaciile att cea global ct i cele locale trebuie s respecte

Sisteme de baze de date distribuite

proprietile ACID. Respectarea acestora se face cu sacrificii mai mari dect n cazul
sistemelor centralizate, aici existnd mult mai multe tentaii de eludare a lor. Cu ct ntr-un
sistem coexist n acelai moment mai multe tranzacii care i pot disputa aceleai date, cu
att gestiunea tranzaciilor devine mai complex. Tranzaciile globale, subtranzaciile
acestora i toate celelalte care ruleaz la un moment dat, trebuie s asigure transparena la
nivelul concurenei i a toleranei la defecte.
n sistemele distribuite controlul accesului concurent se poate face prin: blocare
(Protocolul 2PL centralizat, Protocolul 2PL de copie primar, Protocolul 2PL distribuit i
Protocolul de zvorre a majoritii) sau prin utilizarea mrcilor de timp.

1.9 Avantajele i dezavantajele sistemelor distribuite


Orice lucru are att avantaje ct i dezavantaje. O gndire raional se va orienta
evident spre acele lucruri ale cror avantaje sunt mai mari dac se poate chiar s surclaseze

dect dezavantajele. n general nu putem cuantifica raportul avantaje/dezavantaje la nivel


absolut. ntotdeauna n evaluarea calitilor sau defectelor se are n vedere un etalon. Putem
spune c un obiect este mai bun dect altul n funcie de un criteriu valabil n anumite
circumstane: loc, timp, cost, variante disponibile etc. n aceast categorie intr i sistemele
de baze de date distribuite, despre care ne permitem s afirmm c n general au mai multe
avantaje dect dezavantaje, rmnnd ns la latitudinea factorilor decizionali s stabileasc
dac un sistem distribuit i ce sistem distribuit ar fi soluia ideal pentru succesul afacerii
sale.
Autorii lucrrilor [Connolly et al. 2001] i [Gardarin & Valduriez 1989]
sintetizeaz avantajele i dezavantajele sistemelor distribuite. Dei cele dou materiale au
fost elaborate la un deceniu distan, problemele semnalate sunt n linii mari aceleai. Nu
vor lipsi nici opiniile autorului n legtur cu problematica abordat.
Avantajele se refer la urmtoarele aspecte:
Structura organizaional
Caracterul partajabil i autonomia local
Disponibilitate i fiabilitate crescute

Performane mbuntite
Dezvoltare modular
Economie.
Dezavantajele sistemelor distribuite sunt:
Complexitatea
Lipsa de standarde
Securitatea

Dificultatea controlului integritii i a concurenei


Lipsa de experien
Dificultatea de nlocuire sau schimbare.
Acestea sunt principalele beneficii i neajunsuri ale sistemelor de baze de date distribuite.

Sisteme de baze de date distribuite

1.10 Baze de date federative


1.10.1 Introducere
n ultimele decenii s-a manifestat o mod necesar am putea spune n ceea ce
privete sistemele de baze de date multiple, cunoscute n literatura de specialitate ca i
MultiDataBase Systems (MDBS).
Definiie: Sistemele de baze de date multiple reprezint un sistem de baze de date
distribuite n care fiecare sit pstreaz o autonomie total. [Connolly et al. 2001]
n general, rolul acestora este de a se interconecta logic mai multe sisteme de baze
de date n vederea atingerii unui el comun. Sistemele locale i pstreaz controlul complet
asupra bazei de date prin intermediul aplicaiilor existente. De aceea, sistemul global nu
poate aduce atingeri asupra structurii sau aplicaiilor care ruleaz local. Dialogul dintre cele
dou nivele se face prin intermediul unei interfee software i la nivelul datelor pe care situl
local consimte s le partajeze. Putem s avem sisteme de baze de date multiple n care nu
avem utilizatori locali. Acestea se numesc sisteme de baze multiple nefederative.
Principiul federalizrii, care s-a dovedit a fi un tipar comportamental att n cazul
organismelor biologice, dar i n comunitile de succes, poate fi de asemenea un curs firesc de
urmat i n cazul corporaiilor. Acesta presupune existena unor entiti mici care i pot ndeplini
autonom pe ct se poate cu putin sarcinile, fr a se abate att de la obiectivul individual,
ct i global de sporire a profitului i de micorare a costurilor. Dac principiul federalizrii este
acceptat ca un comportament strategic n viaa real, atunci de ce nu, i structurile informatice ar
putea fi supuse proiectrii conform aceluiai principiu. [Schmitt & Saake 2005] Fiecare
membru al federaiei este i va rmne independent att timp ct activitatea lui urmrete i
binele ntregii federaii. Ca principiu antreprenorial, federalismul promoveaz expansiunea clar
i difereniat a reelelor i proceselor corporatiste. Din punctul de vedere structural i
organizaional, sistemul federativ protejeaz mai micile entiti mpotriva coloilor, fr a fi
private de sprijinul de care au nevoie pentru desfurarea activitii i paradoxal conferindule un nivel ridicat de libertate.

Necesitatea n continu cretere de cooperare ntre diferite entiti impune un acces


integrat la baze de date distribuite heterogene, dar autonome. Acesta trebuie s confere
imaginea unei singure baze de date i necesit interconectarea sistemelor de baze de date
prin intermediul unei reele de comunicaii i suprapunnd un nivel software deasupra
sistemelor de gestiune a bazelor de date n vederea susinerii comunicrii, s partajeze
anumite date, ns s pstreze autonomia de la nivelul local. [W3C FDMS Group] La
nceputul anilor `90 integrarea diferitelor surse heterogene de informaii a devenit un
important i interesant domeniu de investigaie. Pn s se sedimenteze denumirea de
sisteme federative, n publicaiile acelor vremuri ele figurau fie ca next-generation
gateways, data access middleware, sau multi-database servers. Activitile din acest
domeniu i-au propus combinarea sistemelor informatice existente. Realizarea unei
integrri iscusite va permite accesul transparent la aceste sisteme heterogene.
Definiie: Un sistem de baze de date federative (FMDBS 12) este o colecie de
sisteme de baze de date colaborative care sunt autonome i posibil heterogene. [Sheth &
Larson 1990]
[Buch 2002] i [Nukpe 2001] susin ideea c bazele de date federative reprezint
unificarea logic a unor baze de date distincte ce ruleaz pe servere independente, (n general
12

Federated MultiDataBase System

Sisteme de baze de date distribuite


descentralizate geografic) fr partajare de resurse i conectate prin intermediul unui LAN.
Reprezentnd un sistem transparent i integrat de metabaze de date, ele modeleaz universuri
similare sau complementare [Bouguettaya 1998]. Ct timp bazele de date rmn autonome,
federalizarea constituie o alternativ viabil n raport cu principiul centralizrii. [Wikipedia

BDF]
Cea mai sugestiv exemplificare a conceptului o reprezint nsui Internetul, care,
la rndul su, reprezint un sistem federativ de dimensiuni mari.
Un sistem de baze de date federative al unei agenii de turism interconecteaz
sistemele unor tipuri de instituii cu domenii de activitate diferite (hoteluri, agenii de turism,
sisteme de rezervare etc). Din necesitatea de ntmpinare a nevoilor clientului, sunt necesare

i comunicarea cu bncile ofert de instrumente comode de plat, acordarea la faa locului


a unor eventuale credite pentru excursii, i chiar pentru verificarea bonitii clientului sau a
situaiei ncasrilor, tranzacii bancare cu partenerii i cu societile de asigurri (asigurri
medicale pentru strintate sau ar, a mijloacelor de transport proprii i pentru punerea la
adpost fa de situaii neprevzute ce pot rezulta din activitatea pe care o presteaz). Este
de la sine neles c activitatea partenerilor va fi autonom, adic agenia nu va putea
efectua orice i pentru oricine tranzacii bancare sau s modifice salariul angajailor din
hoteluri. elul comun al federaiei este de maximizare a profiturilor individuale i deci i a
celui global, ctigarea de noi clieni, reducerea timpilor de desfurare a unor tranzacii
obinuite etc.
Un sistem federativ reprezint o mbinare ntre un sistem distribuit i unul
centralizat, adic un sistem distribuit pentru utilizatorii globali i unul centralizat pentru cei
locali. Nu aderm ntru totul la aceast accepiune pe motivul c utilizatorii sistemului local
ar putea fi tot att de bine utilizatori ai unui sistem distribuit, iar n al doilea rnd un sit nu
i-ar putea permite libertatea s-i condiioneze virtualului nod central ce date i va pune la
dispoziie, ce tranzacii sau ce interogri i d voie s lanseze. Un al treilea punct de vedere
ar fi c dac am avea de-a face cu o cdere a nodului central, activitatea sitului nu are de ce
s fie ntrerupt.

1.10.2 Caracteristicile sistemelor federative


Potrivit lui Flix Saltor, exist trei elemente eseniale care caracterizeaz sistemele
federative:
Autonomia. Fiecare baz de date a fost proiectat autonom i i pstreaz
libertatea de a-i modifica sau nu design-ul; este liber s decid ce date i cui le va partaja,
precum i modul de gestionare al interogrilor i tranzaciilor provenite din exterior;
disponibilitatea datelor rmne din nou la latitudinea siturilor. Aceste nivele de autonomie
sunt descrise sub denumirile de: autonomie de proiectare, autonomie de comunicare,
autonomie de execuie. Atunci cnd se atinge autonomia deplin vom referi sistemele de
baze distribuite doar ca sisteme de baze de date multiple [Kosch 2000];
Heterogenitatea. Se concretizeaz n diferene de hardware, sisteme de operare, SGBD
(heterogenitate de sistem); modele de date i limbaje i dialecte (heterogenitate sintactic);
diferene n ceea ce privete modul de percepere a realitii, diferene conceptuale i de
reprezentare n cadrul bazelor de date (heterogenitate semantic). Un sistem federativ din cadrul
unei organizaii poate avea nodurile formate din maini cu tehnologii diferite avem laptop,
maini Mac, server, mainframe, desktop, staii de lucru, calculatoare generice

sunt conectate la o reea local de calculatoare. Heterogenitatea este completat i la nivelul

Sisteme de baze de date distribuite

bazelor de date care interopereaz, avnd fiiere clasice, baze de date ierarhice, reea,
funcionale, relaionale, obiectuale i obiect-relaionale.
Distribuirea. Aici nu este vorba doar de o singur baz de date distribuit, ci i de
un numr de baze de date separate ce pot fi localizate n diferite noduri ale unui sistem
distribuit [Saltor 1995], [Nukpe 2001].
Caracterul heterogen al datelor provenite din varii surse reprezint o mare i continu
provocare adresat tehnicii, de mai bine de un deceniu. S lum drept exemplu terminologia
bancar. Fiecare banc i are propriile denumiri i caracteristici pentru instrumentele de
creditare. Privite la nivel internaional, nsemnele monetare i ratele de schimb sunt de asemenea
diferite. S nu uitm i faptul cnd n lumea financiar se constituie acele consorii bancare, sau
sunt tot mai dese prelurile sau absorbiile unor bnci de ctre altele. Toate acestea sunt
premisele necesitii unei comunicri mai de suprafa sau mai n profunzime ntre acestea,
fr ca heterogenitatea s devin o barier informaional.
Faetele heterogenitii din cadrul bazelor de date multiple sunt uneori categorisite doar
n heterogenitate fizic i heterogenitate semantic. [Litwin 1988] Prima dintre ele se refer
la diferenele n reprezentarea datelor: unele sunt reprezentate ca ntregi, numere reale, iruri de
caractere, date calendaristice, reprezentri n virgul fix mobil cu simpl sau dubl precizie
.a.m.d.; sisteme de gestiune a bazelor de date (Oracle, Access, Visual Fox, Sysbase, Informix,
SQL Server, Paradox etc.); limbajul de interogare; modelul de date etc. Cel mai des utilizat
soluie pentru dobndirea interoperabilitii este utilizarea conexiunilor active la bazele de date
(ODBC13). Acest standard se folosete pentru omogenizarea bazelor de date relaionale, pentru
toate SGBDR-urile importante existnd cte un astfel de driver. Acum, o tabel sau interogare
definit n Access poate fi vizualizat/rulat fr probleme i n Oracle, Paradox, SQL Server
etc. n aceste condiii utilizatorii pot s uite c a existat heterogenitate fizic, atta vreme ct nu
exist conflicte ntre versiunile de drivere. n cazul unei diversiti mari de sisteme toate cele
din familia IBM DB2, Oracle, SQL Server, Sysbase, Informix, foi de lucru Excel, fiiere plate
se poate folosi produsul IBM DB2 Integrator, care le acoper pe toate acestea, n plus asigurnd
acces i asupra ODBC-urilor deja definite, servicii web i suport XML. Pentru browsere exist
un standard aflat deasupra ODBC-urilor clasice, i anume JDBC 14. Acesta permite rularea
interogrilor direct din appletele Java. JDBC asigur suport att pentru paginile, tabelele,
rapoartele sau formularele n format HTML, ct i pentru cele n format XML.

Cel mai popular concept, atunci cnd se vorbete despre interconectarea bazelor de
date heterogene, este wrapper-ul, uneori fiind cunoscut i cu denumirea de mediator.
Wrapper-ele sunt nite adaptoare, nite straturi software intermediare ce transparentizeaz
diferitele nivele ale heterogenitii. Heterogenitatea fizic poate fi mprit n urmtoarele
subcategorii: heterogenitate de hardware, heterogenitatea sistemelor de operare,
heterogenitatea modelelor de date, heterogenitate de limbaje de interogare,
heterogenitatea limbajelor de programare.
Heterogenitatea semantic se refer la numele obiectelor, valorile pe care pot s le
ia datele i structura conceptual. Un exemplu, ce-i drept puin utopic, care ar putea s
dezvluie o parte din problemele heterogenitii semantice, ar fi interconectarea sistemelor
educaionale naionale ntr-o federaie internaional. Dac vrem s analizm doar sistemul
de evaluare al elevilor, studenilor, masteranzilor, doctoranzilor etc. am constata c i n
cadrul aceleiai regiuni geografice modalitile de evaluare sunt heterogene: note,
calificative, admis/respins, premii, titluri dobndite. Asta ca s nu mai vorbim de stelue,
4.3.1
4.3.2

Open DataBase Connectivity


Java DataBase Connectivity

Sisteme de baze de date distribuite

buline roii sau negre, porcuori etc. utilizate n primele etape ale stadiului didactic. Fr a
trece la detalii de subtilitate semantic, privitoare la calitatea nvmntului, cantitatea i
nivelul de dificultate a materiei predate, pentru a putea face o comparaie ntre un sistem
sau altul, ne lovim de bariera sistemului de notare. Putem s avem note de la 1 la 10
(Romnia), n SUA avem A, B ..., n Ungaria i n fosta URSS aveam note de la 1 la 5. La
fel i n Germania, cu deosebire c 1 este nota cea mai bun. La fel, exist punctaje sau
baremuri de admitere. Pentru a se realiza o comparaie echitabil trebuie ca wrapper-ul s
in cont de aceste aspecte, precum i de multe altele, cum ar fi perioada de colarizare,
vrsta minim de colarizare etc. Aspectul semantic este foarte delicat, mai ales c n acest
domeniu nu se pot impune standarde.

1.10.3 Integrarea bazelor de date


Integrarea bazelor de date presupune un proces n urma cruia informaiile din
bazele de date participante pot fi nglobate ntr-o singur definiie coerent acceptat de un
sistem de baze de date federative. Este, de fapt procesul de constituire a schemei
conceptuale globale. Integrarea trebuie s se poat face ntre diferitele modele de date pe
baza crora bazele de date locale sunt constituite, fie c e vorba de cel relaional, ierarhic,
reea, orientat pe obiecte, sau obiectual-relaional.
Detalierea procesului de integrare a bazelor de date din cadrul unui sistem
federativ urmeaz n linii mari abordarea propus n materialul [Kosch 2000]. Integrarea
bazelor de date necesit parcurgerea a doi pai:
Translatarea schemei (sau pur i simplu translatarea), care nseamn translatarea
schemelor locale participante ntr-o reprezentare canonic intermediar comun.
Aceasta se refer la faptul c dac o baz de date local este reprezentat n modelul
ierarhic, iar alta n cel relaional, trebuie s se aleag o reprezentare comun. n cazul n
care alegerea a fost fcut n favoarea modelului relaional, atunci primului nod trebuie s-i
fie aplicat translatarea nspre modelul relaional;
Integrarea schemei se refer la aducerea tuturor modelelor canonice intermediare
ctre un model int, cel al schemei globale conceptuale.
Este recomandat ca ntreg procesul de integrare s fie asistat de ctre vreun
instrument software de integrare. Integrarea schemei conceptuale globale este o sarcin
primordial n proiectarea bazei de date federative, unde sistemele heterogene preexistente
necesit o integrare virtual prin furnizarea unei interfee omogenizate a bazei de date n
ansamblu. Cele mai frecvente metode de integrare sufer din cauza complexitii schemei
rezultate i din cauza gestionrii tardive a redundanelor din bazele de date. Nedetectarea
din timp a acestora poate conduce la pierderea controlului asupra sistemului.

1.10.4 Concluzii privind sistemele federative


Aadar, federalismul este un principiu structural i organizaional a crui
componente de baz, independente i autonome i unesc forele pentru a forma o structur
bine nchegat de nivel mai nalt care s combine ntr-o anumit proporie uniformitatea cu
diversitatea indispensabile asigurrii succesului organizaiei. [Schmitt & Saake 2005]
De mult vreme informaia este considerat un factor-cheie n industrie (i nu
numai), ea devenind necesar i pentru stabilirea relaiilor ntre sursele i serviciile deja
existente (de exemplu, pentru cuplarea sectorului administrativ cu cel de producie, ambele

Sisteme de baze de date distribuite

avnd deja baze de date). [W3C IDC #22542] Multe organizaii sunt nevoite s
interacioneze cu baze de date distribuite, preexistente, heterogene i autonome. Ele trebuie
s gseasc soluii care s fac posibil expansiunea bazelor de date i s promoveze
partajarea datelor ntre utilizatori i aplicaii, fr eforturi prea mari de implementare. Acest
lucru presupune o tehnologie ce furnizeaz o integrare selectiv, dar totui controlat a unor
astfel de baze de date. Bazele de date federative sunt capabile s ofere diferite nivele de
integrare, cu implicaii diverse asupra gradului de control n condiiile conservrii
autonomiei bazelor de date individuale. [Sheth 1991]
Ideea federalizrii a prins bine publicului, indiferent c este vorba de comunitatea
academic, de firme dezvoltatoare de tehnologii IT, sau de grupuri economice. Sistemele de
baze de date distribuite sunt de dorit, ns aria lor de aplicabilitate este relativ redus n
comparaie cu sistemele federative. Atunci cnd pornim o afacere mare care presupune o serie
de departamente, birouri, filiale, puncte de lucru dispersate geografic, ne vom construi cu
siguran un sistem distribuit. Pe parcurs ns, atunci cnd afacerea ta se ngemneaz cu o serie
de teri i i diversific domeniul de activitate, nu ne vom mai permite s reproiectm din
temelii sistemul informatic sau s-l actualizm n consecin, n baza concepiei iniiale.

Reproiectarea unui sistem de baze de date distribuite necesit n afar de resurse financiare
importante i o perioad destul de ndelungat de implementare. Cum lumea afacerilor se
mic i se schimb extrem de rapid, trebuie s gsim o soluie nu doar mai ieftin, ct mai
ales puin consumatoare de timp de implementare. Cu att mai mult cu ct relaiile cu unii
teri sunt sporadice i ntotdeauna se va ivi unul nou fa de care nu vom avea niciun interes
de a realiza o colaborare att de profund nct s necesite dezvoltarea unui sistem de
baze de date mpreun. n astfel de situaii soluia ideal este cea de construire a unui sistem
federativ peste sistemul nostru i cel al partenerilor de afaceri. Acest lucru nu va afecta
autonomia niciunuia dintre noi, fiecare avnd propria afacere, de cele mai multe cazuri
chiar total n domenii diferite. Aceeai abordare se impune i atunci cnd fuzionm cu alte
companii sau le prelum.
Bazele de date federative reprezint de multe ori suportul i pentru alte tehnologii,
precum depozitele, data mart-urile sau pieele de date, sisteme OLAP i OLTP, data mining,
baze de date multimedia, baze de date documentare, baze de date statistice etc. Ele pot fi
aplicate n orice domeniu de activitate, chiar i n cazul bibliotecilor on-line, sisteme GIS
(Geo-Information System) [Tuladhar 2005], afacerilor pe Internet 15, fie c vorba de simple
achiziii de bunuri sau de instrumente bancare, asigurri, marketing i multe altele.

1.11 Depozite de date


Derularea fenomenului economic asistat de calculator n cadrul organizaiilor a condus
la acumularea unor cantiti din ce n ce mai mari de date. Unele companii au considerat c
meninerea datelor arhaice constituie nici mai mult nici mai puin dect un balast pentru
derularea n bune condiii a activitii economice, pe motivul c o baz de date
supradimensionat cauzeaz deficiene n exploatare. Aceast afirmaie este adevrat n
condiiile n care rata de nnoire a sistemelor de calcul i a celor informaionale este una lent. O
alt categorie de firme a neles c nnoirea instrumentelor de susinere a activitii este
necesar. Odat cu acestea, dimensiunea bazei de date nu mai reprezenta o povar. Aa c, mai
mult sau mai puin intenionat s-au creat premisele constituirii unui depozit de date. Cei

15

pentru detalii se poate consulta referina [Sitar & Sitar 2001]

Sisteme de baze de date distribuite

care au neles c o analiz a datelor mai vechi este o cale spre succesul afacerii au ctigat
o lupt mut, dar important, cu concurena ignorant. nvarea din greelile trecutului prin
nerepetarea lor, precum i descoperirea unor abloane comportamentale care garanteaz
succesul constituie un avantaj.
Definiie: Depozitele de date (DW16) sunt colecii de date nevolatile, orientate spre
subiect, integrate, variabile n timp care sprijin managementul firmei n procedeul de luare
a deciziilor. [Inmon 1996]
Spunem c datele sunt nevolatile deoarece ale sunt reactualizate sporadic i meninute
n baza de date. Rareori avem de-a face cu actualizri de coninut, depozitele bazndu-se pe
inserri. Orientarea spre subiect se refer la faptul c depozitul graviteaz n jurul subiectelor
unei organizaii clieni, produse, vnzri i nu nspre domenii de aplicaie (facturare,
aprovizionare, desfacere etc.). Integrarea presupune nmagazinarea n acelai loc, ntr-o form
unitar i coerent a datelor provenite de la diverse subiecte sau activiti. Variabilitatea n timp
se refer la caracterul permanent dinamic al coninutului bazei de date, lucru ce confer o
instabilitate n timp a coninutului, neputnd afirma c ntre dou momente de timp mai
ndeprtate nu s-a ntmplat nimic semnificativ. [Connolly et al.

2001]
[Singh 1997] sintetizeaz diferenele i asemnrile dintre sistemele de
nmagazinare a datelor i cele de prelucrare on-line a tranzaciilor (OLTP 17):
Sisteme de nmagazinare a datelor
Pstreaz date istorice
Stocheaz date detaliate, rezumate pe diferite
nivele
Datele sunt n general statice
Prelucrare ad-hoc, nestructurat, euristic

Sisteme OLTP
Pstreaz date curente
Stocheaz date detaliate
Datele sunt dinamice
Prelucrare cu grad ridicat de
repetitivitate
Nivel nalt de transfer al tranzaciilor

Nivel mediu sau sczut de transfer al


tranzaciilor
Tipar de utilizare imprevizibil
Tipar de utilizare previzibil
Conduse prin analiz
Conduse prin tranzacii
Orientare spre subiect
Orientare spre aplicaii
Suport pentru decizii strategice
Suport pentru decizii de zi cu zi
Deservesc un numr relativ mic de utilizatori din Deservesc un numr mare de
administraie
utilizatori obinuii
Figura 6.3 Comparaie ntre sistemele de nmagazinare i cele OLTP

Un aspect deosebit de important este acordat memorrii i gestionrii metadatelor,


adic a datelor despre date. Rolul metadatelor este unul foarte nsemnat. Cu ajutorul datelor
putem s studiem proveniena i chiar ntreaga istorie a unui articol. Astfel putem afla
compartimentul de la care provine, data intrrii n depozit, modificrile suferite pn n
prezent, att valorice, ct i structurale etc.
Un depozit de date este reprezentat din structuri de date ce sunt optimizate n vederea
distribuirii lor n cadrul unei reele de calculatoare. Acesta colecteaz i nmagazineaz seturi de
date istorice din multiple sisteme operaionale, alimentnd ntre timp i una sau mai multe

Data Warehouse

On-Line Transaction Processing

Sisteme de baze de date distribuite

piee de date [W3C ODC]. Nu subscriem ntru totul la aceast ipotez deoarece modalitile
de elaborare a unui depozit pot s difere de modalitatea expus anterior.
Definiie: Pieele de date (DM18) sunt submulimi ale depozitelor de date,
particularizate n vederea ndeplinirii nevoilor unui departament sau care acoper un subiect.

[Inmon 1996]
Pieele de date sunt depozite de date cu caracter mai specific, care conin date
sumarizate ntr-o anumit msur, putnd astfel s rspund unor probleme formulate de
utilizatorii unui domeniu.
Att pentru realizarea unui depozit de date, ct i pentru exploatare acestuia, un
sistem relaional trebuie s ndeplineasc o serie de cerine referitoare la: performanele de
ncrcare, prelucrarea ncrcrii, administrarea calitii datelor, performanele interogrilor,
scalabilitatea la nivel de teraoctei sau chiar superioare, scalabilitatea la nivelul masei de
utilizatori, distribuirea depozitului n reea, administrarea depozitului de date, analiza
dimensional integrat, funcionalitatea interogrilor avansate. [Connolly et al. 2001] i
sistemele SGBDOO ar putea furniza rezultate bune.
Beneficiile nmagazinrii datelor sunt: o potenial rat ridicat de ntoarcere a
investiiilor, avantajul competitiv pe care-l pot oferi i sporirea productivitii organelor
decizionale. Dezavantajele sunt: subestimarea resurselor necesare pentru ncrcarea datelor,
probleme ascunse ale sistemului surs, euarea capturrii unor date, cerine sporite din
partea utilizatorului final, uniformizarea datelor, cerine mai mult dect modeste privind
resursele, proprietatea asupra datelor, gradul nalt de ntreinere, iniierea unor proiecte de
lung durat i complexitatea integrrii.
nmagazinarea datelor, prin intermediul creia volume imense de date sunt extrase,
n general prin intermediul unui proces batch, este un domeniu care dateaz de trei decenii.
Ea este susinut de tehnologii precum bazele de date distribuite, baze de date
federative, tehnologii Web etc. i constituie un suport solid pentru instrumentele de raportare

i interogare, dezvoltare de aplicaii, sisteme EIS 19, OLAP, data mining i altele.

Elemente privind prelucrarea analitic i de extragere a


datelor legate de baze de date distribuite i federative

1.12.1 Introducere
Procesul de nmagazinare al datelor nu trebuie privit ca o obligaie sau mod. n
aceste condiii informaia strns cu atta rvn reprezint o povar mai mult chiar, una
scump pentru organizaie. Informaia reprezint cel mai de pre lucru pentru procesul
decizional. n anii 80, n SUA s-a estimat c aproximativ 70% din timpul de lucru al
angajailor este destinat procurrii, utilizrii sau difuzrii de informaie. Constituirea
depozitelor de date trebuie s se fac pentru progresul companiei ntr-o manier care s
permit ctigarea unui avantaj competitiv.
Acumularea unui volum din ce n ce mai mare de date i stocarea pe un singur sistem
de calcul este o ipotez de neconceput. n primul rnd, chiar i cu explozia tehnologic din
ultima vreme, este greu de neles c ar putea exista o unitate de stocare care s nmagazineze
experiena de zeci de ani a unei companii de dimensiuni mai mari, cu activitate frecvent i

Data Mart
Executive Information System

Sisteme de baze de date distribuite


complex. Un alt motiv ar fi c riscul memorrii datelor ntr-un singur loc ar fi prea mare, o
defeciune minor putnd s pun capt unei activiti care dateaz de decenii. Mai mult, fr
existena unor copii de siguran orice atac informatic, act de sabotaj sau calamitate natural ar fi
fatal. Aadar, chiar dac volumul de date este imens, valoarea datelor necesit replicare.
Abordarea cu o baz de date local sau central ar genera regsiri mari consumatoare de timp
datorate dimensiunii mari a bazei de date i a operailor de arhivare/dezarhivare, i totodat ar
limita numrul utilizatorilor care s efectueze operaii concurente.

1.12.2 Instrumentele OLAP


Dup cum am vzut n subcapitolul anterior, bazele de date ale organizaiilor sunt
ntr-o continu cretere. Pentru a face fa nu numai operaiunilor de constituire a acestor
volume de date, ci i de exploatare viitoare trebuie s fim preocupai att de instrumentele
hardware, ct i de cele software. La volume imense de date de complexitate din ce n ce
mai mare anumite produse evident i sistemele relaionale dau bti de cap atunci cnd
se doresc rspunsuri prompte.
Aplicaiile din domeniul afacerilor, precum analiza pieei sau prognoza financiar, se
bazeaz pe scheme de baze de date orientate spre interogri. Acestea trebuie s confere o
imagine multidimensional, uor de interpretat i ct mai natural reprezentat. Aplicaiile de
acest gen au ca scop regsirea unui numr mare de nregistrri dintr-un imens bagaj de date i
posibilitatea de sumarizare din mers a acestora. Suportul pentru acest gen de operaii este
furnizat de ctre instrumentele OLAP. Termenul OLAP a fost inventat de E.F. Codd n

1993.
Definiie: Prelucrarea analitic on-line reprezint sinteza, analiza i consolidarea
dinamic a unor volume vaste de date multidimensionale. [Connolly et al. 2001]
OLAP este o tehnologie ce suport faciliti analitice asupra uneia sau mai multor
surse de date. n general, sistemele OLAP implic analiza datelor ce-i au originea n baze
de date tradiionale, dar au fost ulterior transformate n structuri multidimensionale pentru o
vizualizare i o analiz mai facil. De aceea, majoritatea instrumentelor OLAP au ca
platform sistemele de gestiune a bazelor de date multidimensionale (MDDBMS 20),
interfaa cu utilizatorul fiind personalizat

Instrumente OLAP multidimensionale sunt cele mai intuitive, mai fiabile, dar i cele
mai costisitoare material instrumente de prelucrare analitic. Sunt cunoscute n literatura de
specialitate sub acronimul MOLAP21. Ele sunt destinate n rezolvarea unor interogri care
furnizeaz rspunsuri multiple, facilitnd utilizatorului capacitatea de analiz, sintez i
comparaie. Atunci cnd vrem s aflm care sunt mediile generale ale studenilor facultii pe ani
de studiu, semestriale i anuale, pe specialiti n vederea comparrii rezultatelor cu situaiile din
anii precedeni, cel mai bine e s apelm la baze de date multidimensionale. Ulterior putem s
facem comparaii cu rezultatele obinute de facultile de profil din ar, de stat sau particulare,
n cadrul crora ntlnim secii similare. Sau, putem s agregm rezultatele n vederea crerii
premiselor de comparabilitate pe o anumit perioad a rezultatelor cu celelalte faculti ale
universitii. Dac interogarea trebuie s returneze doar rezultate simple: Care este media
general a studenilor de la secia de Informatic economic, anul 3 de studiu pe semestrul nti
al anului curent?, atunci nu se impune utilizarea bazelor de date multidimensionale. Pentru
aceste tipuri de interogri se pot folosi

Multi-Dimensional DataBase Management System


Multidimensional OLAP

Sisteme de baze de date distribuite

baze de date relaionale. Totui, bazele de date relaionale nu fac fa cu succes unor volume
de date mari. Dup [Connolly et al. 2001], un sistem relaional obinuit poate efectua
prelucrarea a ctorva sute de nregistrri pe secund, n timp ce unul multidimensional tipic
efectueaz mai mult de 10.000 de grupri pe secund. Astfel, la dimensiuni mari ale bazei
de date, pentru sistemele relaionale componenta On-Line a instrumentelor OLAP i va
pierde semnificaia.
n cadrul sistemelor multidimensionale, reprezentarea intuitiv a datelor se face
prin intermediul cuburilor de date. Atunci cnd numrul de dimensiuni devine mai mare de
3, avem de-a face cu cuburi n-dimensionale, sau simplu: hipercuburi. Reprezentarea
intuitiv a acestora va fi ns prea dificil de realizat. Cuburile de date sunt uor de extins
pentru noi dimensiuni. Navigarea prin intermediul cuburilor este facil.
Instrumente ROLAP22 au cunoscut cea mai puternic cretere dintre toate
instrumentele OLAP. Pentru a se conforma regulilor instrumentelor OLAP, tehnologia
ROLAP solicit definirea unui strat de metadate care i confer o imagine
multidimensional dinamic.

1.12.3 Data mining


Am construit depozite de date. Se pune ntrebarea fireasc: Acum ce facem cu
ele?. Neutilizarea potenialului oferit de ctre bazele de date de dimensiuni mari reprezint
o cale sigur spre eecul afacerii. ns, utilizarea acelor informaii pentru ceva mai mult
dect urmrirea istoricului afacerii, ncepe s aib sens ntr-un mediu de afaceri
concurenial raional. Am vzut c instrumentele OLAP ne ofer informaii pe care
interogrile simple ale bazelor de date nu le relev. Totui noi intim mult mai sus dect a
crea analize i comparaii multicriteriale.
Posibilitatea de a oferi consumatorilor acele tehnologii care le vor permite s
interogheze eficient bazele de date i s extrag efectiv surse de informaii va deveni un
factor determinant n alegerea tehnologiei noastre n raport cu cea a concurenei. Mineritul
datelor reprezint un imens potenial pentru tehnologia bazelor de date, precum i un
instrument profitabil n lumea modern a afacerilor.
Definiie: Extragerea datelor reprezint descoperirea automat a unor tipare
netriviale, anterior necunoscute i potenial folositoare, bine nrdcinate n bazele de date
[W3C Koundourakis].
Data mining, extragerea de cunotine sau mineritul datelor, const ntr-o analiz
automat a datelor electronice structurate, precum n cadrul unui depozit de date, cu intenia de a
descoperi tipare anterior necunoscute i relaii dintre date [W3C ODC] pentru a putea fi folosite
n adoptarea unor decizii importante necesare eficientizrii activitii economice.

Extragerea datelor difer fa de instrumentele OLAP i alte forme de analiz a


datelor conduse prin interogri, prin aceea c abloanele sau tiparele comportamentale sunt
determinate de ctre sistem prin utilizarea unor algoritmi statistici, astfel nct s se
dezvluie relaii pentru care utilizatorul nu este capabil s dezvolte interogri.
Clasificarea i descoperirea regulilor de asociere sunt dou componente ale
extragerii cunotinelor ce pot sprijini marketingul de exemplu, procesul de luare a
deciziilor i conducerea afacerilor [W3C Meadowcroft].
Extragerea datelor poate furniza avantaje importante organizaiilor care au deja
propriile lor depozite de date. Chiar dac mineritul este un domeniu relativ nou al tehnologiei

22

Relational OLAP

Sisteme de baze de date distribuite

bazelor de date, procesul de data mining este deja aplicat cu succes n diferite domenii,
printre care i cele exemplificate mai jos.
Comerul cu amnuntul/marketing
Identificarea tiparelor de cumprare ale clienilor
Gsirea de asociaii ntre caracteristicele demografice ale clienilor
Previziunea rspunsurilor la campaniile prin pot sau publicitate prin media
Analiza courilor de pia
Domeniul bancar
Detectarea tiparelor de utilizare frauduloas a crilor de credit
Identificarea clienilor loiali
Previziunea privind clienii care este probabil s-i schimbe afilierea crilor de
credit
Identificarea ablonului solicitantului de credite i particularizarea ofertei
Determinarea cheltuielilor din crile de credit pentru grupuri de utilizatori
Asigurri
Analiza solicitrilor
Previziunea clienilor care vor cumpra polie noi
Determinarea comportamentului fraudulos
Medicin
Caracterizarea comportamentului pacienilor pentru prognoza consultaiilor
chirurgicale
Identificarea terapiilor de succes pentru diverse boli
Stabilirea listelor de medicamente compensate
Connolly prezint principalele operaii de extragere a datelor. Acestea sunt:
Modelarea predictiv, Segmentarea bazei de date, Analiza legturilor i
Detectarea deviaiilor.
Toate cele 4 operaii expuse contribuie la procesul de data mining. n general se
poate folosi oricare dintre ele, sau asocieri de mai multe operaii. Totui, prin studiul
comportamentelor s-a constatat c anumite operaii dau rezultate mai bune n anumite
domenii. Spre exemplu, stabilirea profilului clientului este abordat prin segmentarea bazei
de date, apoi se aplic modelarea predictiv.

1.12.4 Concluzii privind prelucrarea analitic i extragerea datelor


Modelele de baze de date relaionale i multidimensionale deservesc multor
scopuri. Astfel, n timp ce primele se preteaz la operaii de citire-scriere, tranzacii,
activiti cu volum ridicat, celelalte se potrivesc pentru activiti de volum sczut, interogri
complexe i care se ntind peste cantiti enorme de date ce pot fi procesate simultan. n
timp ce bazele de date relaionale se bazeaz ca limbaj de interogare pe SQL, sistemele
MOLAP nu au nc un limbaj stabilit de comun acord. [W3C ODC]
Mineritul datelor reprezint descoperire automat a inteligenei din date brute stocate
pe diferite sisteme de calcul. Acest instrument este folosit pentru detectarea comportamentului
fraudulos n utilizarea crilor de credit sau a cartelelor telefonice, solicitrilor de despgubire
suspecte, determinarea tiparelor de clieni, segmentarea categoriilor de clieni etc. innd cont
de realitatea existenei datelor murdare n cadrul bazei de date, instrumentele de data mining
trebuie s fie foarte precaute. Tolerana la erori poate

Sisteme de baze de date distribuite

constitui un criteriu important n selectarea algoritmilor utilizai la extragerea datelor. Pn


nu demult, algoritmii de data mining se mulumeau s descopere tipare i tendine anterior
necunoscute, dar de mas. Noua generaie de algoritmi este preocupat i de descoperirea
unor comportamente i tendine excepionale, mai ales n condiiile actuale cnd se
urmresc riscurile de securitate, suspectarea posibililor teroriti, transferuri suspecte de
fonduri etc. Aadar, noii algoritmi trebuie s fie nzestrai cu capaciti de reele neuronale,
astfel nct s poat fi antrenai i n condiiile anterior amintite: date murdare, respectiv
comportamente excepionale. Fr a se ine cont i de astfel de considerente, n ziua de azi,
astfel de instrumente nu pot fi considerate a fi cu un grad nalt de fidelitate. [Kim 2002]
Ambele tehnologii se aplic asupra unor depozite sau piee de date. Cu ct
dimensiunea bazei de date relev mai multe tipuri de evenimente, experiena (volumul de
date i perioada de nmagazinare) este mai bogat, iar datele sunt ct mai curate, cu att
gradul de ncredere al rezultatelor obinute este mai mare. Acurateea acestuia permite
extrapolri de calitate. Orict de evaluate ar fi mijloacele moderne de stocare sau arhivare a
datelor, nu putem s concepem existena domeniilor de prelucrare analitic on-line i de
descoperire a cunotinelor, n absena unui mediu distribuit cu grad de heterogenitate
variabil i cu sfer de ntindere ct mai mare.

1.13 Bazele de date i Internetul


Dup cum ziceam ceva mai devreme, Internetul este cel mai vast sistem de baze de
date federative. De fapt, Internetul reprezint o reea mondial de calculatoare interconectate, n
timp ce prin termenul Web desemnm coninutul, adic nsi baza de date federativ.
Interesant asocierea, atta timp ct reeaua Internet a aprut i s-a dezvoltat exploziv fr s
aib legturi prea mari cu ceea ce reprezint bazele de date sau cu sistemele lor de gestiune.

Informaiile sunt fcute publice prin intermediul paginilor web, care reprezint o
colecie organizat de informaii textuale, imagini, sunete, video, n general integrat cu
ajutorul limbajului HTML. Paginile Web pot comunica cu alte pagini web datorit
hiperlegturilor pe care le conin. n Internet siturile comunic unele cu celelalte prin
interaciunea clienilor cu serverele.
Integrarea tehnologiei bazelor de date cu tehnologiile web este unul din paii
importani pe care i-a fcut tehnologia modern. Paginile sunt acum mai atractive, mai
dinamice i mai uor de administrat. Se reduce foarte mult redundana, chiar dac din
punctul de vedere al stocrii unui numr enorm de fiiere HTML, accesarea unei astfel de
pagini se face mai rapid dect prin interogarea unei baze de date.
Exist diverse modaliti de integrare a celor dou tehnologii, ns niciuna dintre
ele nu este unanim acceptat pentru rezolvarea problemelor de integrare. Mai mult, datorit
caracteristicilor protocolului HTTP nc nu se poate garanta o calitate i o securitate deplin
a mediului Internet. Serviciile oferite prin platforma web sunt destul de lente. Viitorul va
asigura ns soluii mai fiabile.
Apariia limbajului XML este un pas revoluionar n integrarea Web-SGBD.
Considerm c ntre domeniul bazelor de date distribuite i cel al tehnologiei Web va exista
o colaborare de lung durat. Anumite detalii ale acestei simbioze vor fi prezentate n
capitolele urmtoare.

Sisteme de baze de date distribuite

1.14 Conceptul de Big Data


1.14.1 Introducere
n ultimii ani, tot mai mult lume interacioneaz cu datele prin intermediul
dispozitivelor mobile inteligente, reelelor de socializare, n general al internetului. Zilnic,
2,5 EB (Exabytes, catralioane, 1018 octei) sunt create la nivel mondial. n raport cu
tendinele ultimilor ani, se poate afirma c 90% din totalul datelor existente apar n ultimii
2 ani, iar procesul este n dinamic [IBM BigData]. Volume din ce n ce mai mari se
acumuleaz mai ales automat datorit serviciilor GPRS, 23 sau mai nou 4G, a unei largi
varieti de senzori, sisteme de monitorizare, climaterice, date geospaiale, reele de
socializare, servicii email sau partajare diverse tipuri de media etc. Astfel, datele din jurul
nostru au cunoscut creteri exponeniale, ajungndu-se la nivelul anului 2012 ca Exabytes
de date, s poat fi totui procesate n parametri rezonabili de timp [Francis 2012]. Aceste
colecii de date, stocate i prelucrabile n vederea desfurrii n bune condiii a activitii,
oferire de servicii n limita termenilor agreai fa de terii implicai i a extragerii de
informaii utile pentru organizaie, poart termenul generic de Big Data.
Tot mai des, atunci cnd vorbim de Big Data, se remarc urmtoarele 4 caracteristici
cunoscute generic ca 4V 3 considerate de [Zikopoulos & Eaton 2011], n timp ce unii
autori constat c numrul declarat de 4 este exagerat, cnd de fapt poate fi surprins i cu
doar dou caracteristici [W3-Villa], dar mai cuprinztoare.
1111111
Volum: Datele ncearc s surprind ct mai fidel realitatea, de aceea
trebuie s fie mai detaliate, complexe, presupunnd un volum ridicat de atribute.
De asemenea, fenomenele repetitive necesit un volum ct mai mare de instane.
Chiar dac ambele caracteristici fac apel la volum, nu nseamn neaprat c
orice date care satisfac una sau chiar ambele valene privitoare la volum, pot fi
asociate cu conceptul de Big Data. S urmrim i celelalte caracteristici;
1111111
Vitez: datele cresc ca volum cu o vitez foarte mare. Viteza se refer nu
att la rata de cretere a volumului de date, ci la viteza cu care instrumentele sunt
capabile s proceseze aceste date, pentru a le putea face disponibile beneficiarilor,
ntr-un timp ncadrabil n limita parametrilor de calitate;
1111111
Varietate: Datele pot proveni din diverse surse i pot avea formate i
tipuri multiple: text, numere, date calendaristice, imagini, secvene de voce sau
video etc., semi- dar de cele mai multe ori nestructurate.
1111111
Veracitate (sau Valoare): O mic parte din volumul de date este
utilizabil n procesul decizional, ns aceste date luate individual nu au nicio
relevan fr aportul celorlalte. Aceast caracteristic se refer la veridicitatea
datelor, consisten, integritate i ncredere n ele.
Pentru a putea fi catalogate Big Data, coleciile de date trebuie s satisfac toate
caracteristicile menionate anterior.

23

General Packet Radio Service, un serviciu mobil de date orientat pe pachete n cadrul
sistemelor de comunicaii mobile

Sisteme de baze de date distribuite

1.14.2 Bazele de date NoSQL


Istoric
Termenul NoSQL este folosit pentru prima dat n 1998 i se refer la acele baze de date relaionale ce nu
folosesc SQL [Str10]. n 2009, Jon Oskarsson consfinete termenul n cadrul unei conferine din San Francisco,
iniiat de ctre susintorii teoriei bazelor de date nerelaionale, fiind mai apoi mediatizat de blogger-ul Eric
Evans [Evans 2009].
De acum, folosim denumiri precum NoSQL sau NOSQL (Not Only SQL).
Bazele de date NoSQL nu au schem i nu stocheaz date relaionale. Ele ridic problematici importante, legate de
consisten, durabilitate/persisten i gestiunea versiunilor.

La ora actual exist urmtoarele categorii de baze de date NoSQL:

Key-/Value-stores cel mai simplu model pentru date nestructurate. Foarte eficient
i flexibil. Dezavantaj: datele nu conin descrierea lor
Document databases pentru depozite XML i obiecte care se autodescriu. Stocarea n acest caz este
foarte ineficient. n aceast categorie ntlnim subtipurile urmtoare:
Baze de date relaionale cu faciliti XML: CLOB, XML mprit n mai multe tabele n funcie
de schema; SGBDR-uri care accept tipul ISO XML (Ex. IBM DB2, Microsoft SQL Server,
Access, Oracle Database, PostgreSQL)
Baze de date XML native.
Column-Oriented Databases (Baze de date pe coloane) model foarte bun folosit n cadrul
depozitelor de date pentru date rarefiate. Putem avea coloane grupate i agregate.
Graf [Oracle 2012] un model relativ nou, bun pentru parcurgerea relaiilor, dar nu pentru cutri
generale.

Materialul de fa nu i propune detalierea altor aspecte privitoare la bazele de date NoSQL.

Programarea front-end a site-urilor web


Autor: Daniel Mican
Front-end se refera la orice aspect al procesului de proiectare, al paginilor web,
care apare sau are legatura directa cu browser-ul. Dezvoltarea front-end
presupune design-ul interfetelor paginilor web. Urmatoarele activitati sunt, de
obicei, considerate a fi sarcini de front-end: design-ul grafic al interfetelor,
aranjarea si prezentarea informatiilor in vederea vizionarii in conditii optime;
crearea documentelor HTML si a foilor de stil CSS; integrarea functionalitatilor
oferite cu ajutorul scripturilor JavaScript.
HTML (Hypertext Markup Language) este folosit pentru structurarea paginilor
web. Exista cateva versiuni de HTML in uz astazi: HTML 4.01 este cel mai popular,
HTML5 este mai robust si castiga teren, iar incet incet se bucura si de sprijinul
browserelor. Ambele versiuni au o implementare mai stricta numita XHTML
(eXtensible HTML ), care este, in esenta, aceeasi limbaj dar cu o sintaxa mult mai
stricta. HTML nu este un limbaj de programare, este un limbaj de marcare, ceea
ce inseamna ca permite identificarea si descrierea diferitelor componente ale
unui document, cum ar fi titluri, paragrafe sau liste. Marcajul indica structura de
baza a documentului.
CSS (Cascading Style Sheets) este folosit pentru prezentare. In timp ce HTML
este folosit pentru a descrie continutul unei pagini web, rolul Cascading Style
Sheets (CSS) este de a descrie modul in care ar trebui sa arate continutul. In
designul web, modul in care arata pagina este cunoscut sub termenul de
prezentare. Asta inseamna fonturi, culori, imagini de fundal, linii de spatiere,
aspectul paginii, etc. Toate aceste elemente sunt controlate cu CSS. Cu cea mai
noua versiune (CSS3), putem adauga chiar efecte speciale si animatie paginilor
web.
JavaScript este folosit pentru a oferi interactivitate. JavaScript este un limbaj de
scripting care este utilizat pentru a adauga interactivitate paginilor web.
Interactivitatea consta in: validarea campurilor unui formular; schimbarea
stilurilor pentru un element sau chiar pentru intreg-ul site; determinarea
browserului sa isi aminteasca informatii despre utilizator pentru vititele viitoare;
construirea unor widget-uri de interfata, cum ar fi meniurile derulante. JavaScript
este utilizat pentru a manipula elementele din cadrul paginiilor web, a stilurilor
aplicate, sau chiar a browser-ului.

1. Marcarea si structurarea paginilor Web cu ajutorul


HTML
HTML (Hyper Text Markup Language) este un limbaj folosit pentru a descrie
paginile web. HTML este un limbaj de marcare alcatuit dintr-un set de tag-uri de
marcare. Tag-urile descriu continutul si structura documentului HTML.
Documentele HTML sunt alcatuite atat din tag-uri HTML cat si din text simplu.
Documentele HTML mai sunt numite si pagini web.
Tag-urile de marcare HTML sunt de obicei numite simplu, tag-uri HTML.
Acestea sunt cuvinte cheie inconjurate de paranteze unghiulare. Tag-urile HTML
sunt in mod normal prezente in perechi. Primul tag dintr-o pereche este tag-ul de
inceput, iar al doilea este tag-ul de final. Tag-ul de final este scris ca si tag-ul de
inceput, cu diferenta ca mai contine un slash inainte de numele tag-ului.
<numetag> Continut </numetag>

Un element HTML este tot ceea ce este intre tag-ul de start si tag-ul final,
inclusiv tag-urile. Tag-urile HTML si elementele HTML sunt adesea folosite pentru
a descrie acelasi lucru. Fiecare element spune browserului ceva despre
informatiile care se afla intre tag-ul de inceput si cel de sfarsit.
element HTML
<p> Acesta este un
paragraf.</p>

Tag-urile HTML pot contine atribute. Atributele furnizeaza informatii


suplimentare cu privire la elemente HTML. Atribute sunt intotdeauna specificate
in eticheta de start si vin in perechi. Adica fiecarui nume de atribut ii este
atribuita si o valoare.
<tag numeatribut = "valoare"> ... </tag>
Valorile atributelor trebuie sa fie intotdeauna cuprinse intre ghilimele. Ghilimele
duble sunt cele mai comune, dar sunt de asemenea permise si cele simple. Tagurile HTML pot contine mai multe atribute si valori ale acestora. La marcatorii
simetrici, atributele sunt descrise in eticheta de deschidere:
<tag atribut1="valoare1" atribut2="valoare2" .... atributN="valoareN">...
</tag>

1.1. Documentele HTML


Structura unei pagini HTML poate fi vizualizata in figura de mai jos:

Orice document HTML se redacteaza intr-un editor de texte, si se salveaza ca text


ASCII standard, cu extensiile .html sau .htm. Textul ASCII trebuie cuprins in
marcatorul (chiar daca multe browsere tolereaza lipsa sa): <html>...</html>.
Numele tagurilor, atributelor si numele valorilor atributelor sunt case-insensitive.
Totusi World Wide Web Consortium (W3C) recomanda valori lowercase pentru
taguri, atribute si valori in recomandarile HTML 4. Noua versiune (X)HTML solicita
si valori lowercase pentru taguri.
Fiecare document are doua sectiuni principale, o sectiune de antet si una de corp,
generate de marcatorii pereche <head>... </head> pentru antet si <body>...
</body> pentru corp. Un exemplu de document HTML poate fi observat in cele ce
urmeaza:
<!DOCTYPE html>
<html>
<head>
<title>Acesta este un
titlu</title> </head>
<body>
<h1>Acesta este un
heading</h1> <p>Acesta
este un paragraf.</p>

<b>Acesta este un text


boldat.</b>
</body>
</html>

In exemplul de mai sus declaratia DOCTYPE defineste tipul de document. Textul


intre <html> si </html> descrie pagina web, cel intre <head> si </head> este
continutul invizibil al paginii, iar cel intre <body> si </body> este continutul
vizibil al paginii. Textul continut intre <title> si </title> este afisat ca un titlu in
browserul web. Textul intre <h1> si </h1> este afisat ca un titlu in pagina
HTML, iar textul continut intre <p> si </p> este afisat ca un paragraf.
Dupa redactare si salvare, documentul HTML trebuie deschis cu ajutorul unui
browser. Scopul unui browser web (cum ar fi Google Chrome, Internet Explorer,
Firefox, Safari), este de a citi documentele HTML si a le afisa ca pagini web.
Browser-ul nu afiseaza tag-uri HTML, dar foloseste tag-urile pentru a determina
modul in care continutul paginii HTML trebuie prezentat / afisat utilizatorilor.
In sectiunea de antet <head>1 se introduc informatii despre autorul
documentului si titlul sau (tagul: <title>...</title>). Majoritatea browserelor Web
afiseaza continutul din title in bara de titlu si stocheaza acest titlu atunci cand
utilizatorul salveaza adresa paginii, ca semn de carte sau intr-o lista de interes.
Din aceste motive se recomanda folosirea unor titluri cat mai semnificative, unice
care trebuie sa contina numai text simplu.
Elementul <head> este un container pentru o serie de elementele componente.
Elementele ce il compun pot include scripturi, instructiuni browser, style sheets,
meta informatii. Astfel aici vom intalni urmatoarele taguri: <title>, <link>,
<style>, <script>, <noscript>, <meta>, si <base>. Antetul contine, de obicei, si
corpul functiilor-handler si ale altor scripturi. Comentariile se includ in marcatorul
<!--....--> si pot contine scripturi Java Scrit, Jscript, PHP, ASP, care bor fi ingorate
de browserece care nu poseda configuratii adecvate.
Corpul unui document trebuie sa fie cuprins integral intre tag-urile
<body>...</body> si este format din informatia nestructurata, textuala, care se
scrie ca in orice document ASCII, dupa care este structurata prin includerea
anumitor portiuni in marcatori simetrici si formatata prin stabilirea de atribute
pentru anumiti marcatori. Textul neformatat este considerat de catre browsere
plain text, afisat intr-un singur sir, trecandu-se la o noua linie doar cand se ajunge
la marginea ferestrei, fontul folosit la afisare este fontul implicit setat in browser.
Listele sunt enumerari de item-uri. Listele pot fi ordonate (<ol>), neordonate
(<ul>) sau liste de definitii (<dl>). In cadrul primelor doua categorii, item-urile
sunt delimitate cu marcatorul vid <li>. Listele de definitie folosesc doi marcatori,
unul pentru termen (<dt>) si unul pentru definitie (<dd>).
<ol>

</ol>
<ul>

</ul>
<dl>

</dl>

<li>Alexandra
</li>
<li>Mihai</li
>
<li>Alexandra
</li>
<li>Mihai</li
>
<dt>Alexandra</dt>
<dd>- are ochii
albastri</dd>
<dt>Mihai</dt>
<dd>- are ochii verzi</dd>

Structurarea suprafetei de afisare impune impartirea documentului in zone de


continut. Aceste zone pot fi delimitate fie prin tabele, fie prin cadre. Tabelele sunt
definite cu tag-ul <table>.

Lucia Rusu, Robert Buchmann, Dezvoltarea aplicaiilor WEB, Editura


Risoprint, 2004

Un tabel este impartit in randuri cu tag-ul <tr>. Un rand este impartit in celule
de date cu tag-ul <td>. Un rand poate fi, de asemenea, divizat in titluri cu tag-ul
<th>. Elementele <td> sunt containerele de date din tabel. Elementele <td>
poate contine tot felul de elemente HTML, cum ar fi text, imagini, liste, alte
tabele, etc. Formatarea unui tabel poate fi realizata folosind CSS.
In cele ce urmeaza prezentam cele mai importante tag-uri HTML pentru lucrul cu
tabele:
<table>
<th>
<tr>
<td>
<thead>
<tbody>
<tfoot>

defineste un tabel
defineste o celula antet intr-un tabel
defineste un rand intr-un tabel
defineste o celula intr-un tabel
grupeaza continutul din antetul unui tabel
grupeaza continutul din corpul unui tabel
grupeaza continutul din subsolul unui tabel

Mai jos prezentam un exemplu de folosire a tagurilor pentru afisarea unui tabel
cu doua linii. Prima linie este impartita in doua celule, iar cea de-a doua linie
contine o singura celula.
<table bordercolor="blue"
border="5"> <tr>
<td background="imagine.gif">celula 1
rand 1</td> <td>celula 2 rand 1</td>
</tr>
<tr>
<td colspan="2">celula 1 rand 2</td>
</tr>
</table>
Un iframe este folosit pentru a afisa o pagina web in cadrul unei alte pagini web.
Mai jos URL-ul indica locatia paginii care va fi apelata si deschisa in cadrul iframeului. Sintaxa pentru a adauga un iframe este:
<iframe src="URL"> </iframe>
Pentru formatarea unui iframe se folosesc stilurile CSS. Cele mai importante
atribute pe care le poate contine un iframe sunt prezentate in continuare:
src
srcdoc
height
width

specifica adresa URL a documentului care va fi incorporat in


<iframe>
specifica continutul HTML al documentului care va fi incorporat in
<iframe>
specifica inaltimea unui <iframe>
specifica latimea unui <iframe>

Link-urile permit utilizatorilor sa navigheze de la o pagina la alta. Un link se


creaza cu ajutorul tag-ului HTML <a>, care defineste un hyperlink. Un hyperlink
(sau link-ul) poate fi reprezentat de catre un cuvant, grup de cuvinte, sau o
imagine pe care se poate da clic pentru a trece la un alt document. Cand se
deplaseaza cursorul pe o legatura intr-o pagina Web, sageata se va transforma
intr-o mana mica. Cel mai important atribut al elementului <a> este atributul
href, care specifica destinatia link-ului. Pe langa acesta atributul target specifica
unde sa se deschida documentul HTML spre care este adaugata legatura. Valorile

pe care le poate lua sunt urmatoarele: _blank, _parent, _self, _top. Codul HTML
pentru un link se poate vedea mai jos:
<a href="URL" target="_blank">Textul link-ului /
Imagine</ a>

In cadrul tag-ului <a>, atributul id poate fi folosit pentru a crea un marcaj in


interiorul unui document HTML. Marcajele nu sunt afisate in nici un fel special si
sunt invizibile pentru cititor. Un marcaj are urmatorul cod:
<a id="semncarte">Ati ajuns la semnul de carte</a>
Un link catre semnul de carte, existent in cadrul aceluiasi document HTML, se
adauga folosind urmatorul cod:
<a href="#semncarte">Click aici pentru a merge la semnul de carte</a>
In cazul in care se doreste adaugarea unui link catre semnul de carte de pe un alt
document HTML codul este:
<a href="pagina.html#semncarte">Click aici pentru a merge la semnul de carte
</a>
In HTML, imaginile sunt definite cu tag-ul <img>. Tag-ul <img> este gol, ceea
ce inseamna ca aceasta contine doar atribute si nu are nici o eticheta de
inchidere. Pentru a afisa o imagine pe o pagina, trebuie sa utilizam atributul src.
Src vine de la "sursa". Valoarea atributului src este URL-ul imaginii pe care dorim
sa il afisam. Sintaxa pentru definirea unei imagini se poate vedea mai jos:
<img src="url" alt="titlul sau descrierea imaginii">
URL-ul contine locatia la care este stocata imaginea. Daca dorim sa afisam intr-un
document HTML o imagine cu sigla FSEGA, logo.png, situat in directorul /img/ de
la "www.econ.ubbcluj.ro" are URL-ul: http://www.econ.ubbcluj.ro/img/logo.png.
Pentru formatarea imaginilor se recomanda folosirea stilurilor CSS. Cele mai
importante atribute ale tag-ului <img> pe care le poate contine o imagine sunt
prezentate in continuare:
src
alt
height
width

specifica adresa URL a unei imagini


specifica un text alternativ pentru imagine si va fi afisat in cazul in
care imaginea
nu poate fi afisata
specifica inaltimea unei imagini
specifica latimea unei imagini

1.2. Interactivitatea cu clientul prin intermediul formularelor


Formularele au fost introduse in HTML pentru a sigura schimbul de informatii intre
client si server. Formulare preiau datele de la utilizator si sunt trimise spre a fi
procesate de catre scripturi pe partea de server.
Modul de functionare al formularelor este urmatorul:
1: utilizatorul completeaza formularul si apasa butonul de trimitere (se trimit
informatiile din formular catre server);
2: numele fiecarui control impreuna cu valorile introduse/selectate sunt
trimise catre server;
3: serverul proceseaza informatiile prin intermediul unui script care se afla si
ruleaza pe partea de server;
4: serverul creaza o noua pagina raspuns pe care o trite utilizatorului.

Un formular HTML se va afla tot timpul intre tag-urile <form> ... <form> si se
introduce astfel:
<form action="url-al-unui-script-aflat-pe-server"
method="get||post"> elemente de input
</form>
Atributul action indica URL-ul fisierului care va prelua, pe partea de server,
datele formularului. Acele fisiere pot fi constituite din scripturi CGI, ASP, PHP, etc.
Atributul method indica metoda de transfer, POST sau GET. Cu metoda POST
valorile sunt trimise prin intermediul antetelor HTTP, sau transfera un flux de
octeti la bufferul de intrare al serverului. Cu metoda (GET) datele sunt codificate
intr-un sir de caractere care se alipeste URL-ului specificat in action. URL-ul
scriptului de prelucrare contine un sir de caractere ce incepe cu ?, continua cu
perechi de forma numeElementFormular = valoareElementFormular, despartite
prin &. Acest sir de caractere va fi preluat pe server, de catre scripturile aflate pe
server, in vederea prelucrarii informatiilor.
In figura urmatoare se poate vedea cum se trimit datele din formularul de mai
sus prim metoda GET.

http://www.econ.ubbcluj.ro/~daniel.mican/script.php?
nume=daniel+mican&email=daniel.mican%4 0econ.ubbcluj.ro

Metoda GET este bine sa se foloseasca pentru:

formulare scurte (cum ar fi casetele de cautare);

atunci cand se primesc date de la serverul web (nu se recomanda


trimiterea de informatii care ar trebui sa fie adaugate sau sterse dintr-o
baza de date).

Metoda POST este bine sa se foloseasca in cazul in care formularul:

4:
5:
6:
7:

permite utilizatorilor sa incarce fisiere;


contine foarte multe elemente de input;
contine date sensibile (de exemplu parole);
adauga / sterge informatii dintr-o baza de date.

Intre etichetele <form> se include textul formularului si elementele sale. Un


eveniment important tratat in scripturi se ferera la actiunea de trimitere
(Submit), asociat cu actiunea specificata in action.
In cele ce urmeaza prezentam cele mai importante atribute pentru tag-ul
<form>:
acceptcharset

specifica codificarile de caractere care urmeaza sa fie utilizate


pentru trimiterea
formularului
specifica unde sa se trimita datele din formular atunci cand se
action
apasa pe butonul
de trimitere
autocomplet specifica daca un formular ar trebui sa aiba autocomplete activat
e
sau nu
specifica modul in care datele din formular ar trebui sa fie
enctype
codificate atunci cand
sunt trimise spre server (numai pentru metoda = "post")
specifica metoda HTTP ce va fi utilizata pentru trimiterea datelor
method
din formular
name
specifica numele unui formular
specifica daca formularul nu ar trebui sa fie validat atunci cand se
novalidate
apasa pe
butonul de trimitere
specifica unde sa afiseze raspunsul care este primit dupa
target
trimiterea formularului
Un formular HTML poate contine mai multe tipuri de elemente de intrare, cum ar
fi: campurile de tip text, liste derulante, legende, elemente de etichetare, casete
de selectare, butoane radio, butoane de trimitere / resetare.
Fiecare control din cadrul unui formular are rolul de a aduna si transmite
informatie pe server. Pentru a sti carui element ii apartine o data care a fost
trimisa pe server, fiecare element de input trimite un nume si o valoare. Aceasta
valoare poate fi introdusa (campuri de tip text) sau aleasa (liste derulante,
butoane radio) de catre utilizator, dintr-un set de raspunsuri predefinit.
nume

valoare

nume = daniel mican


email = daniel.mican@econ.ubbcluj.ro
Cel mai important element din cadrul unui formular este elementul <input>.
Elementul <input> este folosit pentru a capta informatii provenite de la utilizator.
Un element <input> poate varia in mai multe moduri, in functie de atributul type.
Un element <input> poate fi un camp de tip, caseta, parola, buton radio, buton
de trimitere, etc.
Cele mai frecvente tipuri de elemente de tip <input> sunt descrise mai jos:

<input type="text">
<input
type="password">
<input
type="radio">
<input
type="checkbox">

defineste un camp de introducere ce se intinde pe o linie,


in care
utilizatorul poate introduce text;
defineste un camp de tip parola;
defineste un buton radio. Butoane radio permit unui
utilizator sa
selecteze doar o singura optiune dintr-un numar limitat
de optiuni;
defineste o caseta de selectare. Casete de selectare
permit unui
utilizator sa selecteze zero sau mai multe optiuni dintr-un
numar
limitat de optiuni;

<input
type="submit">
<input
type="button">

defineste un buton de trimitere;


defineste un buton pe care se poate da click (de obicei se
utilizeaza
impreuna cu JavaScript pentru a rula un script);
<input type="color"> defineste un selector de culoare;
<input type="date"> defineste un control de tip data (an, luna si zi);
<input
defineste un control de tip data impreuna cu unul de tip
type="datetime">
timp (an,
luna, zi, ora, minut, secunda, si fractiune de secunda, in
functie de
fusul orar UTC );
<input
type="email">
defineste un camp pentru o adresa de e-mail;
defineste un camp pentru selectarea fisierelor si un
<input type="file">
buton "Browse..."
(pentru incarcarea fisierelor);
<input
type="hidden">
defineste un camp de introducere ascuns;
<input
defineste o imagine ce va fi setata ca buton de
type="image">
trimitere a
formularului;
defineste un buton de resetare (reseteaza toate valorile
<input type="reset"> unui formular
la valorile implicite);
defineste un camp pentru introducerea unui numar de
<input type="tel">
telefon;
<input type="url">
defineste un camp pentru introducerea unui URL.
Elementul <input type="text"> defineste un camp de introducere care se
intinde pe o singura linie, in care utilizatorul poate introduce text. Atributul name
este folosit pentru a prelua, pe server, valorile trimise prin intermediul
formularului. Atributul size este folosit pentru a specifica latimea formularului (se
recomanda evitarea lui si folosirea CSS). Artibutul maxlength este folosit pentru a
limita numarul maxim de caractere pe care utilizatorul le poate introduce.
Nume <input type="text" name="nume" size="25" maxlength="50" />

Elementul <input type="password"> defineste un camp de tip parola. Este


similar cu tipul text, cu diferenta ca mascheaza caracterele.
Parola <input type="password" name="parola" size="25" maxlength="50" />

Elementul <input type="hidden"> defineste un camp de introducere ascuns.


Aceste controale nu sunt afisate in cadrul formularului. Acestea pot fi vazute doar
in cazul in care se vizualizeaza sursa paginii HTML.
<input type="hidden" name="cod" value="acesta valoare este trimisa pe
server">

Elementul <input type="file"> defineste un camp pentru selectarea fisierelor si


un buton "Browse..." (pentru incarcarea fisierelor). Permite alegerea si incarcarea
fisierelor grafice, video, mp3, pdf, etc.
<input type="file" name="fisier" />

Elementul <input type="submit"> defineste un buton de trimitere. Un buton de


trimitere este folosit pentru a trimite datele din formular catre un server. Datele
sunt trimise la pagina specificata in atributul action al formularului. Fisierul definit
in atributul action preia datele de intrare trimise si de obicei le introduce intr-o
tabela din cadrul bazei de date.

<input type="submit" name="trimite" value="Trimite formular" />

Elementul <input type="reset"> defineste un buton de resetare


(reseteaza toate valorile unui formular la valorile implicite).
<input type="reset" value="Resetati">

Tag-ul <textarea> defineste un control de introducere a textului pe mai multe


linii. O zona de text poate contine un numar nelimitat de caractere, chiar daca se
specifica un numar de coloane si linii. Dimensiunea unei zone de text pot fi
specificata cu ajutorul atributelor cols si rows. Sau chiar se recomanda folosirea
proprietatilor CSS, height si width. In cazul in care se doreste introducerea unei
valoari implicite, aceasta va fi pozitionata intre cele doua tag-uri
<textarea>...</textarea>.
<textarea name="observatii" rows="5" cols="30"> valoare implicita
</textarea>

Elementul <select> este folosit pentru a crea o lista derulanta. Tag-urile


<option> din interiorul elementului definesc optiunile disponibile in cadrul listei.
Tag-ul <optgroup> este folosit pentru a grupa optiunile in cadrul listei. In cazul in
care o lista contine un numar mare de optiuni, gruparea optiunilor este
recomandata pentru ca acestea devin mai usor de manevrat pentru utilizatori.
Cand tributul selected este prezent in cadrul tag-ului <option>, optiunea devine
implicita. Atributul value ataseaza o valoare elementului listei care va fi trimisa,
in cazul in care se selecteaza optiunea.
<select>
<option
value="Garsoniera">Garsoniera</option
> <optgroup label="Apartament">
<option value="1 camera" selected>1
camera</option> <option value="2
camere">2 camere</option> </optgroup>
</select>

Tag-ul <fieldset> este folosit pentru gruparea elementelor in cadrul unui


formular. Tag-ul <fieldset> deseneaza o caseta in jurul elementelor pe care le
grupeaza. Tag-ul <legend> defineste o legenda pentru elementul <fieldset>.
<form>
<fieldset>
<legend> Detalii personale:
</legend> Nume: <input

type="text" name="nume">
</fieldset>
</form>

HTML5 a introdus noi controale care pot fi folosite in cadrul formularelor pentru a
standardiza modul in care unele informatii sunt colectate. Browserele mai vechi,
care nu recunosc aceste elemente, le vor trata la fel ca pe un simplu element de
tip text. Totusi, browserele unor smartphone-uri isi modifica tastatura in functie
de tipul elementului de input astfel incat sa se optimizeze introducerea datelor.
Elementul <input type="date"> defineste un control de tip data (an, luna si zi).
Daca s-a folosit un element de tipul date browserul se va verifica daca utilizatorul
a furnizat informatii in formatul corect pentru data.
<input type="date" name="data_eveniment" />

Elementul <input type="datetime"> defineste un control de tip data impreuna


cu unul de tip timp (an, luna, zi, ora, minut, secunda, si fractiune de secunda, in
functie de fusul orar UTC ).
<input type="datetime" name="data_ora_eveniment" />
Elementul <input type="email"> defineste un camp pentru o adresa de e-mail.
Daca s-a folosit un element de tipul email browserul se va verifica daca
utilizatorul a furnizat informatii in formatul corect al unei adrese de e-mail.
<input type="email" name="adresa_email" />

Elementul <input type="url"> defineste un camp pentru a introduce un URL.


Daca s-a folosit un element de tipul url browserul se va verifica daca utilizatorul a
furnizat informatii in formatul corect al unei adrese web/URL.
<input type="url" name="adresa_site" />

2. CSS (Cascading Style Sheets)


CSS este un standard W3C pentru definirea prezentarii documentelor scrise in
HTML. Prezentarea se refera la modul in care documentul este afisat in browser
pentru utilizator. Datorita faptului ca CSS se ocupa de stilizarea si prezentarea
documentelor, HTML se poate ocupa de definirea structurii documentului, asa
cum este prevazut.
CSS este un limbaj separat cu propria sintaxa. Stilurile CSS au rezolvat o mare
problema si salveaza o multime de timp in cadrul activitatilor de dezvoltare a
site-urilor web. Acest lucru pentru faptul ca HTML nu a fost destinat sa contina
tag-uri pentru formatarea documentelor. HTML a fost destinat sa defineasca
continutul si structura unui document.
In HTML 4.0, toate formatarile pot fi eliminate din document HTML si stocate intr
-un fisier CSS extern. Acest lucru este chiar recomandat pentru ca toate
browserele din zilele noastre suporta CSS. CSS defineste cum vor fi afisate
elemente HTML. Stilurile sunt in mod normal, salvate in fisiere CSS externe. Foile
de stil externe permit schimbarea aranjarii si aspectului tuturor paginilor dintr-un
site, prin editarea unui singur fisier CSS.
CSS functioneaza prin asocierea unor reguli elementelor HTML. Aceste reguli
reglementeaza modul in care ar trebui sa fie afisat continutul elementelor
specificate. O regula CSS contine doua parti: un selector si o declaratie.
declaratie
selector { proprietate: valoare; }

Selectorii indica carui element i se aplica regula. Aceeasi regula se poate aplica
la mai mult de un element, daca numele elementelor sunt separate prin virgule.
Declaratiile indica cum ar trebui sa fie stilizate elementele mentionate prin
intermediul selectorului. Declaratiile sunt impartite in doua parti (o proprietate si
o valoare), fiind separate prin punct si virgula.
Proprietatile indica aspectele elementului pe care dorim sa le modificam. De
exemplu, culoarea, fontul, latimea, inaltimea sau bordura.
Valorile specifica setarile pe care dorim sa le utilizam pentru proprietatile alese.
De exemplu, daca dorim sa modificam proprietatea culoare, atunci valoarea este
culoarea pe care dorim sa o aiba textul din elementele selectate.
Pentru un selector se pot adauga mai multe declaratii. Acestea vor fi adaugate
intre cele doua acolade si vor constitui un bloc de declaratii. Pentru a face mai
usor de citit codul CSS, se recomanda adaugarea unei singure declaratii pe
fiecare linie.
selector {
proprietate1:
valoare1;
proprietate2: valoare2; bloc de
declaratii proprietate3: valoare3;
}
Declaratiile CSS se pot introduce in cadrul paginilor HTML in trei moduri:

Foaie de stil externa (declarata intr-un fisier CSS extern)

Foaie de stil interna (declarata in sectiunea de head a documentului HTML)


Stilul declarat inline (declarat in interiorul unui element HTML)

Adaugarea declaratiilor CSS in foile de stil externe. In acest caz foaia de


stil externa este un document separat de tip text, cu extensia *.css, care contine
o serie de declaratii de stil. Dupa ce a fost creat, documentul *.css poate fi legat,
sau importat in unul sau mai multe documente HTML. In acest fel, toate
documentele HTML dintr-un site web pot folosi aceeasi foaie de stil. Aceasta este
metoda cea mai puternica si preferata pentru atasarea foilor de stil. O foaie de
stil externa este ideala atunci cand stilul este aplicat la mai multe pagini. Cu o
foaie de stil externa, putem modifica aspectul unui intreg site prin simpla
modificare realizata intr-un singur fisier. Fiecare pagina trebuie leagata la foaia de
stil cu ajutorul tag-ul <link>. Tag-ul <link> va fi pozitionat tot timpul in partea de
head.
<head>
<link rel="stylesheet" type="text/css"
href="stiluri.css"> </head>
O foaie de stil externa poate fi scrisa in orice editor de text. Fisierul nu trebuie sa
contina nici un tag HTML. Fisierul stiluri.css contine urmatorul cod CSS:
h1 { color:
red; } p {
color:
blue; }
Adaugarea declaratiilor CSS in foaia de stil interna. Acesta este plasata
intr-un document HTML folosind elementul stil. Este important de stiut ca
declaratiile sale se aplica numai in documentul HTML in care a fost declarata. O
foaie de stil interna trebuie sa fie utilizata doar atunci cand o singura pagina
HTML are un stil unic. Elementul de stil trebuie sa fie plasat in sectiunea <head>
a unei pagini HTML, cu ajutorul tag-ului <style>.
<head>
<style>
h1 { color:
red; } p {
color:
blue;
}
</style>
</head>
Adaugarea declaratiilor CSS inline. Acestea pot fi declarate chiar in interiorul
unui element HTML folosind atributul style. Proprietatile si valorile se aplica doar
elementului in care au fost definite. Folosirea stilurilor inline ar trebui sa fie
evitata. Acestea trebuie folosite doar atunci cand este absolut necesar pentru a
suprascrie declaratiile provenite de la o foaie de stil incorporata sau externa. Un
stil declarat inline pierde multe din avantajele foilor de stil. Prin urmare rezulta
amestecarea declaratiilor de prezentare si stilizare cu tag-urile HTML care
realizeaza structurarea si continutul. De asemenea, activitatea de modificare a
prezentarii paginilor HTML si a site-ului per ansamblu este mult mai dificila.
Astfel, pentru modificarea fiecarei declaratii de stil trebuie mers direct in codul
sursa al paginii HTML.
<h1 style = "color: red"> Titlu
</h1> <p style = "color:
blue"> Paragraf </p>

2.1. Selectorii CSS


In plus, fata de stabilirea unui stil pentru un element HTML, CSS permite
specificarea propriilor selectori. Exista mai multe tipuri diferite de selectori CSS
care permit declararea unor reguli pentru anunite elemente specifice din cadrul
unui document HTML. Selectorii CSS sunt case sensitive, astfel

incat acestia trebuie sa se potriveasca exact cu numele elementelor si valorilor


de atribute. Exista unii selectori mai avansati care permit selectarea unor
elemente bazate pe atributele si valorile lor. In continuare vom prezenta cei mai
frecvent utilizati selectorii CSS.
Selectorul universal - se aplica la toate elementele din document
* {}
Se aplica tuturor elementelor din pagina
Selectorul de tip - se aplica numelor de elemente
h1, h2, h3 {}
Se aplica elementelor <h1>, <h2> si <h3>
Selectorul de clasa - se aplica unui element al carui atribut clasa are o
valoare care se potriveste cu cel specificat dupa simbolul . (punct)
.azorel {}
Se aplica tuturor elementelor care au atributul class egal cu azorel
p.azorel {}
Se aplica doar elementelor <p> a caror atribut class este egal cu azorel
Selectorul ID - se aplica unui element al carui atribut id are o valoare
care se potriveste cu cel specificat dupa simbolul # (diez)
#cnp {}
Se aplica elementului al carui atribut id este egal cu cnp
Selectorul copil - se aplica unui element care este un copil direct al unui alt
element
li>a {}
Se aplica elementelor <a> care sunt continute in cadrul unui element <li>
Selectorul descendent - se aplica unui element care este un descendent din
cadrul unui alt element specificat (nu doar unui copil direct al acestui element)
p a {}
Se aplica elementelor <a> care sunt continute in cadrul unui element <p>,
chiar daca exista si alte elemente imbricate intre ele
Selectorii grupati- se aplica numelor de elemente specificate
h1, p, em, img {}
Se aplica elementelor <h1>, <p>, <em> si <img>

2.2. Agregarea in cascada a stilurilor


De cele mai multe ori in cadrul aplicatiilor web exista mai multe foi de stil care se
agrega in cascada. In cazul in care exista doua sau mai multe reguli care se
aplica aceluiasi element, este important sa se inteleaga care va avea prioritate.
Agregarea in cascada se refera la ceea ce se intampla atunci cand mai multe
declaratii de stil lupta pentru controlul elementelor de pe o pagina. Declaratiile de
stil se propaga in cascada, in jos, pana cand vor fi suprascrise de o declaratie de
stil cu o greutate mai mare.

In general putem spune ca, toate stilurile vor fi agregate in "cascada", intr-o noua
foaie de stil virtuala. Agregarea se face respectand urmatoarea ordine, tinand
cont ca declaratiile inline au cea mai mare prioritate:

Foaia de stil implicita a browser-ului


Foaie de stil externa (declarata intr-un fisier CSS extern)
Foaie de stil interna (declarata in sectiunea de head a documentului HTML)
Stilul declarat inline (declarat in interiorul unui element HTML)

Prin urmare, un stil inline (declarat in interiorul unui element HTML) are cea mai
mare prioritate. Acest lucru inseamna ca va inlocui un stil definit in interiorul tagul <head>, sau intr-o foaie de stil externa, respectiv in cadrul browser-ului. Daca
legatura la foaia de stil externa este plasata dupa foaia de stil interna in HTML
<head>, foaia de stil externa va inlocui foaia de stil interna.
De exemplu, in cazul codului HTML de mai jos:
<html>
<head>
<title>Exemplu de agregare in cascada a
stilurilor</title> <link rel="stylesheet"
type="text/css" href="stilulmeu.css"> <style>
h1{color:
red;}
p{color:
blue;}
</style>
</head>
<body>
<h1 style="color:
indigo">Titlu</h1> <p
style="color:
violet">Paragraf</p>
</body>
</html>
Si a codului CSS de mai jos continut in cadrul fisierului stilulmeu.css:
h1{color:
green;}
p{color:
orange;}

Va rezulta:

Dupa ce foile de stil au fost agregate in "cascada", intr-o noua foaie de stil
virtuala, conflictele pot sa apara in continuare. Prin urmare, regula agregarii in
cascada continua si la nivel de regula. Cand doua reguli dintr-o foaie CSS intra in
conflict, tipul de selector este folosit pentru a determina castigatorul. Cu cat este
mai specific selectorul, cu atat mai multa greutate ii este acordata pentru a
suprascrie declaratiile contradictorii.
In cazul in care doi selectorii sunt identici, sau de aceeasi importanta, oricare
dintre acestia este declarat ultimul va suprascrie pe precedentii. Prin urmare cel
care apare ultimul va avea prioritate.

De exemplu, in cazul codului HTML de mai jos:


<html>
<head>

<title>Exemplu de specificitate si
prioritate</title> <style>
* { color:
blue; } h1 {
color: purple; }
p b { color:
violet; } b {
color:
orange; } b {
color: red; }
p { color:
chocolate; }
p#abstract{ color:
green; }
</style>
</head>
<body>
<h1>Titlu</h1>
<p id="abstract">Acesta este un
<b>abstract</b></p> <p>Acesta este un
text dintr-un paragraf</p>
Acesta e un text
<b>oarecare</b> </body>
</html>
Va rezulta:

Este foarte usor sa suprascriem, in mod accidental, declaratiile anterioare in


momentul in care vom ajunge sa folosim proprietati combinate. Prin urmare,
modul de agregare a foilor de stil si importanta selectorilor este un
comportament deosebit de important de care trebuie sa tinem cont.

2.3. Mostenirea in CSS


Mostenirea se poate folosi pentru a crea un avantaj atunci cand scriem foile de
stil. De exemplu, daca dorim ca toate elementele de tip text sa fie formatate cu
fontul Verdana avem doua optiuni. Am putea scrie declaratii pentru fiecare
element din cadrul documentului HTML si sa setam proprietatea font-face astfel
incat textul sa fie formatat cu Verdana. O cale mult mai buna ar fi sa scriem o
singura regula de stil prin care sa se aplice proprietatea font-face la elementul
<body>, iar toate elementele de tip text incluse in elementul <body> sa
mosteneasca acel stil.
Daca specificam pe elementul <body> proprietati precum fontul sau culoarea, se
vor aplica pe mai multe elemente continute in cadrul documentului HTML. Acest
lucru se datoreaza faptului ca valoarea proprietatii font-family este mostenita de
elementele continute. Aceast lucru ne salveaza de la a fi nevoie sa aplicam
aceste proprietati pentru mai multe elemente. Prin urmare vor rezulta foi de stil
mai simple si de dimensiuni mai mici.

De exemplu, in cazul codului HTML de mai jos:


<html>
<head>
<title>Exemplu de specificitate si
prioritate</title> <style>

body {
font-family: Arial, Verdana,
sans-serif; font-weight: bold;
color: blue;
background-color:
yellow; }
.cutie {
color: white;
background-color:
green; border: 1px
solid red; }
.cutiutza {
color:
gold; } </style>
</head>
<body>
<div>
<p>Mostenesc de la body fontul, proprietatea bold si culoarea
albastra</p>
</div>
<div class="cutie">
<p>Mostenesc de la body fontul si proprietatea bold. Dar am culoarea
alba, culoarea de fundal verde si bordura rosie.</p>
<div class="cutiutza">
<p>Mostenesc de la body fontul si proprietatea bold. Am culoarea
aurita, dar mostenesc culoarea de fundal verde de la cutie. Bordura
nu se mosteneste.</p> </div>
</div>
</body>
</html>
Va rezulta:

E bine de stiut ca nu toate proprietatile sunt mostenite. Este important sa retinem


ca unele proprietati CSS sunt mostenite, iar altele nu. In general, proprietatile
legate de stilul, dimensiunea textului, fontul, culoarea, etc, sunt transmise si la
elementele continute. Proprietati precum bordura unui element, marginile,
fundalurile, etc, care afecteaza zona din jurul elementului tind sa nu fie
transmise. Acest lucru este destul de logic. De exemplu, daca am pus un chenar
in jurul unui div, nu am vrea ca acesta sa apara si in jurul fiecarui element inline
continut (de ex. paragraf). Trebuie sa tinem minte ca orice proprietate aplicata
unui element specific va suprascrie valorile mostenite pentru acea proprietate.

2.4. Specificarea culorilor


Exista trei modalitati mai des folosite in practica, prin care se pot specifica
culorile. Culorile pot fi specificate prin intermediul:
numelor de culori
valorilor RGB
codurilor hexa zecimale
CSS1 si CSS2 au adoptat cele 16 nume de culori standard, introduse initial in
HTML 4.01. CSS3 adauga suport pentru un set extins ce contine 140 de nume de
culori.
Cele 16 culori standard sunt: aqua, black, blue, fuchsia, gray, green, lime,
maroon, navy, olive, purple, red, silver, teal, white, and yellow.
Codurile hexa zecimale sunt codurile de sase cifre care reprezinta cantitatea de
rosu, verde si albastru dintr-o culoare, precedata de semnul #. Sistemul de
numerotare hexazecimal foloseste 16 elemente: perechi de numere de la 0 la 9 si
litere de la A la F.

#RRGGBB
Alb = #FFFFFF sau #FFF (echivalentul lui 255,255,255)
Negru = #000000 sau #000 (echivalentul lui 0,0,0)

2.5. Unitati de masura in CSS


CSS ofera o varietate de unitati de masura pe care le enumeram si descriem in
continuare:

px - pixeli (un px reprezinta un punct de pe ecranul computerului)


% - procent
in - inch
cm - centimetru
mm - milimetru

em - 1em este egal cu dimensiunea fontului curent. 2em inseamna


de 2 ori dimensiunea fontului curent.

De exemplu, in cazul in care un element este afisat cu un font de 12 pt, atunci


'2em" este de 24 pt. "em" este o unitate foarte utila in CSS, deoarece se poate
adapta automat la fontul pe care cititorul il foloseste.

2.6. Box Model


Un aspect important in structurarea si stilizarea elementelor cu CSS este asanumitul Box Model. Acest model stabileste ca fiecare element de structura din
cadrul unei pagini Web poate fi vazut ca o cutie/caseta (dreptunghi) definita prin
urmatoarele proprietati:
Margin permite stabilirea unei zone libere transparente in exteriorul
bordurii
Border permite adaugarea unei borduri in jurul elementului luat in
considerare
Padding permite stabilirea unei zone libere transparente in interiorul
bordurii
Content permite introducerea unui continut in cadrul elementului

Modelul de mai sus permite stabilirea de borduri si spatieri intre elementele din
cadrul unei pagini Web.

Controlarea felului in care aceste casete pentru elemente apar, este esentiala.
Prin pozitionarea si gestionarea lor vom construi layout-ul paginilor web.
Proprietatea border-width este folosita pentru a controla latimea unei borduri.
Valoarea acestei proprietati poate fi specificata fie in pixeli sau folosind una dintre
urmatoarele valori:

thin - specifica o bordura subtire


medium - specifica o bordura de grosime medie
thick - specifica o bordura grosa

Putem controla dimensiunea individuala a bordurilor utilizand patru proprietati


distincte:
4.3.3
4.3.4
4.3.5
4.3.6

border-top-width - specifica latimea bordurii de sus


border-right-width - specifica latimea bordurii din dreapta
border-bottom-width - specifica latimea bordurii de jos
border-left-width - specifica latimea bordurii din stanga

Putem specifica, de asemenea, latimi diferite pentru cele patru valori ale bordurii
intr-o singura proprietate. Valorile vor aparea in sensul acelor de ceasornic: sus,
dreapta, jos si stanga.
<html>
<head>
<style>
div {
border: solid gray; borderwidth: 5px 6px 10px 3px;
}
</style>
</head>
<body>
<div>Sus 5px, dreapta 6px, jos 10px,
stanga 3px.</div> </body>
</html>

Acelasi mod de folosinta, ca si pentru proprietatea border-width, se aplica si


proprietatilor padding si margin.

Proprietatea margin permite stabilirea unei zone libere transparente in exteriorul


bordurii. Aceasta zona nu este afectata de culoarea de fundal al elementului si
preia culoarea de fundal al elementului

in care este continuta. Putem controla spatierea individuala din interiorul casetei
utilizand patru proprietati distincte:

margin-top - specifica spatierea din exterior in partea de sus


margin-right - specifica spatierea din exterior in partea dreapta
margin-bottom - specifica spatierea din exterior in partea de jos
margin-left - specifica spatierea din exterior in partea stanga

Proprietatea padding permite stabilirea unei zone libere transparente in


interiorul bordurii. Aceasta zona este afectata de culoarea de fundal al
elementului. Putem controla spatierea individuala din exteriorul casetei utilizand
patru proprietati distincte:

padding-top - specifica spatierea din interior in partea de sus


padding-right - specifica spatierea din interior in partea dreapta
padding-bottom - specifica spatierea din interior in partea de jos
padding-left - specifica spatierea din interior in partea stanga

La fel, putem specifica, margini si spatieri diferite pentru cele patru valori intr-o
singura proprietate. Valorile vor aparea in sensul acelor de ceasornic: sus,
dreapta, jos si stanga.
Dimensionarea casetelor
In mod normal o caseta se adapteaza la dimensiunea continutului care se afla in
ea. Pentru a stabili dimensiuni absolute se pot folosi proprietatile height si width.
Cele mai populare moduri prin care se poate specifica dimensiunea unei casete,
este de a utiliza pixeli, procente, sau ems. In mod traditional, pixeli au fost cea
mai populara metoda, deoarece permit proiectantilor sa controleze cu exactitate
dimensiunea casetei.
Cand utilizam procente, dimensiunea casetei este relativa la dimensiunea
fereastrei browser-ului sau, in cazul in care caseta este continuta de catre o alta
caseta, acesta reprezinta un procent din dimensiunea casetei in care este
continuta.
<html>
<head>
<style>
div
{
width:
210px;
padding:
15px;
border: 15px solid
gray; margin:
15px;
}
</style>
</head>
<body>
<img src="poza.png">
<div>Poza de deasupra e lata de 300px.
Latimea acestui element:<br> 210 (latime) +<br>30 (2*15 padding)
+<br>30 (2*15 bordura) +<br>30 (2*15 margine) =<br>300px.</div>

</body>
</html>

Putem limita dimensiunea casetelor cu ajutorul proprietatilor: min-width, maxwidth, min-height,


max-height.
min-width - stabileste latimea minima a unui element si previne ca
valoarea proprietatii width sa fie mai mica decat min-width.
max-width - seteaza latimea maxima a unui element si previne ca valoarea
proprietatii width sa fie mai mare decat max-width.
min-height - seteaza inaltimea minima a unui element si previne ca
valoarea proprietatii height sa fie mai mica decat min-height.
max-height - seteaza inaltimea maxima a unui element si previne ca
valoarea proprietatii height sa fie mai mare decat max-height.
<html>
<head>
<style>
.adaptabil {
background-color:
gold; min-width:
400px; max-width:
600px; padding:
10px; }
</style>
</head>
<body>
<div class="adaptabil">Acest div se redimensioneaza in functie de
rezolutia ecranului.<p> Dimensiunea minima este de 400px, iar cea
maxima de 600px. Textul de pe prima linie nu va fi afectat de
redimensionare.</div>
</body>
</html>

3. JavaScript
JavaScript:
este utilizat pentru programarea comportamentului paginilor web si pentru
adaugarea de interactivitate;
este un limbaj usor, dar foarte complex si puternic;
este case sensitive;
este un limbaj de scripting client-side, care ruleaza pe calculatorul
utilizatorului si nu pe server;
ruleaza in browser-ul utilizatorului, care citeste codul si il interpreteaza in
momentul in care il primeste (nu are nevoie de un compilator);
a fost standardizat in 1996 de catre European Computer Manufacturer's
Association (ECMA), iar din acest motiv se mai gaseste sub denumirea de
ECMAScript;
codul JavaScript poate fi editat in orice editor de texte;
codul JavaScript (si modul in care il folosim) este dependent de capacitatile
si setarile browser-ului;
JavaScript si Java sunt doua limbi complet diferite, atat in concept cat si in
design.

JavaScript:
1111111
nu a fost creat ca un limbaj de programare general, ci a fost creat cu
scopul de a manipula pagini web;
1111111
nu poate accesa fisierele locale;
1111111
nu poate accesa in mod direct o baza de date;
1111111
nu poate accesa componentele hardware (USB, etc);
1111111
nu este activat si suportat pe toate browserele, asa ca trebuie tinut
cont de acest lucru in momentul dezvoltarii unei aplicatii web.
JavaScript poate fi utilizat pentru:
scrierea script-urilor care reactioneaza la comportamentul sau datele
introduse de catre utilizator;
validarea datelor de intrare pe care le introduc utilizatorii in cadrul unui
formular;
schimbarea continutului si informatiilor dintre documentul curent si server.
Acest lucru se face, prin intermediul Ajax, fara a reincarca intreaga pagina;
crearea meniurilor dinamice si a plierii continutului in functie de click-urile
utilizatorilor;
manipularea arborelui DOM (pentru a schimba structura si continutul unei
pagini HTML). Astfel, JavaScript permite:

o schimbarea elementelor
HTML o stergerea
elemente HTML
o crearea de noi elemente HTML
o copierea si clonarea
elementelor HTML o schimbarea
atributelor CSS
Amplasarea codului se realizeaza intre tagurile <script></script>.
<script>
// aici va fi amplasat codul JavaScrpit
comanda JavaScrpit; cod JavaScript comanda
JavaScrpit;
</script>
Inserarea codului JavaScript in cadrul paginilor HTML se realizeaza in doua
moduri:
Fisier extern (declarat intr-un fisier *.js extern)
Script incorporat (incorporat in sectiunea de
documentului HTML)

head

sau

body

Adaugarea codului JavaScript intr-un fisier .js extern:


<head>
<script type="text/ javascript" href="scriptulmeu.js">
</head>
Fisierul scriptulmeu.js contine urmatorul cod JavaScript:
alert("Salutare");
Elementul script poate fi amplasat oriunde in document, dar cele mai comune si
recomandate locuri pentru script-uri sunt in partea de <head> sau <body>. In
cazul in care se adauga in sectiunea body, codul trebuie sa fie pozitionat chiar
inainte de inchiderea tag-ului </body>.
In sectiunea <head>

In sectiunea <body>

<html>
<head>
<script>
alert("Salutare");
</script >
</head>
<body>
Text oarecare
</body>
</html>

<html>
<head>
</head>
<body>
Text oarecare
<script>
alert("Salutare");
</script >
</body>
</html>

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

3.1. Variabilele in JavaScript


O variabila este ca un container de informatii. In primul rand trebuie sa o definim
si sa ii dam un nume. Pe urma putem sa ii atribuim o valoare care poate fi un
numar, un text, un element din DOM sau chiar si o functie. In acest fel putem
oricand sa accesam valoarea atribuita pe baza numelui variabilei. Valoarea
stocata in cadrul variabilei poate fi oricand modificata sau mutata in functie de
nevoi.
Orice variabila se declara folosind cuvantul cheie var, urmat de numele variabilei.
Semnul egal "=" indica faptul ca se atribuie o valoare. Orice declaratie se termina
prin adaugarea la sfarsitul liniei a semnului punct si virgula ";".
Declararea variabilelor
In momentul in care declaram variabile este bine sa tinem cont de cateva reguli:
numele unei variabile poate contine litere, numere si liniute de subliniere
"_".
numele trebuie sa inceapa cu o litera, cu semnul $ sau _. Se recomanda ca
numele variabilei sa inceapa tot timpul cu o litera:
numele variabilelor nu pot contine spatii:
numele variabilelor nu pot contine caractere speciale precum (! @ # % . , / \
+ * = etc).
pentru a declara mai multe variabile intr-o declaratie vom incepe
declaratia cu var si vom separa variabilele prin virgula: var varsta = 20,
prenume = "Cristina";
Tipuri de date in JavaScript
Valorile pe care le atribuim variabilelor pot fi de cateva tipuri de date distincte:
Undefined, String, Number, Boolean, Array, Object.

3.2. Operatori
Operatorii sunt folositi pentru a realiza anumite operatii elementare intre
variabile. In JavaScript sunt mai multe tipuri de operatori:
matematici - realizeaza diferite operatii matematice pe valorile numerice;
de comparare - evalueaza si compara valorile si variabilele;

logici - compara doua expresii si returneaza true daca amandoua sunt


adevarate, in caz contrar returneaza false.
Operatori aritmetici
x=
+
3 + 2 Adunare
x=
3 -2
Scadere

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

*
/

x = 3 * 2 Inmultire
x = 3 / 2 Impartire
x=3%
%
2
Modul (restul impartirii)
Incrementeaza valoarea unui numar (sau a unei variabile care
++
x = y++ contine o valoare
x = ++y numerica) cu 1
Scad valoarea unui numar (sau a unei variabile care contine o
-x = y-e
valoare
x = y-numerica) cu 1
Operatori de
asignare
=
x=2
Asigneaza valoarea unei variabile
x += y (x = x
+=
+ y)
Insumeaza valoarea la valoarea variabilei
x -= y (x = x -=
y)
Scade valoarea din valoarea variabilei
x *= y (x = x *
*=
y)
Inmulteste valoarea la valoarea variabilei
x /= y (x = x /
/=
y)
Imparte valoarea variabilei
Operatori de
comparare
== 3 este
==
2 false
Este egal cu
!= 3 este
!=
2 true
Nu este egal cu
=== 3 este
=== 2 false
Este identic cu (este egal cu si de acelasi tip de date)
!== 3 este
!== 2 true
Nu este identic cu (nu este egal cu si de acelasi tip de date)
>
2> 3 este false Este mai mare decat
>= 3 este
>=
2 false
Este mai mare sau egal decat
<
2< 3 este true Este mai mic decat
<= 3 este
<=
2 true
Este mai mic sau egal decat
Operatori logici
1 < 5 && 3 < 1 este
&&
false
1 < 5 || 3 > 1 este
||
true
! (1 < 3 ) este
!
false

AND / SI logic
OR / SAU logic
Negatie logica

Structuri decizionale if/else


Declaratiile conditionale sunt utilizate pentru a efectua diferite actiuni in functie de
diferite conditii.

if( conditie ) {
// executa acest cod in cazul in care conditia este adevarata
}
else {
// executa acest cod in cazul in care conditia nu este adevarata
}
Exemplu:
var a = 2, b
= 4; if( a <
b){
alert (" a este < decat b ");
}
else {
alert (" a este > decat b ");
}

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

Structura for
Structura for este folosita pentru a executa un bloc de cod de un anumit numar
de ori si are urmatoarea sintaxa:
for (initializeaza variabila, testeaza conditie, modifica valoarea)
{
// executa acest cod in cazul in care conditia este adevarata
}
Exemplu:
for ( var i = 1; i < 3; i++) {
alert ("Numarul este " + i);
}
Structura while
Structura while executa un bloc de cod, atata timp cat o conditie
specificata este adevarata. while (conditie) {
// executa acest cod in cazul in care conditia este adevarata
}
Exemplu:
var i = 1;
while (i <
3) {
alert ("Numarul este
" + i); i++;
}
Structura do/while
Structura do/while este o varianta a structurii while. Aceasta va executa blocul de
cod cel putin o data, inainte de a verifica daca conditia este adevarata. Pe urma
se va repeta executia codului atata timp cat conditia este adevarata.
do {
executa acest cod in cazul in care conditia
este adevarata } while (conditie);
Exemplu:
var i =
1; do
{
alert ("Numarul este
" + i); i++;
} while (i < 3)

3.3. Functii in JavaScript


O functie JavaScript este:
8. un bloc de cod programat pentru a indeplini o
anumita sarcina;

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

executata in momentul in care este invocata de catre un anumit


eveniment;
definita prin intermediul cuvantului cheie al functiei function, urmat de un
numele functiei, de paranteze (), iar codul se gaseste intre acolade {}:
intre paranteze se pot gasi zero sau mai multi parametri
(parametrul1, parametrul2,
..., parametruln)
codul care va fi executat de catre functie este plasat in interiorul
acoladelor {}

Functiile definite de catre utilizator au forma:


function numeFunctie (
parametri ) { codul
care va fi executat;
}
Exemplu de functie care nu primeste parametrii:
function afiseazaMesaj( ) {
alert("Functia a fost
apelata");
/* acest cod nu va rula pana in momentul in care codul
functiei functia afiseazaMesaj() va fi apelata */
}

function afiseazaMesaj();

//apelarea functiei afiseazaMesaj()

Exemplu de functie care primeste parametrii:


function
adunaNumere( a
, b ) { return a +
b;
alert("Acest text nu va fi afisat");
/* acest cod nu va rula pana in momentul in care codul
functiei functia adunaNumere () va fi apelata */
}
alert( function adunaNumere( 2, 3 ) );

//afiseaza numarul "5"

Pe langa functiile definite de catre utilizator, in JavaScript exista si o serie de


functii native. Functiile JavaScript native sunt cele care vin "out-of-the-box".
In JavaScript exista sute de functii predefinite precum:
alert(), confirm(), si prompt() - aceste functii declanseaza casete de
dialog la nivel de browser.
Date() - returneaza data si ora curenta.
sqrt() - returneaza radacina patrata a unui numar.
max() - returneaza cea mai mare valoare dintre mai multe numere.
min() - returneaza cea mai mica valoare dintre mai multe numere.

Variabile locale
variabila declarata in interiorul unei functii JavaScript, folosind var, va fi
LOCALA.
variabila LOCALA este vizibila si poate fi accesata numai in interiorul
functiei.

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

variabilele locale pot avea acelasi nume in diferite functii, deoarece sunt
recunoscute numai de functia in care au fost declarate.
argumentele (parametri) se comporta ca variabile locale in interiorul
functiilor.
variabilele locale sunt create atunci cand functia incepe si sterse in
momentul in care functia este finalizata.
Exemplu de definire si folosire a unei variabile locale:
<!DOCTYPE
html>
<html>
<body>
<div
id="c1"></div>
<div
id="c2"></div>
<script>
function myFunction() {
var a = 4; // variabila locala
document.getElementById("c1").innerHT
ML = a;
}
myFunction();
document.getElementById("c2").inner
HTML = a; </script>
</body>
</html>
Variabile globale
variabila declarata in exteriorul unei functii, devine GLOBALA.
variabila GLOBALA este vizibila si poate fi accesata de catre toate scripturile si functiile din cadrul paginii web.
variabilele globale sunt sterse in momentul in care se inchide pagina web.
Exemplu de definire si folosire a unei variabile globale:
<!DOCTYPE
html>
<html>
<body>
<div
id="c1"></div>
<div
id="c2"></div>
<script>
var a; // variabila
globala function
myFunction() {
a = 4;
document.getElementById("c1").innerHT
ML = a;
}

myFunction();
document.getElementById("c2").inner
HTML = a; </script>
</body>
</html>
Exemplu de definire, stocare si folosire a unei functii anonime in cadrul unei
variabile:

Grafica si programare pe Internet - FSEGA, UBB


<!DOCTYPE
html>
<html>
<body>
<div
id="c1"></div>
<div
id="c2"></div>
<div
id="c3"></div>
<script>
function
adunare(a, b)
{ return a + b;
}
var x = function(a, b)
{return a + b}; var y =
adunare(2, 4);
document.getElementById("c1").innerHTM
L=x;
document.getElementById("c2").innerHTM
L=y;
document.getElementById("c3").innerHTM
L = x(2, 3);
</script>
</body>
</html>

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

Evenimente
un eveniment este o actiune care poate fi detectata de catre JavaScript.
JavaScript permite executarea unui cod in momentul in care sunt detectate
anumite evenimente.
un eveniment HTML poate fi creat de catre browser, sau de catre actiunile
utilizatorului.
in JavaScript un eveniment este identificat de catre un handler de
evenimente.
un eveniment are loc in momentul in care se incarca o pagina web, cand
utilizatorul da clic pe un element sau misca cursorul mouse-ului peste el.
<elementHTML eveniment="cod JavaScript">
Exista trei metode prin intermediul carora se poate reactiona la evenimentele din
JavaScript:
6. Ca un atribut HTML
7. Ca metoda atasata la element
8. Utilizarea addEventListener
Ca un atribut HTML
Se specifica functia care va fi rulata prin intermediul unui atribut in cadrul
elementului.
<button onclick="functiaMea();">Click pe mine</button>

<button onclick="alert('Ai dat click pe mine')">Click pe mine</button>


Este bine ca cest mod de a atasa evenimente pentru elementele din cadrul
paginii web sa fie evitat.
Ca metoda atasata la element
Putem atasa functii folosind diferite obiecte si metode incorporate in JavaScript.

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

window.onclick = functiaMea; /* functiaMea va rula atunci cand utilizatorul da clic


in fereastra browser-ului */
In acest caz putem folosi functii anonime in locul celor predefinite.
window.onclick = function () {
/ * Codul plasat aici va rula in momentul in care utilizatorul da clic in
fereastra browser-ului * / };
Aceasta abordare are avantajul de a simplifica si usura intretinerea codului, dar
are un dezavantaj destul de mare. Doar o singura functie se poate lega de un
eveniment la un moment dat.
window.onclick =
functiaMea;
window.onclick =
altaFunctie;
In cazul de fata, a doua atribuire o suprascrie pe prima. In momentul in care
utilizatorul da clic in interiorul ferestrei browser-ului, va rula doar altaFunctie.
Referirea la functiaMea este suprascrisa/pierduta.
Utilizarea addEventListener
Aceasta abordare, desi un pic mai complexa la prima vedere, ne permite sa
pastram logica in scripturi si permite legarea mai multor functii la un eveniment.
Legarea se face prin apelarea metodei addEventListener a obiectului tinta, si apoi
se specifica evenimentul si functia care va fi executata.
window.addEventListener ("click",
functiaMea); window.addEventListener
("click", altaFunctie);
Trebuie observat ca se omite prefixul "on" al evenimentului in cadrul acestei
sintaxe.
Mai jos metodei addEventListener ii este atasata o functie anonima:
window.addEventListener ("click", functia () { /* codul functiei */ });
Lista evenimente
Evenimentele HTML sunt actiuni care au loc asupra elementelor HTML. De obicei,
in momentul in care au loc evenimentele se doreste executarea unui anumit cod.
Prin urmare, JavaScript permite executarea codului in momentul in care sunt
detectate anumite evenimente.
Eveniment
onblur
onchange

Descriere
Un element pierde focusul (este parasit)
Continutul unui camp dintr-un formular se modifica

onclick
onerror
onfocus
onkeydown

Mouse-ul face clic pe un obiect


Apare o eroare in momentul in care documentul sau o imagine se
incarca
Un element primeste focusul (devine activ)
Este apasata o tasta

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

onkeypress
onkeyup

Este apasata o tasta si tinuta apasata


O tasta care a fost apasata este eliberata
Momentul in care o pagina sau o imagine s-a terminat de
onload
incarcat
onmousedown Un buton al mouse-ului este apasat
onmousemove Cursorul mouse-ului este mutat
onmouseout
Cursorul mouse-ului este mutat de pe un element
onmouseover Cursorul mouse-ului este mutat peste un element
onmouseup
Un buton al mouse-ului este eliberat
onsubmit
Se apasa butonul de trimitere intr-un formular

3.5. JavaScript + DOM


Document Object Model (DOM) este atat un model cat si o interfata, neutra din
punct de vedere al limbajului de programare folosit, care permite programelor si
scripturilor sa acceseze si actualizeze continutul, structura si stilul unui document
in mod dinamic. DOM:

este un standard W3C (World Wide Web Consortium);


defineste un standard de acces la documente si este o interfata de

programare (API) pentru pagini HTML si XML;


ofera o harta structurata a documentului, precum si un set de metode
pentru a interactiona cu elementele continute;
este o traducere a paginii HTML, creata cu ajutorul marcatorilor, intr-un
format pe care atat JavaScript cat si alte limbaje de programare il pot
intelege;
serveste ca o harta pentru toate elementele de pe o pagina;

permite

gasirea si modificarea elementelor, respectiv adaugarea,


modificarea sau stergerea elementelor impreuna cu continutul lor.

HTML DOM este un model de obiecte si o interfata de programare standard


pentru HTML. DOM defineste:

Elementele HTML ca obiecte


Proprietatile tuturor elementelor HTML
Metodele de a acces la toate elementele HTML
Evenimentele pentru toate elementele HTML

In concluzie, HTML DOM este un standard pentru modul in care se obtin, schimba,
adauga si sterg elementele HTML.
Metodele HTML DOM sunt actiuni care se pot efectua (pe elementele HTML). O
metoda este o actiune precum adaugarea sau stergerea unui element HTML.
Proprietatile HTML DOM sunt valori, ale elementelor HTML, care se pot seta
sau schimba. O proprietate este o valoare precum continutul unui element HTML.
Cu modelul de obiecte, JavaScript poate crea HTML in mod dinamic. Astfel,
JavaScript poate:
2.2.3

schimba toate elementele HTML din pagina

2.2.4
2.2.5
2.2.6

schimba toate atributele HTML din pagina


schimba toate stilurile CSS din pagina
elimina elemente si atribute HTML existente

Grafica si programare pe Internet - FSEGA, UBB


adauga noi elemente si atribute HTML
reactiona la toate evenimentele HTML existente
in pagina
crea noi evenimente HTML in pagina

Pagina web reprezentata in browser


DOM

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

Pagina web reprezentata arborescent in

Pagina web reprezentata in cod HTML


DOM este o colectie de noduri:
Noduri Element
Noduri Atribut
Noduri de text
Mai jos este prezentata in cod HTML structura nodului, de tip element, p. Nodul p
contine un nod de tip text si un nod de tip element, a. Nodul a contine nodul de
tip atribut, href si un nod de tip text.
<p>Textul paragrafului contine un link <a
href="pagina.html">link</a></p>
In figura de mai jos este prezentat arborescent in DOM structura nodului, de tip
element, p.

Pentru a putea manipula elementele HTML, JavaScript trebuie sa poata, in primul


rand, sa gaseasca elementele. Acest lucru se poate realiza in mai multe feluri prin
intermediul id-ului, tag-ului, sau numelui clasei. In continuare vom trece in revista
unele dintre metodele specifice pe care le putem utiliza pentru a accesa obiectele

definite de DOM. De asemenea vom prezenta si unele dintre cele mai populare
metode de manipulare a acestor elemente.
getElementById("Id")

Metoda acceseaza primul element cu Id-ul


specificat.
Este ablolut necesar sa se furnizeze Id-ul
elementului pe
care dorim sa il accesam/manipulam.

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

getElementsByTagName("TagName")
Metoda acceseaza toate elementele
cu tagul specificat. Este ablolut necesar sa
se furnizeze numele tag-ului pe care dorim
sa il accesam/manipulam.
getElementsByClassName("ClassName")
Metoda
acceseaza
toate
elementele cu numele clasei specificat. Este
ablolut necesar sa se furnizeze numele clasei
pe care dorim sa o accesam/manipulam.
Dupa ce am accesat un nod folosind una din metodele discutate anterior, DOM ne
ofera mai multe metode standard pentru manipularea elementelor, atributelor si
continutului acestora. Aceste metode sunt:
element.innerHTML=

element.attribute=
element.setAttribute(attrib
ute,value)
element.style.property=

Permite modificarea
element
HTML
Permite modificarea
HTML
Permite modificarea
HTML
Permite modificarea

continutului din cadrul unui

atributului unui element


atributului unui element
stilului unui element HTML

Pana acum, am vazut metodele folosite pentru obtinerea si setarea nodurilor in


documentul HTML. Pe langa acestea, DOM mai contine metode prin care permite
dezvoltatorilor schimbarea structurii documentului HTML prin adaugarea si
eliminarea nodurilor "on the fly". Pentru a adauga un nou element (nod) in cadrul
HTML DOM trebuie urmati doi pasi:

in primul rand trebuie creat elementul (nodul);

in al doilea rand trebuie adaugat la un element (nod) deja existent in cadrul


documentului.
Cel mai simplu mod de a modifica continutul unui element HTML este de
proprietatea innerHTML. Totusi, adaugarea si stergerea elementelor se poate face
si prin intermediul urmatoarelor metode:
document.createElement() Permite crearea unui element HTML
document.createTextNode( Permite crearea unui nod de tip text cu textul
)
specificat
pentru elementul HTML
document.appendChild()
Permite adaugarea unui element HTML
document.replaceChild()
Permite inlocuirea unui element HTML
document.removeChild()
Permite eliminarea unui element HTML
document.write(text)
Permite scrierea in fluxul de iesire HTML
Aceasta metoda este mult mai precisa decat adaugarea de continut prin
intermediul metodei innerHTML.
Observatie importanta:
Codul JavaScript este Case-sensitive. Acest lucru inseamna ca getElementById
este diferit de getElementByID. Folosind varianta a doua codul JavaScript nu va
functiona.
Accesarea elementelor in cadrul DOM

Obiectul document identifica, in cadrul DOM, pagina in sine. Obiectul document


vine cu o serie de proprietati si metode standard care permit accesarea colectiilor
de elemente.
Accesarea elementelor pe baza atributului ID
document.getElementById ("idElement")
Metoda getElementById() returneaza elementul care are atributul de identitate
egal cu valoarea specificata.

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

Aceasta metoda este una dintre cele mai comune metode din HTML DOM. Ea este
folosita aproape de fiecare data cand se doreste manipularea, sau obtinerea de
informatii de la un element din cadrul documentului.
Metoda returneaza null in cazul in care nu exista elemente cu ID-ul specificat.
In cazul in care exista mai mult de un element cu ID-ul specificat, metoda
getElementById() returneaza primul element.
Accesarea elementelor pe baza numelui elementului
document.getElementsByTagName("numeTag")
Metoda getElementsByTagName() acceseaza toate elementele cu numele tagului
specificat.
Metoda returneaza o colectie cu toate elementele din document, cu tagul
specificat, sub forma unui obiect NodeList.
NodeList se comporta la fel ca un array si contine toate elementele in ordinea in
care apar in document, de sus in jos.
Pentru a avea acces la anumite elemente din NodeList, vom face referinta la
indicele lor, la fel ca intr-un array.
paragrafe = getElementsByTagName("p")
Pentru a accesa primul paragraf din document vom folosi paragrafe[0], pentru a
accesa al doilea vom folosi paragrafe[1], si asa mai departe.
Accesarea elementelor pe baza numelui clasei
getElementsByClassName("numeClasa")
Metoda getElementsByClassName() acceseaza toate elementele cu numele clasei
specificate.
Metoda returneaza o colectie cu toate elementele din document, cu clasa
specificata, sub forma unui obiect NodeList.
Pentru a avea acces la anumite elemente din NodeList, vom face referinta la
indicele lor, la fel ca intr-un array.
elementeLista = getElementsByClassName("elementeLista")
Pentru a accesa primul element din lista cu clasa elementeLista vom folosi
elementeLista[0], pentru a accesa al doilea vom folosi elementeLista[1], si
asa mai departe.
Manipularea nodurilor
In continuare vom detalia mai multe metode, impreuna cu proprietatile pe care
DOM le ofera pentru manipularea elementelor, continutului si al atributelor
acestora.
Setarea valorii unui element
elementHTML.innerHTML="text"

Proprietatea innerHTML seteaza sau returneaza continutul interioar al unui


element HTML.

Grafica si programare pe Internet FSEGA, UBB

Lect.univ.dr. Daniel
Mican
daniel.mican@econ.ubbcl
uj.ro

innerHTML ne ofera o metoda simpla pentru accesarea si modificarea textului si


elementelor din interiorul unui element.
<p id="paragraf">Acest text va fi schimbat prin intermediul
innerHTML</p> <script>
document.getElementById("paragraf").innerHTML="Eu sunt noul text";
</script>
Setarea valorii unui atribut
element.setAttribute(numeAtribut,
valoareAtribut)
Metoda setAttribute() adauga atributul specificat, in cazul in care nu exista, si il
seteaza la valoarea specificata.
In cazul in care atributul specificat deja exista, doar valoarea ii este setata /
schimbata.
Aceasta metoda necesita doua argumente: atributul a carei valoare trebuie sa fie
schimbata si noua valoare pentru atribut.
<img src="poza1.jpg" id="poza"
onclick="schimba()"> <script>
function schimba(){
document.getElementById("poza").setAttribute("sr
c","poza2.jpg");
}
</script>
Manipularea stilurilor CSS
document.getElementById("idElement").style.proprietateCss = "valoare";
DOM permite adaugarea, modificarea, sau eliminarea unui stil CSS de la un element
folosind proprietatea style. Acesta functioneaza in mod similar cu aplicarea unui stil
cu atributul de stil inline. Proprietatile individuale CSS sunt disponibile ca proprietati
ale proprietatii style.
<p id="paragraf" onclick="schimbaStil()">Daca dai click pe mine
ma inrosesc</h1> <script>
function schimbaStil(){
document.getElementById("paragraf").style.co
lor = "red";
}
</script>
In JavaScript si DOM, numele de proprietati, care sunt despartite in CSS (cum ar fi
background-color si border-top-width) devin (backgroundColor si borderTopWidth),
astfel incat caracterul - sa nu fie confundat cu un operator.

PROIECTAREA SITE-URILOR WEB


Autor: Liana Stanca
1.1. Abordarea serverelor Web n programarea pe parte de server
Un server web este o tehnologie de informa ii care proceseaz cererile prin intermediul HTTP.
HTTP(HyperText Transfer Protocol) este un protocolul de re ea folosit pentru a distribui informa ii
pe World Wide Web. Ca i alte protocoale utilizate n Internet, protocolul HTTP (HyperText Transfer
Protocol) este un protocol de tip cerere-rspuns, bazat pe TCP/IP, destinat transferurilor informaiilor
hipermedia. Apache folosete HTTP pentru a comunica cu Internet Explorer, pentru a analiza URL-ul
i a stabili protocolul de conectare n cazul de fa:-http://localhost. Termenul de server se poate
referi fie la ntregul sistem de calcul, fie la un aparat, fie n mod specific pentru software-ul care
accept i supravegheaz cererile HTTP. Serverele Web au ca funcionalitate de baz recepionarea
de cereri anonime de la clieni i furnizarea de informaii ntr-o manier dorit a fi eficient i rapid
[Ricart1998]. Deci, un server Web este un daemon care accept conexiuni conform protocolului
HTTP, rspunznd cererilor recepionate de la clieni.
1

Conform statistici realizate de Netcraft , n luna martie 2015, serverul Apache a nregistrat o
scdere a numrului de hostname-uri de 2.9 milioane din 2012. Referitor la situatia hostname-uri,
Microsoft afirm c,n ultima perioada a crescut cota de pia a lui la 28,7%, dar Apache continu s
conduc cu o cot de 38,8%, n ciuda unei pierderi de 5,9 milioane de site-uri. n studiu realizat de
Netcraft, cota de pia Nginx prezint o cre tere u oar fa de trecuta de pn la 11,3%, n timp ce
Apache menine n continuare un avantaj confortabil, dat de o cot de 47,2%, n timp ce
Microsoft a a ajuns la o cot de 29,9%. n prezent Apache deservete 58,3% din totalul site-urile
2
ale cror server web se cunosc, conform lui studiului realizat de w3techs .
Proiectul Apache reprezint dezvoltarea unui soft colaborativ care urmrete cererea i utilizarea
unui Web Server puternic i robust. Proiectul era condus de ctre voluntari din ntreaga lume.Acest
grup de voluntari folosete Internet-ul pentru comunicare, planificri i dezvoltarea serverului i a
documentaiei de rigoare.Ei sunt cunoscui sub denumirea de Grupul Apache (Apache Group).n
plus, sute de utilizatori au contribuit cu idei, coduri i documentaie la acest proiect.
Apache furnizeaz o implementare robust a protocolului HTTP. Apache suport o mare varietate
de module care i extind funcionalitatea, acestea variaz de la server side programming i pn la
scheme de autentificare i anume: mod_ssl ofer suport pt SSL i TLS modulul proxyun, modul de
rescriere URL (cunoscut ca un motor de rescriere mod_rewrite), custom log files (mod_log_config)
i suport de filtrare (mod_include i mod_ext_filter).Apache este virtual hosting (gzduirea virtual),
care const n posibilitatea de a gzdui mai multe site-uri simultan pe acelai server.
2

[Converse_Park_Morgan_2005]Apache rmne o platform pe baza creia indivizii i instituiile


pot s construiasc sisteme n scopuri experimentale i nu numai. Apache este o entitate organic, cei
care beneficeaz de ea prin utilizare contribuie de cele mai multe ori la dezvoltarea ulterioar a
platformei. Dac cineva pltete pentru un produs software, nu va dori dup aceea s-i repare
defectele.[Converse_Park_Morgan_2005]Limbajele suportate de serverul Apache sunt:PHP,
PERL, PYTHON.
1

http://www.netcraft.com/survey

http://w3techs.com/technologies/overview/web_ server/all

Dorina creatorilor Apache, dup cum se specific n site-ul Grupului Apache este ca
platforma sa s fie folosit de ct mai mult lume (companii mari sau mici, instituii de cercetare,
coli, Intranet-uri ) i s se acopere ct mai multe domenii de activitate.n prezent, motorul de
4
cutare folosit de Google utilizeaza o versiune modificat de Apache numit Google Web Server
5
(GWS) i proiectele Wikimedia inclusiv Wikipedia ruleaz tot pe un server Apache.

5:

Modelul CLIENT-SERVER pentru aplicaii web pe parte de server


Modelul Client-Server[site17] [LalaniChandak1997] st la baza tuturor aplicaiilor electronice
i serviciilor Internet. Clientul, n general, ruleaz pe calculatorul utilizatorului i este folosit
pentru a accesa informaii sau alte aplicaii din cadrul reelei Internet. Exemplul de client este
browser-ul care poate ndeplini cu succes urmtoarele sarcini:[site17]
emite cererile i recepioneaz datele care se vor afia;
formateaz documentele pe baza tag-urilor HTML;
afieaz documentele.
Serverul [site17] ruleaz, n general, pe un calculator centralizator sau aflat la distan,
furniznd sau oferind informaii/servicii clienilor. Exemple de servere folosite n prezent sunt:
Apache, IIS i etc.
Clientul i serverul se pot gsi pe acelai calculator, n cazul n care se utilizeaz mecanisme
de comunicaie local sau pe calculatore diferite, atunci cnd se folosesc mecanisme de
comunicaie n reea. (Figura1.2)

Figura 1.2. Arhitectura client server - adaptare [LalaniChandak1997]


Un server web este un program care ruleaz pe un calculator, ateapt pe un port o conexiune
TCP venit de la un client i servete acestuia pagini web folosind protocolul HTTP. [site31]
Serverul web este un software, un program de sine stttor, un executabil cu o funcie bine
stabilit: accea de a servi la cerere pagini de Internet ntr-un mod bine determinat. Acest software

http://www.apache.org,

http://code.google.com/webtoolkit/terms.html

http://apache-http-server .software.informer .com/wiki/

poate fi: Apache HTTP Server, Microsoft Internet Information Services (IIS), iPlanet Web
Server, Roxen WebServer, Zeus WebServer, .a. Serverul web ruleaz pe un calculator. [site31]
Clientul folosit pentru accesarea serverului web poate fi att un browser ct i un alt program
capabil s se conecteze la un port TCP (de exemplu: telnet, ftp, etc.).
Browserul [site31] este un program folosit la afiarea de coninut web. Acesta se impune s
poat s interpreteze pagini HTML, s afieze imagini i alte forme de coninut multimedia, s
foloseasc referine (link-uri) etc. Cea mai important caracteristic a sa este capacitatea lui de a
se conecta prin protocolul TCP la un server web. Metoda de conectare s-a prezentat anterior. n
acest context se impune s se precizieze c introducerea unei adrese web (de exemplu:
http://www.ubbcluj.ro/exemplu.html) n browser, determin executarea urmtorilor pai:
[site31][site8][Boian1997] .[stanca2007]
8: Browser-ul determin protocolul pe care l va folosi n dialogul cu serverul web (http:// =
HTTP - HyperText Transfer Protocol).
9: Browser-ul determin adresa web a serverului (www.ubbcluj.ro).
10: Browser-ul determin ce anume trebuie s cear de la serverul web, adic pagina html
numit exemplu.html.
11: Browser-ul determin adresa IP a mainii pe care ruleaz serverul web prin interogri
DNS (Domain Name Service) pe baza adresei web introdus n address bar.
12: pe baza adresei IP determinat anterior, browserul va crea o conexiune TCP pe portul
specificat n URL sau implicit pe portul 80.
13: Browser-ul lanseaz o cerere GET sau POST ctre server specificnd fiierul dorit: GET
/exemplu.html.
14: Serverul web rspunde trimind fiierul dorit sau o eroare corespunztoare n cazul n
care trimiterea nu este posibil (lipsa fiierului, drepturi de acces insuficiente etc.). Aici
conexiunea dintre client i server se ncheie.
15: Browser-ul analizeaz fiierul primit i l afieaz corespunztor.
Browser-ele cele mai cunoscute i deci cele mai folosite sunt: Microsoft Internet Explorer,
Mozilla, Netscape, Opera, Lynx, etc.[stanca2007]

1.3. MySQL concepte de baz, caracteristici


MySQL este cel mai popular sistem de management pentru baze de date relaionale deoarece
este open-source. MySQL Server a fost creat pentru a lucra cu baze de date mai rapid dect
soluiile deja existente la ora actual pe pia [Graeme-site].
Facilitile oferite de MySQL sunt variate, dintre care se vor preciza urmtoarele
[BuBois2001]:
posibilitatea accesului concurent la date de ctre un numr nelimitat de utilizatori;
capacitatea de a gestiona pn la 50000000 de nregistrri i chiar mai multe;
execuia foarte rapid a comenzilor, poate chiar cea mai rapid din cele existente pe pia;
sistem uor i eficient de gestiune a drepturilor utilizatorilor;
este gratuit, fapt ce a atras extinderea fr precedent a folosirii acestui server de baze de
date.
MySQL este un sistem de gestiune a bazelor de date. Pentru a aduga, insera i procesa datele
memorate pe un calculator este nevoie de un astfel de sistem de gestiune a datelor. Avnd n
vedere c toate calculatoarele sunt destinate pentru memorarea informaiilor, managementul

bazelor de date joac un rol decisiv, att n gestiunea datelor ca activitate de sine stttoare, ct i
n cadrul aplicaiilor ample [BuBois2001].
MySQL este un sistem multiuser (permite s fie folosit concomitent de mai muli utilizatori) i
multithread (prezint mai multe fire de execuie). Utilizeaz SQL, limbajul standard de
interogare a bazelor de date.[WellingThomson2005]
MySQL este un sistem de gestiune a bazelor de date relaionale. Tabelele sunt conectate prin
relaii predefinite, fapt ce face posibil combinarea datelor din mai multe tabele, la cerere.
MySQL este un produs open source.
MySQL este un sistem client-server care este alctuit dintr-un server SQL multithread care are
faciliti pentru mai muli utilizatori, mai multe programe i biblioteci client, instrumente de
administrare i un numr mare de interfee de programare. Avnd n vedere c MySQL suport o
gam variat de produse software, exist posibilitatea ca multe din limbajele de programare deja
folosite de anumii utilizatori s suporte deja interfaa cu acest produs [BuBois2001].
Orice main care dorete s proceseze interogri asupra unei baze de date MySQL trebuie s
ruleze MySQL server-MySQLd-, care este responsabil de tot traficul de tip incoming sau
outgoing cu baza de date. Ca orice server, MySQLd primete pe un port particular (3306)
eventualele cereri de conexiune ale unui client care trimite cereri ctre o baz de date via
MySQLd. Acest client poate fi un script n PHP care, graie modelului DBI, poate trimite o
cerere ctre baza de date prin intermediul serverului MySQL, sau chiar clientului command-line
MySQL. Clientul MySQL este o interfa interactiv pentru trimiterea de comenzi ctre server
[BuBois2001].
1.3.1. Modul de funcionare a unui server de baze de date pentru Web
Funcionarea unui server de baze de date pentru Web, n cazul nostru MySQL, implic
existena a dou elemente: un browser Web i un server. ntre aceste dou elemente se impune s
existe un canal de comunicare. Serverul de Web funcioneaz n moduri diferite n urmtoarele
situaii: [WellingThomson2005]
n cazul n care server-ul lucreaz cu pagini de web statice, un browser Web (clientul)
formuleaz cererea ctre server, iar serverul trimite napoi un rspuns.
n cazul n care server-ul lucreaz cu pagini web dinamice care preiau datele dintr-o baz
de date i le afieaz se realizeaz urmtorii pai: [WellingThomson2005]
browser-ul web al unui utilizator emite o cerere HTTP pentru o anumit pagin Web;
server-ul web recepioneaz cererea i transfer fiierul ctre motorul PHP, n cazul nostru,
pentru prelucrare;
motorul php ncepe analiza paginii. n interiorul unei pagini web dinamice exist o
comand care realizeaz legtura la baza de date i execut interogrile pe care le trimite
serverului MySql;
serverul MySQL recepioneaz interogarea bazei de date i o prelucreaz, iar apoi trimite
rezultatele motorului PHP;
motorul PHP afieaz rezultatele furnizate de server-ul MySQL formatate ntr-un cod
HTML pe care l returneaz server-ului Web, n cazul nostru Apache.
Server-ul Web transmite codul HTML browser-ului, unde utilizatorului i se afieaz rezultatul
dorit de acesta.

1.3.2. Tipuri de date SQL


Crearea unei baze de date relaionale presupune crearea unuia sau mai multor tabele legate
ntre ele. n procesul de creare a unui tabel are loc stabilirea numelor cmpurilor acestuia ct i a
tipurilor de date prin care unui utilizator i se indic ce date are voie s introduc n acestea. n
funcie de tipurile de date alese pentru fiecare coloan a tabelei se aloc pe disc un spaiu de
memorie. n aceast situaie este indicat o cunoatere aprofundat a acestora, deoarece acest
fapt va permite creatorului tabelei s aleag tipul de date potrivit pentru fiecare coloan a tabelei
astfel nct aceasta s ocupe un spaiu de memorie optim pe disc i n acelai timp s rspund
nevoilor utilizatorilor acesteia. De exemplu, dac se dorete s se defineasc un cmp Vrsta n
cadrul unei tabele Personal este bine ca acesta s fie de tipul TINYINT deoarece acesta se
definete pe un interval numeric ce cuprinde valoarea numeric care poate fi introdus ntr-un
astfel de cmp. Un individ poate tri n intervalul (0,100) aa cum s-a observat pn n momentul
de fa. Pentru fiecare nregistrare introdus n tabela Elevi pentru cmpul Vrsta se va aloca 1
byte de memorie.
Tipurile de date folosite n procesul de creare a tabelelor din cadrul bazelor de date MySql,
sunt [site9] [site10] [site11] [Chip2/2003]:
2.3.1Tipuri numerice sunt: TINYINT, SMALLINT, MEDIUMINT, INT sau INTEGER,
BIGINT, FLOAT, REAL sau DOUBLE, NUMERIC
2.3.2Tipurile de dat calendaristic sunt : DATETIME, DATE, TIMESTAMP, TIME, YEAR ;
2.3.3irurile de caractere se mpart n trei grupuri i anume: iruri normale definite prin tipul
CHAR (fixed length character), respectiv VARCHAR (variable length character), iruri
text definite prin tipul TEXT respectiv BLOB (pentru iruri lungi sau date binare) i
irurile care folosesc SET respectiv ENUM pentru valori predefinte.[site11]
3.3. Operaii asupra bazelor de date n MySQL
O regul de baz n MySql este c majoritatea comenzilor tastate n monitorul MySQL de
clieni pentru a fi transmise serverului se termin cu ;. Caracterul ; indic server-ului de baze
de date MySql c s-a terminat introducerea unei comenzi i deci o poate procesa i afia
rezultatul.
Crearea unei aplicaii Web dinamice, n marea majoritate a lor, implic crearea unei baze de
date alctuit din una sau mai multe tabele legate ntre ele. Crearea unei astfel de baze de date n
MySql, pentru un magazin virtual care se ocup cu comercializarea produselor IT, se realizeaz
cu comanda:
mysql> create database nume_baz_de_date;
nume_baz_de_date va trebui s fie nlocuit cu numele pe care utilizatorul dorete s l
acorde bazei lui de date, n cazul nostru magazin.
Vizualizarea bazelor de date existente pe server-ul Mysql de ctre administrator se face cu
comanda: [Chip2/2003]:
mysql> SOW DATABASES;
Interogarea de mai sus se termin cu punct i virgul deoarece toate comenzile SQL trebuie
ncheiate astfel pentru a semnala server-ului c s-a terminat de scris propoziia i c se poate
trece la procesarea cererii. Rezultatul procesrii comenzii de mai sus este afiarea tuturor bazelor
de date existente n directorul data a serverului MySQL.

Selectarea unei baze de date ca fiind cea curent se face prin comanda:
USE nume_baza_de_data;
Pasul urmtor n procesul de creare a unei baze de date l constituie crearea tabelelor ce o
compun. Comanda de crearea a unui tabel are urmtoarea sintax:
CREATE TABLE nume_tabel (nume_cmp tip_cmp);
n procesul de creare a unui tabel activitile sunt:
denumirea cmpurilor;
alegerea unui tip de date potrivit pentru fiecare cmp;
definirea atributelor pentru fiecare cmp n parte;
stabilirea coloanei care va juca rolul de cheie primar sau secundar cu ajutorul creia se
va stabili legtura ctre alte tabele ale bazei de date.
Indexii pentru o tabel se pot crea astfel:
fie adugnd la sfritul instruciunii CREATE TABLE... comanda [Chip2/2003]
INDEX(nume_coloan_index);

fie folosind comanda: [WellingThomson2005]


CREATE [UNIQUE|FULLTEXT] INDEX nume_index ON nume_tabel (nume_coloan_index
[(lungime)[ASC|DESC],...);
tergerea unui tabel, index, baz de date sau o coloan dintr-un tabel se face folosind comanda
DROP astfel[Chip2/2003]:
DROP TABLE nume_tabel; DROP
DATABASE nume_baza_de_data;
Popularea tabelelor cu nregistrri se face prin comanda INSERT care are urmtoarea sintax
[Chip2/2003]:
INSERT INTO nume_tabel (cmp1, cmp2, cmp3) values (valoare1, valoare2, valoare3);
Comanda SELECT se folosete pentru a afia toate nregistrrile dintr-o tabel
astfel: mysql>SELECT * FROM nume_tabel;
Comanda SELECT se folosete pentru a afia toate nregistrrile dintr-o tabel
astfel: mysql>SELECT * FROM nume_tabel;
Modificarea coninutului unei nregistrri se face utiliznd comanda UPDATE care are
sintaxa[Chip2/2003]
UPDATE nume_tabel SET nume_coloan1=`noua
nume_coloan2=`noua valoare a coloanei 2` WHERE condiii

valoare

coloanei

1`,

tergerea nregistrrilor dintr-o tabel se face prin comanda DELETE care are urmtorea
sintax [Chip2/2003]:
DELETE FROM nume_tabel WHERE condiii;
n cadrul prezentului capitol au fost expuse comenzi MySQL cu ajutorul crora se poate
proiecta i dezvolta o baz de date care s corespund n totalitate nevoilor unui magazin virtual
care ar putea avea, de exemplu, ca obiect de activitate vnzarea de componente de calculatoare,
componente de calculatoare i nu numai.

1.4. Particulariti ale programrii procedurale n PHP

PHP este un limbaj de scripting folosit pentru crearea paginilor Web dinamice. PHP poate fi
folosit pentru scrierea unor programe stocate pe server ce acceseaz baze de date. PHP este un
limbaj eficient i securizat. Aplicaiile PHP sunt uor de configurat pentru exploatare. PHP
asigur timpi de rspuns competitivi la rularea aplicaiilor Web, asigurnd n acelai timp
securitatea informaiilor i transparena fa de utilizator [Chip2/2003].
PHP aa cum este cunoscut astzi, este, de fapt succesorul produsului numit PHP /
FI(prescurtarea de la "Interpret Forms").PHP a fostcreat n 1994 de ctre Rasmus Lerdorf. Prima
versiune PHP a fost un set binar de Common Gateway Interface (CGI),scris n limbajul de
programare C. Intre anii 1994-1999 au aprut pe pia o serie de versiuni de PHP care s-au
bucurat de succes. In 2000 s-a lansat versiunea PHP4 avnd la baz acest motor Zend Engine.
PHP 4.0 a inclus alte caracteristici-cheie, cum ar fi suport pentru mai multe servere de web,
sesiuni HTTP, cteva construcii noi ale limbajului.
PHP 4.0 a fost mprit n 3 pri:[Converse_Park_Morgan_2005]
1.Motor de baz(ZEND)- responsabil cu parsarea codului PHP i cu sintaxa limbajului
2.Server API(SAPI)- handlere de comunicare i interfaa cu servere web, permit ca PHP s se
integreze uor cu alte server web. De ex, are un modul ISAPI pentru a perimte ca PHP s lucreze
cu Internet Information Server(IIS)
3. Module funcionabile: MySql,XML,IMAP etc
PHP5.0 a fost lansat n iulie 2004, dup cteva lansri preliminare, se bazeaz pe Zend Engine
2.0,ofer suport OOP i zeci de alte caracteristici noi(clase i obiecte se creaz mult mai simplu
dect n PHP 4.0, se mbuntete integrarea dintre PHP i MySql, permite scrierea de XML
curat), ofer suport nativ pentru SQLite, pentru SOAP integrat, iteratori pentru date icontrolul
erorilor prin tratarea de excepii [Converse_Park_Morgan_2005]
PHP 6[site96] a fost lansat n decembrie 2007, i a adus att nouti ct i modificri la
versiunile anterioare, mai exact: mbuntirea suportului pentru Unicode;retragerea definitiv a
unor funcii ca register_globals imagic_quotes, ia variabilelor tip $HTTP_*_VARS; var va fi
un alias pentru public, ifolosirea lui va ridica o atenionare E_STRICT; suport pentru int pe 64
bii; taguri tip ASP sunt retrase definitiv; XMLReader, XMLWriter, Fileinfo sunt incluse n
distribuia principal; pachete Freetype1, GD1, mime_magic au fost scoase din distribuia
principal; funcia ereg() nu mai este disponibil; instanierea obiectelor prin referin (& new
Obiect()) genereaz o eroare E_STRICT; erorile tip E_STRICT sunt incluse n E_ALL;
adugarea instruciunii goto permite salturi la un alt bloc de comenzi; namespace, import, igoto
devin cuvinte rezervate; accesarea caracterelor ntr-un ir (string) se face prin operatorul []. {} se
scoate din uz ( ex: $str[42] funcioneaz, $str{42} nu funcioneaz); constantele FILE_BINARY
i FILE_TEXT devin disponibile pentru folosirea n funcii de citire/scriere fiiere; foreach va
suporta array multi dimensional: foreach($c as $b => list($a, $d)); pentru operatorul ternar
expresia pentru valoarea true nu mai este obligatorie ($x = $z ?: s; // returns $x = $z;) opiunea
safe_mode a fost nlturat;operatorul and a fost nlturat; funcia microtime() returneaz un
float; zend.ze1_compatibility_mode a fost nlturat.
Limbajul PHP [site97]este un limbaj de programare structurat, ca iC-ul, Perl-ul sau ncepnd
de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinaie a celor trei. PHP se poate
utiliza att pentru a dezvolta aplicaii de sine stttorare, datorit modularitii sale ct in linia
de comand ca Perl sau Python. PHP permite frr dificuti, conlucrarea cu majoritatea bazelor
de date relaionale, de la MySQL ipn la Oracle, trecnd prin MS Sql Server, PostgreSQL, sau
DB2.

Limbajul PHP-ul poate fi folosit pe aproape toate marile sisteme de operare, incluzand Linux,
multe variante de Unix , Microsoft Windows, Mac OS X, probabil si altele. PHP are deasemenea
suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache,
Microsoft Internet Information Server, Personal Web Server, Netscape , iPlanet si multe altele.
Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte care suporta standardul CGI,
PHP putand sa lucreze ca un procesor CGI.
Cu PHP nu exista limitare in obtinerea unor rezultate doar HTML. Posibilitatile limbajului
PHP-ului includ afisarea de imagine, fisiere PDF si chiar filmulete Flash. PHP suporta incarcarea
fisierelor de pe calculatorul client upload si ofera suport pentru cookies.
PHP este un limbaj ideal pentru construirea de pagini Web dinamice. El poate fi rulat pe mai
multe platforme i se poate conecta la mai multe baze de date, n particular baze de date
relaionale create cu MySQL. Cel mai important aspect al limbajului este ns posibilitatea de a fi
inclus n cod HTML. Se pot crea pagini HTML statice i din loc n loc, acolo unde este nevoie,
s se introduc dinamism cu PHP.
Limbajul PHP fiind open-source beneficeaz de un sprijin activ din partea comunitii on-line,
acesta fiind i motivul creterii explozive a numrului de site-uri bazate pe acest limbaj.
Limbajul PHP ofer urmtoarele faciliti [Welling2001]:
manipularea coninutului paginilor web;
transmiterea header-elor HTTP pentru autentificare;
setarea cookie-urilor;
redirecionarea utilizatorilor;
asigurarea spargerii (paser) fiierelor XML;
crearea i manipularea imaginilor, animaiilor i a PDF-urilor;
conectarea la un server de e-mail.

4.1. Principiul de funcionare a tehnologiei Web pe parte de server

( limbajului PHP)

Modul de funcionare a limbajului PHP este urmtorul: browser-ul trimite ctre server-ul Web
o cerere HTTP pentru un fiier PHP. Server-ul recunoate c fiierul cerut conine cod PHP, n
consecin va lansa parser-ul PHP, care va primi la intrare fiierul respectiv. Parser-ul va
identifica secvenele PHP, care n cadrul codului HTML sunt cuprinse ntre marcajele <? i ?
> i le va interpreta. Tot ce nu este cod PHP este trimis spre ieirea standard fr nici o
prelucrare. Codul PHP poate scrie la rndul su n ieirea standard prin comenzile prestabilite
cum ar fi echo sau print. n final serverul Web interceptez ieirea standard a parser-ului i
transfer totul browser-ului care a cerut pagina [McCarty2002].
PHP, i ntr-o anumit msur i alte limbaje Web, prezint urmtoarele caracteristici
[Welling2001]:
este interpretativ;
execuia este rapid deoarece interpretorul este inclus n server-ul Web, prin urmare nu
se cheltuiesc resurse cu configurarea;
este bogat n faciliti, coninnd numeroase funcii utile;

are o sintax simpl, variabilele nu trebuie declarate, tipul acestora se stabilete la


iniializarea lor cu o valoare i n plus numele de funcii sunt intuitive.

Crearea paginilor PHP se reduce la editarea unui fiier PHP care se poate realiza n orice editor
de texte: Notepad, editoare PHP, etc. i acesta poate conine: [Converse_Park_Morgan_2005]
text;
tag-uri HTML sau XML;
comenzi i instruciuni PHP;
comenzi i instruciuni MySQL.
Pe parcursul dezvoltrii fiierului, n fereastra editorului de texte Notepad se va aciona
comanda Save a meniului EDIT dup fiecare modificare adus fiierului, apoi Refresh n browser
pentru reflectarea modificrilor astfel efectuate (folosirea butoanelor Back i Forward din
browser trebuie s fie urmat de asemenea de Refresh). Cu condiia ca fiierele s fie salvate
corect, iar URL-urile locale s fie scrise corect, pentru fiecare pagin PHP la care se lucreaz
simultan trebuie deschis cte o fereastr a editorului.
O pagin PHP se salveaz cu extensia php n directorul serverului Apache numit htdocs i se
va accesez n browser astfel: http://localhost/numefisier.php. n cazul n care se dorete ca
paginile unui site Web s se pstreze ntr-un subdirector creat n rdcina server-ului Web atunci
la lansarea n browser a site-ului web se va introduce i numele acestuia n URL astfel:
http://localhost/numesubdirector/numefisier.php. Dup lansarea n browser a unei pagini PHP se
poate folosi opiunea View source a acestuia, i se observ c se afieaz doar ieirile scriptului
(text, cod HTML, etc.), nu i codul PHP care genereaz ieirile. [Stanca2007]
1.4.2. Accesul la paginile PHP i afiarea rezultatelor acestora
Comenzile de editare a unei pagini HTML dintr-un script PHP, sunt: echo, print, print_r, i
printf. Toate aceste comenzi mai sunt folosite pentru afiarea rezultatelor unei funcii, a valorilor
unei variabile, a elementelor unui tablou, a mesajelor text, a valorilor introduse de utilizator n
cmpurile unui formular HTML, pentru a transmite valorile ncadrate ntre ghilimele la browser,
etc. Exemple cu aceste comenzi se vor realiza pe tot parcursul incursiuni n limbajul PHP.
n cele ce urmeaz se prezint un exemplu de pagin PHP care folosete comenzile print i
echo pentru afiarea n browser a unui pagini web statice ce va conine dou mesaje text.
<?php
echo Exemplu de text scris cu
echo; print Exemplu de text scris
cu print; ?>
n momentul cnd fiierul de mai sus este solicitat de un utilizator, server-ul Web va
recunoate fiierul ca fiind o pagin PHP datorit faptului c are extensia .php. nainte de a
trimite fiierul ctre browser-ul utilizatorului server-ul Web va prelucra scriptul din fiier. n
cazul exemplului anterior, scriptul din fiier este codul surs scris ntre <?...?>. Dup prelucrarea
scripturilor va rezulta o pagin HTML n care codul surs PHP se va nlocui cu rezultatul
acestuia.
1.4.3. Particulariti ale programrii procedurale n PHP: variabilele PHP
Variabilele PHP nu trebuie declarate ci sunt create automat n momentul primei utilizri. n
acest moment li se definete tipul de date. Aceast facilitate permite programatorului
posibilitatea dezvoltrii rapide a unor aplicaii complexe. Odat ce o variabil a fost creat ea

poate fi folosit oriunde n program, cu excepia funciilor, unde trebuie inclus explicit n zona
local de alocare prin funcia global. Sintaxa unei variabile PHP este:
$nume_variabil=valoare;
unde valoare poate fi de orice tip.
Comentariile se realizeaz cu semnul // n cazul n care se comenteaz pe un singur rnd. n
cazul n care se dorete inserarea n codul surs a unui cometariu pe mai multe rnduri se
folosete semnul /*...*/. Aceste comentarii nu sunt interpretate de browser i se folosesc la
explicarea codului surs.
Tipurile de variabile acceptate de PHP sunt:
Integer [WellingThomson2005] [Chip2/2003] care se utilizeaz pentru numere ntregi, de
exemplu: 5,-5,90.
String [WellingThomson2005] [Chip2/2003] care se utilizeaz pentru iruri de caractere. Un
string este o succesiune de caractere (ir) ncadrate ntre ghilimele.
3.Float (Double) [WellingThomson2005] [Chip2/2003] care se utilizeaz pentru numere reale;
4.Boolean [WellingThomson2005] [Chip2/2003] utilizat pentru a defini o valoare de adevr
TRUE sau FALSE. Acest tip se folosete, n general, pentru a face diferite verificri n procesul
de programare. De exemplu, se verific dac un anumit produs exist n tabela Produse. n
cazul n care acesta exist se va returna TRUE i datele despre acest produs vor putea fi afiate
pe ecran, n caz contrar se va returna FALSE i date despre acesta nu se vor putea afia n
browser.
5.Array [WellingThomson2005] [Chip2/2003] se utilizeaz pentru extragerea mai multor date
de acelai tip. Un array poate fi considerat ca fiind un tablou n care fiecrei valori i corespunde
un numr, adic un indice (o poziie).
Variabilele superglobale sunt: [WellingThomson2005]
$_SERVER este un tablou ce conine variabile de mediu ale serverului;
$_GET este un tablou ce conine variabile transferate scriptului prin metoda GET;
$_POST este un tablou ce conine variabile transferate scriptului prin metoda POST;
$_COOKIE este un tablou ce conine blocuri cookie;
$_FILES este un tablou ce conine variabile legate de ncrcarea fiierelor;
$_REQUEST este un tablou ce conine toate variabilele introduse de utilizator, inclusiv
coninutul intrrilor din $_GET, $_POST i $_COOKIE;
$_SESSION este un tablou ce conine variabile de sesiune.
Variabilele globale cele mai folosite sunt:[site19]
$_SERVER['REMOTE_ADDR'] are misiunea de a returna adresa IP a vizitatorului;
$_SERVER['HTTP_USER_AGENT'] are misiunea de a returna informaii despre browserul folosit;
$_SERVER['HTTP_REFERER']are misiunea de a returna adresa paginii vizitat anterior;
$_SERVER['SERVER_NAME']are misiunea de a returna numele serverului;
$_SERVER['SCRIPT_NAME']are rolul de a returna numele fiierului php accesat.
O constant are un tip i o valoare. Att tipul, ct i valoare, sunt determinate de caracterele
care intr n componena constantei. Valoare unei constante nu poate fi schimbat n timpul
execuiei programului n care a fost utilizat. [Negrescu2000]
Constantele se caracterizeaz prin: [site16]
li se atribuie o valoare care nu poate fi modificat sau ters de-a lungul execuiei
programului;
constantele nu prezint n sintaxa lor simbolul $ ;

numele unei constante este o succesiune de litere i eventual cifre, primul caracter este n
mod obligatoriu liter. Aceasta este case sensitiv.
constantele au un caracter global.
definirea constantei se realizeaz cu funcia define().
4.4. Operatori

Interpretorul PHP permite folosirea a nou tipuri diferite de operatori. Acetia opereaz asupra
unor expresii (una, doua sau trei) i furnizeaz ca rezultat o alt expresie care este rezultatul
operaiei corespunztoare.[site14]
Operatorii aritmetici acioneaz asupra a doi sau mai muli operanzi. Acetia sunt: [site14]
[WellingThomson2005] [Chip2/2003]
adunare ('+');
scdere ('-');
nmulire ('*');
mprire ('/');
restul mpririi ('%').
Operatorii relaionali se folosesc n procesul de compararea a dou valori, variabile, constante,
etc. Expresiile n care acetia apar au ca rezultat valori logice (true sau false). Aceti operatori
sunt:
Operatorul de atribuire definit de semnul = are rolul de a atribui unei variabile,
constante o valoare.
Operatorul de egalitate se definete prin semnul == i se folosete pentru a compara
dou valori, expresii, etc.
Operatorul diferit este definit prin semnul != i se folosete n acelai scop ca i
operatorul de egalitate.
Operatorul mai mare este definit de semnul > .
Operatorul mai mare egal este definit de semnul >= .
Operatorul mai mic este definit de semnul < .
Operatorul mai mic egal este definit de semnul <=.
Operatorul condiional se definete prin semnul '?'. Acest operator are sintaxa:
expresie1?expresie2:expresie3
Operatorul condiional returneaz valoarea expresiei expresie2 n cazul n care valoarea
expresiei expresie1 este true, n caz contrar va returna valoarea expresiei expresie3.
Operatorul de concatenare este un operator ce se aplic asupra irurilor de caractere. Acest
operator este definit prin semnul . Operaia de atribuire a concatenrii este definit prin semnul
.=
Operatorii logici se folosesc n cazul n care se lucreaz cu valori de adevr. Aceti operatori
sunt:
9. Operatorul xor (SAU exclusiv) expresia n care apare operatorul 'xor' va avea valoarea
true dac exact unul dintre operanzi are aceast valoare.
10. Operatorul de negare este: ! (NOT) returneaz TRUE dac valoarea iniial de adevr e
FALSE i FALSE dac valoarea iniial este TRUE.
11. Operatorul sau logic este || (OR) returneaz TRUE dac oricare din valorile verificate e
TRUE. Returneaz FALSE doar dac amndou valorile verificate sunt FALSE.

4. Operatorul i logic este: && (AND) returneaz FALSE dac oricare dintre valori este
FALSE (sau dac amndou sunt FALSE) i n caz contrar returneaz TRUE
1.4.5. Structurile de control
n cadrul unei pagini web care folosete scripturi PHP fr s existe o delimitare clar, impus
de PHP pentru zona de declaraii i zona de instruciuni aa cum se ntmpl n alte limbaje de
programare cum ar fi, de exemplu, activitatea de declarare a variabilelor i constantelor se reduce
la iniialializarea lor cu o valoare. n php nu se va scrie explicit tipul de date a unei variabile sau
constante deoarece acesta se deduce n mod automat dup ce acestora li s-a atribuit o valoare.
[stanca2007]
Prelucrarea datelor n scripturile PHP, ca i n orice alt limbaj de programare, se face cu
ajutorul instruciunilor. Ordinea n care se execut instruciunile n cadrul scripturilor definete
aa numita structur de control a acestora. [stanca2007]
Structurile de control complexe prezente n PHP sunt: [stanca2007]
structura alternativ care se realizeaz cu ajutorul instruciunii IF;
structura repetitiv condiionat anterior care se realizeaz cu ajutorul instruciunilor
WHILE, FOR i FOREACH;
structura repetitiv condiionat posterior care se realizeaz cu ajutorul instruciunii DOWHILE;
structura selectiv care se realizeaz cu ajutorul instruciunii SWICH.
instruciuni folosite n cadrul ciclurilor care ofer o flexibilitatea mare n programarea n
PHP sunt: CONTINUE, BREAK i RETURN.
Instruciunea expresie se obine scriind punct i virgul dup o expresie. Deci, formatul acestei
instruciuni este: [Negrescu2000]
expresie;
n cazul n care componenta instruciunii expresie este o expresie de atribuire aceast
instruciune se transform n instruciune de atribuire [Negrescu2000],
Instruciunea break; se folosete cnd se dorete s se ntrerup forat execuia unui ciclu i
trecerea la urmtoarea instruciune existent imediat dup acesta. Aceast instruciune poate fi
folosit n cadrul instruciunilor WHILE, DO-WHILE, FOR, FOREACH i SWITCH.
Instruciunea continue; se poate utiliza numai n corpul unui ciclu, avnd ca efect abandonarea
iteraiei curente. Sintaxa ei este:[Negrescu2000] [WellingThomson2005]
continue;
Efectul acestei instruciuni este:[Negrescu2000;]
n corpul instruciunilor WHILE, DO-WHILE, se ntrerupe iteraia curent i se trece la
evaluarea condiiei care stabilete continuarea sau terminarea ciclului.
n corpul instruciunilor FOR, FOREACH, se ntrerupe iteraia curent i se trece la
executarea pasului de reiniializare.
Instruciunea return;[Negrescu2000] [WellingThomson2005] este o instruciune de revenire
dintr-o funcie cu urmtoarele dou formate:
return;
return $expresie;
Primul format al acestei instruciuni se folosete n corpul unei funcii care nu returneaz nici
o valoare, dar la ntlnirea acestei instruciuni se iese forat din ea.

Cel de al doilea format se folosete n cadrul unei funcii care ntoarce o valoare la ieirea din
aceasta $expresie deinnd valoarea ntoars de funcie.
Instruciunea exit; [WellingThomson2005] are rolul de a opri execuia ntregului script PHP.
Aceast instruciune se folosete n depistarea i corectarea erorilor din cadrul unui script PHP.
Instruciunea declare [WellingThomson2005] se folosete la stabilirea directivelor de
executare/rulare a unui cod surs. Pn n prezent a fost implementat o singur directiv de
executare, numit ticks care se stabilete astfel: ticks=n (se permite rularea n cadrul unui cod
surs a unei funcii dup fiecare n linii de cod) Sintaxa acestei instruciuni este:
declare(directiv){ set instruciuni;}
Funciileinclude(); i require(); sunt echivalente i au rolul de a insera coninutul unui fiier n
cadrul unui scipt PHP n locul acestora. Diferena dintre cele dou funcii este c n caz de eroare
require(); va produse o eroare fatal, n timp ce construcia include(); va afia un mesaj de
eroare.
1.4.6. Tab lou ri
n majoritatea limbajelor prin tablou se nelege o mulime de date de acelai tip cu acceai
structur. Tablourile sunt alctuite din elemente i indici. n PHP i nu numai, tipurile cele mai
utilizate de tablouri sunt: tablouri unidimensionale i bidimensionale. n cadrul unui tablou
activitile care se pot realiza sunt:
1.Crearea tablourilor n PHP se realizeaz prin atribuirea explicit a unei valori fiecrui elemet
al acestuia, cu funciile array();. Sintaxa funciei array(); este:[site21]
array( [index=>] value, ... );
unde
index poate fi de tipul integer sau string;
valoare poate fi de orice tip.
Funcia array(); permite crearea n dou moduri a tablourilor i anume:
a)Primul mod de creare a unui tablou cu funcia array const n omiterea parametrului opional
numit indice, existent n sintaxa acesteia, rezultatul fiind urmtorul: [Stanca2007]
<? $oamenii_la_masa = array(Mila,Cristian,Mioara) ;?>
Funcia array(); este de fapt o construcie a limbajului PHP la fel ca echo. n exemplul de mai
sus s-a creat un tablou numit $oamenii_la_masa care conine 3 elemente de tipul string.
b) Al doilea mod de creare a unui tablou cu funcia array(); const n folosirea parametrului
opional numit indice, existent n sintaxa acesteia, rezultatul fiind urmtorul: [Stanca2007]
<?$oamenii_la_masa = array (33=>Irinel, 2=>Mioara, 7=>Victorel ) ;?>
Deci, indici tabloului nu vor fi 0,1 i 2 ci cei precizai de cel care creaz tabloul. n exemplul
anterior indicii tabloului vor fi 33, 2, 7.
Tablourile n PHP mai pot fi create fr utilizarea funciei array(); prin atribuirea explicit de
valori fiecrui element al acestuia, ca n urmtoarul exemplu: [Stanca2004.3]

< ? $oamenii_la_masa[0]= "Irinel" //elementul este Irinel iar indicele este


0. $oamenii_la_masa[1]= "Mioara" //elementul este Mioara iar indicele este
1.

$oamenii_la_masa[2]= "Victorel" //elementul este Victorel iar indicele este 2. ?>


Aciunea de creare unui tablou n PHP se mai poate efectua cu ajutorul funciei range();.
Aceast funcie are rolul de a crea un tablou sortat cresctor astfel: [Stanca2007]
<? $tablou_caractere = range(A,Z);
//se creaz un tablou care are ca elemente literele alfabetului
$tablou_numeric = range(10,100);
//un tablou creat din elemente numerice cu valori de la 10
la100. $tablou_numeric2 = range(10,100,10);
// un tablou creat din elemente numerice cu valori de la 10 la100 din 10 n 10. ?>
2.Modificarea datelor din tablouri se realizeaz cu urmtoarea sintax: [Stanca2004.3]
$nume_tablou[indice]=valoare ;//indice poate fi att de tipul ntreg
// ct i de tipul string
sau
$nume_tablou[]=valoare
;
n cazul tabloului creat n exemplele anterioare dac se dorete s se modifice valoarea
existent pe poziia a doua, adic n loc de "Marian" la mas s fie "Mirina" se va face astfel:
[Stanca2007]
<? $oamenii_la_masa =
array(Ionela,Marian,Mirel); $oamenii_la_masa[1]=
"Mirina";
print_r($oamenii_la_masa);
// afieaz datele din tabel mpreun cu indicii acestora ?>
3.tergerea[site21] unui tablou se face cu ajutorul funciei unset();. Dac se dorete s se
tearg toate elementele unui tablou se procedeaz astfel:
<? $oamenii_la_masa =
array(33=>Ionita,Morico,Tinel) ;
unset($oamenii_la_masa);// tergerea unui tablou
foreach($oamenii_la_masa as $element)
echo $element; // nu se va afisa nimic dearece tablou e ters ?>
tergerea unui element din tablou se realizeaz astfel:
<?$oamenii_la_masa = array(Irinel,Maria,Victorel);
unset($oamenii_la_masa[2]); // se terge elementul Victorel
foreach($oamenii_la_masa as $element)
echo $element; // se vor afia doar primele 2 elemente ale tabloului ?>

4. Copierea datelor din tabloul $oamenii_la_masa n tabloul $oamenii_la_masa1 se face


utiliznd operatorul de atribuire astfel: [Stanca2007]

< ? $oamenii_la_masa1 =$oamenii_la_masa;?>


5.Afiarea datelor dintr-un tablou se face folosind construcia echo, numele tabloului i indicii
pe care s-au memorat elementele tabloului ca n exemplul urmtor : [Stanca2007]
< ?$oamenii_la_masa = array(Crinela,Mirita,Vivi)
echo "$oamenii_la_masa[0] $oamenii_la_masa[1] $oamenii_la_masa[2]"; ?>
Afiarea datelor se mai poate realiza folosind ciclul FOR astfel:
<?$oamenii_la_masa = array(Crinela,Mimirita,Victor);
for($i=0;$i<=count($oamenii_la_masa);$i++)
echo "$oamenii_la_masa[$i]";?>
Afiarea datelor se mai poate realiza cu ciclul FOREACH, destinat n principal prelucrilor
datelor unui tablou, a crei sintax i mod de execuie a fost prezentat anterior. Acest ciclu va
avea nevoie de o variabil n care se vor depune pe rnd fiecare element al unui tablou i pe care
o va afia, ca n exemplul de mai jos:
<?$oamenii_la_masa = array(33=>Nicorici,Milica,Totici)
foreach($oamenii_la_masa as $element)
echo $element; ?>

1.4.7. Tablouri multidimensionale


n PHP un tablou multidimensional este o reuniune de tablouri unidimensiomale. Deci, fiecare
element al lui este un tablou. Crearea tablourilor multidimensionale n PHP se realizeaz prin
declararea mai multor tablouri unidimensionale ce reprezint linile tabloului iar elementele
acestora reprezint coloanele. Sintaxa funciei array(); pentru crearea tablourilor
multidimensionale este:[site21]
array( [index1 =>] array ([index=>] value, ... ),
[index2 =>] array ([index=>] value, ... ),
...
[indexn =>] array ([index=>]
value, ... ) );
unde
index1,...,indexn poate fi un sting sau un ntreg formnd liniile tabloului.
index poate fi de tipul integer sau string. Acest index poate fi identic (nu e obligatoriu) pentru
fiecare linie fiind interpretat ca numele coloanelor tabloului declarat;
valoare poate fi de orice tip.

1.4 .7 .1 . Afiarea i parcurgerea elementelor unui tablou


multidimensional

Afiarea elementelor unui tablou multidimensional att n PHP ct i n alte limbaje de


programare necesit folosirea a dou ciluri FOR cu ajutorul crora s se parcurg att linile ct i
coloanele acestuia. Aceast aciune se poate realiza ca n exemplul urmtor : [Stanca2007]
<?$oamenii_la_masa = array( array('Viorel','elev',10),
array('Maria','profesor',39),
array('Ionel','pensionar',76) );
for($i=0;$i<count($oamenii_la_masa);$i++)
{ for($j=0;$j<count($oamenii_la_masa[$i]);$j++)
{ echo $oamenii_la_masa[$i][$j];}
echo '<br/>';}?>
1.4.7.2. Operatori folosii n prelucarea datelor din tablouri

PHP prezint operatori care acioneaz att asupra variabilelor care, au fost prezentate n
paginile anterioare ct i asupra tablourilor. Operatorii care acioneaz asupra tablourilor sunt:
[WellingThomson2005]
operatorul reuniune care este reprezentat prin +. Efectul acestui operator este c se
adaug la sfritul primului tablou elementele tabloului de pe a doua poziie eliminndu-se
indicii care sunt dubluri.
operatorul egalitate reprezentat prin = = returneaz TRUE dac tablourile care se
compar au elemente identice altfel returneaz FALSE.
operatorul identitate reprezentat prin = = returneaz TRUE dac tablourile care se
compar au aceleai elemente i n aceeai ordine, altfel returneaz FALSE.
operatorul diferit reprezentat ! = sau <> returneaz TRUE dac tablourile conin
elemente diferite, altfel returneaz FALSE.
operatorul ! = = returneaz TRUE dac tablourile care sunt comparate nu conin
aceleai elemente pe aceleai poziii, altfel returneaz FALSE.

4.8. Funcii

O funcie este un ansamblu alctuit din tipuri de date, variabile, constante i instruciuni scrise
n vederea unei anumite prelucrri(calcule, citiri, scrieri) i care pot fi rulate doar dac sunt
apelate dintr-un script PHP. Sintaxa unei funcii este: [Stanca2007]
nume_funcie( list parametrilor formali)
{
corp funcie;
}
unde:
list de parametrilor formali este de forma: $nume_parametru1,
$nume_parametru2,...,$nume_parametru n
Observaie: O funcie poate s prezinte o list vid de parametri formali. Corpul unei funcii
este alctuit din dou pri : [Stanca2007.3]

partea de declaraii n care se precizeaz variabilele locale;

partea de instruciuni care conine instruciunile pe care le execut funcia respectiv. O


funcie poate fi definit oriunde n cadrul unui script. n interiorul unei funcii pot s apar
orice secven valid de cod care include definirea unor alte funcii. O funcie poate fi apelat
nainte de definirea acesteia ntr-un script. Argumentele unei funcii trebuie separate prin virgul
i, implicit, acestea sunt transmise prin valoare. Pentru ca funcia s returneze un rezultat se
folosete construcia return; care primete ca parametru o expresie care reprezint valoarea
ntoars de funcie. n momentul n care este ntlnit construcia return;, execuia funciei se
ncheie. [ScarlatSoroiu]
Exemplu de apel de functie:
<?php
function declare_functie($textdeafisat){
echo "<h1>$textdeafisat </h1><br>\n";
}
declare_FUNCTIE("apel 1 al
functiei"); dEclare_Functie("apel 2 al
functiei"); Declare_functie("apel 3 al
functiei"); ?>
Din exemplu de mai sus rezult ca n PHP nu se ine cont de modul n care este scris un nume
de funcie.
O funcie definit de utilizator poate avea mai muli parametrii. Exemplu de funcie definit de
utilizator care creaz un tabel html i l populeaz:
<?php
function creare_tabel($data, $border=1,$cellpadding=4,$cellspacing=4)
{ echo "<table border=$border cellpadding=$cellpadding
cellspacing=$cellspacing>"; reset($data);//se pointeaza la inceputul tabelului
$value=current($data)
; while($value){
echo
"<tr><td>$value</td></tr>\n";
$value=next($data);
}
echo "</table>;}
echo "Se apeleaza functia:";
$sirul=array('Prima linie.','Linia 2.','Linia
3.'); creare_tabel($sirul);
echo "apel cu parametrii optionali
precizati:<br/>"; creare_tabel($sirul,3,8,8);
creare_tabel($sirul,3); ?>
Observaie: Nu trebuie s se precizeze toi parametrii opionali. Parametriivor fi atribuii de la
stnga la dreapta.Nu se poate sri peste un parametru opional i s se precizie urmtorul. Dac
se dorete s se atribuie o valoare lui cellspacing n mod obligatoriu se atribuie i lui cellpading o
valoare. n general parametrii opionali se precizeaz ultimii ntr-o lista de parametrii.
n PHP ca n orice alt limbaj de programare se folosesc 2 metode de trasmitere a valorilor i
anume:
1.Transferul prin valoare:metoda implicit prin care se apeleaz parametrii unei funcii. La
transferul unui parametru se creaz o variabila nou care conine valoarea transferat, de fapt

este o copie a originalului.Prin aceast metod, se poate modifica valoarea din cadrul unei funcii
n orice mod, dar valoarea variabilei din exteriorul funciei rmne nemodificat.
2.Transmiterea prin referin:atunci cnd un parametru este transferat unei funcii: funcia
primete o referin la variabila original, nu creaz o variabil nou. Aceasta referin are un
nume de variabila care incepe cu semnul dolarului i poate fi folosit exact ca orice variabil.
Diferena constn faptul c aceast ultim variabiln loc s dein propria valoare ea se refer la
valoarea variabilei originale.Toate modificrile facute asupra referinei afecteazi originalul. n
PHP, pentru a se specifica faptul ca pentru un parametru se folosete transferul prin referina, se
trece un ampersant (&) n faa numelui parametrului,n definiia funciei. n apelul funciei nu se
face nici o modificare.
.
9. 4.9. Funcii predefinite

Funciile predefinite se mpart n urmtoarele categorii:[Stanca2007]


1. Funciile matematice sunt:[site18]
max(x,y,...) returneaz valoarea maxim a unui set de valori;
min(x,y,...) returneaz valoarea minim a unui set de valori;
pow(x,n) returneaz numrul x, ridicat la puterea specificata n;
sqrt(x) returneaz rdcina ptrat a lui x.
2. Funciile pe iruri de caractere sunt:
int strlen(string sir)[site19] are rolul de a returna lungimea irului sir primit ca
parametru.
string trim(string sir)[site19] are rolul de a elimina spaiile albe dintr-un ir primit ca
parametru.
string ltrim(string sir)[site19] are rolul de a elimina spaiile albe din stnga irului
primit ca parametru.
string rtrim(string sir)[site19] are rolul de a elimina spaiile albe din dreapta irului
primit ca parametru.
int count(string sir)[site19] are rolul de a numra elementele unui ir primit ca
parametru i returneaz numrul lor.
int strcmp (string sir1, string sir2) [McCatry2002] are rolul de a compara caracter cu
caracte cele dou iruri de caractere primite ca parametru. Valoarea returnat este:
<0, dac ir1<ir2;
=0, dac ir1=ir2;
>0, dac ir1>ir2.
string substr (string sir, int n [, int m])) [McCatry2002] are rolul de a returna un subir,
din irul primit ca parametru ncepnd cu poziia n i avnd lungimea m, n caz c m este
specificat. Din cauz c parametrul m este specificat n sintaxa funciei ntre paranteze ptrate
nseamn c este opional, deci poate lipsi i atunci se afieaz toate caracterele irului sir primit
ce parametru ncepnd cu poziia n.
string htmlspecialchars (string sir, [, int citare]) [McCatry2002] convertete toate
caracterele speciale primite ca parametru n entiti HTML
Funciile calendaristice sunt: [McCatry2002][ [Chip2/2003]
2.2.7
strftime(a) returneaz data curent, formatat conform coninutului parametrului
a;

2.2.8
date() returneaz ora, luna, anul precum i alte elemente ale datei curente n
funcie de context ;

now() returneaz data i ora curent.


hour(t) returneaz ora din cadrul parametrului. Valorile parametrului pot fi n intervalul
[0-23].
Funcia isset()va returna adevrat dac o variabil exist i are o valoare, in caz contrar va
afisa NULL.
Funciafunc_num_args () va returna numrul total de parametrii transmii unei funcii, att
cei declarai cat i cei anonimi.
4.10.Stocarea datelor n sistemul utilizatorului cu PHP
Utilizarea unui web site de ctre un utilizator presupune realizarea unor aciuni succesive care
trebuie memorate pentru a oferi acestuia informaia de care are nevoie, dar protocolul HTTP nu
ofer o astfel de facilitate fapt pentru care a aprut noiunea de cookie respectiv sesiune cu
ajutorul crora se pot pstra aceste informaii pe calculatorul utilizatorului astfel:
sesiuni au rolul de a reine informaiile care trebuie transmise de la o pagin la alta ntr-o
aplicaie PHP. ntr-o sesiune datele pot fi salvate ntr-o variabil de tip array, numit $_SESSION.
nainte de a folosi aceast variabil pentru a stoca informaiile trebuie s se apeleze funcia
predefinit de deschidere, creare sau reiniializare a sesiunii. Sintaxa acestei funcii este:
[WellingThomson2005] [site27] [McCatry2002]
session_start();
Acest funcie creaz i pornete o sesiune n cazul n care nu exist niciuna dar n cazul n
care aceasta exist o reiniializeaz. Informaiile din sesiune sunt pstrate pe server n directorul
pentru fiiere temporare, adic Temp dar acestea pot fi memorate i ntr-o baz de date.
cookie aceast noiune este utilizat generic ca bloc de date. n prezenta abordare se va
utiliza aceast noiune n sensul uzual din WWW [Microsoft1999]: ...bloc de date pe care un
server Web l stocheaz ntr-un sistem client. Cnd utilizatorul revine la site-ul Web respectiv,
browser-ul trimite serverului o copie a prjiturii. Prjiturile sunt utilizate pentru a identifica
utilizatorii, pentru a instrui server-ul s transmit o versiune personalizat a paginii Web cerute,
pentru a prezenta informaii referitoare la contul utilizatorului i pentru operaii cu caracter
administrativ. Dezavantajul folosirii doar a blocurilor cookie n programarea paginilor web
provine din faptul c pe de o parte unele browsere nu le accept, pe de alt parte exist utilizatori
care le dezactiveaz din browser-ele lor. PHP tocmai din acest considerent folosete metoda
dual bloc cookie/URL.

1.5. PHP i formulare HTML


Web-ul a dobndit un plus de interactivitate prin utilizarea programelor create, folosind
interfae CGI, Perl, ASP i PHP. Aceaste programe au permis scrierea de coduri surs cu rolul de
a trimite de la browser spre server-ul WEB att a informaiilor standard coninute n antetul
HTTP al cererii ct i informaii n alte dou moduri i anume: [Stanca2004.3]
printr-un formular <FORM> ;
ca un ir de cereri adugate la sfritul URL-ului.
Formularele HTML, afiate ntr-un browser, numite i intrri HTML, au rolul important n
preluarea datelor de la utilizatorul unui web site. Aceste datele vor fi preluate de browser i
transmise la server printr-un program (scris n PHP) care proceseaz datele din formular. n
funcie de scopul programului rulat de server acesta poate genera un rspuns de tip HTML, pe

care serverul l trimite ctre browser cu scopul de al afia utilizatorului. Mecanismul de


funcionare a prelucrrii datelor din cadrul unui formular este prezentat n figura de mai jos:

Figura 4.11. Model Client-Server care folosete PHP(adaptare[LalaniChandak1997])


1.5.1. Crearea unui formular
Un formular se creaz cu tag-urile <FORM>...</ FORM> ntre care se folosesc obiecte create
n marea lor majoritate cu tag-ul de tip <INPUT> cu diferite valori pentru atributul TYPE al
acestuia. n cazul n care atributul TYPE al tag-ului <INPUT> are valoare SUBMIT se va crea
un buton. Rolul acestui buton este acela de a transmite server-ului informaiile pe care
utilizatorul le introduce, n cmpurile formularului. Server-ul prelucreaz i transmite datele
primite din formular: fie unei alte pagini web statice care le afieaz n browser, fie unei pagini
web dinamice care le memoreaz ntr-o tabel a unei baze de date sau le trimite prin e-mail
destinatarului. [Stanca2007]
Folosind PHP-ul, se ntlnesc trei metode de baz pentru colectarea informaiei din formulare
HTML, i anume : [Stanca2007]
un fiier .html static conine un formular care trimite valorile sale ctre un fiier php.
un fiier .php poate s creeze un formular care s trimit informaia ctre un alt fiier
.php.
un fiier .php poate s creeze un formular care s trimit informaia chiar ctre fiierul
php care conine formularul.
Datele dintr-un formular existent ntr-o pagin Web sunt transferate ctre server utiliznd
numele fiierului php ca valoare pentru atributul ACTION i preciznd una din metodele GET
sau POST ca valoare pentru atributul METHOD a tag-ului <FORM>. Elemetele formularului
au asociate cte un nume cruia i se atribuie de fapt valoarea introdus de utilizator n acestea,
care se vor transmite serveru-lui spre prelucare. Variabilele superglobale $_POST i $_GET
sunt nite array-uri care conin toate datele transmise din formular cu una din cele dou metode.

1.5.2. Accesul la bazele de date relaionale din pagini PHP


PHP include o bibliotec de funcii care furnizeaz o interfa cu sistemul MySQL. Folosind
aceste funcii, un programator PHP poate obine accesul la datele rezidente ntr-o baz de date
MySQL i le poate modifica.
Majoritatea interaciunilor cu o baz de date se desfoar dup un model secvenial simplu i
anume [PHP2-site]:
Se deschide o conexiune cu server-ul MySQL. Pentru a se putea realiza conectarea la un server
MySQL, trebuie s se invoce funcia mysql_connect( ), a crei sintax este urmtoarea[PHP2site]:
mysql_connect (nume_gazd, nume_utilizator, parol);
Conectarea cu succes la baza de date permite realizarea de interogri SQL, urmate de
obinerea accesului la rezultatele interogrilor i apoi se execut operaii nonSQL:
mysql_query($interogare);. Funcia mysql_query(); execut interogarea primit ca parametru i
returneaz TRUE dac interogarea a fost efectuat cu succes i FALSE n caz contrar. Aceast
funcie se atribuie unei variabile n care se depune valoarea returnat de aceasta numit
identificator de resurse.
Funcia mysql_num_rows(); se folosete n cazul n care se dorete s se determine numrul
de rnduri returnate n urma interogrii unei tabele.
Funcia mysql_fetch_array(); care permite s se acceseze valorile din tabelul returnat de
interogare n mai multe moduri i anume:
folosind un array numeric;
folosind un array asociativ;
folosind un array mixt.
Aciunea de nchidere a conexiunii cu serverul MySQL se realizeaz invocnd
funcia: mysql_close( );.
Adugarea de noi nregistrri ntr-o tabel a unei baze de date se face cu comanda INSERT.
Cel mai frecvent mod de introducere a datelor ntr-un tabel a unei baze de date este preluarea lor
dintr-un formular adecvat structurii acestuia. Sintaxa pentru introducere a datelor ntr-un tabel a
unei baze de date este:[site30]
INSERT
INTO
nume_tabel
(coloana_1,
coloana_2,...,
coloana_n)
values
('valoare_1','valoare_2',...,'valoare_n');
Modificarea datelor n cadrul unei tabele a unei baze de date presupune realizarea urmtorilor
pai :
conectarea la baza de date i efectuarea unui SELECT asupra tabelei n funcie de o
condiie pentru a se obine nregistrarea care se dorete a fi modificat;
crearea unui formular n care s se afieze datele nregistrrii care urmeaz a fi
modificate;
aciunea de modificare efectiv care se va realiza cu ajutorul comenzii UPDATE a crei
sintax este :[site30]
UPDATE nume_tabel SET coloana_1='$valoare_1', coloana_2= '$valoare_2',...,
coloana_n='$valoare_n' WHERE condiie;
tergerea datelor dintr-o tabel a unei baze de date presupune realizarea urmtorilor pai:
conectarea la baza de date i efectuarea unui SELECT asupra tabelei n funcie de o
condiie pentru a se obine nregistrarea care se dorete tears ;
aciunea de tergere efectiv care se va realiza cu ajutorul comenzii DELETE a crei
sintax este :[site30]

DELETE FROM nume_tabel WHERE condiie;


O ultim aciune ce se impune a fi executat ntr-un web site este cea de cutare. Aceast
aciune se realizeaz cu ajutorul instruciunilor SQL i a comenzii LIKE. Comanda LIKE are
rolul de a cuta o valoare prin compararea acesteia cu un model. Modelele se formeaz fie cu
caracterul procent (%) i un text fie cu caracterul liniu de subliniere ( _ ) i un text. Procentul se
folosete n cazul n care se dorete o cutare pe un spectru mai larg adic, se furnizeaz ca
rezultat al cutrii toate construciile care conin n componen textul care noete acest
caracter neinndu-se cont de numrul de caractere. Liniua de subliniere se folosete pentru a
indica o potrivire a caracterului de nlocuire cu un singur caracter.[WellingThomson2005]
n cadrul acestui capitol au fost prezentate elemente teoretice nsoite de exemple practice ale
limbajului de scripting PHP. Aceste exemple puse cap la cap pot constitui piatra de temelie n
procesul de creare a oricrui web site dinamic complex.

1.6. PHP XML


Una dintre cele mai importante modificri efectuate n PHP 5 este modul n care PHP se ocup
de date XML.Codul care sta la baza motorului PHP a fost transformat i reorganizat pt a furniza
un set de instrumente de analiz XML care respecta recomandrile World Wide Web Consortium
(W3C). ntruct PHP 4 utiliza o bibliotec diferita pentru a pune n aplicare fiecare instrument
XML, PHP 5 profit de o singur bibliotec standardizat: Gnome XML biblioteca (libxml2). n
plus, PHP 5 introduce mai multe instrumente noi pentru a simplifica prelucrarea documentelor
XML.Pentru a prelucra cu ajutorul PHP-ului datele dintr-un document XML trebuie ca acesta
sprezinte structura i sintaxa corect, comform standardului XML, nu e nevoie s fie strict
valid, adic s conin DTD. PHP include trei modaliti deprelucrarea a unui fiier
XML: SimpleXML, DOM (Document Object Model)i SAX (Simple API for XML).Aceste 3
modaliti prezint avantaje i dezavantaje.Se pot utiliza oricare dintre aceste trei moduri de
prelucrare(creare, adugare, modificare i tergere) a fiierelor XML. n cele ce urmeaz vom
prezenta modul de prelucrare a fiierelor XML cu ajutorul lui
SimpleXML.[Converse_Park_Morgan_2005][Greenspan_Bulger2001][site100]
SimpleXML a aprut n PHP 5, lucreaz asemntor cu DOMmai exact cu obiecte, preia tot
documentul XML sub forma unui arbore ierarhic in memorie, dar spre deosebire de acesta, e mai
flexibil i folosete mai puin memorie deoarece elementele sunt stocate direct ca variabile PHP
(de tip string i array) i astfel pot fi imediat utilizate. Folosete un minim necesar de cod i are o
form intuitiv a datelor. n SimpleXML, majoritatea datelor sunt stocate n variabile de tip
array.[Greenspan_Bulger2001][site100]
SimpleXML are relativ puine funcii predefinite, deoarece se apeleaz mult la funciile pentru
array i string. Funciile predefinite ale lui SimpleXML sunt:[Greenspan_Bulger2001][site100]
simplexml_load_file("fisier.xml") - ncarc n memorie, ca obiect, datele din "fisier.xml";
simplexml_load_string("sir_xml") - ncarc n memorie, ca obiect, datele din irul
"sir_xml";
simplexml_import_dom("dom_node") transform/preia un obiect DOM (sau Nod dintrun obiect DOM) n obiectul SimpleXML;
addChild("nume", "continut") - adaug un element copil n cel curent (la sfrit dac are
i altele) cu numele "nume" i coninutul text "continut";
addAttribute("nume", "valoare") - adaug un atribut ntr-un element (la sfrit dac are i
altele) cu numele "nume" i valoarea "valoare";
children() - preia ntr-o matrice toi copiii dintr-un nod (element).

attributes() - preia ntr-o matrice toate atributele dintr-un element.


count() - returneaz numrul de copii dintr-un element.
getName() - returneaz numele unui element. Aceast funcie se folosete adesea cnd se
parcurge o matrice cu mai multe elemente.
asXML("fisier.xml") - transform datele obiectului SimpleXML ntr-un ir, iar dac
parametrul "fisier.xml" e specificat scrie irul n fiierul specificat.
Prelucrarea fiierelor xml din PHP presupune parcurgerea urmtorii pai:
[Greenspan_Bulger2001][site100]
1. crearea unui fiier cu extensia xml n cazul de fata numit bd.xml cu structura:[site100]
<?xml version="1.0"?
> <bd>
<carte isbn="1" pubdata="1983-01-01"> <titlu><!
[CDATA[Manipularea Creierelor]]></titlu> <autor
>Armen Victorian</ autor>
<pret>30</pret>
</carte>
<carte isbn="2" pubdata="2000-01-01"> <title><!
[CDATA[Marea carte a jocurilor minii]]></titlu> <autor
>Ivan Moscoviciu</autor>
<pret>50</pret>
</carte>
<carte isbn="3" pubdata="1999-03-01"> <titlu><!
[CDATA[Maturizarea Personalitii]]></titlu>
<autor>Robert Pacinec</autor>
<pret>20</pret>
</carte>
</bd>
2.generarea unui fiier xml dintr-un fiier php cu SimpleXML, datele se vor memorantr-un
array. Unarray nu permite s se atribuie tipul CDATA pt titlul crii:[Greenspan_Bulger2001]
[site100]
<?php
function fnSimpleXMLCreare(){
$b= array(array('isbn'=>'1', 'pubdate'=>'1983-01-01', 'titlu'=>' Manipularea Creierelor ',
'autor'=>'Armen Victorian', 'pret'=>'30'),
array('isbn'=>'2', 'pubdate'=>'2000-01-01',
'titlu'=>'Marea carte a jocurilor minii ', 'autor'=>'Ivan
Moscoviciu', 'pret'=>'50'),
array('isbn'=>'3', 'pubdate'=>'1999-03-01', 'titlu'=>'Maturizarea
personalitii', 'autor'=>'Robert Pacinec', 'pret'=>'20'));
// se creaza un fisier XML in care root va fi <bd> iar nodurile fiu<carte> fiecare carte are
subnoduri titlu, autor si pret
$bd = new SimpleXMLElement('<bd/>');
for($i=0;$i<3;$i++)
{
$carte = $carte->addChild(carte');
$carte->addAttribute('isbn', $b[$i]
['isbn']);

$carte->addAttribute('pubdate', $b[$i]['pubdate']); $carte->addChild('titlu',


$b[$i]['titlu']); //nu se poate crea CDATA in
SimpleXML.
$carte->addChild('autor', $b[$i]
['autor']); $carte->addChild('pret', $b[$i]
['pret']);
}
$library->asXML('./bd.xml');
}
fnSimpleXMLCreare();
?>
2. Modificarea unui fiier XML din PHP cu SimpleXML:[Greenspan_Bulger2001][site100]
<?php
function fnSimpleXMLEdiaretElementSec()
{ $bd = new SimpleXMLElement('./bd.xml',NULL,true);
$nr = count($lbd);
$bd->carti[$nr-1]->titlu=$bd->carti[$nr-1]->title."---Pedagogie"; header("Content-type: text/xml");
if ($library>asXML('./bd.xml')==1)
echo $lbd->asXML();
else
echo "Nu s-a modificat";
}
fnSimpleXMLEdiaretElementSec();
?>
3. Modificarea unui fiier XML din PHP se folosete XPath pt poziionare pe element.
[Greenspan_Bulger2001][site100]
<?php
function fnSimpleXMLEdiaretElementCond()
{
$bd = new SimpleXMLElement('./bd.xml',null,true);
$carte= $bd->xpath('/bd/carte[autor="Ivan
Moscoviciu"]'); $carte[0]->title =$carte[0]->title. 'Volum
1 '; header("Content-type: text/xml");
if ($bd>asXML('./bd.xml')==1)
echo $bd->asXML();
else
echo "Nu s-a modificat";
}
fnSimpleXMLEditareElementCond();
?>
3.Adaugarea unei noi cri la sfritul celor existente n fiierul
XML.[Greenspan_Bulger2001][site100]

<?php
function fnSimpleXMLAdaugElement2sf()

{
$bd = new SimpleXMLElement('./bd.xml',null,true);
$carte = $library->addChild('carte'); $carte>addAttribute('isbn', '4'); $carte>addAttribute('pubdate', '2000-07-11'); $carte>addChild('titlu', "Cartea gesturilor"); $carte>addChild('autor', "Peter Collett"); $carte>addChild('pret', "10"); header("Content-type:
text/xml");
echo $bd->asXML();

}
fnSimpleXMLAdaugElement2sf();
?>
4. tergerea elementelor unui fiier XML se face astfel:[Converse_Park_Morgan_2005][site100]
<?php
function fnSimpleXMLStergere()
{
$bd = new SimpleXMLElement('./bd.xml',null,true);
unset($bd->carte[1]);
header("Content-type:
text/xml"); echo $lbd->asXML();
}
fnSimpleXMLStergere();
?>
SimpleXML este util pentru a realiza o prelucrare uoara a documentelor XML din PHP.
Prelucrrile mai complexe asupra documentelor XML, impun folosirea lui
DOM.[Greenspan_Bulger2001][site100]

1.7. Particularitile programrii Orientate Obiect n programarea


Web pe parte de server (limbajul PHP)
n limajul PHP, programarea orientat obiect se poate realiza timid ncepnd cu versiunea 4.
PHP 5.0 este orientat obiect i deplin funcional dar are o compatibilitate redus cu versiunile
precedente.[Converse_Park_Morgan_2005][Greenspan_Bulger2001] Funcionaliti bazice de
programare orientat pe obiecte au fost adugate n PHP 3. n versiunile 3 i 4 ale lui PHP
obiectele erau tratate ca un tip de dat de baz, i deci de fiecare dat cnd o variabil era
utilizat ntr-o funcie tot obiectul era copiat. Felul n care obiectele sunt tratate a fost complet
rescris n PHP 5. Din PHP 5 ncepnd obiectele sunt refereniate printr-un vector intern i nu
dup valoarea pe care o au. PHP 5 a introdus metode private i protejate, clase abstracte,
constructori i destructori, functionaliti similare cu cele din alte limbaje de programare care
folosesc paradigma OOP, precum C++.
Fundamentele programrii orientate pe obiecte n PHP ca i n alte limbaje se bazeaz pe
conceptul de grupare a datelor n uniti numite clase.[WellingThomson2005] Acest proces n
general este numit ncapsulare sau ascundere a informaiilor, pentru c obiectivul su este s
mpart o aplicaie n entiti separate care sunt component interne care pot fi schimbate far s

se modifice interfaa. Astfel clasele sunt n esen, o reprezentarea a unui set de funcii (numite
metode) i variabile (numite proprieti) concepute s lucreze mpreuni s furnizeze o anumit
interfa.n acest tip de programare este esenial s se ineleagideea:clasele sunt doar planuri
care nu pot fi folosite direct, acestea trebuie s fie instane de obiecte, care pot s interacioneze
cu restul aplicaiei.[Converse_Park_Morgan_2005][Greenspan_Bulger2001]
Sintaxa de declarare a unei clase este:
Class Prima{
// Coninutul clasei
}
Deci, am declarat o clas numit Prima a crui coninut va fi o combinaie de constante,
variabile i funcii(numite metode). O clasa se impune s fie instanat n scopul de a profita de
funcionalitile pe care le ofer. Acest lucru se face prin utiliznd constructorul new astfel:
$nume=new Prima();
In PHP5 obiectele sunt tratate diferit n comparaie cu alte tipuri de variabile. Un obiect este
ntotdeauna trimis prin referin (n realitate este trimis prin handler).[WellingThomson2005]
Unul dintre punctele fundamentale ale conceptului OOP este motenirea. Aceasta permite unei
clase s se extind la alt clas, n esen se adaug noi metode i proprieti, precum i
rescrierea
celor
existente
n
funcie
de
nevoi.[Converse_Park_Morgan_2005]
[Greenspan_Bulger2001]
Asa cum s-a menionat mai sus clasele conin att metode(funcii) ct i proprieti(variabile).
Metodele se declar ca i funciile, astfel:
class Prima {
function prima_functie() {
echo "ApelPrima::prima_functie";
}
}
Din afara domeniului unei clase, metodele sunt apelate folosind operatorul: ->
$obiect = new Prima();
$obiect->prima_functie();
n exemplul de mai sus obiect este o proprietate care este vizibil n domeniul de definiie al
fragmentului de cod de mai sus. n acest context PHP deine o variabil special numit $this.
Aceast variabil este definit numai n cadrul domeniului de aplicare al unui obiect, i
ntotdeauna pointeaz spre obiectul n sine.
class Prima {
function prima_functie($val)
{ echo "Valoare este: $val";
}
function apel($val)
{
$this->prima($val);
}
}
$obiect = new Prima();
$obiect->prima_functie(3);//apel direct al funciei
prima_functie $obiect->apel(4);//apel direct al funciei apel

Codul surs de mai sus va afia pe ecran: Valoarea este 3 Valoare este: 4
Principiu de baz al programrii orienate obiect n PHP este: definirea claselor s se realizeze
ntr-o pagin seprat. Paginile n care se definesc clasele sunt incluse n pagina principal a
proiectului cu include sau require.[Converse_Park_Morgan_2005][Greenspan_Bulger2001]
Un exemplu de program care utilizeaz programarea orientat[ obiect pentru a afia un mesaj
de test de genul Merge!
<?php
Class merge
{ function merge()
{
return "Merge!";
}
}
$world = new
merge(); echo world>merge(); ?>
1.7.1. Const ru ctorii
PHP 5 introduce conceptul de constructor unificat i un nou destructor pentru obiecte.
Constructorul i destructorul sunt metode speciale ale unei clase care sunt apelate, aa cum
sugereazi numele lor, la crearea respectiv distrugerea unui obiect. Rolul constructorilor ntr-un
program este de a iniializa proprietile unui obiect, sau pentru a efectua proceduri de pornire,
cum ar fi de exemplu, conectarea la o baz de date sau deschiderea unui fiier de la
distan.Conceptul de constructor nu este nou introdus de PHP5 acest concept exista i n
PHP4.n PHP 4 constructorul era considerat o metoda ce avea acelai nume cu cel al clasei. n
PHP5 pentru a defini constructorul s-a introdus metoda special: __construct(), pentru toate
clasele indiferent de numele lor.[Converse_Park_Morgan_2005][Greenspan_Bulger2001]
class expclasa
{function __construct($parametru)
{
echo Constructorul apelat cu parametrul $parametru;
}
}
1.7.2. Destructorul
n PHP5 perechea metodei__construct() este metoda __destruct(). Constructorul este apelat pt
crearea unui obiect naintea destructorului. La terminarea unui program este bine ca toate
obiectele create n interiorul acestuia s se distrug apelnd destructorul. Aceast operaie este

similar cu deconectarea de la o baz de date sau tergerea fiierelor temporare.


[Converse_Park_Morgan_2005]

Distrugerea unui obiect este indicat s se efectueze n momentul n care toate apelurile la
obiectul respectiv sunt terse. PHP ofer posibilitatea detergere a unei variabile care refer un
obiect fie prin apelarea funciei unset()fie prin rescrierea valorii acesteia, n aceste cazuri obiectul
nu se distruge imediat.
1.7.3. Vizibilitate
Unui obiect pe lng metode i proprieti i se mai adaug noiunea de vizibilitate.Vizibilitatea
permite s se precizeze domeniul de aplicare de unde fiecare componenta a clasei poate fi
instanat. Domeniile de vizibilitate n PHP sunt:[Converse_Park_Morgan_2005]
[Greenspan_Bulger2001]
r Protected:-resursele se pot accesa din interiorul clasei sau a descendenilor si acolo unde
sunt definii
s Private:-resursele pot fi accesate doar din interiorul clasei unde s-au definit.
t Final:resursele pot fi accesate din orice clas dar nu pot fi rescrise n clasele descendente.
u Public:resursele pot fi accesate din orice clas.
Observaie:1. Nivel de vizibilitate final se aplic numai la metode i clase. Clase care sunt
declarate ca fiind final nu poate fi extended.

Nivelul de vizibiltate public se folosete pentru constructori i destructori


8. 7.4. Constante, metode si proprietati statice
PHP 5 permite implementarea demetode i proprieti statice. Aces tip de metode i
proprieti spre deosebire de toate cellate tipuri de metodele i proprietilei exist i sunt
accesibile ca parte dintr-o clas n sine, si sunt vizibile numai n cadrul domeniului de aplicare al
unuia dintre instanele sale.Acest lucru permit tratarea claselor ca adevarate containere de funcii
interdependente,n scopul de a evita conflictele de denumire.n timp ce PHP 4 a permis s se
apeleze orice metod a unei clase static folosind operatorul de rezoluie ::n domeniul de
aplicare, PHP 5 introduce o sintax mai stricta care solicit utilizarea cuvntului cheie static
pentru a permite utilizarea de proprieti i metode n acest mod.[Converse_Park_Morgan_2005]
[Greenspan_Bulger2001]
Motenirea[WellingThomson2005]constn faptul c se pot declara anumite clase ca fiind
derivate din alte clase de baz. n cele mai multe situaii clasa derivat (numiti clas copil)
extinde, primete funcionalitile clasei de baz (numiti clas parinte). n acest fel se reduce
foarte mult cantitatea de cod necesar. n PHP se accept doar motenirea simpl, fiecare copil
poate moteni de la un singur printe. Nu exist restricii la numrul de copii care pot moteni de
la un singur printe.[Greenspan_Bulger2001]
1.7.5. Interfee i clase abstracte
PHP5 introduce conceptele de interfee i clase abstracte. Ambele conceptesunt utilizate pentru
a crea o serie de constrngeri cu privire la proiectarea de baz a unui grup de clase. O clasa
abstract definete scheletul de baz, n esen, de un anumit tip de entitate-capsulate de
exemplu, avei posibilitatea s utilizai o clas abstract pentru a defini conceptul de baz al unei
"maini", ca avnd dou ui, un sistem de blocare i o metod care blocheaz sau deblocheaz

uile . Clase abstracte nu pot fi folosite n mod direct, dar acestea trebuie s fie extinse, astfel
nct clasa descendent ofer o gam complet de metode. Alte astfel de exemplu ar fi s se
defineasc o clasa Pagina avnd ca rol principal limitarea de cod HTML necesar crerii unei
pagini noi.Pagina este creat de o clas ceea ce ar trebui s restrang libertatea de creare a ei i
permite adaugarea de funcionaliti noi in timp scurt.Avantajele unei astfel de abordri n
dezvoltarea
unui
site
sunt:[WellingThomson2005][Converse_Park_Morgan_2005]
[Greenspan_Bulger2001]
Modificarea elementelor paginii unui site se face ntr-un singur loc(se adaug un buton)
Identificarea paginii care este vizualizat;
Coninut prestabilit dar care se poate modifica de exemplu: titlul, metaetichetele
nlocuirea elementelor standard (butoanele standard cu alte butoane)
Elemetele care au o probabilitate mare de modificare se declar ca atribute ale clasei: de
exemplu: coninutul, titlul, cuvintele cheie i butoanele unei pagini.Operaiile n cadrul unei
astfel de clase sunt afiarea i formatarea coninutului n pagin.
Interfeele sunt folosite pentru a specifica un API. De exemplu, se pot utiliza interfee pentru a
abstractiza conceptul de furnizor al bazei de date printr-un API comun care ar putea fi apoi pus n
aplicare printr-o serie de clase ca interfa pentru DBMS-uri diferite.
n
PHP
exist
diferite
API
cu
ajutorul
crora
se
acceseaz
MySql:[WellingThomson2005][Converse_Park_Morgan_2005][Greenspan_Bulger2001]
1.mysql- este un API istoric folosit pn la versiunea 4 a lui PHP
2.mysqli- este versiunea orientat obiect a lui mysql
3.PDO_MySQL este PDO pentru mysql, rolul su este de a asigura o interfa comun pentru
a accesa orice tip de baz de date, fr a se schimba codul surs, este de asemenea orientat
obiect.PDO furnizeaz metode pentru prepared statements i lucreaz cu obiecte.Deci, PDO
este un layer de acces la baze de date care furnizeaz metode de a accesa multiple tipuri de
baze de date, nu ine cont de sintaxele specifice ale diferitelor baze de date,permite s comute
ntre diverse tipuri de baze de date prin realizarea unei conexiuni la acestea. Driverele pe care
le
suport
sunt:[WellingThomson2005][Converse_Park_Morgan_2005]
[Greenspan_Bulger2001][site100
]
5. PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )
6. PDO_FIREBIRD ( Firebird/Interbase 6 )
7. PDO_IBM ( IBM DB2 )
8. PDO_INFORMIX ( IBM Informix Dynamic Server )
9. PDO_MYSQL ( MySQL 3.x/4.x/5.x )
10. PDO_OCI ( Oracle Call Interface )
11. PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )
12. PDO_PGSQL ( PostgreSQL )
13. PDO_SQLITE ( SQLite 3 and SQLite 2 )
14. PDO_4D ( 4D )
1.7.6. Exemplu de utilizare
Clasele care se pot folosi in dezvoltarea WEB pot cuprinde pagini, componente de interfee
utilizator, liste de cumprturi, categorii de produse sau clieni, tratare de erori. Obiectele sunt
instaneale acestor clase. Un exemplu de utilizare a claselor ia avantajelor motenirii:

Se creaz o clas Pagina avnd ca rol principal limitarea de cod HTML necesar crerii unei
pagini noi. Pagina este creat de o clasa. Aceast abordare ar trebui s restrng libertatea de
creare a ei i s permit adugarea de functionalitai noi n timp scurt.Avantaje:
31. Modificarea elementelor paginii unui site se face intr-un sg loc(se adauga un buton)
32. Identificarea paginii care este vizualizata;
33. Continut prestabilit dar care se poate modifica ca ex: titlul, metaetichetele
34. Inlocuirea elementelor standard (butoanele standard cu alte butoane)
Elemetele care au o probabilitate mare de modificare se declar ca atribute ale clasei, de
exemplu: coninutul, titlul, cuvintele cheie i butoanele unei pagini. Operaiile care pot aprea
sunt cele de afiare iformatare a coninutului n pagin. Implementarea se va face ntr-un fiier
cu extensia inc. n cazul de fa vom crea un fiier numit clasap.inc care se va introduce n
toate fiierele php care alctuiesc site-ul. [WellingThomson2005]
<?php class
Pagina
{// continutul paginii HTML+text se numeste
var $continutpagina;
//definirea unui titlu predefinit pt o
pagina var $titlu="Magazinul YYY";
//metaetichete
var $keywords="search
engines"; //butoane minime pe o
pagina
var $buton=array("Home"=>"home.php", "Contact"=>"contact.php", "Harta
site"=>"harta.php", "help"=>"help.php");
// functie de afisare a unei
clase public function Display()
{echo "<html>\n<head>\n";
$this->DisplayTitle(); $this>Displaykeywords(); $this>DisplayStyles();
echo "</head>\n<body>\n"; $this>DisplayHeader(); $this>DisplayMenu($this->buton); echo
$this->continutpagina; $this>DisplayFooter();
echo "</body>\n</html>\n";}
public function DisplayTitle()
{ echo "<title>".$this->titlu."</title>";}
public function DisplayKeywords()
{echo
"<meta
name=\"keywords\"
content=\"".htmlentities($this>keywords)."\"/>";} public function DisplayStyles()
{ ?>
<style><!-h1 {color:white;font-size:24pt;text-align:center; font-family:arial,sans-serif}
.menu {color:white;font-size:12pt;text-align:center; font-family:arial,sans-serif; fontweight:bold}
td{background:blue}

p{color:blue;font-size:12pt;text-align:justify; font-family:arial,sans-serif}
p.foot{color:white;font-size:9pt;text-align:center; font-family:arial,sans-serif;fontweight:bold} a:link,a:visited,a:active{color:white}
--></style>
<?php}public function DisplayHeader(){?>
<table width="100% cellpadding="12" cellspacing="0"
border="0"> <tr bgcolor="blue"> <td align="left"><img
src="a.gif"/></td> <td> <h1>Magazin Virtual</h1> </td>
<td align="left"><img
src="a.gif"/></td></tr></table> <?php}
public function DisplayMenu($buton)
{ echo "<table width='100%' bgcolor='white' cellpadding='4' cellspacing='4' border='0'>";
echo "<tr>\n";
//dimensiunea butonului
$width=50/count($buton);
foreach($buton as $nume=>$url){
$this->DisplayButon($width,$nume,$url, !$this>IsURLCurrentPage($url));} echo "</tr>\n";
echo "</table>\n";}
public function IsURLCurrentPage($url)
{
if(strpos($_SERVER["PHP_SELF"],$url)==false)
{ return false;
} else{ return true;}}
public function DisplayButon($width,$nume,$url, $active=false)
{ if ($active)
{
echo "<td width='".htmlentities($width)."%'><a
href='".htmlentities($url)."'><img
src='logo.gif' alt='".htmlentities($nume)."' border='0'/></a>
<a href='".htmlentities($url)."'><span class='menu'>$nume</span></a></td>";
}else{echo "<td width='".htmlentities($width)."%'>
<img src='logo2.gif'>
<span class='menu'>$nume</span></a></td>";}}
public function DisplayFooter()
{?>
<table width="100%" bgcolor="blue" cellpadding="12" border="0"><tr> <td>
<p class="foot">&copy; Gigel</p>
<p
class="foot"><a
href="legea.php">Legea
dreptului
de
autor</a></p></td></tr></table> <?php}}?>
Instanierea clasei pentru crearea paginii de exemplu home.php se face:
<?php
require('clasapagina.inc');
$paginastart=new Pagina();
$paginastart->continutpagina='<p>Bine ati
venit</p>'; $paginastart->Display();
?>

2Proiectarea sistemelor informatice

1. PROIECTAREA SISTEMELOR
INFORMATICE
Autor: Mircea Moca

Introducere n analiza i proiectarea sistemelor


informatice

Expunerea de fa legat de Proiectarea sistemelor informatice reprezint un set de


cunotine eseniale pentru absolventul specializrii de Informatic Economic pentru a putea
analiza sisteme noi sau existente i a concepe mecanismele sale de func ionare. Nu ne vom
concentra n discuia noastr pe un anumit tip de sistem informatic, ns vom trata din punctul
de vedere al aplicaiilor n general. nainte de a discuta no iuni legate de faza de proiectare a
sistemelor informatice vom prezenta mai nti analiza acestora, ca faz premergtoare.

n primul rnd, sistemul este un ansamblu de elemente, care interrelaioneaz n


interior i cu mediul nconjurtor i care acioneaz n comun sub un aspect unitar pentru a
ndeplini obiective bine definite. Orice sistem are un comportament specific, determinat de
natura elementelor din care este compus i de relaiile dintre acestea.
O restrngere a sistemului este sistemul informaional, acesta fiind ansamblul
elementelor de structur organizatoric din seciunea societii umane (precum o
organizaie), mpreun cu legturile funcional-informaionale dintre ele i cu contextul n
care se afl, care acioneaz n comun pentru ndeplinirea obiectivelor propuse. Rolul
sistemului informaional este de a obine, stoca, prelucra i livra informa ii factorilor de
decizie din organizaie.
n continuare putem identifica sistemul informatic, care reprezint partea
automatizat a sistemului informaional (cu toate componentele sale de tip hardware,
software) responsabil cu stocarea i prelucrarea informaiilor utile factorilor de decizie.
Continuarea acestui capitol este organizat astfel: n subcapitolul 10.2 prezentm
elemente de analiz software, n subcapitolul 10.3 discutm modele uzuale de dezvoltare
software, n subcapitolele 10.4-5 vom prezenta proiectarea efectiv, iar n subcapitolul 10.6
vom discuta riscuri pentru proiectul informatic i noiuni generale de management ale
ciclului de via al produsului software.

1.2 Elemente de analiz software


Pentru realizarea unui produs software este necesar parcurgerea mai multor etape.
Acestea formeaz ciclul de via al produsului. n prima faz, analiza software, anali tii descriu
spaiul problemei i elaboreaz un set de cerine care descriu ce se dore te de la noul sistem
informatic. n continuare urmeaz proiectarea, faz n care proiectan ii hotrsc modul de
realizare a cerinelor primite din faza anterioar, stabilind tehnologiile ce urmeaz a fi folosite la

nivelul sistemului informatic creat. A treia faz a ciclului de dezvoltare este implementarea, care
const n transpunerea n cod a algoritmilor, a logicii stabilite n faza de

Proiectarea sistemelor informatice

proiectare. Realizarea efectiv a produsului informatic se ncheie cu testarea sistemului


informatic.
Ulterior fazelor prezentate, n urma crora am obinut un produs informatic, pot fi
discutate fazele de instalare i configurare (n englez deployment) a sistemului informatic
(la beneficiar) i ntreinerea acestuia. ntreinerea unui sistem informatic reprezint
aciunile de modificare a unui sistem informatic existent n vederea cre terii performan ei
acestuia, mbuntirii funcionale sau reparrii unor disfuncionaliti.
Ultimele dou faze au i ele o importan semnificativ, ntruct pot influen a
dezvoltarea urmtoarelor versiuni ale produsului informatic i reprezint confirmarea
corectitudinii cu care au fost parcurse primele patru etape. Diverse moduri de parcurgere a
acestor faze n dorina de a elabora un sistem informatic vor fi discutate n capitolul 10.3 ca
modele de dezvoltare software.
Analiza software reprezint aadar faza iniial a ciclului de dezvoltare al
produsului. Scopul analizei este de a produce un document numit raport de analiz i care
s conin specificaii complete cu privire la sistemul informatic dorit. Natura informa iilor
este de natura ce trebuie s ofere viitorul sistem utilizatorilor si i ignornd complet cum le
va oferi acesta. Aceast preocupare este specific proiectrii sistemului.
Raportul de analiz are n general o structur similar cu cea discutat mai jos, i
ne ajut mult n nelegerea niruirii etapelor analizei i a coninutului lor:
1. Introducere
n introducere se prezint scurt proiectul pentru care este realizat analiza,
amploarea sa i informaii despre grupul int/ beneficiarul produsului informatic construit.
Cel mai uor este s scriem aceast parte la sfrit, cnd avem deja o imagine de ansamblu
asupra proiectului complet i corect format.
2. Analiza problemei
2.1 Context
Aceast seciune cuprinde descrierea contextului n care va funciona sistemul
informatic. Se prezint informaii utile legate de organizaia care va utiliza sistemul,
incluznd: activitile principale i sectorul de activitate, mrimea i structura organiza iei,
aspecte motivaionale de business (i nu numai) pe care le are organiza ia (de exemplu:
compania deine o reea de 10 magazine pe teritoriul rii i n 5 ani i propune deschiderea
a nc 10 magazine pentru a-i mri reeaua de distribuie). Afirmaiile de acest gen vor fi
corelate cu modelul de business i scopuri, descrise n seciunile urmtoare.
2.2 Motivaie
Aici se descrie motivaia care st la baza crerii sistemului informatic n cadrul
organizaiei. De ce este acesta necesar? Cum poate ajuta sistemul informatic n cadrul
organizaiei? (Exemple de rspunsuri, desigur care necesit explica ii detaliate pot fi cre terea
eficienei procesului, reducerea duratei de timp pentru activiti, cre terea numrului de clien i
etc.). Pentru reprezentarea grafic a ansamblului de motiva ii se folose te diagrama

Fish-bone.
Deasemenea este prezentat ierarhia motivelor pentru care se recurge la
dezvoltarea sistemului informatic pentru organizaia beneficiar i schema de
descompunere a obiectivelor (generale-specifice) avute n vedere de organizaie.
2.3 Delimitarea sistemului de contextul su
n aceast seciune se prezint explicit aspectele care aparin sistemului (procese,
organizaii, sisteme tehnice/nontehnice existente etc.), i totodat aspectele exterioare
(persoane, bunuri materiale/imateriale) graniei sistemului, dar cu care sistemul

4Proiectarea sistemelor informatice

interacioneaz. Aici se prezint i toate prile afectate semnificativ de sistem (n englez stakeholders).
2.4 Activiti i procese
n aceast seciune se prezint activitile principale ale organiza iei, furniznd
detalii legate de cine, cnd i ce documente produce sau modific n cadrul organiza iei.
Pentru fiecare document care este important pentru proces, se inventariaz cmpurile sale.
Pentru aceast etap se prezint diagrame de flux (flow-charts) pentru fiecare proces. Unele
procese pot fi n continuare detaliate n subprocese. Deasemenea, unde este cazul, se
folosesc diagrame de activitate.
3. Cerine
3.1 Elicitaia (extragerea) cerinelor
3.1.1 Surse de cerine
n aceast seciune se prezint sursele de cerine identificate, sunt descrise i se
justific de ce au fost acestea alese. Se specific totodat implica ia diverselor pr i n
stabilirea cerinelor.
3.1.2 Procesul de elicitaie a cerinelor
n aceast seciune se descriu prile implicate (stakeholders) i se explic cum i
va afecta viitorul sistem, discutnd n termeni de beneficii, dezavantaje, riscuri.
n continuare se descriu metodele de elicitaie i particulariti ale aplicrii lor n
cadrul organizaiei. Amintim aici metodele: model de business, cazuri de utilizare i metoda
interviului.
n cazul metodei cazurilor de utilizare, se realizeaz urmtoarele aciuni:

16:

Se prezint lista tuturor actorilor, cu o scurt descriere pentru fiecare i


asocierile acestuia

17:

Se prezint cazurile de utilizare pe tipologii, specificnd cine i n ce condi ii


iniiaz cazul de utilizare i care este niruirea de aciuni realizate n cazul de utilizare.

18:

Se prezint cazurile de utilizare la nivel general, prezentnd delimitarea

sistemului de contextul su.


Cazurile de utilizare sunt acompaniate de diagrame de cazuri de utilizare folosind
UML. Unde este necesar, cazurile de utilizare pot fi nso ite de descrieri sumare ale
interfeei grafice pentru o anumit funcionalitate formulat.
Pentru metoda interviului se prezint lista ntrebrilor adresate i rspunsurile
relevante obinute, dup care lista cerinelor extrase din rspunsuri.
4. Cerine software
n aceast seciune sunt traduse informaiile obinute n faza anterioar aplicnd
metode de elicitaie n trsturi de sistem, cerine funcionale, cerin e non-func ionale i
constrngeri (limitri), totul ntr-o manier organizat. Spre exemplu, aceast organizare
presupune codificarea cerinelor pentru un control precis al acestora i prioritizarea lor.
Glosar
Glosarul este o seciune foarte important a raportului de analiz, aici fiind
prezentate definiii, explicaii, descrieri detaliate ale conceptelor importante din cadrul
organizaiei i a sistemului analizat. Conceptele sunt prezentate sub form de list ordonat
alfabetic. n glosar pot fi folosite i scheme sau diagrame pentru o ct mai clar explicare a

termenilor. Totodat, pot fi descrise relaii ntre concepte. Se recomand ca realizarea


glosarului s nceap odat cu realizarea analizei proiectului.

Proiectarea sistemelor informatice

1.3 Modele de dezvoltare software


De-a lungul timpului, n practica dezvoltrii sistemelor informatice, n func ie de
tipurile de abordare pe care le-au avut specialitii n timpul dezvoltrii au aprut mai multe
modele de dezvoltare software. Pentru a discuta modelele de dezvoltare software vom
defini mai nti ciclul de via al produsului software.
Aadar, ciclul de via al unui produs software este o structur care este urmat n
vederea realizrii unui produs informatic. Aceast structur cuprinde etape n care sunt
realizate aciuni specifice.
n aceast expunere vom discuta cteva dintre modelele cunoscute de dezvoltare
existente: modelul cascad, modelul prototipului (prototipizrii) i modelul spiral.
Modelul cascad este alctuit din urmtoarele faze:
Analiza, sau specificarea cerinelor
Concepia, sau designul
Implementarea i integrarea componentelor software
Testarea
Instalarea
Mentenana (ntreinerea)
Modelul cascad se caracterizeaz prin faptul c fiecare etap este parcurs complet,
dup care se trece la urmtoarea etap. n urma parcurgerii fiecrei etape pot aprea ajustri la
rezultatul produs, ns cu toate acestea modelul nu ncurajeaz revenirea la etape anterioare
pentru modificarea rezultatelor. Acest model este aplicat n general pentru sisteme simple n care
cerinele sunt bine cunoscute sau pot fi corect i complet stabilite n faza de analiz.
Modelul prototipului este folosit n general n situaiile cnd sistemul vizat este
complex, cerinele sunt greu de identificat corect i n ntregime n faza de analiz. Acest model
este folosit pentru sisteme cu grad mare de noutate fie din punct de vedere al func ionalit ilor
oferite, fie al tehnologiei adoptate. Acest model pornete cu stabilirea cerin elor ini iale, dup
care se realizeaz concepia i se implementeaz versiunea iniial de sistem. Sistemul este
supus n continuare evalurilor, i n urma acestora se revine asupra cerin elor. Acest ciclu se
reia pn cnd, la evaluare, se constat c sistemul ndeplinete performan a dorit. Dup acest
prag, sistemul este trecut n faza de dezvoltare propriu-zis (n scopul ob inerii produsului
software final) i testat. n final, exist i faza de mentenan.

Modelul prototipului are o abordare de la simplu la complex, ntruct la fiecare itera ie,
versiune de prototip sunt adugate funcionaliti.
Modelul spiral reprezint o combinaie a elementelor folosite de modelele n
cascad i prototipului, ns n plus trateaz riguros riscul la fiecare etap. Acest model este
utilizat n dezvoltarea sistemelor informatice mari, complexe, realizate cu costuri
semnificative, de obicei soluii dedicate. n acest model se ncepe cu stabilirea obiectivelor
pentru sistem, analiza cerinelor, identificnd sursele de risc posibile. Pentru fiecare surs
de risc se realizeaz o analiz i se ncearc gsirea unei metode de minimizare, excludere a
sa. n funcie de rezultatul analizei de risc se consult clientul care poate alege ntre a opri
proiectul sau a continua asumndu-i riscurile identificate. n aceast faz se poate construi
un prototip (care presupune costuri mai reduse) pentru a evalua riscul.

6Proiectarea sistemelor informatice

1.4 Proiectarea logic


Sistemele informatice sunt alctuite din subsisteme, aplicaii, unit i func ionale,
uniti de prelucrare (proceduri). La orice nivel din aceast list de componente ne-am afla,
fiecare entitate necesit intrri, pe care le prelucreaz, producnd ie iri. Aadar, exist date
de intrare, un mecanism de prelucrare a datelor de intrare (care poate fi un algoritm sau
formul) i exist date de ieire, care reprezint rezultatul prelucrrii datelor de intrare.
Relaiile dintre diversele componente ale unui sistem se bazeaz pe acest
mecanism de intrri-prelucrri-ieiri. Astfel, dac o component A pentru a putea realiza
funcionalitatea sa are nevoie de funcionalitatea componentei B, o va apela (executa, rula)
pe aceasta din urm cu anumite date de intrare i va atepta de la aceasta un rezultat. Datele
de intrare i ieire reprezint baza informaional, iar ntr-un sistem informatic aceasta
poate fi asigurat de un sistem de gestiune a fiierelor sau a bazelor de date.
Proiectarea logic a unui sistem informatic reprezint activitatea prin care se
stabilesc intrrile sistemului informatic, prelucrrile pe care acesta le realizeaz i ie irile
acestuia, pentru toate nivelurile de granularitate specificate mai sus.
Aadar, la nivel de sistem informatic intrrile reprezint modificrile din sistemul
informaional care determin schimbri de valori n coleciile de date. Aceste schimbri pot
duce mai departe la modificarea altor valori, care constituie intrri pentru alte componente
(proceduri). Exist deci modificri care sunt cauzate n afara sistemului informatic, n acest
caz fiind vorba de intrri pentru sistemul informatic i modificri produse n interiorul
acestuia, fiind vorba de intrri la nivel intern pentru componente ale sistemului informatic.
Un fapt important pentru analiza logic cu privire la intrri i la baza
informaional este evitarea redundanei. Astfel, trebuie s se asigure o singur surs de
date pentru aspectul din spaiul problemei pe care l reprezint. Spre exemplu, ntr-o baz
de date nu vom proiecta pentru documente seria i numrul acestora n mai multe entit i,
din motive evidente.
n continuare, prelucrrile sistemului informatic sunt realizate de ctre procedurile
acestuia, ns trebuie s avem n vedere conceptul de agregare a funcionalit ilor care spre
exemplu la nivel de sistem presupune agregarea funcionalitilor subsistemelor.
Prelucrrile presupun operaii pe baza intrrilor n scopul de a produce ieiri, rezultate.
Componentele care alctuiesc un sistem informatic sunt reprezentate grafic
folosind diagramele de componente (n UML). Acestea permit redarea la diverse niveluri de
granularitate agregarea funcionalitilor prezentat anterior, dar i relaii ntre componente.
Relund exemplul anterior, componenta B poate fi reprezentat ca fiind inclus n
componenta B.
Ieirile sistemului informatic reprezint rezultatele produse de acesta, care pot exista

n mai multe forme: rapoarte, liste, grafice, valori sintetice. Aceste date pot fi salvate n
fiiere i pot reprezenta mai departe intrri pentru alte sisteme informatice (de analiz a
datelor de exemplu). La un nivel mai detaliat de proiectare trebuiesc desigur specificate
ieirile la nivel de componente. Deasemenea, observm c ieirile unui sistem informatic
pot fi utile direct utilizatorului uman sau altor sisteme informatice.

Proiectarea sistemelor informatice

1.5 Proiectarea tehnic


Ulterior proiectrii logice n care proiectantul a stabilit funcionarea de ansamblu a
sistemului, a identificat componentele acestuia i relaiile dintre ele la nivel func ional,
urmeaz proiectarea tehnic (sau fizic) a unui sistem informatic, faz n care sunt cutate
soluii tehnice efective pentru a obine funcionalitile cerute.
n aceast faz proiectantul poate cuta soluii pentru urmtoarele aspecte:
structura fizic a programelor algoritmii efectivi care prelucreaz datele;
structura fizic a datelor, nelegnd c trebuiesc alese structuri (colec ii) de date
pe care componentele identificate s le foloseasc n procesare;
nlnuirea operaiilor ordinea de iniializare a datelor (variabile, obiecte),
apeluri de funcii, tipuri de memorie folosite (static/dinamic), generarea i
tratarea de evenimente;
tehnologii hardware folosite, limbaje de programare folosite;
realizarea documentaiei cu specificaii de execuie pentru toate aspectele stabilite,
care este util mai departe programatorilor (cei care implementeaz sistemul
informatic), testerilor i celor care vor ntreine sistemul.
Sintetiznd, proiectantul de sisteme informatice realizeaz urmtoarele activiti:

2.3.4
2.3.5
2.3.6
2.3.7
2.3.8

Proiectarea logic (sau conceptual) a sistemului informatic;


Proiectarea tehnic (sau fizic) a sistemului informatic;
Proiectarea implementrii sistemului informatic;
Proiectarea testrii sistemului informatic;
Proiectarea ntreinerii sistemului informatic.

Riscuri pentru proiectul informatic i noiuni de


management ale ciclului de via ale produsului
software.
Cu ct amploarea proiectului informatic dezvoltat este mai mare, cu att este mai
mare ansa de apariie a riscurilor. Riscurile amenin reuita proiectului i pot avea diverse
surse i consecine, dintre care enumerm: ntrzierea livrrii ctre beneficiar a proiectului
informatic, neplata execuiei proiectului, identificarea greit a prilor afectate
semnificativ de sistemul informatic, validarea necorespunztoare a cerin elor de sistem. n
continuare vom dezvolta sursele de risc pentru proiectele informatice.
Pentru a trata sursele posibile de risc ale unui proiect informatic, mai nti acestea
trebuiesc identificate. Identificarea din timp a acestora duce la o cre tere a ansei de a le
gestiona cu succes. Este recomandat ca practicianul care conduce proiecte informatice s
realizeze pe parcursul experienei sale de munc liste cu surse de riscuri pentru proiectul
informatic. La fiecare proiect, sursele deja identificate anterior trebuiesc dezvoltate, detaliate
dac se manifest din nou, i cele noi trebuiesc adugate listelor existente. Motiva ia

ntreinerii listelor de riscuri este evitarea acestora n continuarea proiectului actual i n


proiectele viitoare.

8Proiectarea sistemelor informatice

n timp, aceste liste de riscuri au fost standardizate pentru a putea fi n elese,


utilizate i ntreinute mai uor de ctre managerii de proiect. Astfel, SEI (Software
Engineering Institute) ofer un standard [SEI] pentru lista de riscuri. Abordarea
standardului este gruparea pe tematici de riscuri. Vom prezenta n continuare un exemplu de
list de activiti, prin realizarea crora se elimin posibile surse de risc:
Pri afectate semnificativ de viitorul sistem informatic:
Identificarea prilor afectate semnificativ de viitorul sistem informatic. Dac nu
am identificat prile afectate de sistem, poate aprea de exemplu riscul de refuz al
sistemului informatic din cauza neconcordanei cu necesitile beneficiarului, sau
includerea noilor funcionaliti s ntrzie livrarea final a produsului sau s
presupun costuri ridicate.
Identificarea persoanelor cu putere de decizie din prile afectate semnificativ.
Persoanele cu putere de decizie au o contribuie semnificativ n derularea
proiectului (de exemplu pentru modificarea resurselor organizaiei
materiale/imateriale pentru corelarea cu viitorul sistem).
ntlnirea n persoan a persoanelor afectate. Anumii indivizi pot reprezenta risc
dac nu s-a discutat fa n fa cu ei din motive de relaii inter-umane, curtoazie,
informare mai precis asupra cerinelor de sistem. Metoda interviului pentru
extragerea cerinelor spre exemplu este mai eficace cnd persoanele se ntlnesc
fizic.
Obinerea de informaii despre prile afectate de sistem: preferine, obi nuin e,
antecedente etc. Necunoaterea unor aspecte ce in de cultura, obiceiurile sau
istoria organizaiei pot duce la folosirea parial a potenialului organiza iei n
utilizarea viitorului sistem informatic.
Frici, reineri i dorine:
Dezvoltarea unui nou sistem informatic n cadrul unei organizaii presupune un
grad de schimbare. Aceasta va impune mai devreme sau mai trziu pentru membrii ei
cerina de adaptare, care poate prezenta riscuri pentru proiect.

Identificarea ideilor de care prile afectate se tem n general n legtur


cu proiectul informatic.

Identificarea posibilelor grupri n cadrul persoanelor afectate de sistem


n funcie de temerile pe care le au.

Identificarea dorinelor prilor implicate n legtur cu

proiectul. Produs informatic i cerine de sistem:

Scopul, motivaia proiectului trebuie s fie clare.


Identificarea prilor din proiect care pot sau nu s fie schimbate pe

parcursul execuiei.
Procesul de business:

Identificarea limitrilor (constrngerilor) legate de resurse: timp, bani,


personal disponibil. Personalul disponibil pe durata execuiei proiectului trebuie
analizat att din perspectiva organizaiei care produce sistemul informatic ct i
din cea a

Proiectarea sistemelor informatice

beneficiarului. Personalul beneficiarului este implicat n anumite faze ale ciclului de

via al sistemului.
Estimarea msurii n care aceste limitri pot fi influenate.
Mecanisme de reacie i analiz:
Asigurarea mecanismelor de reacie i analiz pe toat durata realizrii proiectului. Lipsa acestora poate
duce la disfuncionaliti i uneori la incapacitatea echipei de management de a reaciona n timp util pentru
evitarea manifestrii riscurilor. Aceste mecanisme sunt menite s ofere reac ia pr ilor afectate de proiect,
vis-a-vis de execuia acestuia.
Lista prezentat mai sus poate fi dezvoltat n continuare cu aspecte generale privind riscuri de proiect
informatic. Pentru fiecare proiect informatic ns exist riscuri specifice, care sunt mai greu de identificat dac
experiena n situaii cu spaiul problemei similare este redus.
Noiuni privind arhitectura i securitatea reelelor de calculatoare

2Noiuni privind arhitectura i securitatea reelelor de calculatoare

1. NOIUNI PRIVIND ARHITECTURA I SECURITATEA


REELELOR DE CALCULATOARE
Autor: Nicolae Tomai
n abordarea problematicii reelelor de calculatoare se folosete ierarhia bazat pe straturi (niveluri).
Principalele straturi n ierarhia TCP/IP(folosit n Internet) sunt: nivelul fizic, nivelul legtur de date cu cele dou
subnivele MAC i LLC, nivelul reea, nivelul transport i nivelul aplicaie. In continuare vom descrie principalele
straturi i funciile lor.

Nivelul legtur de date

1.1.1 Metode de acces la mediu


O problem important n cazul reelelor de calculatoare datorit existenei mai multor echipamente
conectate este cea a accesului la canalul de comunicaie, mai ales n cazul reelelor cu difuzare. Vom trece n revist
principalele metode de acces la mediu, precum i standardele create pentru unele metode.

19:

Tehnica CSMA/CD

Aceast tehnic rezult din utilizarea tehnicii CSMA mpreun cu tehnica "ascult ce transmii" (figura
11.1.). Principiul de baz este c, dup ce sursa transmite pachetul, ateapt un interval foarte scurt de timp
(dependent de ntrzierile de propagare i de sistem) apoi i ascult propria transmisie.
Dac sursa, atunci cnd acioneaz ca receptor al propriei transmisii, detecteaz o diferen ntre informaia
recepionat fa de cea transmis, va deduce c s-a produs o coliziune pe canal, va trunchia pachetul n curs de transmisie
i va cuta s rezolve coliziunea, organiznd dup un algoritm specific retransmiterea ulterioar a acestuia.

Este uzual ca sursa de pachete care detecteaz prima coliziune s ia imediat decizia de difuzare pe canal a
unui semnal de bruiaj specific de scurt durat ( jamming ), n acest fel este asigurat consensul de coliziune ntre
toate sursele de pe canal implicate n interfa.
Avantajul esenial al acestei tehnici const n faptul c ea permite detectarea prompt a unei coliziuni, adic
imediat ce ea apare i nu dup un interval de timp, evitndu-se transmiterea complet a pachetelor colizionate i se
reduc nu numai ntrzierile din reea datorate coliziunilor, dar i canalul de difuzare devine disponibil mai repede.
Intervalul de timp n care se pot produce coliziuni dup ce o staie a nceput emisia este de 2, unde este
ntrzierea de propagare a semnalelor ntre cele mai ndeprtate staii. Deci o staie poate fi sigur c a ocupat linia,
dup ce areuit s transmit o perioad de lungime 2, fr s se produc coliziuni.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.1.Algoritmul metodei de transmisie CSMA/CD


Ea nu se poate aplica la reelele radio, deoarece sunt ntrzieri mari pe canal, dar se aplic la cele cu cablu
deschis (Ethernet).
Tehnica de reluare a transmisiilor dup coliziune folosete un algoritm numit backoff, care ia n considerare
durata critic, care e definit ca fiind mai mare dect suma dintre timpul de propagare al semnalului dus - ntors i
timpul de bruiaj.
Dac dou staii vor sesiza simultan eliberarea mediului de comunicaie, ambele vor ncerca transmisia
cadrului i va apare o coliziune. Dup detectarea coliziunii fiecare dintre staii va genera un bruiaj.
Algoritmul backoff este utilizat pentru calculul ntrzierii locale naintea retransmisiei unui pachet colizionat.

Dup ce s-a produs coliziunea, obiectivul const n obinerea de perioade de ntrziere care s permit replanificarea
fiecrei surse de pachete n cuante discrete de timp. Apar dou cerine contradictorii: pentru a se garanta utilizarea
canalului cuanta de timp trebuie s fie suficient de scurt, iar pe de alt parte pentru a se evita coliziunile aceasta
trebuie s fie mai mare dect fereastra de coliziune. Din acest motiv cuantele de retransmisie sunt uzual fixate s fie
puin mai lungi dect dublul ntrzierii maxime de propagare capt la capt, specific pentru canalul utilizat.
Intrzierea de retransmisie este calculat ca produsul dintre un contor de retransmisie i cuanta de retransmisie. Tipic
o cuant este definit ca fiind egal cu timpul de transmisie minim. De exemplu standardul IEEE 802.3(care va fi
tratat mai trziu n acest capitol) CSMA/CD specific o cuant de 51,2 microsecunde pentru un mediu de 10Mbs.
Dimensiunea minim de pachet de 512 bii a fost aleas pentru a se asigura c timpul de transmisie este mai mare
sau egal cu aceastuante timp. Pentru a minimiza probabilitate de coliziuni repetate asupra aceluiai pachet fiecare
contor este selectat ca un num aleator dintr-un interval de retansmisie [0 , limit superioar]. Acest interval va fi
dublat la fiecare coliziune succesiv extinzndu-se astfel domeniul ntrzierilor de retransmisie. Aceas dublare face
s scad probabilitatea de coliziune
Staiile implicate n coliziune vor ncerca s retransmit cadrul dup un timp de ateptare de 0 sau 1 cuante de
retransmisie( o tran de ateptare este egal cu timpul de propagare prin mediu ). Dac o staie alege cuanta 0 i alta
trana 1 atunci totul e n ordine i vor transmite cadrele fr s mai apar coliziuni ( s-a presupus c n acest timp alte staii
nu au dorit s transmit). Daca aleg aceeai cuant se produce din nou coliziune i algoritmul va genera 4 cuante posibile.
Probabilitatea de a alege transmisia n aceeai cuant scade i deci si probabilitatea de apariie de coliziune. Mentionam
faptul c la coliziunea i se alege dintr-un numr de cuante cuprins ntre 0 i 2i-1 cu trunchierea

la 210-1.

4Noiuni privind arhitectura i securitatea reelelor de calculatoare

1.1.2 Variante ale standardului Ethernet


Standardul Ethernet curent, este utilizat pe peste 40% din LAN-urile din lume. Aceste reele opereaz n
mod curent la viteza de 10Mbps i standardul este cunoscut ca IEEE 802.3. Avem variantele:
6

10Base-5

Opereaz pe cablu coaxial gros cu o lungime maxim de 500m. Aceast variant se bazeaz pe specificaia
Ethernet dezvoltat de ctre DEC, Intel i Xerox. Aceast specificaie de mediu definete transmisii n banda de
baz, utiliznd cablu coaxial ce suport viteze de transmisie de 10 Mb/s. Conexiunile care leag calculatoarele la
cablu sunt fcute n general folosind conectori 'vampir', la care este introdus un pin pn n miezul cablului coaxial.
Notaia 10Base-5 nseamn c funcioneaz la 10 Mb/s, utilizeaz semnalizare n banda de baz i poate suporta
segmente de pn la 500m. Se pot conecta pn la 100 de noduri pe un segment de reea.

10Base-2

Aceast variant opereaz pe cablu subire(Thin Ethernet), care este de fapt un cablu coaxial cu un diametru de
5mm i impedana de 50 Ohmi. Se utilizeaz transmisia n banda de baz, cu aceeai vitez ca la specificaia 10Base-5, 10
Mb/s, dar lungimea maxim a unui segment de cablu este de 200m i pe un segment de cablu sunt suportate pn la 30 de
staii. Prin utilizarea repetoarelor pot fi create lungimi mai mari de segmente. Conexiunile la cablu sunt fcute cu ajutorul
unor conectori standard BNC pentru a forma jonciuni n T i nu se utilizeaz conectori-'vampir'. Acest tip de cablu este cu
mult mai ieftin i mai uor de instalat, fiind foarte des folosit n practic, dar ca i la varianta anterioar se pune problema
detectrii ntreruperilor n cablu sau a conectorilor defeci sau desprini.

Ethernet rapid (Fast Ethernet).

Datorit faptului c noile aplicaii(mai ales cele multimedia) necesit o band de trecere mai mare i un
timp de rspuns ct mai mic, au aprut noi tehnologii pentru reelele de mare vitez.
Ethernetul rapid este o extensie a standardului Ethernet curent. Tehnologia Ethernet rapid crete rata de
transmisie de la 10Mb/s la 100Mb/s. Exist dou standarde create i anume IEEE 802.3u(100Base-T) i IEEE
802.12(100Vg-AnyLAN), care au fost n competiie, dar doar prima variant este folosit actualmente.

100Base-T

Acest standard a fost promovat de companiile 3Com, Intel i Synoptics. El este de fapt o extensie a
standardului original IEEE802.3. Lungimea cablului de transmisie este limitat la 250m, iar dac se dorete
prelungirea lui, este necesar regenerarea semnalului. Standardul 100Base-T const din urmtoarele specificaii:
la nivelul fizic sunt trei tipuri de medii de transmisie: cablu torsadat neecranat, cablu torsadat ecranat i cablu cu
fibr optic;
la nivelul fizic exist un subnivel numit MII(media independent interface), care definete interfaa standard ntre
subnivelul MAC al nivelului legtur de date i oricare din mediile de transmisie definite mai sus pentru nivelul fizic;
subnivelul de acces la mediu(MAC-media acces control); este localizat deasupra subnivelului MII i este bazat pe

protocolul CSMA/CD, utilizat anterior pentru standardul Ethernet la viteza de 10Mb/s.


Deci, Ethernetul rapid pstreaz toate vechile formate de pachete, interfee i reguli procedurale, n schimb
reduce durata de bit de la 100ns la 10 ns. De asemenea lungimea minim a pachetului este de 512 bii ca i la
Ethernetul clasic. Tehnic, ar fi fost posibil s se copieze 10Base-5 sau 10Base-2 i s se detecteze coliziunile la timp,
numai prin reducerea lungimii maxime a cablului de zece ori. Totui avantajele cablrii 10Base-T au fost att de
mari nct Ethernetul rapid se bazeaz n ntregime pe acest mod de cablare, folosindu-se concentratoare.
Odat cu creterea traficului de reea timpul de rspuns al LAN-urilor cu interfee de tip CSMA/CD devine
nesatisfctor. Prin creterea dimensiunilor fiierelor din calculatoare, pe msur ce tot mai mult lume utilizeaz
multimedia, se creaz probleme dificile pentru beneficiarii reelelor 100Base-T.
Datorit simplitii metodei de acces la mediu folosit de standardul IEEE802.3u, el a devenit atractiv pentru
multe din companiile care utilizeaz Ethernetul tradiional. Odat cu creterea benzii de 10 ori, fereastra de coliziuni se
reduce la o zecime.Tehnologia 100Base-T poate fi mprit n dou subcategorii:100Base-T4 i 100Base-TX.

100Base-T4

Implementarea nivelului fizic pentru 100Base-T4 este diferit n mod semnificativ de


cea a nivelului fizic pentu 10Base-T. Aceast variant utilizeaz 4 perechi de fire rsucite de
categoriile 1,4 sau 5, tip UTP. Trei perechi

Noiuni privind arhitectura i securitatea reelelor de calculatoare

de fire sunt folosite pentru transmisie i recepie, deci 100Base-T4 obine viteza de 100Mb/s prin mprirea fluxului
de date n trei fluxuri de 33Mb/s, iar a patra pereche este folosit pentru ascultarea coliziunilor. Splitarea fluxului de
date ntre fire ajut la asigurarea integritii semnalului dup standardele FCC(Federal Comunications Commision ).
Datorit faptului c aceast variant spliteaz fluxul de date de-a lungul a trei perechi de fire, nu este posibil
transmisia full duplex.

100Base-TX
Utilizeaz cablu format din dou perechi de fire rsucite de categoria 5 (care este mai scump dect cablurile
de categoria 3 i 4) UTP(unshilded twisted pair) sau cablu format din dou perechi de tipul STP(Shilded twisted
pair). O pereche este folosit pentru transmisie i una pentru recepie. Categoria 5 de cablu (CAT5) crete numrul
de rsuciri a firelor pe unitatea de lungime, pentru a elimina interferena electromagnetic(EMI). Sistemul 100BaseTX folosete exact acelai protocol ca i Ethernet-ul actual(nu spliteaz fluxul de date), suportnd att modul fullduplex ct i cel semi-duplex.
4.3.7

100Base-FX

Folosete pentru transmisie dou fire de fibr multimod (cablu optic), cte unul pentru fiecare direcie,
astfel nct transmisia este full duplex cu 100Mb/s n fiecare direcie i n plus distana dintre staie i concentrator
poate fi pn la 2000m.

Distribuitoare(HUB-uri)

Pe lng plcile de reea(NIC-Network Interface Card sau NIU-Network Interface Unit), conectori i
cabluri de legtur avem i elemente de distribuie care se mai numesc i HUB-uri. Hubul este cunoscut sub numele
de repetor sau concentrator. Prima lui funciune este s primeasc i s regenereze semnalele de la dispozitivele
conectate. Toate repetoarele 10Base-T sunt considerate ca funcionnd la fel. Repetoarele pentru Ethernetul rapid
sunt mprite n dou clase distincte: Clasa I i Clasa II.

Comutatoare (switch-uri)

Datorit strangulrii benzii de trecere de numai 100Mb/s(sau 10 Mbs la Ethernetul calsic), oferit de tehnologia
Ethernet rapid i din cauza necesarului tot mai mare de band de trecere cerut de noile aplicaii multimedia s-a impus
utilizarea comutatoarelor Ethernet. Se folosete configuraia de tip stea ca i la 100Base-T. Avantajul utilizrii acestor
comutatoare este c fiecare staie obine n ntregime o band de 100Mb/s, fr a mai fi nevoie s o mpart cu alte staii
(fr a avea domeniu comun de coliziuni cu alte staii). Acest lucru este realizat prin utilizarea unei magistrale de semnale
extrem de rapide aflat n comutatorul Ethernet i poate avea viteze de peste 2Gb/s. Comutatorul "nva" adresele MAC i
le stocheaz ntr-o tabel de cutare intern. ntre expeditorul i destinatarul unui cadru este creat o cale comutat
temporar, iar cadrul este trimis de-a lungul acestei ci temporare. n acest mod, zeci de staii utiliznd adaptoare Ethernet
rapid pot comunica, fr a se mai produce coliziuni.

Intr-un concentrator comutat (comutator care funcioneaz pentru Ethernet rapid, deci la 100Mb/s la fiecare
port i deci fiecare statie avnd propriul su domeniu de coliziuni), fiecare cadru sosit este memorat ntr-un modul
de intrare. Dei aceast conectare este cu mult mai scump dect cea n care se folosete un repetor, datorit faptului
c un comutator este cu mult mai scump dect un repetor, totui faptul c toate staiile pot transmite (i primi) n
acelai timp pachete, mbuntind semnificativ banda total a sistemului (de cele mai multe ori cu un ordin de
mrime sau chiar mai mult), face acest mod de conectare cu mult mai atrgtor. Cadrele memorate sunt trecute
printr-un fund de sertar de vitez mare de la placa surs la placa destinaie.

6Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.2.Topologie de conectare folosind Ethernet clasic i Ethernet rapid


Deoarece cablurile pentru varianta 100Base-Fx sunt prea lungi pentru algoritmul Ethernet de coliziune
obinuit, ele trebuie conectate la concentratoare de tip comutatoare cu memorie tampon, astfel c fiecare este un
domeniu de coliziune cu el nsui.
Cerinele pentru ambele tehnologii sunt:
lungimea maxim a unui segment de cablu cu perechi torsadate (distana de la portul partajat a unui repetor la
un PC, server sau comutator de LAN), s fie de 100m(aceeai ca i la 10Base-T);
diametrul maxim al domeniului de coliziuni(distana maxim dintre dou staii de capt-end to end) s fie de
205m cnd se utilizeaz dou repetoare de Clas II i 200m cnd se utilizeaz un repetor de Clas I.
Intre oricare dou Pc-uri sau alte staii ale reelei pot fi pn la:
trei segmente i doua repetoare de Clas II
sau; dou segmente i un repetor de Clas I.
Rezult deci c lungimea maxim a unui segment poate fi de 100m, iar numarul de repetoare de maxim
dou.Pentru a se evita formarea unui domeniu comun de coliziuni, pentru un numr mare de staii se pot folosi si
comutatoare (care comut canalele i nu le repet) care permit formarea mai multor domenii de coliziuni(dar au un
pre ridicat).
Tehnologia Gigabit EthernetGigabit Ethernet este o extindere a standardelor Ethernet de 10 Mbps i 100
Mbps, oferind o lrgime de band de date de 1000 Mbps, Gigabit Ethernet menine o compatibilitate deplin cu
uriaa baz instalat a nodurilor Ethernet.
Standardul Gigabit Ethernet IEEE 802.3z
In iulie 1999, dup luni de studii iniiale, grupul IEEE 802.3 a creat grupul operativ Gigabit Ethernet 802.3Z.
Obiectivelecheie ale acestui grup operativ erau s dezvolte un standard Gigabit Ethernet care face urmtoarele:

Permite operarea semi i ful-duplex la viteze de 1000


Mbps. Folosete formatul cadrului Ethernet 802.3.
Folosete metoda de acces CSMA/CD cu suport pentru un repetor pe domeniul de coliziune.
Realizeaz o compatibilitate de adresare cu tehnologiile 10 BASE-T i 100 BASE-T.
Se folosesc trei tipuri pentru liniile de legtur: o legtur prin fibr optic cu o lungime maxim de 550 m
multimod; o legtur prin fibr optic single-mod cu o lungime maxim de 3 km ( extins la 5 km) i o legtur
prin fibr de cupru cu o lungime maxim de 25 m. In prezent IEEE investigheaz tehnologia care ar susine legtura
la distane de cel puin 100 m prin srm rsucit n pereche neprotejat (UTP) de categoria 5. n completare grupul
operativ IEEE 802 a decis s includ o specificare pentru o interfa independent numit Gigabit Media
Independent Interface(GMII) .

1.2 Nivelul reea


1.2.1 Funciile nivelului reea

Asigur dirijarea pachetelor de date ntre nodurile surs i destinaie, trecnd prin
noduri intermediare. Decizia este luat astfel nct s nu existe n acelai timp legturi
suprancrcate i legturi neutilizate, evitndu-se

Noiuni privind arhitectura i securitatea reelelor de calculatoare

deci congestionarea reelei. O alt funcie important a nivelului reea este de interconectare a reelelor cu arhitecturi
diferite.
In cazul reelelor cu comutarea pachetelor, serviciile menionate se bazeaz pe utilizarea circuitelor virtuale
(comutate sau permanente). Un circuit virtual parcurge mai multe rutere (comutatoare) de pachete ntre doi utilizatori

i permite schimbul unor secvene de pachete de date simultan, n ambele sensuri. El pstreaz ordinea pachetelor i
permite controlul fluxului datelor astfel nct comunicarea este posibil i ntre terminale sau calculatoare de viteze
diferite. Spre deosebire de circuitele virtuale, circuitele comutate se stabilesc i se desfiineaz n mod dinamic, la
cererea utilizatorilor, la fel ca circuitele telefonice ntre abonai.

Dirijarea (rutarea)

Algoritmii de rutare, referii ca i protocoale la nivel reea, permit ghidarea pachetelor de date prin
subsistemul de comunicaii, de la surs la destinaie. In reelele de tip datagram, dou pachete succesive ale
aceluiai utilizator pot traversa diverse rute, pentru fiecare pachet individual fiind necesar o decizie de rutare. In
reelele cu circuite virtuale, decizia de rutare este luat la conectare.
Intr-o reea, rutarea presupune o colecie de algoritmi care lucreaz mai mult sau mai puin independent
pentru schimbul de servicii i informaii [Ber92]. Complexitatea este determinat de mai muli factori. In primul
rnd, rutarea presupune coordonarea ntre nodurile unei subreele, chiar dac acestea nu sunt adiacente. In al doilea
rnd, sistemul de rutare trebuie s fac fa la defectele legturilor i a nodurilor, cernd redirijarea traficului i o
actualizare a bazei de date a sistemului care conine informaii cu privire la legturi i noduri. In al treilea rnd,
pentru a asigura o performan ridicat, algoritmii de rutare trebuie s-i modifice rutele, cnd anumite zone ale
reelei devin congestionate.
Principalele funciuni asigurate de algoritmii de rutare sunt selecia rutelor pentru diferite perechi originedestinaie i livrarea mesajelor la destinaia lor corect, odat ce rutele sunt selectate. A doua funciune este implementat
utiliznd o varietate de protocoale i structuri de date (cunoscute ca i tabele de rutare). In acest capitol ne vom concentra
eforturile asupra primei funciuni(selectarea rutelor) i a modului n care afecteaz ea performana.

1.2.2 Protocoalele de interconectare TCP/IP


Principalul serviciu al nivelului reea este rutarea i furnizarea de pachete de la un nod de reea emitor la
un nod de reea receptor [Tan 03]. Activitile efectuate pentru furnizarea acestui serviciu sunt selectarea nodului
int, crearea antetului de cadru, copierea cadrului i accesarea mediului utilizat. Deoarece funcionalitatea nivelului
reea este prezent n cele mai multe din stivele de protocoale reea, e de ateptat ca nivelele ce descriu
caracteristicile de performan a nivelului reea s fie valide pentru diverse tipuri de stive de protocoale.
Unul din cele mai importante tipuri de protocoale folosite pentru interconectare este seria de protocoale
TCP/IP. La nceputul anilor 70 Agenia de proiecte de cercetare avansat n aprare(DARPA) din departamentul
aprrii al SUA(DOD) a sprijinit dezvoltarea reelei ARPANET. Ea includea att instituii militare ct i universiti
i centre de cercetare fiind folosit ca suport de comunicare. Prin anii 80 s-au dezvoltat seriile de protocoale TCP/IP
pentru sistemul de operare UNIX, fiind lansat i sistemul socluri, iar ARPANET s-a mprit n dou: reeaua
ARPANET pentru cercetare i MILNET pentru scopuri militare. Seria de protocoale TCP/IP este public i poate fi
implementat pe orice tip de calculator de la calculatoare personale la supercalculatoare i se poate utiliza att pentru
reele locale ct i pentru reele pe arii extinse. De asemenea, este utilizat att de agenii guvernamentale ct i de
multe reele comerciale. Aceast serie s-a folosit la reeaua ARPANET din care s-a nscut o reea mai mare care
conecteaz mai multe reele individuale i care se numete INTERNET. Familia de protocoale TCP/IP cuprinde i
alte protocoale aa cum se arat n Figura 11.3a. IP nseamn Internet Protocol i este echivalentul funcional al
nivelului reea din ierarhia OSI( Figura 11.3b).

8Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.3. Relaia ntre ierarhia OSI i suita de protocoale TCP/IP


Funcia primar const n dirijarea pachetelor de date de la surs la destinaie. Nivelul inferior numit
protocol de acces la reea(NAP) este echivalent cu primele dou nivele(fizic i legtur de date) din ierarhia OSI. In
legtur cu protocolul IP se afl protocoalele de la nivelul superior TCP i UDP care se situeaz la nivelul transport
din ierarhia OSI. TCP nseamn protocol de control al transmisiei i este un protocol orientat pe conexiune; funcia
primar a acestui nivel este schimbul corect de pachete de date ntre nodurile reelei adic corectarea erorilor i
secvenierea transportului. Fluxul de octei poate fi n ambele sensuri deci full-duplex.
UDP este un protocol de tip datagram care lucreaz fr stabilire de conexiune, transmind date ntre dou
procese. Este un protocol mai puin sigur, neexistnd nici o garanie c datagramele UDP vor ajunge la destinaia dorit.
ICMP este un protocol utilizat pentru tratarea erorilor i a informaiilor de control, ntre calculatoarele gazd i porile de
interconectare care sunt responsabile de transmiterea pachetelor de date de la calculatorul surs la calculatorul destinaie,
cele dou fiind situate n reele total diferite. Mesajele ICMP sunt transmise utiliznd pachete IP i sunt generate i
procesate de softul de reea i nu de ctre aplicaiile utilizator. ARP este un protocol de echivalare a adreselor, fcnd o
echivalare ntre o adres Internet i o adres hard. Acest protocol, ca i urmtorul (RARP), nu este utilizat n toate reelele
pentru c numai unele reele au nevoie de el(de exemplu reelele ETHERNET). RARP este un protocol care face legtura
ntre o adres hard i o adres Internet. EGP este un protocol folosit pentru legtura extern a porilor de interconectare.
IGP(RIP) este un protocol de rutare distribuit care este bazat pe algoritmul DVA (distance vector algorithm). OSPF este un
protocol care folosete calea cea mai scurt pentru transmiterea datelor i este folosit de ctre varianta ISO a protocolului
IP. Utilizarea protocoalelor TCP/IP n opoziie cu nivelele OSI se datoreaz faptului c ele sunt larg rspndite, devenind
un standard "de facto".

Celelalte protocoale indicate n figur la nivel aplicaie sunt: Telnet-pentru legarea la calculatoare aflate la
distant, FTP-pentru transferul fiierelor, HTTP-protocol pentru documente Web, NNTP protocol pentru grupuri de
discuii, DNS-protocol pentru nume de domenii, SNMP-protocol pentru gestionarea reelelor, SMTP-protocol pentru
pota electronic.
Alte protocoale sunt: Finger-protocol pentru vizualizarea utilizatorilor legai la un server, NFS-protocol
pentru organizarea i accesarea fiierelor n reea, RSVP-protocol de rezervarea resurselor pentru aplicaiile n timp
real i multimedia.

Structura Protocolului TCP/IP

Aceast structur difer fa de structura definit de modelul OSI. Figura 11.3b compar cele dou
arhitecturi ntre ele, indicnd c dei ambele standarde folosesc un model pe nivele n definirea funcionalitii
mediilor reea, limitele i definirea exact a nivelelor difer. Mai mult, nivelul OSI a definit i nivelele superioare ale
modelului (Prezentare, Sesiune, Aplicaie) (Figura 11.3.b)

Standardele DOD nu prezint amnunit nivelele superioare, dar definesc un set


minimal de aplicaii pentru reea, care ar trebui s fie prezente ntr-un mediu reea
compatibil DOD. NAP conine toate funcionalitile necesare

Noiuni privind arhitectura i securitatea reelelor de calculatoare

trimiterii unui cadru IP de-a lungul unei reele fizice la un nod reea destinaie. Nivelul NAP este aproximativ
nivelelor OSI fizic, legtura de date i o parte din nivelul reea. Principala funcie a nivelului NAP este de a ascunde
nivelelor superioare toate detaliile de implementare reea. Nivelul IP poate fi comparat cu nivelul reea. Dirijarea,
fragmentarea i adresarea sunt sarcinile principale ale acestui nivel. UDP i TCP au grij de majoritatea
funcionalitilor gsite n nivelele transport i sesiune ale ierarhiei OSI .

Protocolul IP

A fost gndit de la bun nceput pentru a fi utilizat n sisteme interconectate de reele de calculatoare care
folosesc comutarea de pachete. IP, spre deosebire de X25 care e orientat pe conexiune, asigur transmiterea de
pachete de la surs la destinaie, sursa i destinaia fiind calculatoare gazd (host computer) identificate prin adrese
de lungime fix. IP asigur de asemenea fragmentarea pachetelor mai lungi dect dimensiunea maxim a unui cadru
ce poate fi transmis ntr-un anumit tip de reea. Nu trebuie uitat c sursa i destinaia se pot gsi n reele diferite i
c un pachet poate strbate cteva reele pn la destinaie.
IP nu garanteaz ajungerea la destinaie a pachetelor i nu asigur secvenierea blocurilor de date. Aceste
servicii sunt realizate de protocolul situat la nivelul imediat urmtor (TCP).
Specificarea protocolului IP nseamn definirea interfeei cu nivelul imediat superior nivelului transport i
cu cel aflat sub el. Singura presupunere pe care o face IP n legtur cu protocolul legtur de date este c exist o
modalitate de transfer pachete de informaie de la un nod la altul adiacent, n aceeai reea.
Nu se face nici un fel de presupunere privind calitatea legturii de date, tratarea i corectarea erorilor fiind
atribute ale nivelului transport.Transmiterea unui pachet ntre dou aplicaii ce ruleaz pe 2 calculatoare aflate n
reele distincte, ntre care exist o poart gateway se face astfel:
Aplicaia ce dorete transmiterea unui bloc de date face un apel ctre propriul modul Internet dndu-i ca
parametri adresa blocului n memorie i adresa destinaiei.
Modulul IP pregtete un antet specific care va fi ataat blocului de date formnd astfel un pachet.Tot el gsete
adresa imediat de destinaie, adic adresa porii n cadrul reelei surs. Pachetul astfel pregtit este transmis
interfeei locale de reea, care va aduga la rndul su un antet specific i l va trimite porii.
Interfaa local de reea din cadrul porii va prelua cadrul, va detaa antetul reelei locale i-l va transmite
modulului Internet.
Modulul Internet din poart va deduce din adresa destinaiei finale, prezent n antetul IP, urmtoarea adres
imediat (adresa final). Printr-un mecanism similar pachetul va ajunge la modulul Internet din destinaie.
Modulul Internet va elimina antetul propriu, prednd blocul de date aplicaiei destinaie, la cererea acesteia.
Nivelul IP vede reeaua ca o colecie de mai multe reele fizice interconectate de ctre rutere IP, prin
tradiie, numite pori IP. O poart IP este definit aici ca un nod de reea care conine interfeele la reelele fizice pe
care le conecteaz i un nivel IP care primete pachetele de date i le trimite mai departe reelei fizice corecte.
Nivelul IP ntr-un nod reea transmite un pachet de date prin ncapsularea lui ntr-un cadru IP i cere unuia dintre
nivelele NAP s transmit cadrul IP. Combinarea gazdelor IP i a porilor formeaz un nivel de reea virtual care
ofer ca i serviciu principal transport a pachetelor de date ntre oricare dou noduri reea IP n reeaua IP. Figura
11.4 arat o configuraie tipic de reea IP.
Patru reele fizice sunt interconectate prin cinci pori IP. n acest exemplu sunt artate dou aspecte
importante ale reelei IP. Se vede c pot exista mai multe ci ntre un nod de reea IP emitor i un nod de reea
receptor. De asemenea, se poate remarca faptul c reelele fizice pot fi realizate din medii diverse de transmisie i
astfel apare necesitatea conversiei semnalelor ntre aceste medii. Ambele aspecte sunt rezolvate de ctre nivele IP ale
nodurilor reea IP i de ctre porile IP. Aceasta se face transparent pentru utilizatorii de servicii IP.

10Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.4. Reele interconectate


Se ofer nodurilor reea un serviciu de transport al pachetelor de date de la nodul surs la nodul destinaie.
Transportul este fr conexiune, aceasta nsemnnd c serviciul IP nu garanteaz sosirea la destinaie a datelor,
timpul de sosire precum i ordinea de sosire. Pentru implementare, serviciile IP dirijeaz pachetele IP coninnd date
de-a lungul unor medii diferite. Pachetele de date sunt fragmentate i reasamblate cnd este necesar.

Adresarea IP

Fiecrui nod de reea, ntr-o reea IP, i se asigneaz o adres IP unic. Cnd un nod IP este conectat la mai mult
de o reea fizic, nodul are o adres IP, pentru fiecare conexiune la o alt reea fizic. O adres IP const dintr-un
numr pe 32 de bii
Biii din primul cmp indic dac adresa face parte din clasele (Figura 11.5) A, B, C sau dac este o adres
multicast. O clas A de reele poate conine pn la 224 gazde, o clas de reele B pn la 216 gazde i o clas de reele

C pn la 28 gazde. Sunt posibile 228 adrese multicast.


Al doilea cmp(net_id) identific reeaua fizic la care este conectat nodul IP. Toate nodurile IP conectate la
aceeai reea fizic mpart acelai net_id. Acest cmp este folosit pentru determinarea cii la un nod IP. Numrul
posibil de adrese pentru diferite reele al unei clase este determinat de numrul de bii din net_id care este 7 pentru
reele de clas A, 14 pentru reele de clas B i 21 pentru reele de clasa C.
Al treilea cmp (host_id) identific un nod de reea IP unic n cadrul reelei IP date de ctre net_id. Numrul
maxim de noduri IP ntr-o reea IP a unei clase date este determinat de ctre numrul de bii din host_id i anume
pentru o clas A 24 de bii, clas B 16 bii, clas C 8 bii.
Schema de adresare IP depinde de dou reguli pentru asignarea de adrese IP nodurilor reea. Nodurile de pe
o reea singular ar trebui s aib adrese IP cu net_id-uri egale. O reea singular n acest context este definit ca o
combinaie de noduri reea care poate schimba articole de date cu ajutorul serviciilor de pe nivelele
NAP.Calculatoarele dintr-o reea singular pot deci s schimbe pachete IP fr s treac prin pori IP. Aceasta plus
convenia ca fiecare adres IP s fie unic, asigur c o adres IP poate fi folosit pentru a dirija un cadru IP de-a
lungul reelei IP. Prin compararea net_id-urilor poate fi luat o decizie pentru a trimite un cadru IP unei pori IP sau
dac ar trebui trimis direct nodului IP destinaie de-a lungul reelei curente.

Figura 11.5. Clasele de


adrese IP

Noiuni privind arhitectura i securitatea reelelor de calculatoare

11

Forma multicast a unei reele IP este folosit cnd o gazd IP vrea s trimit articole de date unui grup de
gazde destinaie. n locul unei trimiteri explicite a articolului de date fiecruia dintre gazde din grupul destinaie
utiliznd schema de adresare, emitorul se bazeaz pe IP pentru a trimite un cadru IP tuturor gazdelor destinaie.
Aceast form de adresare este o adugare recent la protocolul IP.
Urmtorul lucru care trebuie avut n vedere este problema adreselor. Adresele IP (Internet Protocol) sunt pe
4 octei. Aceste adrese se scriu prin convenie n ceea ce se numete "notaia zecimal cu punct". n aceast form
fiecare octet este convertit ntr-un numr zecimal (0-255) iar ei sunt desprii unul de altul printr-un punct. Prin
convenie fiecare main gazd i ruter au o adres IP. n mod normal fiecare plac de reea trebuie s aib propria ei
adres de IP. Reelele IP sunt secvene continue de adrese IP. Toate adresele din reea au o parte numeric identic.
Acea parte comun la toate adresele din reeaua respectiv este numit partea de reea (network portion) iar partea
rmas este numit parte gazd (host portion). Numrul de biti care sunt mprii de toate adresele din reea sunt
numii masca reelei (netmask). Rolul matii este de a determina care adrese aparin reelei pe care se aplic i care
nu. Astfel, spre exemplu avem:
Adresa calculatorului gazd:
93.226.40.18
Masca reelei:
255.255.255.0
Poriunea reelei:
93.226.40.
Poriunea gazd:
.23
Adresa de reea:
193.226.40.0
Adresa de broadcast:
193.226.40.255.
Adresa de broadcast este o adres mai special care este ascultat de toate calculatoarele din reea. n
general acest adres este cea mai mare adres din reea. Important este ca toate calculatoarele s fie configurate pe
aceeai adres de broadcast
Protocolul IP folosete o schem de adresare care face posibil identificarea fiecrui calculator conectat la reea
prin intermediul unei adrese unice. Pe undeva, s-a ncercat modelarea situaiei existente n societatea uman, situaie n
care fiecare persoan de pe glob este identificat n mod unic printr-un buletin (carte) de identitate. In continuare vom
ncerca s vedem modul n care este rezolvat pe nternet problema adresei unice. De la nceput trebuie spus c adresa nu
se refer neaprat la un calculator ci la o anumit conexiune pe Internet. Mai clar spus, fiecare plac de reea ataat la
Internet trebuie s aib o adres unic. In realitate, un calculator poate conine mai multe plci de reea. Aceasta nseamn
c un calculator conectat la Internet poate avea cteva adrese IP valide. O mare parte din literatura referitoare la reeaua
Internet discut despre adresele IP ca aparinnd calculatorului i nu plcii de reea.

In continuare vom adopta aceeai metod de referire. Ca i programator de aplicaii Internet trebuie neles
foarte clar c o adres identific o conexiune i nu calculatorul n sine.
Deci, practic, adresa unei conexiuni este reprezentat pe 32 bii (sau 4 octei) coninnd suficiente
informaii pentru a identifica n mod unic o reea i o conexiune la o reea. In cazul limbajului C, o adres IP poate fi
reprezentat prin intermediul unei date de tip long int. In general, pentru specificarea adreselor IP se folosete
notaia dotted-decimal. In cadrul acestei convenii, adresele IP se reprezint pintr-o serie de numere (n baza zece)
separate prin puncte.
Este de la sine neles faptul c notaia zecimal cu punct (dotted-decimal) vine n ntmpinarea nelegerii
ct mai simple a adresei de ctre cei care o citesc. Este mult mai greu s lucrm cu reprezentarea adreselor n format
binar sau hexa. Partea mai "complicat" apare n momentul n care se trece la decodificarea informaiilor cuprinse n
cadrul adresei.
Exist cteva adrese cu destinaie special. Astfel, adresa de forma 127.0.0.1 desemneaz o bucl local
("loopback"). Aceasta nu corespunde unei interfee i are rolul de a permite testarea sotware-ului de reea. Adresa
255.255.255.255 este folosit ca adres de broadcast local, adic orice calculator dintr-o reea local recunoate pe
lng adresa sa proprie i aceast adres. O adres de forma 176.58.255.255 nseamn broadcast la toate
calculatoarele din clasa 176.58.0.0, indiferent dac acestea sunt direct legate cu calculatorul surs sau nu (e de
precizat c o reea este desemnat de adresa care are toi biii corespunztori nodurilor pui pe zero).
Mai nou a fost introdus distincia ntre adrese publice i adrese private. Se numesc adrese publice cele care
sunt obinute de la autoritile de alocare a adreselor i sunt rutate pe Internet. Aceste adrese au caracter de unicitate,
n sensul c nici o adres nu este alocat multiplu. Datorit creterii explozive a conectrilor la Internet a aprut
preocuparea fa de epuizarea adreselor pe 32 de bii i una din soluiile adoptate pentru evitarea acestui fenomen a
fost s se rezerve cteva adrese care s poat fi utilizate intern(privat) de orice organizaie, fr a fi vizibile n afara
organizaiei(nu vor fi rutate n afara organizaiei). Astfel de adrese private sunt:
10.0.0.0-10.255.255.255 -reea de clas A 172.16.0.0172.16.255.255-reea de clas B 192.168.0.0.192.168.255.255-bloc de reele de clas C

12Noiuni privind arhitectura i securitatea reelelor de calculatoare


Rmne la latitudinea utilizatorului alegerea adreselor private pe care le folosete, dar aceasta trebuie fcut
conform unor criterii de performan. Unul din criteriile de alegere este, evident, dimensiunea reelei interne: dac
aceasta are doar cteva zeci de calculatoare nu se justific alegerea adreselor private de clas B sau A.
Datorit faptului c spaiul de adresare folosind 32 de bii devine insuficient, a aprut protocolul IP, varianta
6 care folosete 128(16 octei), deci spaiul adreselor IP devine 2 128, spaiu care se consider a fi suficient pentru
necesarul actual i viitor de adrese.

12.

Structura pachetului IP

Principalul serviciu oferit de ctre nivelul IP este serviciul de transport al unui articol de dat de la un nod
IP surs la unul destinaie. Pentru aceasta, articolul de dat este ncapsulat ntr-un pachet IP. Un astfel de pachet
poate fi definit ca o secven de octei divizat n cmpuri. Unul dintre cmpuri conine octeii care formeaz
articolul de date. Celelalte cmpuri sunt folosite de ctre nivelele IP uzitate pentru a transmite cadrul la destinaia IP
corect i pentru reconstruirea articolului de date. De asemenea, uneori e necesar fragmentarea unui pachet cnd
acesta provine dintr-o reea cu o dimensiune mare a cadrului de date. Un pachet poate fi marcat " a nu se fragmenta"
i el va fi ndrumat pe o cale ce evit fragmentarea, iar dac nu se poate, va fi ignorat.
Fragmentarea trebuie s poat fi fcut ntr-un numr arbitrar de pachete i trebuie prevzut posibilitatea
de reasamblare corect,n secven, la destinaie. Acest lucru se obine prin interpretarea cmpurilor de flag-uri i
offset din cadrul antetelor Internet ale fragmentelor.
Un pachet IP are structura indicat n Figura 11.6.

Figura 11.6. Pachetul IP


IP frame :={
Ver
IHL
TOS
Lenght
Ident
Flags
Foff
TTL
Prot
Chech
Source
Dest
Option
Data
};

(octet 1,bit 0:3)


(octet 1,bit 4:7)
(octet 2)
(octet 3:4)
(octet 5:6)
(octet 7,bit 0:2)
(octet 7:8,bit 3:15)
(octet 9)
(octet 10)
(octet 11:12)
(octet 13:16)
(octet 17:20)
(octet 21:IHL.4)
(octet IHL.4+1:...)

Cmpurile din cadrul IP au urmtoarea semnificaie:

Ver: Versiunea, identificator de 4 bii, coninnd versiunea protocolului IP al acestui cadru. Prin verificarea lui

Ver-id, un nivel protocol nivel IP poate implementa mai multe versiuni ale protocolului IP.
Versiunea curent este

Noiuni privind arhitectura i securitatea reelelor de calculatoare

13

4(IPv4). S-a propus pentru Internet un protocol mbuntit cruia i s-a dat numele de IPv6(IP versiunea 5 era deja
utilizat pentru un protocol pentru fluxuri n timp real). Adresele surs i destinaie la acest nou protocol au lungimi
de 16 octei, deci un spaiu de adrese practic nelimitat. Pentru scrierea adreselor pe 16 octei se folosesc grupuri de
cte patru cifre hexazecimale cu semnul: ntre grupuri.
IHL: cmp de 4 bii care d lungimea antetului din cuvintele de 32 de bii. Acest cmp este cerut din cauza
lungimii variabile a cmpului opiune. Dac nu este prezent nici un cmp opiune, valoarea minim a cmpului va fi
5.
TOS: Tipul serviciului, cmp de 1 octet, specificnd tipul de serviciu cerut de acest cadru. Biii 0-2
specific precedena cadrului care e de la 0 (normal) - 7 (control reea).
Bit 3 - indic cerere pentru ntrziere mic (D-delay)
Bit 4 - indic cerere pentru debit mare (T-traffic)

Bit 5 - indic cerere pentru siguran mare (R-reliability)


Biii D, T, R pot fi utilizai de ctre o poart IP pentru a selecta o cale spre nodul destinaie care satisface
serviciul cerut. Trebuie notat c n implementrile curente cmpul T, S, O este ignorat de ctre porile IP i nodurile
reele.
Lenght: conine lungimea total a cadrului Ethernet, incluznd haderul i data.
Ident: cmpul ident mpreun cu cmpurile adresa surs i destinaie, identific n mod unic datagrama n
timpul existenei pachetului IP.
Flags: cmpul flags conine cmpurile More i Fragment. Aceti bii indic dac un mesaj este transmis
ntr-un singur pachet IP sau este fragmentat n mai multe pachete.
Foff: cmpul fragment offset poziioneaz octeii din cadrul IP n articolul de date original.
TTL: timpul de trit d timpul maxim de existen al cadrului IP. Acest cmp este utilizat pentru evitarea
buclelor infinite pentru pachetele IP. Fiecare ruter IP care gestioneaz un cadru descrete adresarea cu 1 i trimite
cadrul cnd valoarea este 0.
Prot: cmpul protocol identific protocolul datei coninute n cadrul IP. Normal, acesta va fi TCP sau UDP.
Chek: suma de control a antetului IP (excluznd cmpul de date).
Source: adresa IP a nodului de reea IP transmitor.
Destination: adresa IP a nodului de reea IP destinaie.

Options: cmpul acesta de lungime variabil poate conine opiuni IP.


Data: cmpul data nu este o parte din antetul IP i conine articole de date de transmis. Datorit limitei
impare a cmpului Lenght, ntregul cadru IP are o lungime maxim de 2 16. Aceasta limiteaz de asemenea i
lungimea cmpului de date.

Protocolul IPv6

Odat cu creterea numrului de utilizatori , precum i cu apariia noilor aplicaii multimedia forma curent
a protocolului IP(versiunea 4) nu mai poate satisface noile cerine. De asemenea odat cu creterea numrului de
echipamente portabile(calculatoare i telefoane mobile), e necesar ca acestea s poat comunica fr restricii,
indiferent de aplicaii. Totodat convergena industriilor comunicaiilor, calculatoarelor i a celor mas-media face
stringent schimbarea IP-ului actual. Obiectivele majore ale noii versiuni au fost:
s suporte mai multe gazde;
s reduc dimensiunea tabelelor de dirijare;
s simplifice protocolul, pentru a permite ruterelor procesarea mai rapid a pachetelor;
s asigure o securitate mai bun;
s acorde o mai mare atenie pentru datele aplicaiilor n timp real; s
ajute trimiterea multipl prin permiterea specificrii de domenii; s
permit migrarea unei gazde fr schimbarea adresei sale;

s permit coexistena cu vechea variant i evoluia n viitor.


Ipv6 ndeplinete n general aceste obiectivele, fiind totodat compatibil cu principalele protocoale din stiva de
protocoale TCP/IP. Caracteristica de baz a variantei Ipv6 const n faptul c folosete pentru adresare 16 octei, furniznd
adrese pentru dezvoltrile Internetului. O alt mbuntire a acestui protocol este simplificarea antetului, care conine
numai 7 cmpuri, ducnd la mbuntirea timpului de procesare a pachetelor n nodurile reelei. O alt facilitate a lui Ipv6
este un suport mai bun pentru opiuni, unele cmpuri obligatorii ale variantei Ipv4 au devenit opionale. De asemenea Ipv6
permite o securitate sporit, autentificarea i confidenialitatea fiind trsturi importante

14Noiuni privind arhitectura i securitatea reelelor de calculatoare


ale noului IP. Totodat Ipv6 acord o atenie mai mare tipului de serviciu, tiindu-se faptul c n viitor va crete
traficul multimedia.
Ne vom concentra atenia asupra capacitilor de transmisie multicast ale noului protocol.
In adresele de trimitere multipl, dup prefix(care e format din 8 bii i are toi biii 1 pentru adresa
multipl), urmeaz un cmp indicator de 4 bii i un cmp domeniu de 4 bii, apoi un identificator de grup de 112
bii. Unul din biii indicatori face distincia dintre grupurile permanente i cele temporare. In plus, Ipv6 suport i
trimiterea ctre oricine (anycasting), n sensul c destinaia este un grup de adrese , dar n loc s se ncerce livrarea
pachetului la toate adresele, se ncearc livrarea la una singur, de obicei cea mai apropiat. De exemplu un client
care dorete s contacteze un grup de servere de fiiere care coopereaz poate folosi trimiterea ctre oricine pentru a
ajunge la cel mai apropiat server fr s trebuiasc s tie care este acesta.
Ca i varianta veche, acesta conine n antet un cmp numit prioritate, care este folosit pentru a distinge
pachetele ale cror surse pot fi controlate ca flux i acelea care nu pot fi controlate. Dac acest cmp are valorile 0-7,
acestea sunt pentru trafic care poate fi ncetinit n cazul evenimentelor de congestie, iar dac are valori ntre 8 15 ,
acestea sunt pentru trafic al aplicaiilor n timp real, a crui rat de transmisie este constant(audio i video).

1.2.3 Protocolul de control mesaje (ICMP)


Pe lng pachetele IP care conin articole de date ce sunt schimbate de nodurile IP, este nevoie s se
schimbe pachete IP coninnd date de control. Aceste date sunt folosite pentru a asigura funcionarea corect a
reelei IP ca un ntreg i pentru a raporta orice erori. In stiva de protocoale IP, este inclus un protocol specializat n
vrful stivei pentru a sprijini schimbul acestui tip de informaie ntre nodurile IP. ICMP se cere a fi suportat de
fiecare nod IP din reea i include urmtoarele servicii:
notificarea destinaiei care nu poate fi atins, adic, atunci cnd un nod IP primete un pachet IP care nu poate fi
trimis deoarece lipsete informaia de rutare sau datorit lipsei unor conexiuni reea, nodul poate trimite un
pachet ICMP nodului IP transmitor informndu-l despre imposibilitatea trimiterii pachetului pe care l-a primit.
notificarea timpului depit, adic, atunci cnd un nod IP primete un cadru IP care se plimb prin reea de prea
mult timp (TTL=0), poate descrca acest pachet i trimite un mesaj ICMP gazdei origine.
notificarea parametri ilegali, atunci cnd un nod IP detecteaz un pachet IP ilegal, poate trimite un mesaj ICMP
gazdei IP origine.
notificarea tergerii sursei, dac traficul IP ntr-un nod IP devine prea ncrcat, nodul IP poate trimite un cadru
"stingere surs" altor noduri IP pentru a micora ncrcarea. Aceste mesaje sunt utilizate pentru a implementa o
schem de control a disputelor.
notificarea redirectrii, dac un mod IP detecteaz c trebuie s dirijeze un cadru IP ctre nodul cu acelai "netid" ca i nodul Ip anterior din rut, informeaz nodul precedent c exist o rut utiliznd un mesaj ICMP.
notificarea cerere - ecou i rspuns. Pentru a fi capabil s verificm dac o rut n cadrul reelei IP este
disponibil, este adesea folositor s fim capabili s trimitem un cadru IP unui nod IP arbitrar i s primim un
rspuns. ICMP furnizeaz un mecanism simplu de ecou ntrebare/rspuns.
notificarea cerere/rspuns marc de timp. Pentru a determina ntrzierea pe o cale din reeaua IP, ICPM susine
cererea unei mrci de timp pentru un nod IP. Aceast marc de timp poate fi utilizat pentru determinarea
timpului necesar unui cadru IP de-a lungul unei ci reea.
Dei ICMP utilizeaz serviciile nivelului IP pentru a trimite mesaje ICMP, este adesea vzut ca parte a
nivelelor IP. Serviciile ICMP-ului sunt utilizate de ctre nivelul IP pentru a menine operarea corect a reelei IP.

1.2.4 Protocoalele ARP i RARP


Dup cum am vzut, adresele Ethernet au ase octei. Toate datele transmise printr-o
reea cu tehnologie Ethernet trebuie s utilizeze cadre Ethernet. Plcile de interfa nu dein
i nici nu necesit informaii despre adresele IP, care au 32 de bii i sunt utilizate pentru
localizarea plcii de interfa i a calculatorului care o conine. Cu alte cuvinte, protocoalele
TCP/IP lucreaz numai cu adrese IP i cadrele Ethernet lucreaz numai cu adrese Ethernet.
Diversele tipuri de adrese reprezint o problem a comunicaiei n reea. Protocolul de
rezoluie adres(ARP) i Protocolul de rezoluie adres invers (RARP) rezolv aceast

problem prin conversia adreselor. Acestea transform adresa IP ntr-o adres a nivelului
legtur de date i invers.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

15

1.3 Nivelul transport


1.3.1 Introducere
Nivelul transport este un strat important avnd rolul de asigurare a unui transfer de date corect. El este
asemntor cu nivelul reea:
are servicii orientate i neorientate pe conexiune;
conexiunile au trei faze: stabilire, transfer de date i desfiinare;
adresarea i controlul fluxului se fac similar.
Deoarece nivelul reea este puternic dependent de reeaua de comunicaii, performanele i caracteristicile
sale fiind determinate de aceasta, iar utilizatorul nu poate interveni n subreea pentru a-i mri performanele sau
schimba caracteristicile, atunci se poate aduga subreelei un nivel care s permit:
un transfer sigur al datelor chiar cu o reea nesigur;
interfa uniform pentru utilizatori, adic un set standard de primitive de serviciu, independent de tipul reelei
utilizate.
Nivelele inferioare(1-3) alctuiesc furnizorul de servicii al nivelului transport, ele avnd funcii orientate
spre comunicaii, iar nivelele superioare sunt orientate spre organizarea dialogului dintre utilizatori.
Nivelul transport realizeaz o comunicare sigur ntre dou calculatoare gazd detectnd i corectnd
erorile pe care nu le trateaz nivelul reea. Dac pentru nivelele 1,2,3 protocoalele se refer la legtura dintre
terminal (calculatorul gazd) i subreea sau ntre nodurile subreelei constituind astfel dou categorii distincte de
protocoale i anume: protocoale de interfaare i protocoale de comunicaie, ncepnd cu nivelul transport
protocoalele sunt capt-la-capt, entitile acestora neavnd corespondente n subreea. Acest nivel furnizeaz
nivelelor superioare o interfa independent de tipul reelei utilizate.
In funcie de caracteristicile traficului generat utilizatorii nivelului transport pot cere stabilirea unei
conexiuni transport cu o anumit calitate a serviciului furnizat.
Calitatea serviciului transport este caracterizat prin urmtorii parametri:
productivitatea (cantitatea de date transferat ntr-o unitate de timp )
ntrzierea de stabilire a conexiunii;
ntrzierea de transmisie;

rata erorilor;
ntrzierea de desfiinare a conexiunii;
probabilitatea de eec la desfiinare a conexiunii;
nivelul de protecie;
prioritatea, conform creia unele conexiuni sunt servite naintea altora;
rezilierea, care d posibilitatea ca nivelul transport s nchid o conexiune datorit unor probleme interne;
erorile netratate;
probabilitatea de eec la tratarea erorilor;
posibilitatea de transmitere expeditiv a datelor.
Calitatea serviciului se negociaz la stabilirea conexiunii. Atingerea acestor performane depinde n mare
msur de tipul subreelei utilizate, funcie de care nivelul transport trebuie s realizeze un numr mai mare sau mai
redus de funcii. Astfel n cazul unor subreele fr erori, nivelul transport nu trebuie s realizeze corecii ale
transmisiei n timp ce n cazul unor erori semnalate sau nesemnalate de reea aceste corecii sunt necesare. Este deci
normal s existe mai multe clase de servicii de transport i corespunztor mai multe clase de protocoale.
Una din funciile importante a nivelului transport este multiplexarea conexiunilor. Multiplexarea "n sus"
const n utilizarea unei conexiuni reea ca suport al mai multor conexiuni de transport. In acest fel se utilizeaz mai
eficient reeaua n care traficul pe fiecare conexiune de transport este redus.
Multiplexarea "n jos" const n utilizarea mai multor conexiuni de reea pentru o singur conexiune de
transport astfel nct se urmrete viteza de transmitere a datelor n cazul unui flux ridicat.
La fel de important este controlul fluxului datelor, aspect ntlnit i la nivelul legturii de date.
Complexitatea acestuia, n contextul nivelului transport este determinat de numrul mult mai mare de conexiuni
gestionate i de intervalele de timp mult mai mari n care mesajele trebuie pstrate pentru eventuale retransmiteri.

16Noiuni privind arhitectura i securitatea reelelor de calculatoare


O alt problem se refer la lungimea unitilor de date care se poate modifica prin blocare, adic se
colecteaz mai multe mesaje ntr-o singur unitate de date de protocol sau segmentare adic mprirea unui mesaj n
mai multe uniti de date de protocol.
Dei nivelul transport asigur conexiuni utilizabile simultan n ambele sesiuni (duplex), multe aplicaii
necesit o coordonare a dialogului n care doar unul din interlocutori poate transmite la un moment dat.

1.3.2 Protocolul TCP (Transmission Control Protocol)


Multe aplicaii care utilizeaz servicii pe reea ateapt ca data s fie transmis i primit corect de-a lungul
conexiunilor reea. Corect, n acest context nseamn c articolele de dat ar trebui remise fr erori i n secven
aplicaiei receptoare.
Aa cum am vzut n seciunea anterioar, remiterea corect nu este asigurat de ctre UDP i articolele de
dat pot s soseasc la aplicaia destinaie ntr-o ordine diferit dect cea n care au fost trimise. TCP este un nivel de
protocol alternativ constnd n vrful nivelului Ip care ofer remiterea corect a articolelor de dat. Pentru a asigura
remiterea corect, TCP utilizeaz o schem cu confirmri a pachetelor TCP corect primite i retransmisia altora care
nu au ajuns Pentru a furniza o remitere secvenial a pachetelor (articolelor de dat), nivelul TCP are de asemenea o
capacitate de stocare.
Pe lng asigurarea unei remiteri corecte, nivelul TCP conine mecanisme pentru evitarea congestionrii
reelei i a utilizrii optime a capacitii de reea disponibil.

10.

Conexiuni TCP

Nivelul TCP este o alternativ la nivelul UDP, utiliznd conceptul de conexiune pentru a lega transmitori i
receptori ai serviciilor TCP. Cnd crem o conexiune ntre doi utilizatori, nivelul TCP asigur un port TCP ambelor capete,
fiecare identificate printr-un numr de port. Combinaia de adrese IP i de porturi TCP identific din nou conexiunea TCP
n mod unic. Utilizatorii de servicii la ambele capete de conexiuni primesc i trimit articole de dat prin porturile TCP.
Nivelul TCP nu structureaz articolele de dat trimise de ctre utilizatorii de servicii. Un utilizator de servicii trimite
articole de dat de-a lungul conexiunii care sunt vzute de ctre nivelul TCP ca un ir de octei.

Prin stocare i fragmentare, nivelul TCP formateaz articolele de dat n pachete TCP i le remit nivelului
TCP receptor. Acolo, data este receptat ca un ir de octei. Conexiunea TCP lucreaz ca o conexiune full-duplex
astfel nct ambele capete ale conexiunii TCP pot trimite i primi date n mod concurent.
Este de responsabilitatea utilizatorilor serviciilor TCP s recunoasc formatul articolelor de dat trimise dea lungul unei conexiuni TCP.
Este un protocol fiabil de comunicare ntre procese aflate ntre calculatoare interconectate, folosind
comutarea de pachete. Este orientat pe conexiuni i se situeaz la nivelul transport din ierarhia OSI.
TCP presupune c la nivelul imediat inferior (reea) exist o modalitate, chiar neglijabil, de transmitere a
pachetelor n reea. El a fost gndit ca avnd la nivelul reea un modul Internet (IP) dar poate funciona i cu alte
protocoale. Interfaa dintre modulul TCP i modulele de nivel superior se face prin apeluri similare celor pe care un
sistem de operare le ofer pentru manipularea fiierelor.

Funciile protocolului TCP

Protocolul TCP trebuie s asigure urmtoarele faciliti:

transfer de date n mod continuu, n ambele direcii, ntre dou procese.

fiabilitate

Modulul TCP trebuie s refac datele din pachetele eronate, s in cont de pachetele pierdute, de cele duplicate
sau transmise n alt ordine de sistemul de comunicaii de la nivelul reea. Pentru aceasta fiecare pachet primeste un numr
de secven i necesit confirmare de primire. Dac nu e primit confirmarea ntr-un interval maxim de timp, datele
neconfirmate sunt retransmise. Numerele de secven servesc att la refacerea fluxului de date ct i la eliminarea
pachetelor duplicate. Deci att timp ct modulele TCP funcioneaz corect i sistemul de reele nu devine complet
partiionat, erorile mediului fizic de propagare a datelor nu vor influena corectitudinea fluxului de date.

c) controlul fluxului de date


Modulul TCP asigur o modalitate prin care receptorul poate controla cantitatea de date furnizat de
transmitor. Acest lucru se realizeaz nsoind fiecare confirmare de o fereastr de permisiune care indic domeniul
de numere de secvene n care transmitorul poate furniza date fr a primi o nou confirmare.
d) servicii orientate pe conexiune

Noiuni privind arhitectura i securitatea reelelor de calculatoare

17

Serviciile de fiabilitate i control al fluxului de date impun unui modul TCP s menin pentru fiecare flux
de date anumite structuri de control (soclu, numere de secven, dimensiunea ferestrei de comunicaie). O conexiune
este definit de structurile de control din cele dou procese ce comunic prin fluxuri de date. Deci pentru a stabili o
conexiune ntre dou procese ce doresc s comunice, modulele TCP proprii trebuie mai nti s stabileasc o
conexiune (canal de comunicaie), ceea ce nseamn iniializarea celor dou structuri de control cu valori corelate. In
acest scop are loc un dialog prealabil ntre cele dou module TCP, pentru iniializarea structurilor de control.
Un modul TCP pune la dispoziie dou funcii de deschidere de conexiuni, una activ, de iniiere a
conexiunii, alta pasiv, de rspuns la orice cerere de stabilire de conexiune.
e) prioritate i securitate
Utilizatorii modulelor TCP pot indica nivelele de prioritate i de securitate pentru transferul de date. Pentru
transmiterea datelor modulele TCP folosesc pachete IP.
Fiecare pachet va conine dup antetul IP, un antet TCP cu informaii specifice acestui protocol. Formatul
mesajelor TCP este cel din figura 11.7.

2.2.9 Semnificaia cmpurilor


Portul surs (16 bii) -mpreun cu adresa sursei formeaz soclul sursei.
Portul destinaie (16 biti) -numrul portului destinaie selecteaz procesul din calculatorul destinaie cu care
s-a stabilit o conexiune.
Numrul de secven (32 bii) - reprezint numrul primului octet de date din cadrul segmentului de date
curent. Dac bitul de control SYN este setat, numrul de secven este adus la valoarea sa iniial.
Numrul de confirmare (32 bii) -conine valoarea urmtorului numr de secven pe care trebuie s-l
primeasc.

Figura 11.7. Formatul mesajelor TCP


Lungime antet date (offset date) (4 biti) conine lungimea antetului TCP n cuvinte de 32 bii indicnd de
unde ncep datele.
Rezervat (6 bii) -iniializai cu 0.
Biii de control

URG- se ia n considerare cmpul indicator


urgent; ACK- valideaz numr confirmare;
PSH- cere anunarea imediat a utilizatorului destinaie de primirea mesajului;
RST- resetare conexiune;
SYN- cere sincronizarea numerelor de secven;
FIN- anun terminarea fluxului de date de la transmitor.
Fereastra ( 16 bii)- reprezint numrul de octei, ncepnd cu cel imediat din numrul de confirmare pe
care cel ce trimite mesajul l poate recepiona.

18Noiuni privind arhitectura i securitatea reelelor de calculatoare


Suma de control (16 bii)- este calculat pentru toate cuvintele din antet i din blocul de date. Dac numrul
de octei de date este impar se completeaz cu octet nul.
Indiacator urgent (Pointer urgent )(16 bii) reprezint offset-ul fa de numrul de secven al datelor ce
trebuie transmise urgent.
Opiuni - au lungimi diferite, apar sau nu n antet.
Un numr mare de calculatoare din reeaua ARPA Internet lucreaz sub UNIX, de aceea UNIX-ul Berkekey
suport TCP/IP care este accesat printr-un set de primitive specifice, care permit utilizatorilor s acceseze serviciul
transport.

Aplicaii i caracteristici TCP

Multe aplicaii care acioneaz ca utilizatorii de servicii ai stivei TCP/IP utilizeaz serviciile nivelului TCP
ca i un punct de intrare n stiva TCP/IP. Serviciile oferite de ctre nivelul TCP ascund majoritatea detaliilor de reea
serviciului utilizator i ofer servicii de transport, orientate pe flux, corecte.
Aplicaiile pot stabili o conexiune "egal la egal" de-a lungul reelei IP. Datorit caracteristicilor de control al
fluxului de niveluri TCP, folosirea serviciilor TCP duce la o utilizare eficient a lrgimii de band a reelei
disponibile. Numai aplicaiile care utilizeaz serviciile protocolului UDP sunt capabile s opereze folosind servicii
de comenzi fr conexiune.
In documentul original al DOD/DCA care definete stiva TCP/IP, au fost descrise un numr de aplicaii care
folosesc acest protocol. Aceste aplicaii includ FTP, SMTP, TELNET. Aceste aplicaii ar trebui s fie prezente n
orice implementare complet a stivei TCP/IP.
FTP este folosit pentru a schimba fiiere ntre noduri reea. FTP const dintr-o aplicaie client pe nodul
reelei care cere i o aplicaie server pe modul de reea ndeprtat.
Utilizatorul, cu ajutorul terminalului poate transfera n mod interactiv fiiere spre i de la nodul de reea
ndeprtat i nodul de reea local.
SMTP este un serviciu TCP utilizat pentru a interschimba mesaje ntre nodurile de reea folosind pachete IP.
Un pachet de control const dintr-un antet cu informaia despre partea trensmitoare i receptoare, ca i partea de
mesaj care conine mesajul potal curent. SMTP ofer facilitile de transfer mail. Pentru a construi o facilitate mail
complet, aplicaia utilizator-agent trebuie s fie prezent n toate nodurile de reea relevante. Un agent-utilizator
trebuie s fie capabil s creeze, citeasc i s mnuiesc mesaje e-mail.
TELNET este folosit pentru a conecta un nod de reea ca terminal la un alt nod de reea. Utilizatorul poate
folosi terminalul conectat la nodul de reea local pentru a se "log-a" la un alt nod de reea ndeprtat.

1.3.3 Protocolul UDP (User Datagram Protocol)


Serviciile oferite de ctre nivelul IP nu sunt folosite de ctre programele de aplicaie direct. Unul dintre
principalele motive( pentru aceasta) este incapacitatea nivelului IP de a distinge ntre pachetele "ctre" i "de la" mai
muli utilizatori de servicii IP ntr-un nod IP. Pachetul IP conine suficient informaie pentru a identifica nodul, ns
e necesar informaie suplimentar pentru a dirija pachele pentru mai multe aplicaii reea ntr-un singur nod IP.
UDP este construit n vrful nivelului IP i ofer multiplexarea i demultiplexarea mai multor fluxuri de
date de-a lungul nivelului IP. Intr-un nod IP, mai mult de o aplicaie poate schimba date cu alte noduri reea,
utiliznd serviciile UDP. Nivelul UDP este responsabil pentru trimiterea datelor nivelului UDP pereche, i de
livrarea lor aplicaiei receptoare.
In figura 11.8 este artat o comunicaie tipic, n care trei aplicaii din calculatoru A (gazda A) schimb
articole de date cu aplicaiile pereche din calculatorul B ( gazda B).
Nivelul UDP are grij de multiplexarea i demultiplexarea corect a articolelor de date de-a lungul nivelului
IP. De exemplu, dac aplicaia 1 din nodul A trimite un pachet de date aplicaiei 2 din nodul B, nivelul UDP din
nodul A efectueaz multiplexarea, iar nivelul UDP din gazda B demultiplexarea.

Porturi UDP

Pentru implementarea serviciilor de multiplexare i demultiplexare pentru nivelul


transport, protocolul UDP, s-a introdus ca i la TCP conceptul de porturi UDP. Un numr de
porturi UDP, n combinaie cu adresa IP a nivelului reea local formeaz o identificare unic a
portului UDP. Combinarea a dou porturi UDP conectate, identific o legtur UDP. Pachetele
de date trimise de un capt sunt recepionate la cellalt capt (de un port) de-a lungul unei

legturi UDP. Aplicaiile conectate la un port UDP iau parte la o conversaie ntr-o legtur tip
UDP.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

19

Figura 11.8. Aplicaii care folosesc protocolul UDP


Cnd construim o legtur utiliznd serviciile UDP, portul UDP receptor trebuie s fie cunoscut dinainte.
Toate serviciile importante de reea au numere de port fixate.
Aceste porturi cunoscute sunt agreate de ctre toate implementrile UDP. Un nod de reea poate efectua o
legtur UDP cu o aplicaie, conectnd-o la portul cunoscut al serviciului.

Structura pachetului UDP

Structura pachetului UDP este simpl n comparaie cu structura unui pachet IP.
pachet UDP: = {
Port Surs (octet 1:2)
Port Destinaie (3:4)
Lungime (5:6)
Verificare (7:8)
Data (9:...)
};
Cmpurile au urmtoarea semnificaie:
Port Surs: portul surs UDP;
Port Destinaie: portul destinaie UDP;
Lungime: lungimea pachetului UDP n octei;
Verificare: suma de control opional a ntregului pachet UDP;
Data: data propriu zis transportat de ctre pachetul UDP, n mod normal un pachet IP.
Un pachet IP este transportat la nivelul UDP destinaie ncapsulat n cmpul dat al pachetului IP. Pachetul
IP poate, de exemplu, fi transportat ntr-un cadru Ethernet. Intregul proces de ncapsulare este descris n figura 11.9.

{
:
Cmpuri Ethernet
:
{
:
Cmpuri IP
:
{
:
Cmpuri UDP
:
{
data UDP

20Noiuni privind arhitectura i securitatea reelelor de calculatoare

}
}
}
}
Figura 11.9. Incapsularea unui pachet UDP

Aplicaiile i caracteristicile UDP

Principala funcie a nivelului UDP este de a aduga faciliti de conexiune serviciilor deja furnizate de ctre
nivelul IP. Aceasta face ca principalele caracteristici ale serviciilor nivelului IP s fie de asemenea prezente n
serviciile nivelului UDP. Datele trimise de-a lungul unei conexiuni UDP pot fi pierdute, pot conine erori, pot sosi
ntr-o ordine aleatoare (nu secvenial). Deoarece aceste probleme, ce pot apare, fac nesigur remiterea corect a
articolelor de date, apare necesitatea ca utilizatorii serviciilor UDP s trateze erorile ce apar n remiterea pachetelor
de date.
Un numr de aplicaii bine cunoscute utilizeaz serviciile UDP. Una dintre ele este protocolul de transport
fiier (TFTP-Triviale File Transport Protocol).
Serviciile oferite de ctre aceast aplicaie sunt adesea utilizate pentru a "bootstrap"-a un nod reea. Un mic
nucleu de software reea, incluznd Ethernet, IP, UDP i TFTP este rezident ntr-un astfel de nod reea. Serviciul acestui
nucleu este folosit pentru a ncrca alt software de-a lungul reelei. Acest software formeaz un set mai complet de servicii.
TFTP este construit n vrful nivelului UDP din cauza mrimii mici a implementrii UDP. El poate fi uor

ncorporat (rezident) ntr-un ROM dintr-un nod de reea.


O alt utilizare a UDP este SNMP(Simple Network Management Protocol). Aceast aplicaie ofer ca i
serviciu schimbul de informaie de management ntre dou noduri de reea. Alegerea UDP pentru SNMP este bazat
pe uurina de implementare a mediului UDP/IP i a mrimii mici a unui astfel de mediu. O stiv UDP/IP cu o
aplicaie SNMP poate fi folosit ntr-un nod de reea fr s cear prea multe resurse.

1.4 Gestionarea reelelor de calculatoare


1.4.1 Funciile sistemului de gestionare a reelelor
Dezvoltarea legturilor ntre reele de calculatoare integrate produse de diveri furnizori, n diverse
configuraii, necesit standardizarea n ceea ce privete gestionarea lor. Formele privind protocoalele de gestionare
sunt dezvoltate mai nti de principalele organizaii de standardizare precum IEEE, ISO i CCITT, iar dup aceea
sunt identificate specificaiile pentru implementarea lor.
Figura 11.10. ilustreaz un sistem integrat de gestionare a reelelor, cu o varietate de sisteme care
vehiculeaz date, imagini video precum i voce.

Figura 11.10. Sistem integrat de gestiune a reelelor


Exist dou forme de testare a eficienei gestionrii reelelor i anume: testarea interoperabilitii privind
asigurarea compatibilitii funcionale ntre dou implementri specifice de produse i testarea de conformitate,
pentru a exercita conlucrarea ntre dou implementri specifice. Eforturile de standardizare fcute de OSI au definit
cinci zone specifice de gestionare a reelelor i anume: configuraia, gestionarea defectelor, performana,
costurile i securitatea (Figura 11.11).

Noiuni privind arhitectura i securitatea reelelor de calculatoare

21

Gestiunea configuraiei implic legarea prin puni i reconfigurarea sistemelor utilizator precum i a
subreelelor, incluznd puni i rutere, gestionarea folosirii numelor i asocierea acestora cu adresele de reea. Acest
bloc este fundamental pentru buna funcionare a sistemului de gestiune a reelelor. El include urmtoarele funciuni:
gestionarea de atribute ale dispozitivelor, setarea i modificarea valorilor individuale, colective sau predefinite
ale acestora;
gestionarea iniializrii i a opririi n totalitate sau a anumitor pri din reea;
inventarierea sarcinilor de gestionare a unei organizaii care are construit o baz de date privind toate
echipamentele (modemuri i multiplexoare), precum i a circuitelor i echipamentelor logice;
actualizarea topologiei de gestionare prin identificarea tuturor relaiilor de interconectare;
schimbarea modului de gestionare a reelei i a elementelor de reea prin adugarea, tergerea i aducerea la zi a
informaiilor care s reflecte schimbrile fcute ntre diverse componente;
identificarea gestionrii directorilor i corelaiile tuturor numelor pentru un serviciu dat i permiterea
sincronizrii acestora cu baza de date.

Figura 11.11. Interaciunea ntre zonele de gestiune a reelelor


Gestiunea defectelor este implicat n ntreinerea subreelelor prin detectarea defectelor, izolarea erorilor
i corectarea defectelor de comunicaie.
La identificarea problemelor este important s se clarifice diferena dintre defecte i erori. Un defect este o
situaie anormal care necesit atenionarea managerului.
Erorile pot apare ocazional (ex. erori CRC). Componentele principale n gestionarea defectelor sunt:
detectarea defectului n cazul cnd nivelul erorilor depete o anumit limit i atenionarea utilizatorilor privind
componenta defect, precum i meninerea strii reelei n timpii de rspuns normali.
Diagnoza defectului se face printr-o secven de test capt la capt, lansat de la terminal la terminal, de-a lungul
unui circuit, iar izolarea lui, prin identificarea componentei specifice care a cauzat erorile. Corectarea defectelor se face
prin configurarea managementului de corectare a defectelor i prin reconfigurarea reelei pentru evitarea componentei
defecte precum i analiza erorilor pentru a vedea dac problemele corectate mai pot apare dup rezolvare.
Gestiunea performanei trebuie s urmreasc creterea performanelor, astfel nct s creasc eficiena reelei
prin evitarea gtuirilor n noduri i pe rute. Managerul de reea definete nivelele unei performane acceptabile, de
exemplu prin msurarea timpului de rspuns n reeaua de date sau gradul de servire pentru o reea de voce. De asemenea,
el poate alege componentele reelei care vor fi monitorizate prin parametrii lor i nivelele parametrilor.

Monitorizarea este necesar pentru a-l ajuta pe manager s vad performana curent a reelei i s o
urmreasc de la caz la caz, din or n or, zilnic, sptmnal sau lunar precum i n momentele de trafic maxim.
Gestiunea costurilor reelei ajut la definirea bugetului pentru reea. Utilizatorii sunt informai asupra
costurilor pentru resursele consumate precum i alocarea acestor costuri pe diverse departamente.
Gestiunea securitii reelei este necesar pentru monitorizarea i controlarea mecanismelor de protecie a
datelor. Aceasta asigur o continu protecie a cilor de comunicaie. Principalii parametri de securitate sunt:
confidenialitatea, integritatea i disponibilitatea (adic validarea numelor i controlul accesului). Funciile de

22Noiuni privind arhitectura i securitatea reelelor de calculatoare


securitate a reelei cuprind i responsabiliti administrative de generare, distribuire i memorare a cilor de criptare.
Aceste caracteristici ale gestionrii reelelor se situeaz la nivelul aplicaiei n ierarhia OSI.

1.4.2 Modelul de organizare a gestiunii reelelor


Funcionarea gestiunii unei reele trebuie combinat cu organizarea la nivel informaional privind situaia
actual i de perspectiv. Perspectiva organizaional sau modelul este cheia n dezvoltarea standardelor de gestiune
a reelei. Exist dou tipuri de sisteme, unul de gestiune i unul gestionat.
Gestiunea reelei conine aplicaii care sunt distribuite n ambele sisteme i anume: n sistemul de gestiune
sunt urmrite procesele, iar n sistemul gestionat procesele agent i obiectele.
Activitile de gestionare sunt realizate printr-un manager de procese care comunic cu procesele din
sistemul gestionat, astfel nct s controleze obiectele gestionate. Pentru fiecare obiect gestionat sunt definite
atributele, (precum numrtoare, nivele etc), operaiile valide asupra lor i notificarea obiectelor de ieire.
Att sistemul de gestionare ct i procesele din sistemele gestionate trebuie s aib aceeai concepie de
acces concurent asupra obiectelor gestionate.
Un proces din sistemul de gestiune (management) poate monitoriza unul sau mai multe procese din
sistemul gestionat.
Un proces din sistemul gestionat este asociat obiectelor; el asigur operaiile de citire i modificare ale
atributelor obiectelor i poate returna un rspuns la procesele gestionate. Figura 11.12 ilustreaz acest model de
organizare.

Figura 11.12. Modelul de gestiune a reelelor


Modelul informaional consider c toate informaiile referitoare la gestionare se gsesc n baza de
informaie a managementului (MIB).
Resursele de comunicaii i de prelucrare a datelor ce vor fi gestionate pot fi numite obiecte. Acestea includ
protocoalele cu automate finite, nivelele, conexiunile i dispozitivele fizice (ca de exemplu modemuri). Informaia
obinut de la gestionarea de reea poate la rndul ei s treac n reea pentru a redefini caracteristicile fizice
cuantificabile i calitative, constrngerile de intrare logic (incluznd timpul minim de rspuns, costul proiectrii
reelei i msurtorile de siguran).
Sunt fcute mbuntiri iterative astfel nct calculaia costurilor de reea i performana sunt evaluate dup
criterii operaionale. Acest proces continu pn cnd proiectarea optimizat reuete s satisfac obiectivele reelei.
In ceea ce privete protocoalele de gestionare exist protocolul CMIP ( Common Management Internet
Protocol ) cu soluii globale de interconectare.
El este puternic i sofisticat, fiind dezvoltat de OSI pentru rularea pe stiva de protocoale OSI. Preul pltit
pentru implementare e destul de mare i are multe date adiionale (overhead).
SNMP (Simple NetWork Management Protocol) este un alt protocol de gestionare a reelelor, uor de
implementat, cernd memorie puin, timp redus de UC i este complet definit astzi, iar datele adiionale sunt
relativ puine i este simplu n operare. Avnd n vedere aceste caracteristici protocolul SNMP a fost ales de muli
utilizatori i productori. Acest protocol permite managerilor de reea s obin starea nodurilor i rutelor, s
schimbe parametrii dispozitivelor, s modifice rutele i s fac asignarea dispozitive-rute.
Productorii de TCP/IP au adoptat SNMP pentru produsele de gestionare a reelelor
(de ex. comunitatea Internet i reelele locale Ethernet).

Noiuni privind arhitectura i securitatea reelelor de calculatoare

23

Pe de alt parte IBM, care folosete protocolul de gestionare NetWiew, a construit o poart pentru CMIP.
Ali productori, precum DEC, au creat ceea ce se numete management integrat de reea (EMA - entreprise
management arhitecture).
Acest concept este foarte important n condiiile gestionrii integrate a informaiei de toate tipurile (voce,
date i imagini) pentru toate tipurile de echipamente (calculatoare, modemuri, multiplexoare, centrale telefonice,
reele LAN, dispozitive telefonice), protocoale standard i nestandard, de la diveri productori, baze de date
diferite, sisteme de aplicaii.

1.4.3 Managementul reelei TCP/IP


Analiza performanei reelei de calculatoare poate fi vzut ca o parte integrant a managementului reelei. In scopul
acestei cercetri, cea mai interesant parte a managementului reelei este msurarea i colectarea statisticilor reelei.
Aceste statistici sunt folosite n determinarea parametrilor performanei componentelor reelei.
Cnd msurm i gestionm o reea de comunicaii de date, datele trebuie s fie colectate de la nodurile
retelei conectate la ea. Datele pot conine informaii despre configurare, performana i statutul nodurilor i reelelor
care sunt conectate ntre ele. Combinnd datele de la un numr de noduri, poate rezulta informaia despre
comportarea reelei ca un ntreg.
Datele colectate sunt cerute cnd se efectueaz managementul activitii reelei. Standardul TCP/IP nu d
indicaii cum s se foloseasc datele colectate.
SMAE
APLICATIE
PREZENTARE
SESIUNE
TRANSPORT
RETEA
LEGATURA DATE
FIZIC
Figura 11.13. Modelul OSI extins cu servicii SMAE
Furnizorul de servicii la nivelul aplicaie, numit SMAE este capabil s extrag date de la toate nivelele i s le
schimbe cu un SMAE "egal"(Figura 11.13.). Folosind capacitatea de a schimba ntre nodurile reelei, date de gestionare a
ei, pot fi implementate mai multe scheme de management. Una dintre cele mai simple scheme este s se foloseasc o staie
ca NMS. Acest nod de retea colecteaz toat informaia relevant de la toate celelalte noduri de reea gestionate. Aplicaia
de management reea care extrage informaia de la datele colectate, ruleaz n mod normal

n NMS.
Scheme alternative includ o abordare distribuit, unde exist mai mult de un NMS n reelele gestionate i
activitile de gestionare reea sunt mprite ntre aceste staii.
Gestionarea, n cazul Internetului (Figura 11.14) se aseamn mult cu modelul OSI. Fiecare nod de reea
colecteaz date despre comportarea funciilor interne. Aceste date pot fi colectate folosind SNMP. O staie de
management reea poate comunica cu nodurile de reea gestionate i s extrag informaia necesar gestionrii
reelei. Pentru a face s funcioneze acest concept, fiecare nod trebuie s fie capabil s suporte cel puin o parte din
stiva TCP/IP i protocolul de management reea. Aceste cerine sunt uor satisfcute de ctre noduri de reea
complexe cum ar fi staii de lucru i alte echipamente.

Figura 11.14. Gestionarea n cazul Internetului

24Noiuni privind arhitectura i securitatea reelelor de calculatoare


Acest tip de nod de reea conine deja o stiv TCP/IP complet i are nevoie doar de suportul protocolului
de management al reelei. Pentru alte tipuri de noduri de reea, cum ar fi punile ethernet sau repetoarele, nu este
necesar gestionarea lor cu ajutorul protocoalelor din ierarhia TCP/IP, pentru operaiunile lor normale. Dac totui
aceste tipuri de noduri este necesar s fie incluse n schemele de management a reelei, ele trebuie s conin
facilitile de reea necesare.
Gestionarea nodurilor se realizeaz prin schimbarea variabilelor i valorilor lor. Toate datele de
management reea sunt ncapsulate n variabile cu un identificator unic. Prin obinerea sau setarea valorii unei
variabile ntr-un nod de reea gestionat, staia de management reea colecteaz datele gestionate i gestioneaz nodul.
Intr-o astfel de configuraie, NMS ia ntotdeauna iniiativa schimbrii datelor de management. Pentru a permite unui
nod gestionat s alerteze NMS este utilizat un mecanism capcan.
In cazul n care software-ul de management reea ntr-un nod gestionat vrea s notifice NMS despre o
excepie, poate trimite un mesaj capcan NMS-ului. Aceasta permite o notificare asincron a NMS-ului.
Cadrul de management reea al Internet-ului necesit un numr de faciliti. In primul rnd e necesar o
reprezentare a datelor. Identificatorii de variabil i valorile variabilelor ar trebui s fie astfel nct s poat fi
mnuite de mai multe platforme hardware diferite. In al doilea rnd fiecare variabil are un identificator care este
recunoscut att de NMS ct i de nodul gestionat. Pentru a se putea permite NMS-ului s gestioneze noduri arbitrare,
trebuie s fie un numr fix de variabile n fiecare nod.
Colecia se numete MIB (Management Information Base). In al treilea rnd, un mecanism de mapare i un
protocol de transport sunt definite prin identificatori de variabile, iar valorile variabilelor i identificatorilor de
cerere pot fi schimbate ntre aplicaiile de management n NMS i nodurile gestionate.

1.5 Reele fr fir


Reelele fr fir(wireless) sau radio, ofer beneficiul mobilitii utilizatorilor i o desfurare flexibil a
unei reele ntr-o anumit arie. Mobilitatea utilizatorului i permite unui client al reelei s se mite n diferite locaii
ale reelei fr s-i piard conexiunea la reea. Reelele fr fir ofer de asemenea avantajul c adugarea unui nod
la reea se poate face fr prea mult planificare sau costuri suplimentare de recablare. Aceasta face ca viitoarele
dezvoltri ale reelei s fie uoare i ieftine.

1.5.1 Provocri ale reelelor fr fir


Unele dintre principalele provocri crora trebuie s le fac fa reelele frfir, privitor la transmisie sunt
enumerate mai jos.
Deficitul limii de band fcnd ca pentru reelele radio divizarea limii de band s fie esenial de
vreme ce spectrul radio nu numai c este destul de scump dar este totodat i limitat.
Acces multiplu (Multiple access) adic succesul unei transmisii nu este independent de alte transmisii.
Pentru a face o transmisie reuit interferena trebuie evitat sau inut cel puin sub control. Pe de alt parte
transmisiile multiple pot conduce la coliziuni sau la semnale deformate.
Pierderea de cale (Path loss) adic puterea de transmitere a unui semnal radiaz n toate direciile i se
atenuez repede cu distana. De aceea semnalul ajunge diminuat la receptor.
Direcii multiple (Multipath), produc erori variabile de transmisie care pot conduce la o conectivitate
intermitent. Aceasta se ntmpl cnd un singur nod transmite cnd de fapt interferena rezult dintr-un acces
multiplu corespunztor transmiterii de la 2 sau mai multe noduri.
Diminuarea semnalului adic obstrucia fizic poate cauza diminuarea semnalului cnd puterea de
transmitere este blocat i de acum ncolo atenuat de barier.
Mobilitatea, securitatea i calitatea serviciului.

1.5.2 Standarde ale reelelor fr fir(tabelul 9.1).


Reele locale WLAN(Wireless Local Area Network) cunoscute ca i WiFi standardizate prin familia de
satndarde IEEE 802.11. Standardul permite mobilitatea i include optimizri i tehnici dezvoltate
de diferii vnztori, avnd variante precum: 802.11a, 802.11b, i 802.11g.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

25

HiperLan II: a fost proiectat pentru a administra infrastructura i distribuirea sistemelor wireless.
Opereaz la 5 GHz i banda este dedicat numai n Europa.
PAN
WLAN
WMAN
WAN
Standarde
Bluetooth
802.11a,11b,11g
802.16
GSM, GPRS,
HiperLAN2
MMDS, LMDS CDMA, 2.5-3G
Vitez
<1Mbps
2 pn la 54 Mbps
Peste 22
10 pn la Kbps
Mbps
Raz de
Mic
Medie
medieLung
aciune
lung
Aplicaii
Peer-to-Peer
Reele de
Acces fix
Acces PDA,
Device-to-Device
ntreprindere
Reele de
Telefoane mobile
campus
Tabel 11.1 Diferite tipuri de reele fr fir
HomeRF: este standardul pentru reelele la domiciliu. HomeRF este o specificaie industrial deschis.
Produsele compatibile HomeRF opereaz n banda de frecven gratuit de 2.4 GHz i utilizeaz tehnologia de
salturi de frecven.
Reele metropolitane WiMAX(Worldwide Interoperability for Microwawe Access)standardizate prin
standardele IEEE802.16; au fost proiectate pentru distane de pn la 100Km, pentru legturi cu vedere
direct(LOS-Line of Sight) sau fr(NLOS-Non Line of Sight), folosind frecvene ntre 0,7-66GHz, pe canale
liceniate sau fr licen. Se prevede c acest tip de reele va cunoate o puternic dezvoltare n urmtorii ani.

1.5.3 Conceptele i standardele reelelor locale fr fir


O reea bazat pe standardul 802.11 are o arhitectur celular. Sistemul este divizat in celule, unde fiecare
celul este denumit BSS (Basic Service Set) i este sub controlul unei staii de baz care este denumit AP(Acces
Point) sau punct de acces.
O reea fr fir poate fi format dintr-o singur celul cu unul sau nici un punct de acces. Cele mai multe
topologii au mai multe celule unde toate punctele de acces sunt conectate printr-o magistral denumit DS
(Distribution System) format dintr-o reea cablat sau una fr fir(wireless).
Standardul 802.11 definete 2 modaliti de configurare:
-de tip infrastructur(figura 11.15)
-ad-hoc(figura 11.16).

Figura 11.15. Topologii tip infrastructur


Avem topologie structurat atunci cnd o reea wireless are cel puin un punct de acces conectat la o reea
cablat i mai multe staii conectate wireless. Aceast dispunere este denumit BSS (Basic Service Set). Un set de 2
sau mai multe BSS formeaz o singur subreea denumit ESS (Extended Service Set). De vreme ce multe reele
wireless necesit accesul la serviciile reelei cablate cum ar fi server de fiiere sau imprimante ele vor opera n
modalitatea structurat

26Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.16 Topologie ad-hoc


Modalitatea ad-hoc reprezentat n figura 11.16 (modalitatea peer-to-peer sau IBSS Independent Basic
Service Set): aceasta apare cnd un grup de staii de tip 802.11 wireless comunic direct cu altul fr s foloseasc
un punct de acces sau conexiunea printr-o reea cablat. Aceast modalitate este folositoare pentru punerea rapid i
facil n funciune a unei reele oriunde nu exist o alt infrastructur cum ar fi o camer de hotel, sau aeroport sau
unde accesul la o reea nu este posibil.
Ca i n oricare alt protocol, 802.11 are 2 nivele: fizic i subnivelul MAC.
1

Nivelul legtur
de date

2
Nivelul fizic

LLC sau LLC+SNAP


Subnivelul MAC

Managementul subnivelului
MAC
Subnivelul PLCP
Managementul nivelului
Subnivelul PMD
fizic PHY
Tabelul 11.2 Modelul de referin OSI i reelele radio

Incapsularea datelor pe diferite nivele este ilustrat n figura 11.17. Se observ c avem o ncapsulare i la
nivel fizic.

Nivelul fizic

Nivelul fizic (PHY) acoper interfaa fizic ntre dispozitive i este in legtur direct cu transmiterea
irului de bii de-a lungul canalului de comunicare. Nivelul fizic este divizat n dou subnivele:
Subnivelul PLCP (Physical Layer Convergence Procedure) pentru ncapsularea datelor la nivel fizic;
Subnivelul PMD (Physical Media Dependent), pentru codificarea datelor i transmiterea lor pe canalele de
comunicaie.

Figura 11.17 Incapsularea datelor n reele fr fir


Cele 4 metode de codificare la nivel fizic sunt:
DSSS (Direct Sequence Spread Spectrum);
FHSS (Frequency Hopping Spread Spectrum);

Noiuni privind arhitectura i securitatea reelelor de calculatoare

27

HRDSS rate nalte ale DSSS ( pentru IEEE 802.11b);


OFDM(Orthogonal Frequency Division Multiplexing, pentru IEEE 802.11a i IEEE.802.11g), metoda cea mai
folosit n standardele actuale.
OFDM (Orthogonal Frequency Division Multiplexing)
OFDM lucreaz diviznd o purttoare de date de mare vitez n 52 sub-purttoare de vitez mai mic, din
care 48 sunt folosite la transmiterea datelor n paralel. Aceste sub-purttoare sunt divizate n aa fel ca oricare din ele
s fie ortogonal, de aici i numele, cu celelalte, n aa fel nct s permit s fie grupate mpreun mult mai aproape
dect standardul de multiplexare a diviziunii de frecven. Datorit acestui fapt OFDM poate furniza o eficen
spectral superioar i astfel asigur succesul pentru 802.11a. Principalele neajunsuri ale sistemului OFDM sunt
vulnerabilitatea compensrii de frecven i erorile de sincronizare.
4.1.4.

Subnivelul MAC

La subnivelul MAC are loc ncapsularea datelor ce vin de la nivelul reea n cadre. Cadrele subnivelului
MAC ndeplinesc diverse funciuni i sunt de mai multe tipuri:
v de management(cadre de: informare-beacon, rspuns de prob, autentificare, deautentificare, asociere, reasociere,
dezasociere, de aciune) ;
w
de control(ACK, RTS, CTS, PS-POLL);
x
de date(Data, Null-Data, Qos)
Datele n reelele fr fir(la subnivelul MAC) sunt transmise n trei moduri:
r
date fr confirmare(Data, Data)
s
date cu confirmare(Data, rspuns Ack, Data, rspuns Ack,..)
t
date transmise dup anun RTS/CTS (RTS, rspuns CTS, Data, rspuns Ack, Data,..)
Subnivelului MAC folosete protocolul CSMA/CA (Carrier Sense Multiple Access with Collision
Avoidance). Deasemenea subnivelul MAC este responsabil de fragmentare i de criptare. Fiecare BSS are o adres
unic MAC pe 48 de bii i fiecare ESS are o lungime variabil a adresei.
Protocolul CSMA/CA este similar cu cel de la reelele Ethernet. Staia care are ceva de transmis ascult
mediul i cnd nu este nici o staie activ, aici este diferena fa de CSMA/CD ateapt un interval de timp aleator
nainte de a-i trimite datele monitoriznd n permanen mediul. Pierderile de vitez sunt datorate faptului c se
transmite dup intervale de ateptare aleatoare, dar acestea sunt compensate de retransmisii mai puine. Cu ct sunt
mai multe staii cu att este mai benefic aceast tehnic. Managementul nivelului MAC este responsabil de
sincronizare, managementul energiei, roaming i de MAC-MIB.
n standardul 802.11 subnivelul MAC, pe lng funciile obinuite, trebuie s se ocupe de fragmentarea
pachetelor, retransmiterea lor i confirmarea primirii lor. Nivelul MAC definete 2 metode diferite de acces:
DCF (Distributed Coordination Function) - funcie de coordonare distribuit
PCF (Point Coordination Function) - funcie de coordonare punctual
a)Funcia de coordonare punctual
Aceasta este o funcie opional pentru implementarea saltului de timp cum ar fi servicii de transmitere a
vocii i transmisii video. Aceast funcie este folosit pentru a iniia un punct de acces ca i un punct de coordonare.
n aceast funcie punctul de coordonare atribuie o prioritate fiecrui client ntr-o transmisiune a unui cadru.
b)Funcia de coordonare distribuit
n modul DCF o staie trebuie s verifice mediul nainte de a iniia transmiterea unui pachet. Ea ateapt ca,
pentru un anumit canal DIFS s devin nefolositor, apoi ateapt pentru un interval aleator de timp, timp backoff,
care are valori ntre 0 i valoarea lui CW (Convention Window-CW)(figura9.18).
c)Metoda de acces CSMA/CA
Principalele beneficii ale CSMA/CA sunt:
Reduce probabilitatea de coliziune unde este nevoie;

staiile ateapt ca mediul s devin liber;

selectarea aleatoare a algoritmului Backoff dup o anumit ntrziere, rezolvarea acesteia prin
evitarea coliziunilor;

algoritm eficient de Backoff stabil pentru trafic mare;

cretere exponenial a ferestrei Backoff pentru retransmisii;

28Noiuni privind arhitectura i securitatea reelelor de calculatoare


- cronometrul Backoff se scurge numai cnd mediul este nefolositor;
Implementeaz diferite nivele de securitate pentru a permite rspunsuri imediate i coexistena PCF.
DIFS

Fereastr de

PIFS
DIFS
Mediu ocupat

SIFS

Fereastr Backoff

Urmtorul cadru

Cuant de timp
Acces ntrziat

Selecteaz cuanta, decrementeaz


Backoff ct timp mediul este nefolositor

Figura 11.18 Accesul CSMA/CA


Acesta folosete protocolul CSMA/CA (Carrier Sense Multiple Access, Collision Avoidance). Detectarea
coliziunilor nu poate fi folosit de ctre protocoalele wireless din urmtoarele motive:
Detectarea coliziunilor solicit implementarea unui semnal radio full duplex capabil s trimit i s
receptioneze n acelai timp. Aceast implementare ar costa prea mult.
Premisa major n detectarea coliziunilor este c o staie poate s asculte pe oricare alta. Aceast premis nu
se aplic i n mediul wireless. Dac o staie detecteaz mediul liber aceasta nu nseamn c n mod necesar mediul
din jurul receptorului este liber. Figura 9.20 arat problema nodului ascuns, n care staiile A i C pot vedea pe B dar
A nu poate vedea pe C. Figura 11.19 arat algoritmul de evitare a coliziunii care const n urmtorii pai:
Transmitorul verific mediul. Dac mediul este ocupat, suspend transmisiunea. Dac mediul este liber
pentru o anumit perioad de timp (DIFS), staia ncepe s transmit.
Receptorul verific CRC-ul pachetului recepionat i trimite o confirmare transmitorului. Dac
transmitorul nu primete nici o confirmare, el ncepe s retransmit cadrele dup un algoritm aleator
DIFS
Surs

Date
SIFS

Destinaie

Ack
DIFS

Alte

Fereastr

Urmtorul MPDU
ntrziere de acces

Backoff dup ntrziere

Figura 11.19 CSMA/CA + Protocolul ACK


Spaiul ntre cadre IFS (Inter Frame Space) definete timpul minim pe care trebuie s-l atepte o staie
dup ce detecteaz mediul ca fiind liber. Cu ct este mai mic IFS cu att este mai mare prioritatea. Dac are loc o
coliziune avem un algoritm de back-off care este folosit pentru a cuta cnd este liber mediul. Exist patru tipuri de
IFS pentru a atribui diferite prioriti:
SIFS (Short Inter Frame Space) este perioada dintre completarea transmisiei pachetului i nceputul
confirmrii cadrului.
PIFS (Point Coordination IFS) este folosit de punctele de acces sau de punctele de coordonare; n acest
caz pentru a obine acces la mediu naintea oricrei alte staii. Aceast valoare este IFS plus o cuant de timp
DIFS (Distributed IFS): Este IFS folosit de o staie care dorete s nceap o nou transmisie, este
calculat adunnd la PIFS o cuant de timp

Noiuni privind arhitectura i securitatea reelelor de calculatoare

29

EIFS (Extended IFS) este practic un IFS mai lung utilizat de o staie care a primit un pachet ce nu-l poate
nelege. Avem nevoie de acesta pentru a preveni coliziunile.
d)Problema nodurilor ascunse
Cele dou staii nu se aud, dar fiecare aude punctul de acces(figura 11.20).
Staie
Punct de acces
RTS

Raza RTS

Raza CTS

CTS
Date

Punct
de acces

Ack
Staie

Staie

Staiile nu se aud una pe alta


Dar fiecare aude punctul de

Figura 11.20 Problema nodului ascuns


DIFS
Surs

RTS

Destinaie

Date
CTS

Ack
CW

Alte

NAV (RTS)
NAV (CTS)

Urmtorul MPDU

Acces ntrziat

Backoff dup ntrziere

Figura 11.21 Accesul RTS/CTS


Figura 11.21 arat schema care este folosit pentru a reduce coliziunile dintre staii ca rezultat al faptului c
ele nu au fost capabile s se asculte una pe alta.
Cnd o staie dorete s transmit un pachet, ea trimite un pachet de control denumit RTS (Request To
Send) care include sursa, destinaia i durata urmtoarei tranzacii.
Dac mediul este liber staia receptoare rspunde cu un pachet de control denumit CTS (Clear To Send)
care include aceeai durat a informaiei.
Toate staiile care recepioneaz fie CTS sau RTS i seteaz indicatorul lor Virtual Carrier Sense (denumit
NAV, Network Allocation Vector vector de alocare al reelei) pentru o perioad dat i folosesc aceast informaie
mpreun cu Physical Carrier Sense pentru a determina dac mediul este liber.
15.

Standardele de reele locale fr fir IEEE 802.11a, b, g

Principalele standarde(Tabelul 11.3) pentru banda de baz sunt:

30Noiuni privind arhitectura i securitatea reelelor de calculatoare

Standardul
802.11a

Banda

802.11b

2,4GHz

802.11g

2,4GHz

802.11n

2.4 si
5Ghz

5GHz

Frec-vena Canale
Simultane
3008-13
555MHz
83,5
3
MHz
83,5
3
MHz

Protocol la nivelul Viteza


fizic
OFDM
54Mb/s

Dis-tana
(domeniul)
10-40m

Compati-bilitatea Interferen
Incompati-bila
Puine

HR-DSSS

11Mb/s

20-180m

OFDM

54Mb/s

20-180m

Compatibi-la cu
11g
Compatibi-la cu
11b

OFDM

Medie
de
15Mbps

Multe
Multe

Tabelul 11.3 Principalele standarde WLAN i caracteristicile lor

1.5.4 Securitatea reelelor fr fir


35.

Ameninri ale securitii reelelor fr fir

Intercepia poate avea loc folosind receptoare standard cum ar fi o anten;


Furtul resurselor atacatorii pot fura un acces valid i apoi s dobndeasc acces direct la toate
dispozitivele unei reele;
Redirectarea traficului atacatorii pot face modificri n tabelele ARP din switchuri ale reelelor cablate
printr-un punct de acces ducnd la rutri diferite ale destinaiei pachetelor;
Negarea serviciului acest atac are loc cnd atacatorii ncearc s inunde reeaua cauznd congestii
distrugnd conexiunea dintre 2 staii pentru a preveni accesul la servicii;
Reele rtcite i staii redirecionate o reea wireless 802.11 este foarte predispus la atacul din partea
unui punct de acces rtcit. Acest punct de acces este unul deinut de un atacator i accept conexiuni STA.
57.

Autentificarea n cazul satandardelor IEEE 802.11

IEEE 802.11 are dou subtipuri de autentificri: sistem deschis i cheie partajat. Autentificarea este fcut
ntre dou staii. De aici rezult c se poate face numai n cazul cadrelor unicast dar nu i la cele multicast.
Autentificarea sistemelor deschise: sistemul deschis este implicit algoritmul de autentificare i implic un
proces n 2 pai dup cum urmeaz:
A trimite o cerere de autentificare lui B
B trimite rezultatul napoi lui A
Dac punctul de autentificare a lui B specific sistem deschis rezultatul aciunii este reuit, altfel A nu
este autentificat.
Autentificarea cu cheie partajat: aceasta furnizeaz un grad de autentificare mai bun dect cea a
sistemelor deschise. Autentificarea cu cheie partajat suport autentificarea staiilor oricrui membru care tie cheia
secret partajat sau a unui membru care nu o tie. Cheia secret partajat se gsete n MIB-ul fiecrei staii ntr-o
form write-only i este accesibil numai coordonatorului MAC. Pentru staiile care folosesc autentificarea cheilor
partajate, trebuie s se implementeze WEP. Standardul 802.11 nu a specificat cum trebuie distribuite cheile fiecrei
staii. Cei patru pai de baz sunt urmtorii:
O staie trimite un cadru prin care cere autentificarea altei staii (sau unui punct de acces)
Punctul de acces folosete WEP pentru a genera un ir de octei ca i cerere de autentificare i rspunde lui
A.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

Vector de initializare

RC4

Cheia secreta

31

IV

Secventa a cheii

WEP

PRNG

Text
cifrat

Text clar
Algoritm de integritate

Mesaj

Valoare de control
a integritatii

Figura 11.22 Criptarea WEP


Staia care face cererea copiaz textul cadrului cererii de autentificare ntr-un alt cadru, cripteaz cadrul
folosind cheia secret partajat apoi transmite cadrul napoi
La punctul de acces, dac verificarea lui WEP ICV nu d erori, respondentul va compara coninutul
decriptat al cmpului cerere text cu cerere de autentificare de la punctul 2. Dac cele 2 sunt identice, punctul de
acces va rspunde cu un cod de reuit n cel de-al patrulea cadru. Dac verificarea WEP ICV eueaz, staia nu va fi
autentificat.
WEP (Wired Equivalent Privacy) este protocolul de ncapsulare pentru 802.11 al cadrelor de date. Scopul
este s furnizeze securitate datelor la nivelul unei reele cablate. WEP este un algoritm simetric n care aceeai cheie
este folosit att pentru criptare ct i pentru decriptare.
Se folosete aceeai cheie att pentru criptare ct i pentru decriptare. Algoritmul de criptare este descris n
figura 11.22, iar cel de decriptare n figura 11.23.
Asupra textului n clar se aplic 2 procese. Unul este de criptare a textului iar altul este de protejare
mpotriva modificrilor neautorizate.
Cheie secreta

Text clar
RC4

IV

WEP
PRNG

Semnatura cheii

ICV
Algoritm de integritate

Text
cifrat

ICV=ICV
ICV

Mesaj

Figura 11.23 Decriptarea WEP


Cheia secret (40 bii) este concatenat cu IV (Initialization Vector) vector de iniializare rezultnd o lungime
total a cheii de 64 de bii. Cheia rezultat este preluat ca intrare a PRNG (Pseudorandom number generator). PRNG
(RC4) d ca rezultat o cheie pseudoaleatoare bazat pe cheia de intrare. Secvena rezultat este folosit pentru criptare
datelor folosind XOR. Lungimea acestui rezultat criptat este egal cu numrul de octei ai datelor care sunt transmise plus
nc 4 octei, aceasta deoarece secvena cheii este folosit pentru pstrarea integritii datelor (ICV 32 bii)

Pentru protejarea mpotriva modificrilor neautorizate, un algoritm de integritate (CRC-32) opereaz asupra
textului n clar pentru a produce ICV
La decriptarea datelor, vectorul de iniializare al mesajului primit este folosit pentru a genera secvena
necesar pentru decriptarea mesajului primit. Combinnd textul criptat cu o secven potrivit a cheii ne va furniza
textul original i ICV. Decriptarea este verificat executnd algoritmul de verificare a integritii asupra textului clar
refcut i comparnd ICV astfel rezultat cu ICV transmis odat cu mesajul. Dac ICV nu este egal cu ICV mesajul
a fost recepionat cu erori i este trimis un mesaj de eroare staiei transmitoare.

32Noiuni privind arhitectura i securitatea reelelor de calculatoare

Protocolul de autentificare 802.1x(EAP) i subprotocoalele sale

Figura 11.24. Autentificarea 802.1x


Standardul de autentificare 802.1x este relativ simplu i iniial nu a fost destinat comunicailor fr fir. Pentru

802.1x autentificarea clienilor se face printr-un server de autentificare extern(de obicei RADIUS sau, mai nou,
Diameter). Unele produse fr fir folosesc serverul de autentificare nu numai pentru simpla autentificare a
utilizatorilor, ci i pentru politici utilizator i funcii de control ale utilizatorilor. Aceste funcionaliti avansate pot
include asignare VLAN dinamic i politici utilizator dinamice.
Autentificarea 802.1x este un dialog ntre un sistem care dorete s se conecteze la serviciile reelei i reea.
Acest dialog folosete protocolul extensibil de autentificare EAP. 802.1x const dintr-un PAE (Port Access Entity) n
toate staiile (STA) i punctele de acces (AP), ncapsularea EAP a reelei (EAPOL) i un server de autentificare
RADIUS (AS) (figura 11.24.).
Dialogul de autorizare standard const n:
1. AP cere STA s se identifice folosind EAPOL (EAP over LAN);
2. STA i trimite identitatea la AP;
3. AP trimite mai departe identitatea STA la AS, prin intermediul EAP;
4. ntre AS i STA are loc un dialog de autentificare;
5. Dac dialogul este terminat cu succes, STA i AS partajeaz cheia de sesiune;
6. AS trimite cheia de sesiune la AP ntr-un atribut RADIUS precum i o parte a mesajului de acceptare a RADIUS.
7. AP d accesul portului su adresei STA a MAC ,i opional, permite o cheie WEP printr-un pachet EAPOL.
1.5.4.4

Autentificarea de tip acces protejat la WiFi (WiFi Protected Acces-WPA)

Pn la ratificarea standardului IEEE 802.11i, aliana WiFi a propus WiFi Protected Access(WPA) ca o
soluie interimar care s nlocuiasc criptarea bazat pe WEP. Dezvoltarea WPA face parte din eforturile WiFi
Alliance i IEEE de a oferi soluii de securitate puternice, bazate pe standarde i interoperabile. WPA a fost creat
pentru a fi compatibil, pe viitor cu standardul de securitate 802.11i ce va fi oferit de muli comerciani ca aducere la
zi(upgrade) pentru AP urile existente i plcile de reea fr fir.
WPA aduce mbuntiri securitii fr fir n mai multe moduri. In primul rnd adaug mecanismele de
autentificare care lipseau n implementrile WEP tradiionale. Autentificarea WPA poate fi realizat cu 802.1x sau
chei partajate. 802.1x ofer abilitatea de regenerare a cheilor, dar necesit un server de autentificare RADIUS
compatibil cu 802.1x/EAP. Folosirea cheilor partajate nu necesit un astfel de server, ns se pierd o parte din
funcionalitile de autentificare a utilizatorului.
Protocoalele folosite de WPA si RSN pentru implementarea securitii de acces sunt: IEEE 802.1x
EAP( Extensible Authentication Protocol) i RADIUS (Remote Authentication Dial-In User Service). Acestea sunt
sunt obligatorii pentru WAP i RSN.
WPA cere recodificarea cheilor de criptare folosind TKIP. WPA ncearc s fac referire i la probleme de
interoperabilitate.
1.5.4.5

Protocolul de integritate cu cheie temporar(TKIP)

Protocolul de integritate cu cheie temporar(TKIP-Temporal Key Integrity Protocol)


este folosit de WPA pentru recodificarea cheii de criptare a traficului unicast. Fiecare cadru
de date transmis prin spaiul fr fir este recodificat de ctre TKIP. TKIP sincronizeaz

schimbul de chei ntre client i AP. Cheile de criptare global sunt schimbate, printr-un anun
ctre toi clienii conectai, de ctre protocolul WPA.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

33

A fost proiectat pentru a permite unele soluii pentru cteva probleme software i firmware ntlnite n
WEP. Schimbrile majore n cadrul WEP sunt:
un nou cod de integritate a mesajului (MIC ), generat cu algoritmul Michael. MIC este calculat cu textul MSDU,
adresele surs i destinaie i cmpul de prioritate MSDU, naintea fragmentrii n MPDU-uri. MIC asigur aprare
mpotriva atacurilor false;
din cauza limitrilor algoritmului Michael, au fost implementate un set de contramsuri. Din cauza limitrilor
hard, a fost imposibil folosirea unui algoritm mai puternic, dar totui aceast metod alternativ reduce
probabilitatea unui atac;
TKIP extinde vectorul de iniializare WEP(IV)( n principiu, este incrementat un numrtor la fiecare trimitere a
unui cadru) i utilizeaz aceasta la MPDU ca un TSC(TKIP Sequence Counter);
managementul de chei RSNA asigur o cheie temporar. Este aplicat o funcie de mixare la TSC i adresa de
transmitere(TA ). Aceasta asigur nu numai o cheie nou pentru fiecare secven trimis, dar previne i utilizarea
unor chei slabe, cu fluxul criptat, folosind RC4.
1.5.4.6

Protocolul 802.11i

Curnd dup succesul rsuntor al reelelor locale (LAN) fr fir, a devenit foarte evident lipsa securitii
acestora. Dup civa ani, a fost introdus un standard IEEE 802.11i(numit i WPA2) pentru a asigura o securitate
robust acestor reele. n cele ce urmeaz vom descrie mecanismele de autentificare, managementul parolelor,
protecia integritii i confidenialitii n cadrul acestor reele cu securitate robust.
mbuntirea principal a 802.11i pentru WLAN-uri este definirea unor reele cu servicii robuste de
securitate(RSN-Robust Security Netwok). Standardul IEEE 802.11i urmrete rezolvarea deficienelor asociate cu
confidenialitatea datelor n mediul fr fir.
O reea RSN este o reea sigur care permite crearea de asocieri n RSN (ARSN). O ARNS definete un numr de
trsturi cum ar fi mecanisme de autentificare mbuntite pentru staii, algoritmi criptografici i mecanisme de
ncorporare a datelor mbuntite care asigur confidenialitate crescut, numite CCMP i opionalul TKIP.

ntr-o reea cu securitate robust, IEEE 802.11i asigur funcii de protecie pentru secevenele de date,
802.1X asigur autentificarea i controlul porturilor, iar IEEE 802.11i i IEEE 802.1X colaboreaz pentru a furniza
managementul parolelor. Reelele capabile RSN adaug elemente speciale secvenelor lor, promovndu-le
capabilitile. n continuare nu se va discuta despre elementele de baz ale autentificrii 802.1x, ntruct acestea au
fost tratate anterior. Vom face o descriere a cheilor ierarhice din RSN-uri. Aceste procese se reunesc n protocolul
handshake pe 4 ci i a cheilor stabilite cu acestea. n final, se va aborda utilizarea cheilor generate n cele dou
moduri confideniale.
RSN-urile utilizeaz protocolul 802.1X pentru a asigura autentificare puternic , managementul cheilor i
controlul accesului. Aplicaiile variaz de la confidenialitate spre eviden, funcie de modelul de afacere. Asocierile

RSN nlocuiesc mecanismele clasice de asociere.


1.5.4.6.1

Ierarhia cheilor n cadrul protocolului 802.11i

n problemele de securitate un aspect important l constituie cheile. Dac aceste chei sunt compromise sau
furate, nu mai putem vorbi securitate.
Exist dou tipuri de chei utilizate de protocoalele de criptare la nivelul legturii de date:
Cheile perechi (Pairwise keys), care protejeaz traficul ntre staie i punctul de acces;
Cheile de grup(Group keys) care protejeaz traficul broadcast sau multicast de la punctul de acces la clieni.
Cheile perechi sunt obinute din informaiile de autentificare, iar cheile de grup sunt create aleator i
distribuite la fiecare staie de punctul su de acces. 802.11i folosete dou protocoale de criptare i anume TKIP(tratat
anterior) i CCMP (care va fi descris mai jos). Ambele folosesc o cheie master pentru a obine cheile temporare cerute
pentru protecia cadrelor la nivelul legturii de date. Cheia master este cheia rdacin i trebuie protejat deoarece toate
celelate chei deriv din ea. n RSN contextul de securitate este definit de posesia cheilor cu via limitat. Fa de WEP, n
RSN sunt o mulime de chei care formeaz o ierarhie de chei i majoritatea acestor chei nu sunt cunoscute la nceputul
procesului de autentificare. Pentru c sunt create n timp real, ele sunt cunoscute i sub denumirea de chei temporare.
Aceste chei temporare pot fi actualizate(rennoite) din timp n timp, dar ntotdeauna sunt distruse odat cu
ncheierea contextului de securitate. RSN-urile folosesc diferite chei pentru diferite scopuri i pentru diferite nivele. n
fruntea ierarhiei cheilor perechi se afl cheia master pe 256 bii(Pairwise Master Key-PMK). n configuraiile WPA-PSK
cheia master este configurat, iar n configuraiile ce folosesc server de autentificare cheia master este calculat de srverul
RADIUS i trimis punctului de acces n atributul RADIUS. Din ea deriv patru chei diferite, fiecare pe 128 de bii i
anume: cheia utilizat la calcularea integritii mesajului EAPOL(KCK-Key Confirmation Key), cheia

34Noiuni privind arhitectura i securitatea reelelor de calculatoare


utilizat la criptarea mesajelor EAPOL(KEK-Key Encription Key), cheia de criptare a datelor TKIP, cheia de
integritate a datelor TKIP(cheia MIC). mpreun, toate cele patru chei sunt cunoscute ca i cheia pereche tranzitiv
pe 512 bii.

1.6 Securitatea reelelor de calculatoare


1.6.1 Introducere n criptografie
Reelele de calculatoare sunt o resurs partajat, folosit de ctre mai multe aplicaii n diverse scopuri.
Uneori, datele transmise ntre procesele aplicaie sunt confideniale i ar fi de dorit ca ele s nu fie citite dect de cei
crora li se adreseaz. De exemplu, cnd cumprm un produs pe WWW, utilizatorii trimit uneori numrul crii de
credit (n trile unde este posibil acest lucru) prin reea. Acest lucru este destul de riscant, deoarece este usor pentru
o alt persoan s proiecteze un program aplicaie care s "asculte" reeaua i s citeasc pachetele care o
traverseaz. Deci e necesar transformarea datelor trimise pe un canal capt la capt, prin criptarea lor.
Mesajele ce trebuie criptate, cunoscute sub numele de text clar, sunt transformate ntr-o funcie
parametrizat de o cheie. Ieirea procesului de criptare, cunoscut sub numele de text cifrat (figura 11.25). Procesul
de transformare a textului cifrat napoi n text clar se numete decriptare caz n care se folosete o cheie de
decriptare obinndu-se n aceste mod textul original.
Presupunem c intrusul ascult i copiaz cu acuratee ntreg textul cifrat. Totui, el nu tie care este cheia
de criptare i astfel el nu poate decripta prea uor textul cifrat. Uneori intrusul poate nu numai s asculte canalul de
comunicaie (intrus pasiv), ci i s nregistreze mesajele i s le retransmit mai trziu, s injecteze propriile sale
mesaje sau s modifice mesajele legitime nainte ca ele s fie preluate de receptor (intrus activ).
n cadrul tiinei criptologiei se disting dou componente: criptografia (arta de a concepe cifruri) i
criptanaliza (arta de a sparge cifruri). Criptograful caut metode pentru a asigura sigurana i securitatea
conversaiilor n timp ce criptoanalistul ncearc s refac munca celui de dinainte prin spargerea sistemului.

Figura 11.25. Criptarea i decriptarea


Obiectivele principale ale criptografiei moderne pot fi vzute ca fiind: autentificarea utilizatorului,
autentificarea datelor (integritatea datelor i autenticitatea datelor de origine), nerespingerea (acceptarea) originii i
confidenialitatea datelor. n continuare vom studia mai pe larg cteva dintre acestea. Ulterior, vom explica cum pot
fi realizate aceste servicii folosind primitivele criptografice.

1.6.2 Servicii criptografice


1.6.2.1

Autentificarea utilizatorului

Dac ne conectm la un sistem de calcul trebuie (sau cel puin ar trebui) s existe un mod prin care s-l
convingem pe interlocutor asupra identitii noastre. Odat tiut identitatea, se poate verifica dac avem dreptul de
a intra n sistem. Acelai principiu se aplic cnd o persoan ncearc s comunice cu o alta: primul pas este acela de
a verifica dac persoana cu care se comunic este ntr-adevr cine susine c este. Deci, trebuie s existe un mod n
care s-i dovedeti identitatea. Procesul este numit autentificarea utilizatorului. Exist cteva ci de a obine aceast
autentificare.
Cel ce vrea s se conecteze va transmite un element de identificare pe care-l tie
numai el: o parol, un identificator de utilizator, un cod pin etc. Sau poate avea un element
specific cu care se poate identifica: un card magnetic, un smart card, un simbol etc. Se mai
pot folosi i proprietile biometrice; este un fapt bine cunoscut c amprentele digitale,
forma minii sau modelul retinal ale unei persoane sunt criterii bune de decizie. Acestea

necesit ns echipamente specializate i de aceea reprezint o mare investiie. Totui,


aceste sisteme biometrice nu sunt

Noiuni privind arhitectura i securitatea reelelor de calculatoare

35

perfecte: unii utilizatori legitimi vor eua inevitabil asupra identificrii, iar unii intrui vor fi acceptai ca autentici.
Alte tehnici includ msuri despre cum i tasteaz numele sau i scrie semntura, sau se ia n calcul locaia
utilizatorului.
1.6.2.2

Autentificarea datelor

Autentificarea datelor const din: faptul c datele nu au fost modificate (integritatea datelor) i faptul c se
tie cine este expeditorul (autentificarea datelor de origine).
a)Integritatea datelor.
Serviciul de integritate al datelor garanteaz faptul c, coninutul masajelor, care au fost transmise, nu a fost
atins de nimeni. Integritatea datelor n sine nu are un sens precis: nu te ajut s tii c datele pe care le-ai receptat nu
au fost modificate, doar dac tii sigur c i-au fost trimise direct de la persoana n cauz. De aceea, ntotdeauna ar
trebui combinat cu autentificarea datelor de origine. ntotdeauna ar trebui s fim n alert asupra posibililor intrui
n reea sau n sistemul de comunicaie. Un exemplu bine cunoscut este Internetul care conine universiti i
companii de pe ntreaga planet. Pota electronic de pe Internet nu ofer nici o securitate. n consecin, un
utilizator poate intercepta mesajele care sunt transmise de-a lungul liniei de comunicaie. Este foarte uor de citit i
de modificat corespondena electronic a unei persoane, care este privit n general ca fiind privat.
O persoan A transmite un mesaj unei persoane B. Poate exista un adversar care le poate intercepta mesajul.
Dac nu exist integritatea datelor, inamicul poate doar schimba mesajul i apoi s-l transmit lui B. B nu va observa
c mesajul a fost transformat i va presupune c A a scris ntr-adevr mesajul aa cum l-a primit el. Se poate afirma
c interceptarea pe fir este dificil. n general aceast interceptare este o problem de cost n sensul c este mult mai
uor de interceptat o linie telefonic dect un cablu coaxial. Interceptrile active de fire (modificare i apoi
retransmiterea mesajelor) sunt mult mai dificile dect interceptrile pasive de fire (doar ascultarea mesajelor).
b)Autentificarea datelor de origine.
Cineva dorete s se asigure c o persoan care susine c este transmitorul mesajului n sine, este cel
cruia i aparine n original. Dac A i trimite un mesaj lui B, dar inamicul intercepteaz mesajul i l retransmite lui
B susinnd c l-a transmis A, cum poate fi B sigur de originea datelor? O variant a acestei probleme este: inamicul
poate transmite lui B un mesaj susinnd c A este autorul. Mulumit criptografiei, exist tehnici de asigurare
mpotriva acestor tipuri de fraude.
1.6.2.3

Acceptarea originii

Acceptarea originii protejeaz mpotriva refuzului uneia dintre entiti care este implicat ntr-o convorbire,
de a participa n totalitate sau parial la comunicaie. Acceptarea unei dovezi a originii, protejeaz mpotriva oricrei
intenii a transmitorului de a respinge trimiterea unui mesaj, n timp ce acceptarea unei dovezi a livrrii, protejeaz
mpotriva oricrei tentative a destinatarului de negare, falsificare a mesajului recepionat. Un exemplu va ilustra
importana acceptrii originii. Presupunem c B este proprietarul unei companii de coresponden prin mail. Pentru
el este foarte important s poat arta unei a treia pri c A ntr-adevr a cerut lucrurile pe care le presupune el,
altfel, i-ar fi foarte uor unui client s nege achiziionarea bunurilor. n limbajul cuvintelor scrise pe hrtie,
acceptarea originii este furnizat de semntura manual.
1.6.2.4

Confidenialitatea datelor

Acest aspect al securitii datelor este cu siguran cel mai vechi i mai cunoscut. Exemplul cifrului lui
Caesar, dat n introducere demonstreaz acest lucru. Confidenialitatea a fost considerat a fi mult mai important
dect autentificarea, att din punct de vedere al datelor ct i din punct de vedere al transmiterii. Astfel o scrisoare
era scris lizibil, cu un sigiliu i o semntur. Cu ajutorul confidenialitii datelor, ne protejm mpotriva dezvluirii
neautorizate a mesajelor. Dac A trimite un mesaj lui B pe care l intercepteaz un inamic, se dorete ca inamicul s
nu poat nelege niciodat coninutul mesajului.
Confidenialitatea datelor este foarte important in lumea medical i de asemenea n sectorul bancar. n
ntreaga lume se fac mii de tranzacii n fiecare zi i toate acestea trebuie trecute de la o instituie financiar la alta.
Dac nu exist nici un mod de a proteja confidenialitatea, toat lumea ar fi n msur s vad ce s-a tranzacionat i
cine a cumprat i ce retrageri au avut loc, i aa mai departe.n mod evident ar avea loc violri de intimitate asupra
indivizilor i asupra companiilor. Pentru a furniza confidenialitate, este necesar cifrarea mesajelor.
b)Criptare simetric.

36Noiuni privind arhitectura i securitatea reelelor de calculatoare


n esen exist dou tipuri de scheme de criptare. Cele mai vechi i cele mai folositoare pn n prezent
sunt criptrile simetrice. n aceste scheme, cheia folosit pentru decriptarea textului cifrat este echivalent cu cea
folosit pentru criptarea textului iniial.

Figura 11.26 Criptarea simetric cu cheie secret


Algoritmii cu cheie secret sunt simetrici, n sensul c ambii participani angajai n comunicaie partajeaz
o singur cheie. Figura 11.26 ilustreaz folosirea criptografiei cu cheie secret pentru a transmite data ntr-un canal
nesigur. DES este cel mai cunoscut exemplu de algoritm de criptare cu cheie secret.
Cel mai bun algoritm din aceast categorie este Data Encription Standard (DES), care a fost adoptat n 1977 de
ctre American NBS (National Bureau of Standards). De atunci a fost folosit n ntreaga lume i pn acum nu s-au
descoperit mari defecte. Algoritmul DES folosete o cheie pe 56 de bii care din pcate este scurt. O mai bun securitate
poate fi realizat folosind algoritmul DES triplu. n acest mod se obine efectiv o cheie de 112 bii care este suficient de
mare. Nu este suficient alegerea unui algoritm sigur; mai este nevoie de specificarea unui mod de operaie securizat.
Depinznd de natura canalului de comunicare sau de spaiul de stocare, se poate alege ntre Cipher-Block-Chaing (CBC),
Cipher-Feedback (CFB), i Output-Feedback (OFB). Criptarea bloc cu bloc (sau Electronic Code Book

(ECB)) va fi folosit doar pentru criptarea cheilor.


j)Criptare asimetric.
Algoritmii de criptare asimetric sau de criptare cu chei publice sunt cele mai recente unelte criptografice.
Din contr, pentru sistemele asimetrice cheia folosit pentru criptare i cea folosit pentru decriptare sunt diferite.
Astfel, fiecare dintre parteneri are dou chei. Se ine o cheie secret i cealalt se face public. Dac A dorete s
transmit un mesaj lui B, acesta doar cripteaz mesajul cu cheia public a lui B. Deoarece B este singurul care are
acces la cheia secret, acesta este singurul care poate decripta i citi coninutul mesajului.
Pe de alt parte, criptografia cu cheie public implic faptul ca fiecare participant s aib o cheie privat
care nu este partajat cu nimeni i o cheie public care este publicat, astfel nct toat lumea tie de ea. Pentru a
trimite un mesaj sigur la un asemenea participant, se cripteaz mesajul folosind cheia cunoscut (cheia public).
Participantul decripteaz mesajul folosindu-i cheia privat. Mecanismul este ilustrat n figura 11.27.

Figura 11.27 Criptarea asimetric cu cheie public


Cel mai cunoscut algoritm de criptare cu cheie public este metoda RSA (RSA vine de la numele celor trei
inventatori Rivest, Shamir i Adleman). Aceast schem de securitate este nrudit cu problema de factorizare din
matematic: este uor de generat dou numere prime mari i este uor i de multiplicat, dar fiind dat un numr mare ce este
un produs de dou numere prime, este nevoie de o mare cantitate de calcule pentru a gsi cei doi factori primi.

n acest moment, cel mai mare numr care a fost factorizat are o lungime de
aproximativ 512 (1997). Din acest motiv, lungimea minim absolut a cheilor sistemului RSA
trebuie stabilit la 640 bii; 768 sau 1024 bii sunt necesari pentru orice sistem care cere
securitate pentru mai mult de cteva luni.De fapt exist un al treilea tip de algoritm

criptografic, numit funcie hash sau message digest. Spre deosebire de tipurile anterioare,
folosirea unei funcii hash nu

Noiuni privind arhitectura i securitatea reelelor de calculatoare

37

implic folosirea unor chei. In loc de aceasta, ideea este de a mapa un mesaj lung ntr-un mesaj de o anumit
lungime fix, analog felului n care o funcie hash obinuit mapeaz valori dintr-un spaiu larg n valori ntr-un
spaiu ngust. Aceast metod calculeaz o sum de control criptografic (cryptographic checksum) a unui mesaj.
Asta nseamn c, aa cum o sum de control obinuit protejeaz destinatarul de schimbri accidentale ale
mesajului, o sum de control criptografic protejeaz destinatarul de modificri maliioase ale mesajului.
Aceasta deoarece toi algoritmii de criptare prin repetiie sunt alei astfel nct s aib o sum de control
unic pentru un mesaj i deci este aproape imposibil s gseti ce mesaj a produs acea sum de control. Cu alte
cuvinte, nu este computational fezabil s gseti dou mesaje care prin repetiie s te duc la aceeai sum de control
criptografic. Relevana acestei proprieti este c dac primeti o sum de control pentru un mesaj (mpreun cu
mesajul), i eti capabil s calculezi exact aceeai sum de control pentru mesaj, atunci este foarte posibil ca acel
mesaj s fi produs suma de control primit.
Dei nu-l vom descrie n detaliu, cel mai folosit algoritm pentru a calcula suma de control este MD5(Message

Digest versiunea 5). O proprietate important a algoritmului MD5, n plus fa de cele enumerate mai nainte, este c
e mult mai eficient de calculat dect DES sau RSA.

1.6.3 Algoritmul DES


Obiectivul unui sistem criptografic este de a face extrem de dificil decriptarea unui mesaj pentru care nu se
cunosc cheile potrivite. Pentru atingerea acestui obiectiv, proiectarea este confruntat cu dou cerine contradictorii:
s asigure o criptoanaliz foarte dificil i s certifice nivelul de securizare realizabil. In prezent se prefer criptarea
care opereaz n mod repetat, n multe runde, asupra unui bloc de simboluri din mesajul de transmis. Aceste coduri
sunt de tipul bloc cu iteraii. Este o idee natural, simpl i eficient, care mpac, cel puin parial, simplitatea
(puine operaii primitive) i complexitatea.
Folosirea unui numr redus de operaii (ca XOR, substituia, permutarea) este de dorit i din punct de
vedere al componentelor hardware necesare implementrii unui algoritm de codificare. Pn n prezent, alegerile din
proiect au fost determinate mai degrab de tehnologia disponibil dect de teoria matematic dezvoltat. Spre
exemplu, codul IDEA, folosit de la nceputul anilor 1990, folosete n fiecare rund: XOR, adunarea modulo 2 16,
nmulirea modificat modulo (216+1). Toate aceste operaii sunt rapide pe procesoarele pe 16 bii disponibile n
momentul apariiei algoritmului IDEA.
Tot din motive de simplitate constructiv (i implicit cost redus) se folosete o aceeai poriune de program
sau un acelai cip att la codificare, ct i la decodificare. Un cifru Feistel ilustreaz foarte convingtor aceast idee.
Blocul de intrare de 2t bii este mprit n dou jumti L 0;R0 care devin dup i runde L i,respectiv Ri. La fiecare
rund, jumtatea dreapt a rundei precedente devine noua jumtate stng: L i=Ri-1, iar noua jumtate dreapt se
obine dup operaia sau exclusiv ntre jumtatea stng precedent i o funcie ce depinde de jumtatea dreapt
precedent i o subcheie a rundei K i:Ri=Li-1 (Ri-1,Ki). Inversarea (trecerea de la jumtile actuale la cele ale rundei
precedente) este imediat: Ri-1=Li i Li-1=Ri f(Ri-1,Ki). (Se observ c formulele subzist oricare ar fi funcia f
aleas!). Decriptarea are loc rulnd algoritmul n ordine invers (ultima subcheie K r de la criptare devine prima
subcheie folosit la decriptare, .a.m.d.) i permutnd cele dou jumti ale textului cifrat.(Figura 11.28).

38Noiuni privind arhitectura i securitatea reelelor de calculatoare

Figura 11.28 Schema algoritmului DES

1.6.4 Algoritmul RIVEST-SHAMIR-ADLEMAN (RSA)


Prima, i cea mai important, implementare a PKC este RSA, numit dup cei trei matematicieni de la MIT
care au dezvoltat-o - Ronald Rivest, Adi Shamir i Leonard Adleman. RSA este folosit n sute de produse software
i poate fi folosit pentru schimbul de chei, semnturi digitale sau criptarea unor blocuri mici de date. RSA folosete
un bloc de criptare de dimensiune variabil, iar cheia este i ea de lungime variabil. Perechea de chei este derivat
dintr-un numr foarte mare, n, care este produsul a doua numere prime alese dup anumite reguli speciale, aceste
numere pot avea fiecare mai mult de 100 de cifre, numrul n avnd mult mai multe cifre. Cheia public conine
numrul n i un derivat al unuia dintre factorii folosii pentru determinarea lui n; astfel un atacator nu poate
determina factorii primi ai lui n (deci nu poate afla cheia privat) numai din aceste informaii din acest motiv,
algoritmul RSA este att de sigur
1.6.4.1

Descrierea algoritmului RSA

Sistemul RSA este de tip exponenial. n criptosistemul RSA cu cheie publica, un participant creeaz cheia
sa publica i secreta prin urmtoarea procedur:
1. Se selecteaz aleator dou numere prime mari, p i q. Acestea ar putea avea, de exemplu 100 cifre zecimale.
2. Se calculeaz n prin relaia n=pq.
3. Se alege un numr d relativ prim cu (n) (unde (n) este indicatorul lui Euler, iar n cazul de fa va fi egal cu
(n)=(p-1)*(q-1) i d n intervalul [max(p,q)+1, n-1].
4. Se calculeaz e ca fiind inversul lui d modulo (n) ( pentru calculul lui e se poate utiliza o versiune extins a
algoritmului lui Euclid).
5. Se declar perechea P=(e,n) drept cheie RSA public.
6. Se menine secret perechea S=(d,n), care este cheie RSA secret.
Schema poate fi folosit cu succes ntr-un criptosistem cu chei publice astfel: se vor
face publice e i n, iar d va fi inut secret. n consecin, cheia public este format din
perechea (e,n) iar cheia privat din perechea (d,n).

Noiuni privind arhitectura i securitatea reelelor de calculatoare


1.6.4.2

39

Realizarea autentificrii folosind RSA

Deoarece cifrarea i descifrarea sunt funcii mutual inverse, metoda RSA poate fi utilizata att la
secretizare, ct i la autentificare. Fiecare utilizator A obine modulul n A i exponenii eA i dA. Apoi A va nregistra
ntr-un fiier public cheia public (nA, eA), n timp ce va ine secret pe dA.
Un alt utilizator B va putea cripta un mesaj M utiliznd cheia public a lui A:
Mesajul criptat este CA(M)=M^eA mod nA (unde mod este restul mpririi lui M^e A la nA ,, iar semnul ^
este ridicare la putere)
La recepie A va obine mesajul clar prin decriptare:
DA(CA(M)) = (M^eA mod nA) ^dA mod nA = M.
Utilizatorul A va putea semna un mesaj M ctre B calculnd:
DA(M) = M^dA mod nA,
iar B va autentifica acest mesaj, utiliznd cheia public a lui A:
CA(DA(M)) = (M^dA mod nA) ^eA mod nA = M.
Obinerea mesajului la decriptare se bazeaz pe rezultate din teoria numerelor care arat c dac p i q sunt
prime i n=p*q atunci: x^ymod n=x^(y mod (p-1)(q-1))mod n.
Deci dac la criptare avem c= m^e mod n atunci la decriptare trebuie s obinem mesajul m conform
formulei m=c^d mod n.
(m^e mod n) ^d mod n= m^(e*d) mod n=
m^(e*d mod (p-1)(q-1)) mod n= utiliznd rezultatele din teoria numerelor m^1 mod n= deoarece noi am
ales e*d s fie divizibil cu z=(p-1)(q-1) m
Exemplu:
S considerm un exemplu care s ilustreze acest
algoritm: Fie p=5 i q=7 dou numere prime;
Produsul acestor dou numere inute secrete este n=5*7=35 iar z=(p-1)*(q-1)=4*6=24.
Fie e =5 astfel c e i z sunt relativ prime, va rezulta d=29 , astfel ca ed-1 s fie divizibil cu z
Pentru a cifra mesajul, M=RETEA, acesta se va mpri n blocuri de cte un caracter fiecare, unde A=00,
B=01, C=02,.D=03, E=04, F=05, G=06, H=07, I=08, J=09, K=10, L=11, M=12, N=13,O=14, P=15, Q=16, R=17,
S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25 i blanc=26: M=R E T E A = 17 04 19 04 00. Primul bloc se
va cifra ca 17^5 mod 35(1419857mod35=12) =12 etc. Criptograma obinut devine: C =12 09 24 09 00
La descifrare, fiecare liter n clar se obine folosindu-se cheia secret d:12^29mod 35(
19781359483314150527412524285952mod35=17)=17 etc.
Alegnd numere prime mai mari se pot obine chei mai puternice(de ex pentru p=53 i q=61 se obine
n=3233, iar pentru d=791 e devine=71 i n acest caz se pot grupa literele cte dou, deci pe 4 digii)

1.6.5 Protocoale de autentificare (Kerberos)


Inainte ca doi participani s stabileasc un canal sigur ntre ei, adic s foloseasc DES sau RSA pentru a
cripta mesajele pe care le transmit-trebuie s se asigure c cellalt participant este cine pretinde c este. Aceasta este
problema autentificrii. Dac gndim aceast problem n contextul unei relaii client/server, atunci este de neles c
server-ul dorete s stabileasc identitatea clienilor: dac clientului i este permis s modifice sau s tearg fiierul
lui Popescu, atunci server-ul este obligat s se asigure dac clientul este de fapt Popescu. Uneori clientul dorete s
verifice identitatea serverului. La urma urmei, nu se dorete s se scrie date importante pe un server, numai pentru a
descoperi mai trziu c a fost de fapt un proces impostor.Aceast seciune descrie trei protocoale comune pentru
implementarea autentificrii. Primele dou folosesc criptografie cu cheie secret (DES) n timp ce a treia folosete
criptografie cu cheie public(RSA). S notm c adesea, n timpul procesului de autentificare, cele dou pri
stabilesc cheia sesiunii care va fi folosit pentru asigurarea securitii n timpul comunicaiei. In continuare vom
arta cum se pornete procesul.
1.6.5.1

Protocol n trei faze

Un protocol simplu de autentificare este posibil cnd cei doi participani care doresc s se autentifice unul
pe cellalt - clientul i serverul - partajeaz o cheie secret. Aceast situaie este analoag cazului n care utilizatorul
(clientul ) are un cont pe un sistem (pe server) i att clientul ct i serverul tiu parola pentru acel cont.
Clientul i serverul se autentific unul pe cellalt folosind un protocol simplu "n trei faze". In continuare
vom folosi E(m.k) pentru a numi criptarea mesajului m cu cheia k iar D(m.k) pentru a numi decriptarea mesajului m

40Noiuni privind arhitectura i securitatea reelelor de calculatoare


cu cheia k. Aa cum se vede n figura 11.29 clientul selecteaz pentru nceput un numr aleator x i l cripteaz
folosind cheia secret, pe care o notm ca fiind CHK (client handshake key). Clientul trimite apoi E(x,CHK),
mpreun cu un auto-identificator (ClientId) ctre server. Serverul folosete cheia care crede c corespunde clientului
ClientID ( s o numim SHK acronim pentru-server handshake key) pentru a decripta numrul aleator. Serverul
adaug 1 la numrul pe care l decripteaz i trimite rezultatul napoi la client. El trimite de asemenea napoi un
numr aleator y care a fost criptat folosind SHK. In continuare clientul decripteaz prima jumtate a mesajului i
dac rezultatul este cu 1 mai mare dect numrul aleator x care este trimis serverului atunci tie c serverul posed
cheia secret. In acest moment clientul a autentificat serverul. Clientul decripteaz de asemenea numrul aleator
trimis de ctre server ( care ar trebui s returneze y) cripteaz acest numr + 1 i trimite rezultatul serverului. Dac
serverul este capabil s refac y+1, atunci tie c clientul este cine pretinde c este.

Figura 11.29 Protocol de autentificare n trei faze


Dup al treilea mesaj, fiecare a fost autentificat fa de cellalt. Al patrulea mesaj (n figura 11.29) este
trimis de server clientului cu o cheie de sesiune(SK) criptat folosind SHK (care este egal cu CHK). De obicei
clientul i serverul folosesc SK pentru a cripta orice date viitoare care sunt trimise de unul celuilalt. Avantajul
folosirii unei chei de sesiune este faptul c cheia secret permanent este folosit doar pentru un numr mic de
mesaje, fcnd dificil misiunea atacatorului de a aduna date care ar putea fi utilizate pentru determinarea cheii.
Se pune ntrebarea, de unde provin cheile de protocol ale clientului i serverului. O posibilitate e ca ele s
corespund parolei tastate de ctre client; ClientId ar putea fi identificatorul sesiunii. Deoarece o parol selectat de
ctre utilizator poate fi nepotrivit (nesigur), este nevoie adesea de o modificare care s o transforme ntr-o cheie de
56 bii pentru DES.
1.6.5.2

ncrederea n a treia persoan

Un scenariu mai plauzibil este c cei doi participani nu tiu nimic unul despre cellalt, dar amndoi au
ncredere ntr-o ter persoan. Aceast ter persoan este cteodat numit server de autentificare i foloseste un
protocol pentru a ajuta cei doi participani s se autentifice unul pe cellalt. Sunt dealtfel mai multe variaiuni ale
acestui protocol. Cel descris aici este numit Kerberos i este un sistem bazat pe TCP/IP dezvoltat la MIT.
In continuare numim cei doi participani pe care dorim s-i autentificm ca fiind A i B i numim serverul
de autentificare S. Protocolul Kerberos presupune c A i B partajeaz o cheie secret cu S, iar cele dou chei le
noteaz cu Ka, respectiv Kb. Ca i nainte, E(m,k) semnific mesajul m criptat cu cheia k. Aa cum se vede n figura
11.30, participantul A trimite un mesaj serverului S care l identific pe el i pe B. Serverul genereaz o cuant de
timp T, un timp de via L i o nou cheie de sesiune K. Cuanta de timp T va fi folosit similar numrului aleator din
metoda anterioar i este de asemenea folosit mpreun cu L pentru a limita timpul pentru care sesiunea K este
valid. Participanii A i B vor trebui s se ntoarc la serverul S pentru a primi o nou cheie de sesiune
cnd expir acest timp. Ideea aici este de a limita vulnerabilitatea oricrei chei de sesiune.

Noiuni privind arhitectura i securitatea reelelor de calculatoare

41

Figura 11.30. Increderea n a treia persoan


Serverul S rspunde lui A cu un mesaj din dou pri. Prima parte cripteaz cele trei valori T, L i K, mpreun cu
identificatorul pentru participantul B, folosind cheia pe care serverul o partajeaz cu A. Cea de-a doua parte cripteaz cele
trei valori T, L i K mpreun cu identificatorul participantului A, dar de data aceasta folosind cheia pe care serverul o
partajeaz cu B. E limpede c atunci cnd A primete mesajul va fi capabil s decripteze prima parte dar nu i pe a doua. A
trimite a doua parte lui B, mpreun cu criptarea lui A i T folosind noua cheie de sesiune K( A a fost capabil s refac T i

K decriptnd prima parte a mesajului primit de la S). In final B decripteaz partea din mesajul primit de la A, criptat
iniial de ctre S i astfel recupereaz T, K i A. Se folosete K pentru a decripta jumtate de mesaj criptat de ctre A
i dup ce se constat c A i T se regsesc( sunt consistente) n cele dou jumti ale mesajului, se replic cu un
mesaj care cripteaz T+1 folosind noua cheie de sesiune K. A i B pot acum comunica unul cu cellalt folosind cheia
secret de sesiune K, pentru a asigura securitatea comunicrii. Serverul se mai numete i KDC-Key Distribution
Center-centru de distribuie a cheilor care dup cum s-a vzut acioneaz ca un intermediar ntre entiti.
1.6.5.3

Autentificare cu cheie public

Figura 11.31. Autentificarea cu cheie public


Un alt tip de protocol de autentificare folosete criptarea cu cheie public( de ex. RSA). El este mai utilizat
deoarece cele dou pri nu trebuie s partajeze o cheie secret, ele trebuie doar s cunoasc cheia public a
celeilalte pri. Aa cum se vede n figura 9.31, participantul A cripteaz un numr aleator x, folosind cheia public a
lui B, iar B demonstreaz c, cunoate cheia privat corespunztoare decriptnd mesajul i trimind x napoi lui A.
A poate s se autentifice fa de B n acelai mod.
In privina modului cum poate un participant s afle cheia public a celuilalt participant, este tentant s credem c
participanii trebuie s-i posteze cheile publice ntr-un BBS. Aceast abordare nu funcioneaz deoarece ar fi posibil
pentru participantul A s posteze propria cheie public i s pretind c este cheia public a lui B. Aceasta i-ar permite lui
A s se dea drept B. In locul acestei metode, cheile publice trebuie obinute de la o surs sigur, numit de obicei autoritate
de certificare(CA-certificate authority). Pe scurt, se merge la CA pentru a obine cheia public a unui alt participant i
trebuie s demonstrezi printr-un altfel de mecanism (exterior) c eti cine spui c eti cnd nregistrezi cheia public la
CA. In acest fel fiecare participant tie doar o singur cheie public, cea a CA-lui. S notm c n general este posibil s se
construiasc o ierarhie de CA-uri: se pornete de la CA-ul rdcin pentru a primi cheia public pentru un CA de nivel 2
care i d cheia public a CA-ului de nivel 3 i aa mai departe pn gseti cheia public a participantului cu care doreti
s comunici. CA-ul rdcin va putea fi publicat printr-o alt surs de ncredere.O alternativ la ierarhia structurat ca un
arbore este construirea unei plase neierarhizate. CA-Certification Authorities- Autoritatea de certificare leag cheia public
de entitatea particu;ar ( persoan, ruter,etc.). Entitatea poate nregistra cheia ei public cu CA

42Noiuni privind arhitectura i securitatea reelelor de calculatoare

1.6.6 Protocoale de asigurare a integritii mesajelor


Cteodat celor doi participani care comunic, nu le pas dac cineva este capabil s citeasc mesajele pe
care i le trimit unul celuilalt, dar sunt ngrijorai de perspectiva ca un impostor s se dea drept unul dintre ei. Mai pe
scurt, participanii sunt interesai de integritatea mesajelor. Un mod de a asigura aceast integritate este de a cripta
mesajul folosind DES cu CBC i de a folosi restul ( ultimul bloc obinut n urma procesului CBC) ca un cod de
integritate a mesajului (MIC-message integrity code). Textul iniial, mpreun cu MIC, este transmis destinatarului
cu MIC avnd rolul unei sume de control - dac destinatarul nu poate reproduce MIC-ul folosind cheia secret pe
care o mparte cu expeditorul, atunci fie mesajul nu a fost trimis de ctre expeditor, fie a fost modificat ntre timp. S
notm c nu este recomandat folosirea algoritmului DES mpreun cu CBC pentru criptarea mesajului n vederea
asigurrii secretului i generarea MIC-ului pentru pstrarea integritii, deoarece s-ar trimite mesajul criptat CBC cu
ultimul bloc repetat. Deci, oricine ar dori s se interpun i s modifice mesajul CBC ar putea lua valoarea ultimului
bloc i s-l transmit de dou ori.
Aceast seciune trateaz trei metode de asigurare a integritii mesajelor. Prima folosete RSA pentru a
produce o semntur digital. RSA folosit singur este destul de ncet, dar folosit mpreun cu MD5 este mult mai
eficient. A doua i a treia abordare folosete MD5 mpreun cu RSA, pentru a garanta integritatea mesajului.
1.6.6.1

Semnturi digitale folosind RSA

O semntur digital este un cod special, necesar pentru pstrarea integritii mesajului, codul putnd fi
generat de ctre un participant unic. Algoritmul cel mai uor de neles este cel ce creeaz o semntur RSA, care
funcioneaz n mod evident- deoarece participantul este unica persoan care i cunoate cheia privat, el/ea
folosete acea cheie pentru a produce acea semntur. Oricare alt participant poate verifica acea semntur folosind
cheia public corespunztoare. Cu alte cuvinte, pentru a semna un mesaj el se cripteaz folosind cheia privat, iar
pentru a verifica semntura se decripteaz, folosind cheia public a presupusului expeditor. In mod evident aceasta
nseamn c producerea unei semnturi RSA este la fel de nceat ca i RSA care este, dup cum am vzut mai
nainte, de dou pn la trei ordine de mrime mai ncet dect DES. Observm c folosirea cheilor este exact invers
relativ la folosirea lor pentru asigurarea secretului; expeditorul cripteaz cu cheia sa privat n locul cheii publice a
destinatarului, iar destinatarul decripteaz folosind cheia public a expeditorului n locul cheii sale private.
S notm c s-a mai propus o semntur digital cunoscut ca DSS care este similar abordrii descrise,
exceptnd faptul c folosete un algoritm alternativ, numit ElGamal, n loc de RSA.
1.6.6.2

MD5 cu cheie

S ne amintim c MD5 calculeaz o sum de control criptografic pentru un mesaj. Aceast sum de control nu
depinde de o cheie secret, deci nu previne faptul ca un impostor s se pretind drept altcineva i s calculeze o sum de
control MD5 pentru acel mesaj. Totui, exist dou moduri de a folosi MD5 n combinaie cu un algoritm cu cheie public,
cum ar fi RSA, pentru a implementa integritatea mesajului. Ambele abordri depesc problemele de performan inerente

n folosirea algoritmului RSA.


Prima metod, numit de obicei MD5 cu cheie, funcioneaz dup cum urmeaz: Expeditorul genereaz o
cheie aleatoare k i aplic MD5 asupra mesajului m i cheii k. In practic, cheia k este ataat, fie n fruntea, fie n
spatele mesajului nainte de a aplica MD5; k este ters din mesaj odat ce MD5 i ncheie execuia. Cheia aleatoare
este apoi criptat folosind RSA i cheia privat a expeditorului. Mesajul original, cheia de control MD5 i versiunea
criptat a cheii aleatoare sunt apoi mpachetate mpreun i trimise la destinatar. In continuare vom rezuma mesajul
complet trimis la destinatar:
m+MD5(m+k)+E(k,privat)
unde MD5(s) reprezint aplicarea algoritmului MD5 asupra textului s, iar a+b reprezint concatenarea textelor a

i b.
Destinatarul reface cheia aleatoare folosind cheia public RSA a expeditorului i apoi aplic MD5 asupra
concatenrii acestei chei aleatoare cu corpul mesajului. Dac rezultatul corespunde sumei de control trimis
mpreun cu mesajul atunci acesta a fost trimis de ctre participantul care a generat cheia aleatoare.
1.6.6.3

MD5 cu semntur RSA

Cea de-a doua metod ce folosete MD5 mpreun cu RSA funcioneaz astfel:
expeditorul aplic MD5 asupra mesajului original pe care dorete s-l protejeze, producnd

suma de control MD5 i semneaz aceast sum de control cu propria sa cheie RSA. Dup
cum se vede, expeditorul nu semneaz ntregul mesaj ci doar suma de control. Se transmite

Noiuni privind arhitectura i securitatea reelelor de calculatoare

43

apoi mesajul original, suma de control MD5 i semntura RSA pentru suma de control transmis. Folosind notaia de
mai sus, aceasta nseamn c expeditorul transmite:
m + MD5(m) + E(MD5(m),privata).
Destinatarul verific mesajul, asigurndu-se c semntura este corect, prin decriptarea semnturii cu cheia
public a expeditorului i comparnd rezultatul cu suma de control MD5 trimis mpreun cu mesajul. Acestea dou
trebuie s fie egale.

1.6.7 Folosirea semnturilor digitale pentru distribuirea cheilor


Am menionat mai nainte faptul c semnturile digitale pot fi folosite pentru construirea unei reele de ncredere
prin care s fie distribuite cheile, ca o alternativ la o ierarhie strict. Acum cnd cunoatem modul de funcionare al
cheilor digitale, furnizndu-ne o modalitate cu ajutorul creia s putem spune " acest mesaj a fost creat de ctre
participantul X i nu a fost alterat" putem descrie abordarea propus. Pentru a ncepe, participanii A i B schimb cheile
publice n timp ce sunt n aceeai camer, adic pot s verifice c, cheile corespund ntr-adevr identitii persoanelor
respective. Mai trziu, A schimb cheia public cu C. A poate folosi acum propria sa cheie privat pentru a semna cheia
public a lui C i s o trimit lui B. Cu alte cuvinte, A trimite un mesaj care spune " Am fost n aceeai camer cu C i cred
c aceasta este cheia public a lui C" i apoi semneaz mesajul folosind propria sa cheie privat. Deoarece B are o copie de
ncredere a cheii publice a lui A, B poate verifica semntura acestui mesaj, Atta timp ct B are ncredere c A nu a fost
nelat pentru a semna cheia lui C, B poate fi sigur c deine o copie sigur a cheii publice a lui C. Deci, o strategie
rezonabil pentru C este s aib cheia sa copiat de o mulime de persoane i cu un pic de noroc, oricine dorete s
comunice cu C va fi capabil s gseasc o persoan, n care are ncredere, dintre persoanele care au cheia public a lui C.
Desigur c pot exista un numr arbitrar de legturi n aceast reea de ncredere, dar dac o persoan din lan semneaz o
cheie de care nu este sigur c aparine adevratei persoane, atunci lanul de ncredere este rupt.

1.6.8 Protocoale de securitate a aplicaiilor


Securizarea se poate face la diferite nivele. La nivel aplicaie se pot securiza mesajele de e-mail folosind sistemul
PGP(pretty good privacy) care este standardul de facto n acest caz. Utilizeaz criptografia cu cheie simetric, criptografia
cu cheie public, funcii hash i semntura digital La nivel transport avem securizarea privind comerul electronic cu
ajutorul protocoalelor: protocolul SSL(Security Socket Layer) i SET(Secure electronic transactions).

SSL(Security Socket Layer), cu varianta mai nou TLS(Transport Layer Security) este utilizat ntre
navigatoarele de Web i serverele pentru e-comerce(shttp-secure http). Serviciile de securitate ale protocolului SSL
asigur: autentificarea serverului, criptarea datelor, autentificarea clientului(opional).
Sesiunea de autentificare a serverului:
SSL permite navigatorului includerea cheii publice pentru autoritatea de certificareCA; Navigatorul cere serverului certificatul trimis de autoritatea de certificare CA;
Navigatorul utilizeaz cheia public de la CA pentru a extrage cheia public serverului;
Viziteaz meniul de securitate al navigatorului pentru a vedea CA-ul su.

Sesiunea de criptare a datelor:


Navigatorul genereaz cheia simetric de sesiune, o cripteaz cu cheia public a serverului i trimite cheia
criptat la server;
Utiliznd cheia sa privat, serverul decripteaz cheia de sesiune;
Navigatorul i serverul cad de acord c mesajele viitoare vor fi criptate;
Toate datele trimise ntr-un soclu TCP(de client sau server) sunt criptate cu cheia de sesiune;
SSL este baza TLS(Transport Layer Security). SSL poate fi utilizat i pentru aplicaii non Web precum
IMAP.Atentificarea clientului poate fi fcut cu certificatul clientului.
Securizarea tranzaciilor electronice(SET-Secure Electronic Transactions).
Protocolul a fost proiectat pentru tranzacii, fcute pe Internet i pltite cu carduri. Asigur servicii de
securitate pentru 3 participani: consumatorul, comerciantul i banca comerciantului.
Toate trebuie s aib certificate. SET specific nelesul legal al certificatelor i anume:
mprirea responsabilitilor pentru tranzacii;

44Noiuni privind arhitectura i securitatea reelelor de calculatoare

numrul cardului consumatorului trecut la banca vnztorului fr ca acesta s-l


vad n clar; Aceasta previne furtul numrului de card de ctre vnztor.
Exist trei componente soft:
P
o
r
t
o
f
e
l
u
l
(
t
r
u
s
a
)
n
a
v
i
g
a
t
o
r
u
l
u
i
;
S
e
r
v
e

r
u
l
n
e
g
u
s
t
o
r
u
l
u
i
;

Poarta de primire.
Securitatea la nivel reea (NLS-Network Layer Security)
Trimite gazdei date criptate n pachete de tip IP.Autentificarea la nivel reea
se face de gazda destinaie care poate autentifica adresa surs IP. Exist dou
protocoale:Protocolul de autentificare a antetului( AH- authentification header) i
protocolul de ncapsulare a plii securizate (ESP-encapsulation security payload).
Dialogul surs destinaie pentru protocoale AH i ESP:
se creeaz la nivel reea un canal logic numit acord de serviciu;
Fiecare SA este unidirecional.
In mod unic determinat de:
protocolul de securitate(AH sau ESP);
adresa surs IP;
identificator de conectare pe 32 de bi

1. TEHNOLOGII XML
Autor: Robert Buchmann

1.1 Rolul XML n garantarea interoperabilitii


Capitolul de fa abordeaz problema asigurrii interoperabilitii, factor
fundamental al eficienei sistemelor informatice ce deservesc organizaiile din spaiul
economic virtual oferit de Internet. Impactul interoperabilitii este unul decisiv n
fezabilitatea emergenei afacerilor n mediul virtual, n primul rnd sub aspectul reducerii
costurilor i, ca un tip particular de cost, al reducerii latenei n comunicaiile de afaceri.
Aria n care acioneaz interoperabilitatea este una a crei funcionare decide n favoarea
sau mpotriva adoptrii sistemelor distribuite i colaborative, paradigm fundamental n
contextul economiei Web globale. Ideal, este vorba de asigurarea dialogului nemijlocit ntre
entitile supersistemului informaional al crui infrastructur este Internetul, un dialog care
trebuie s minimizeze intervenia uman i s asigure fluiditatea fluxurilor de informaii
ntre nodurile sistemului. Concret, eforturile de asigurare a interoperabilitii trebuie s
nceap de la nivelul organizaiilor, pe baza instrumentelor standard cu disponibilitate
global cum este XML. n practic nodurile cele mai problematice sunt sistemele
informatice motenite, a cror calitate esenial este c sunt fiabile (fiind mbuntite n
timp), amortizate i nu mai implic costuri de transformare a sistemului informaional. Pe
de alt parte, interoperabilitatea sistemelor motenite creeaz costuri de interfaare care pot
s anuleze fezabilitatea interoperabilitii automate, blocnd organizaiile ntr-o sfer de
manifestare n care primeaz redundana, dialogul asincron, conversiile incorecte de
informaii i managementul strict intuitiv, deviat de pierderile informaionale, dup cum
arat lucrarea Using XML with Legacy Business Applications [Rawlins03]. Astfel,
interoperabilitatea trebuie s devin o prioritate a managementului modern, n care deciziile
trebuie suportate de instrumentele oferite de sisteme informatice capabile s deruleze
schimburi i conversii de date oportune, conform XML: A Manager's Guide [Dick02].
XML este un standard care i-a propus iniierea unei convergene tehnologice n sistemul
Web i asigurarea unei coloane vertebrale ca infrastructur software pentru
interoperabilitatea sintactic i, n perspectiv, semantic i pragmatic ntre sistemele
informatice. Capitolul ofer un tablou de ansamblu asupra modului n care XML realizeaz
acest deziderat, punctat cu unele exemple practice.
Strns legat de eforturile de omogenizare a spaiului economic virtual este i
conceptul de document, al crui ncercare de definire a fost o prioritate a forurilor Uniunii
Europene n ultimii ani, n ncercarea de a standardiza un concept care s unifice
semnificaiile atribuite de mediul juridic, mediul economic, tehnologia informaiei i alte
domenii n care documentul reprezint o unitate de reprezentare a informaiei. Ca
specializare a conceptului de document, n domeniul informaticii economice raportul este
conceptul care se cere unificat, att ca definiie general, ct i ca taxonomie i structur.
XML propune o astfel de convergen. n primul rnd, la nivelul general al
documentului, XML anuleaz divergenele ntre formele tradiionale de reprezentare a
informaiei simbolice structuri de text, structuri de date, limbaje formale i instruciunile
lor, structuri de cunotine etc. Documentul XML capt versatilitatea necesar i un
polimorfism care i permite s fie tratat n funcie de scopurile receptorului, ca program ce

Robert Andrei Buchmann

trebuie executat, ca text ce trebuie formatat, ca structur de date ce trei interogat sau
transferat, ca structur de cunotine ce trebuie inferat. De asemenea, XML deservete
paradigma MVC (Model-View-Control), prin separarea coninutului informaional brut
(modelul de date) de forma de prezentare (viziunea) i de entitatea sau agentul de procesare
(controlul).
Perspectivele sunt legate de transformarea spaiului economic virtual ntr-un spaiu
semantic, subordonat paradigmei Semantic Web. n sfera aplicaiilor strict economice,
primele iniiative sunt legate de crearea taxonomiilor XBRL, care nu se limiteaz la a
modela structurile de date i conceptul unificat de raport, ci creeaz o baz de asociaii
semantice ntre structurile respective. Att modelul de date XBRL ct i baza de asociaii
semantice sunt create cu vocabulare XML. Mai departe, paradigma Semantic Web propune
o convergen ntre metode provenind din inteligena artificial i suportul existent al
tehnologiilor Web, dintre care XML garanteaz stratul de interoperabilitate sintactic.
XML (limbajul de marcare extensibil) este ncununarea eforturilor de impunere a
limbajelor de marcare ntr-o lung istorie a standardizrilor i a generaiilor de limbaje
formale. n prezent, popularitatea XML l cimenteaz la baza tuturor soluiilor software
moderne, avnd n vedere c orientrile actuale au n vedere distribuirea ct mai facil a
datelor pe principii colaborative, ntre orice tipuri de aplicaii, organizaii sau utilizatori.
Originile limbajului XML se gsesc n limbajul SGML (limbaj standard general de
marcare), care a stabilit i standardizat principiile limbajelor de marcare. XML se supune
acestor principii de aa natur nct documentele XML s poat fi considerate documente
SGML particularizate (cu constrngeri/reguli specifice aplicate peste principiile generale),
cu cteva excepii1. Din acelai SGML s-a dezvoltat, printr-un proces similar de
particularizare, i HTML (limbaj de marcare a hipertextului), folosit n general la
construirea documentelor hipertext i, n particular, la construirea paginilor Web.
Problema imediat care se ridic este nelegerea marcatorilor - trebuie garantat
faptul c att emitorul ct i receptorul mesajului sunt capabili s interpreteze marcatorii.
Acest aspect este condiia fundamental a interoperabilitii.
ntr-o definiie de lucru, putem afirma c marcatorul este un simbol sau un set de
simboluri care se aplic asupra informaiei pe care o nso esc i are scopul de a-i stabili ori
modifica:
formatul (modul de prezentare, de afiare) utilizare consacrat de marcatorii
HTML;
structura (relaia dintre componentele mesajului) utilizare consacrat de
marcatorii DIV i SPAN din HTML i de limbajul XML;
semantica (sensul, interpretarea, contextul) utilizare consacrat de marcatorii
META din HTML i de modelul RDF;
pragmatica (potenialul de utilizare, operaiile la care va fi supus) utilizare
consacrat de instruciunile de procesare din XML, dar i din alte limbaje.
n lucrul cu informaie marcat:
emitorul informaiei este creatorul acesteia (uman sau software);
receptorul informaiei poate fi un utilizator uman (preocupat de lizibilitate i
modul de prezentare) sau un receptor software (un program care proceseaz

Cazurile n care aceast incluziune nu este posibil apar datorit faptului c XML a fost
proiectat pentru utilizare internaional, deci suport seturi de caractere internaionale (nonASCII) n timp ce SGML a fost proiectat pentru setul de caractere de baz.

Tehnologii XML

informaia, un program care o afieaz, o baz de date sau de cunotine care o


depoziteaz etc).
Pornind de la aceast observaie, modul de utilizare a marcatorilor este strns legat
de capacitatea de interpretare a acestora de ctre receptor (uman sau software).
Interoperabilitatea este asigurat atunci cnd att emitorul ct i receptorul atribuie acelai
scop unui set comun de marcatori care reprezint vocabularul de marcatori.
Interoperabilitatea este o condiie esenial n distribuirea informaiei i poate avea loc la
diferite nivele:
interoperabilitatea sintactic, asigurat atunci cnd toi emitorii i receptorii se
pun de acord asupra regulilor de structurare a informaiei cu ajutorul marcatorilor
i a terminologiei acestora (reguli impuse prin vocabularele XML);
interoperabilitatea semantic, garantat atunci cnd toi emitorii i receptorii se
pun de acord asupra semnificaiei i modurilor de utilizare atribuite informaiei
marcate i marcatorilor (necesit modele mai avansate precum RDF).
Paradigma marcatorilor se adreseaz acoperirii ntregului spaiu Web cu metode de
marcare i vocabulare universale, n condiiile n care emitorii i receptorii sunt toate
entitile umane sau software care se conecteaz la acest spaiu. Principalul avantaj al
interoperabilitii este reducerea efortului (deci a costului) n ce privete conversia
informaiei ntre sisteme diferite, ceea ce, innd cont de efectul de reea implicat de
distribuirea pe scar global, aduce o reducere de efort absolut necesar.

1.2 Structura i corectitudinea documentelor XML


1.2.1 Elementele documentului XML i buna lor formare
XML consolideaz paradigma marcatorilor ntr-un limbaj standard care i
propune s ofere n acelai timp posibiliti de formatare a documentelor, de structurare,
de caracterizare semantic a informaiei, precum i de garantare a unui mod de procesare
a lor. XML are posibiliti de exploatare nelimitate datorit faptului c este un metalimbaj.
Aceasta nseamn c standardul XML nu ofer un set fix de instruciuni
interpretabile/compilabile, ci ofer:
un set de reguli sintactice, regulile de bun formare, care trebuie respectate de orice
document XML i care impun structura pe care trebuie s o respecte orice marcator
XML; regulile de bun formare sunt testate de parsere (convertoare menite s extrag
datele din cod XML);
un limbaj auxiliar, Document Type Definition (DTD), care permite definirea altor
limbaje (vocabulare) bazate pe sintaxa de bun formare XML; conformitatea fa de
vocabulare e testat de validatoare (programe menite s valideze combinaia de
marcatori i atribute folosite ntr-un document).
Astfel, puterea XML nu este legat doar de posibilitatea de a reprezenta
documente i structuri de date complexe ntr-o form serializat, ci i de crearea de
vocabulare (limbaje de tip XML) cu marcatori i atribute personalizate, cu care apoi se
construiesc documente, structuri de date sau programe, n funcie de scopul propus i de
potenialii receptori. Dac se urmrete distribuirea de documente XML ctre ali utilizatori
sau alte programe, trebuie ca regulile dup care s-au construit marcatorii personalizai i
semnificaia lor s fie aduse la cunotina tuturor receptorilor poten iali. Aceasta necesit un
efort suplimentar, dar asigur posibiliti nelimitate de personalizare i de

Robert Andrei Buchmann

adaptare/extindere sintactic pentru orice platforme hardware i software. Exemple de


vocabulare XML consacrate sunt MathML (limbaj de marcare matematic) i CML (limbaj
de marcare n chimie), XSLT pentru transformarea de documente XML, XSDL e chiar un
vocabular XML pentru creare de vocabulare XML (ca alternativ la DTD).
Nu trebuie s se neleag c orice document XML necesit crearea n prealabil a
unui vocabular. Se pot crea documente care respect doar regulile de bun formare,
folosind marcatori oarecare, improvizai pentru nevoi imediate, ce nu au fost definii n
prealabil de nici un vocabular. Aceasta presupune c documentul e de uz intern sau are o
distribuie limitat (structura sa este deja cunoscut de toi poten ialii si receptori). Chiar i
un receptor care nu cunoate structura n prealabil poate s extrag informa iile din
documentul XML datorit modelului arborescent DOM, ce garanteaz c orice document
XML corect sintactic va putea fi parcurs ca un arbore ce stocheaz date n nodurile sale.
Totui cunoaterea structurii sau definirea sa precis cu ajutorul unui vocabular avantajeaz
n ce privete nelegerea modului n care trebuie procesate datele dup extragerea lor din
document sau a modului n care ar trebui formulat un rspuns la acele date. n schimb, n
contextul interoperabilitii la nivel Web sau al organizaiilor mari, n care documentele
XML devin complexe i sunt schimbate automat ntre emitori i receptori care nu se
cunosc n prealabil, crearea unui vocabular devine necesar ca baz contractual pentru
schimbul de informaii ntr-o manier consistent i fr ambiguiti de interpretare.
Versatilitatea codului XML poate fi neleas pornind de la urmtorul set de
marcatori:
<ListaPreturiFructe>
<Fruct>
<Denumire>Mere</Denumire><Pret>10000</Pret>
</Fruct>
<Fruct>
<Denumire>Pere</Denumire><Pret>12000</Pret>
</Fruct>
</ListaPreturiFructe>

7
8

Acest document ar putea fi vzut ca:


un document ce trebuie formatat datelor n vederea afirii, dac atribuim fiecrui
marcator un stil (se poate folosi chiar limbajul CSS n acest scop);
o structur de date prin care se transfer date ntre dou baze de date; practic,
exemplul de mai sus poate reprezenta tabelul unei baze de date de forma:
Fruct
Mere
Pere

Pret
10000
12000

Avantajul XML fa de forma tabelar, consacrat de bazele de date relaionale,


este c marcatorii imbricai pot indica relaii de apartenen/subordonare (relaii tat-fiu
ntre datele marcate), n timp ce cmpurile unui tabel se afl doar ntr-o relaie de alturare.

O structur de date arborescent ce poate fi interogat (aa cum bazele de date


relaionale se pot interoga cu SQL, pentru XML avem limbajul de interogare
XPath sau funciile de parcurgere a arborelui DOM):

Tehnologii XML

ListaFructe

Fruct
Denumire

Mere

Fruct
Pret

10000

Denumire

Pere

Pret

12000

Figura 12.1. Forma arborescent (simplificat) a unei structuri de date XML


Flexibilitatea XML poate fi artat prin faptul c documentul poate suferi
transformri. Aceleai date ar putea fi prezentate n urmtoarea form, tot de tip XML, dar
cu o structur de marcatori diferit:
<ListaPreturiFructe>
<Fruct
Pret="10000"> Mere
</Fruct>
<Fruct
Pret="12000"> Pere
</Fruct>
</ListaPreturiFructe>

sau:
<ListaPreturiFructe>
<Fruct
Denumire="Mere"
Pret="10000" /> <Fruct Denumire="Pere"
Pret="12000" /> </ListaPreturiFructe>

Transformarea documentelor XML se poate realiza printr-o serie de operaii de


restructurare a marcatorilor, prin programe capabile s manipuleze arbori XML sau cu
ajutorul limbajului specific de transformare XSLT (bazat pe interogri XPath). Ca
alternativ, funciile modelului DOM pot i ele s extrag orice informa ii din documentul
XML i s le regenereze ntr-o alt structur, n alt document.
Raiunile dup care alegem modul de structurare a marcatorilor in de claritatea
coninutului pentru utilizatorul uman, de relaiile de subordonare (tat-fiu) ntre date i de
optimizarea pentru procesare. n ce privete ultimul aspect, fiierele ar trebui s aib
dimensiune ct mai mic, pentru transfer rapid n reea. n plus se tie c majoritatea
programelor care proceseaz XML lucreaz mai rapid cu atribute dect cu marcatori, deci
transformarea marcatorilor copii ai lui <Fruct> n atribute ale acestuia ar fi o alegere n
sensul optimizrii.
Unitatea fundamental a unui document XML este nodul. Majoritatea nodurilor
sunt de tip element (marcatorii efectivi) nsoite de noduri de tip atribut. Acestora li se
altur tipuri de noduri corespunztoare unor componente care nu e obligatoriu s fie

ntlnite ntr-un document: comentariul, instruciunea de procesare etc. Dou noduri


importante, ntre care adesea se face confuzie sunt:

Robert Andrei Buchmann


Elementul document este marcatorul rdcin, care trebuie s fie unic i s
conin tot coninutul documentului cu excepia unui prolog (declaraia XML) i a
unui eventual vocabular integrat;
Nodul document este documentul n sine, ce conine obligatoriu prologul i
elementul document.
Elementele unui document XML sunt:
Declaraia XML;
Elementele i atributele lor;
Datele de tip caracter (coninutul textual);
Referinele entitilor;
Instruciunile de procesare;
Comentariile;
Invocarea DTD (dac documentul se supune unui vocabular).

n general conceptul de vocabular XML a mbogit noiunea de validare mult


dincolo de accepiunea sa de baz, care era testarea de valori fa de abloane sau tipuri de
date preimpuse asupra unor cmpuri. Putem considera n prezent urmtoarele funcii ale
validrii XML, ca proces de verificare a unui document-instan fa de un document-clas
(vocabular):
Validare de coninut i structur:

Validarea imbricrilor XML i a relaiilor dintre datele asigurate


de elemente, atribute i coninutul marcatorilor;
4.1.1. Validarea de valori pe baz de abloane i intervale;
Validarea restriciilor de cardinalitate i unicitate;
Baz contractual pentru interoperabilitate:
Instanele XML transferate ntre organizaii trebuie s fie tratate
echivalent de ambele pri;
Metod de augmentare a instanelor:
Validarea poate aduga informaie la o instan, prin valori implicite
i diverse normalizri;
Suport pentru procesare i documentaii:
Un vocabular ofer metadate ce descriu posibilele utilizri, mapri
spre modelul relaional sau alte modele ori informaii ce pot fi
capturate de interfeele cu utilizatorul generate dinamic (intervalele
admise de valori, abloanele i tipurile impuse pot sta la baza unor
obiecte de formular);
Validarea interogrilor:
Interogrile adresate unei colecii de instane n mod implicit nu in
cont de restriciile de validare ale instanelor. Numeroase erori de
interogare pot fi ntmpinate cu ajutorul motoarelor de interogare de
tip schema-aware, care blocheaz interogrile asupra unor date
nepermise de vocabular, nainte de a se pierde timpul cu consultarea
instanelor2;
Polimorfismul procesrilor:
Este o problem direct legat de interogrile valide, mai precis de
fenomenul schema-awareness, de data asta n ce privete procesrile

Indicm proiectul Saxon al grupului Saxonica, ce ofer astfel


de capabiliti.
2

Tehnologii XML

(aplicare de stiluri, transformri de arbori etc.). Tipizarea datelor


permite modificarea comportamentului unor operaii (ex: sortarea
lunilor calendaristice);
Limbajele de creare a vocabularelor XML cu succes major n prezent sunt:
DTD, care a consacrat denumirea tip de document n loc de vocabular sau
clas de documente. Rezumm caracteristicile DTD:
o Permite crearea vocabularelor interne, ce nsoesc documentul;
o Are suport general, fiind adoptat odat cu standardul XML original; o
Fixeaz structura instanelor XML (ordine, ocurene, cardinalitate,
imbricare);
o Ofer tipizare slab i valori implicite doar pentru atribute;
o Permite crearea de notaii pentru diverse formate de date referite n
instan;
o DTD nu creeaz documente XML bine formate, folosind o sintax de
tip SGML. Aceasta are implicaii asupra complexitii instrumentelor
de validare DTD;
o Suportul pentru spaii de nume este rudimentar.
XSDL este rezultatul unor soluii convergente precum XDR3, SOX4 i
DDML5. Acest limbaj a consacrat denumirea schem de documente pentru
vocabular. XSDL ofer:
o Tipizare puternic;
o Suport pentru spaiile de nume;
o Derivarea tipurilor;
o O modularitate ce permite convertirea facil a documentelor XML n
ierarhii de structuri de date, cu trsturi obiectuale;
o Transfer indicaii de procesare i documentaie complex spre
consumator la nivelul clasei de documente;
o Nu permite definirea unui ablon permis pentru elementul rdcin;
o Nu asigur coocurena (ocurena unui element n funcie de altul);
o Are nc un suport inconsistent n rndul instrumentelor software,
comparativ cu DTD;
Relax NG:
o Ofer multe din avantajele XSDL fa de DTD;
o Ofer reguli mai complexe pentru ocurena atributelor;
o Ofer model polimorf de coninut al elementelor;
Permite modele de coninut al elementelor nondeterministe i reguli
relaxate de ordonare a elementelor;
o Ofer o gam foarte redus de tipuri de date implicite;
o Nu transfer informaii privind procesarea i documentaie;
o Nu ofer capaciti de motenire n sens obiectual;
Nu transfer informaii privind procesarea i documentaie spre
consumator;
Schematron:

XML Data Reduced, prima soluie de creare a vocabularelor XML oferit de


Microsoft

Vocabular pentru XML orientat-obiect, Schema for Object-oriented XML

Limbaj pentru marcarea definiiilor de documente, Document Definition Markup Language, prima soluie care

a propus nlocuirea declaraiilor DTD cu descrieri pe baz de elemente XML.

10

Robert Andrei Buchmann


o
o
o

Difer de celelalte limbaje prin faptul c formeaz vocabulare bazate


pe seturi de reguli i nu pe declararea modelelor de elemente
permise;
Ofer posibilitatea coocurenei i datorit acesteia coopereaz
frecvent cu XSDL;
Necesit anticiparea erorilor plauzibile i nu a strilor valide,
acceptabile.

1.3 Procesarea documentelor XML


1.3.1 Modelul SAX
Modelul SAX nu este un standard, ci este o realizare a grupului de lucru XMLDev ca alternativ la procesarea XML prin DOM, folosind o fereastr de memorie limitat
n locul ncrcrii ntregului document n memoria intern. S-au implementat deja un numr
mare de parsere SAX, inclusiv pe platforme Microsoft (MSXML versiunea 3.0).
Independena fa de limbaj nu este la fel de mare ca n cazul DOM. Majoritatea
implementrilor sunt gzduite de Java, dar exist i excepii.
Odat ce fereastra de memorie a fost definit, modelul SAX prevede gestionarea
evenimentelor care intervin n timpul procesului de citire a irului de caractere ce constituie
codul XML, prin fereastra respectiv. Aadar, este o interfa de programare bazat pe
evenimente i manageri de evenimente. Evenimentele sunt declanate de apariia n irul de
caractere a delimitatorilor de bun formare XML: deschiderea unui marcator, nchiderea
unui marcator, apariia coninutului textual etc.
Procesul de citire a irului de caractere are loc n paralel cu alte dou procese:
declanarea evenimentelor pe msur ce marcatorii trec prin fereastra de
citire, are loc automat prin parser, care transmite spre managerii de
evenimente numele elementului, atributele i alte detalii;
meninerea strilor asociate elementelor relevante din document
Strile SAX asigur localizarea precis a datelor citite cu SAX n lipsa unei viziuni
complete asupra documentului. Strile SAX nu sunt asigurate de modelul SAX n mod
implicit. Acestea trebuie gestionate de ctre programator prin variabile de stare. Un acelai
element poate s apar de mai multe ori, n variate contexte. SAX declaneaz un
evenimente la apariia elementului i indic despre ce element este vorba, dar nu indic nici
a cta apariie a elementului este i nici la ce adncime n arbore. Variabilele de stare sunt
modificate n cadrul managerilor de evenimente i n mod uzual sunt de dou tipuri:
variabile booleene cu rol de comutator asociate elementelor relevante (cu
comutare true/false n funcie de poziia curent a procesului de citire fa de
elementul relevant) acestea indic dac ne aflm n element sau n afara lui,
dac a trecut elementul prin fereastra de citire sau nu i alte situaii cu caracter
boolean;
variabile contor incrementate la mai multe deschideri succesive de element
(caz n care msoar nivelul pe care se afl fereastra de citire n arbore) sau la
mai multe apariii succesive ale elementelor relevante (caz n care se numr
apariiile unui element n document sau n lista frailor).

Tehnologii XML

11

Asociind variabile de stare elementelor relevante se poate stabili cu precizie


poziia ferestrei de citire SAX n arborele elementelor i se pot realiza operaii cu caracter
excepional (care nu se repet pentru fiecare element).
Considernd exemplul:
<produse>
<produs>Televizor</produs>
<produs>Calculator</produs>
</produse>

evenimentele declanate la citirea acestui ir de caractere vor fi, n ordinea


declanrii:
13. startElement definete starea aferent elementului produse;
14. startElement definete starea aferent elementului produs;
15. characters definete starea aferent valorii Televizor;
16. endElement anuleaz starea aferent elementului produs;
17. startElement definete starea aferent elementului produs (al doilea);
18. characters definete starea aferent valorii Calculator;
19. endElement anuleaz starea aferent elementului produs (al doilea);
20. endElement anuleaz starea aferent elementului produse.
Fiecreia din strile relevante dintre cele indicate i se pot asocia variabile de stare,
pentru a contoriza imbricrile i numrul de apariii ale unui element.

1.3.2 Modelul DOM


Modelul DOM este una din cele dou soluii consacrate (alturi de SAX) pentru
extragerea informaiilor dintr-un document XML, indiferent c acestea sunt stocate n
numele sau valorile elementelor, numele sau valorile atributelor sau n structurile XML
auxiliare. DOM nu este o aplicaie n sine, ci un model abstract implementat la nivelul
parserelor, ca o colecie de interfee de programare (API) ce folosesc paradigma obiectual
pentru a transpune coninutul oricrui document conform cu standardul XML n clase,
obiecte i metode. Astfel, DOM este independent de platform i limbajul de programare,
fiind considerat un strat ntre parser i aplicaiile consumatoare de XML. Practic, parserul
citete date din sursa XML i alctuiete arborele DOM translatnd imbricrile ntre
marcatori n relaii tat-fiu i unitile XML n noduri ale arborelui.
Nucleul DOM, numit DOM Core, este un set de interfee de programare de uz
general la care se adaug module opionale precum cele adaptate pentru manipulare de de
stiluri HTML, care nu apar neaprat n toate implementrile i dintre care indicm:
DOM Views pentru manipularea unei reprezentri particulare a unui
document;
DOM Events un sistem de evenimente generice;
DOM HTML pentru manipularea de HTML clasic;
DOM CSS pentru manipulare dinamic a foilor de stil;
DOM Traversal an Range pentru identificarea i parcurgerea unor poriuni
de document care nu reprezint neaprat colecii de noduri (fragmente,
coninut textual).
n modelarea DOM, pornim de la exemplul de mai jos, salvat n fiierul fisier.xml:
<produse>
<produs cod="p01">Televizor</produs>
</produse>

12

Robert Andrei Buchmann


Un parser DOM va crea din acest exemplu urmtoarea ierarhie de noduri:
Document Node
Documentul complet

NodeList

Element Node
<produse>

NodeList

Element Node
<produs>

NodeList

NamedNodeMap

Character Data
Text Node

AttrNode
ID=p01

Televizor

Figura 12.2. Modelul arborescent creat de un parser DOM


Nodul document reprezint ntreg documentul n ansamblu. Este important s se
evite confuzia ntre nodul rdcin (nodul document) i elementul rdcin (elementul
document), care este primul element XML din document, dar este un fiu al nodului
rdcin, alturi de declaraia XML. Prin aceasta, sugerm c nodurile DOM sunt de
diferite tipuri: elemente, atribute, coninut textual, comentarii, instruciuni de procesare etc.
Este important de reinut c nodurile atribute sunt tratate ca proprieti ale nodurilor
elemente i nu ca noduri fii ale acestora, ceea ce afecteaz rezultatul anumitor operaii de
procesare a fiilor unui nod [Williams03].
Node List este o interfa necesar manipulrii coleciilor de noduri ordonate.
Faptul c o colecie de noduri poate s apar chiar n subordinea nodului rdcin, indic
faptul c acesta poate avea i ali fii dect elementul rdcin: declaraia XML, invocarea
DTD, un comentariu etc. Named Node Map este o interfa pentru manipularea coleciilor
neordonate de noduri referite prin nume, cum sunt coleciile de atribute.
Cele dou interfee sunt specializri care motenesc interfaa generic Node, prin care
se manipuleaz toate nodurile DOM. Alte interfee specializate din Node sunt Element,

Tehnologii XML

13

i Attr al cror rol poate fi intuit. Manipularea arborelui


poate avea loc pe dou ci:
Generic, prin manipularea interfeei Node;
Ierarhic, prin manipularea specializrilor interfeei Node.
Manipularea generic, denumit i abordarea aplatizat, este util n lucrul cu
documente foarte mari n care performana primeaz. Manipularea ierarhic permite ns un
mod de lucru mai facil prin exploatarea unor proprieti redundante.
Document, Text, Character Data

Disponibilitatea parserelor i implementrilor DOM pe variate platforme i sub


diverse limbaje de programare gazd face ca platforma s nu fie un factor n alegerea
acestui model.
Un factor esenial n acest sens este dimensiunea documentului, care afecteaz
performana drastic deoarece arborele DOM este ncrcat integral n memoria intern i
ocup de regul de 10 ori mai mult memorie dect documentul XML care st la baza sa.
De asemenea, performana este afectat i de numrul nodurilor element din document,
acestea fiind mai dificil de procesat dect atributele i alte tipuri de noduri. O alternativ
superioar ca performane este modelul SAX, care ncarc doar fragmente ale
documentului XML ntr-o fereastr de memorie limitat, prin care se deruleaz irul de
caractere ce alctuiete documentul. Utilizarea fragmentelor de document sunt foarte utile
n operaii de citire sau n scrierile unui numr redus de informaii ns afecteaz
performana negativ dac se doresc actualizri masive ale documentelor mari, fiind
necesar o rederulare repetat pentru localizarea punctelor de interes n document. Aadar,
tipul operaiilor poteniale afecteaz decizia de alegere a modelului DOM, SAX sau a unei
soluii complementare:
Citirea i localizarea unor fragmente se recomand SAX, cu excepia
cazului n care trebuie s se urmreasc relaii ntre componente ndeprtate
ale documentului care ar putea necesita rederularea codului sursa (exemplu:
navigarea de la un atribut IDREF la unul de tip ID care l precede, deci a fost
deja trecut prin fereastra de derulare; SAX este util n special la localizarea
unor fragmente mici n coninut masiv: identificarea fragmentului dorit poate
fi urmat de o oprire definitiv a procesului de parsing, fr s se citeasc
ntreg documentul;
Modificri masive de date se recomand DOM; numeroase implementri
SAX trateaz codul surs ca read-only, operaiile de modificare fiind emulate
prin recrearea unei alte versiuni a documentului;
Modificri de structur, n vederea transformrii arborelui XML pentru
diverse destinaii (dintr-un vocabular n altul, pentru generare de prezentri
etc.) se recomand limbajul XSLT, asupra cruia se va reveni ulterior, n
locul manipulrii DOM. Totui XSLT folosete la rndul su o reprezentare de
tip DOM, dar are propriul vocabular de manipulare i nu necesit folosirea
interfeelor DOM. XSLT are i avantajul reutilizrii transformrilor;
Generare de XML dinamic se recomand DOM, deoarece menine arborele
n memorie pe parcursul procesului de adugare a noi informaii;
Generare de XML din componente XML ale altui document se recomand o
mbinare ntre parsere i metode, dar adesea se apeleaz la XSLT.

14

Robert Andrei Buchmann

1.3.3 Interogarea i transformarea XML


Pe limbajul de interogare Xpath se bazeaz numeroase limbaje ce manipuleaz cod
XML:
XSLT i Xquery pentru transformare de XML,
XML Schema pentru crearea de vocabulare,
Xpointer o variant mai complex a lui Xpath care, n plus fa de acesta, poate
accesa i altceva dect noduri din arborele DOM, de exemplu locaii (poziii din
documente), fragmente (orice poriune dintre dou poziii, de exempu buci de
taguri, buci de atribute) sau colecii de fragmente;
XML Signature i XML Encryption pentru semnarea digital sau criptarea unor
noduri din document.
Spre deosebire de SQL, Xpath poate doar citi informaii, nu i
modifica/insera/terge. Pentru acestea se apeleaz la funciile standard DOM sau la
limbajele de transformare XSLT/Xquery.
Exemple de interogri
/comanda/produs/@id
...caut atributul ID al elementelor PRODUS din COMANDA
/comanda/produs
....toate elementele PRODUS din COMANDA
/comanda/*
...toate elementele din COMANDA
/comanda/text()
....toate nodurile text din COMANDA
/comanda/node()
....toate nodurile din COMANDA, indiferent de tip
/comanda/produs/@*
....toate atributele din toate elementele PRODUS din COMANDA
/comanda//@id
...returneaz toate atributele ID din COMANDA, indiferent de nivelul pe care se
afl
//@id|//id
...returneaz toate IDurile din document, indiferent c sunt atribute sau elemente,
indiferent cui aparin
/comanda/produs[1]
...returneaz primul PRODUS din COMANDA
/comanda/produs[id]
...returneaz acele PRODUSE din COMANDA care conin elemente ID
/comanda/produs[@id]
...returneaz acele PRODUSE din COMANDA care conin atribute ID
//id/ancestor::node()
...returneaz toi strmoii elementelor ID
/comanda/produs[3]/preceding::text()
...returneaz toate nodurile text ce preced al 3-lea PRODUS din COMANDA
count(/comanda/node())
... returneaz numrul de noduri fiu din COMANDA

Tehnologii XML

15

XSLT este limbajul de transformare a documentelor XML i se bazeaz pe Xpath


pentru a extrage informaii dintr-un document surs i a le pune ntr-un document rezultat
(cu structur diferit). De obicei XSLT e folosit pentru a genera pagini HTML din date
XML, deci poate fi folosit i ca instrument AJAX (conversia rspunsului de la server n cod
HTML).
Pornim de la urmtorul document XML (salvat cu numele comanda.xml)
<?xml version="1.0"
encoding="UTF-8"?> <comanda>
<!-- acesta e un comentariu -->
<produs denumire="Televizor" id="p1"
pret="100"/> <produs id="p2"
pret="200">Calculator</produs>
<produs>
<id>p3</id>
<pret>300</pret>
<denumire>Ipod</denumire>
</produs>
<prettotal>600</prettotal>
Aceasta este o comanda de
produse
</comanda>

<xsl:template
match="/"> Text
oarecare
</xsl:template>
O foaie XSLT conine una sau mai multe reguli de substituire cu dou
componente:
match este calea Xpath a
elementelor care vor suferi substituia
coninutul lui xsl:template este
noul coninut care va intra n locul celui
detectat de match.
Urmtorul exemplu genereaz o list cu numele produselor de mai sus, separate
printr-o linie HTML (HR). Documentul XML original are o structur neregulat primul
produs are denumirea ntr-un atribut, al doilea l are n coninutul textual, al treilea l are
ntr-un element-fiu. Deci, chiar dac parcurgem cu un ciclu FOR cele 3 produse, va trebui
s implementm o structur CASE care s extrag denumirea n mod diferit de la caz la
caz, prin ci XPath relative la elementul curent (la care a ajuns ciclul FOR):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:template match="/">
<xsl:for-each
select="comanda/produs">
<xsl:choose>

<xsl:when test="@denumire">
<xsl:value-of select="@denumire"/>
</xsl:when>
<xsl:when test="denumire">
<xsl:value-of select="denumire"/>

16

Robert Andrei Buchmann


</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
<hr/>
</xsl:foreach>

</xsl:template>
</xsl:stylesheet>
Structura CASE e definit cu xsl:choose. Aceasta conine un ir de variante
definite cu xsl:when (fiecare cu cte o condiie testat cu atributul test). Ultima variant
este xsl:otherwise (pentru cazul n care nici una din ramuri nu a funcionat).
XSLT folosete ci XPath RELATIVE la nodul pe care s-a pozi ionat
instruciunea-printe (cea cu match e printe pentru for-each, acesta e printe pentru choose
i when etc.). XSLT nu conserv implicit codul XML original. Dac dorim s se conserve
anumite elemente, trebuie s crem o regul de conservare care s substituie elementele cu
ele nsele:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template
match="/">
<xsl:copy-of
select="."/>

</xsl:template>
</xsl:stylesheet>
Aceast regul substituie elementul rdcin cu el nsui, producnd o copie a
documentului original.

1.4 Modelul AJAX pentru aplicaii Web


1.4.1 Paradigma Rich Client i beneficiile aduse de AJAX
AJAX este un termen care promoveaz paradigma Rich Client n domeniul
aplicaiilor Web. Aplicaiile Web au evoluat n timp dinspre paradigma Thin Client, n care
rolul clientului se reducea la a formata un document, spre modelele ncadrate n aa numita
generaie Web 2.0, printre care Rich Client, ce promoveaz transferul efortului de
procesare dinspre server spre client, pentru a micora efortul distribuit al serverului i
pentru a minimiza latenele provocate de comunicarea intermitent ntre client i server
(refreshul redundant de pagin) acestea ducnd, n final, la o mbuntire a fluiditii

experienei utilizatorului care apropie regimul de utilizare a aplicaiilor Web de regimul de


utilizare al aplicaiilor desktop (n care interfaa cu utilizatorul i baza de date se afl n
aceeai memorie, deci latena reelei i refreshul interfeei nu exist).

Tehnologii XML

17

De-a lungul timpului au existat numeroase tehnologii care s promoveze modelul


Rich Client, majoritatea orientndu-se ns spre aplicaii Internet non-Web (programe tip
Messenger, gestionare local de e-mail - vezi Outlook, diverse aplicaii desktop
consumatoare de date on-line etc.), toate acestea fiind aplicaii ce necesit un efort prealabil
de instalare i configurare. Dezvoltarea Web spre aceast direcie a presupus gsirea de
soluii care s elimine necesitatea instalrii modulelor client. n acest sens, modelul a fost
promovat iniial de appleturile Java i scripturile client (JavaScript), apoi de produsele
Shockwave (Flash) i, n prezent, de AJAX, bazat pe o utilizare intensiv a limbajului
JavaScript asupra unor seturi de date schimbate cu serverul n format XML sau JSON.
Spre deosebire de Flash, AJAX este o soluie necomercial, bazat strict pe
standarde WWW (XML, CSS, HTML, JavaScript) i aflat la baza noilor tendine n
dezvoltarea versiunii HTML 5. Termenul AJAX a fost fixat de Jesse James Garrett
(Adaptive Path) ca acronim pentru Asynchronous JavaScript and XML. Aceasta sugereaz
faptul c nivelul logic n AJAX e asigurat de JavaScript i nivelul datelor de XML.
Accesul la datele serverului e gestionat asincron pe diferite ci, cele consacrate fiind
obiectul XMLHttpRequest (XHR) sau cadrele invizibile. Nivelul prezentrii e asigurat de
HTML (structura paginii) i CSS (formatul paginii), att elementele HTML ct i
stilurile CSS fiind manipulate dinamic de JavaScript prin intermediul modelului DOM.
Partea de server nu mai trebuie s asigure generare dinamic de cod HTML, ci alimentarea
modulului Rich Client AJAX cu date (inclusiv XML).
Modelul AJAX e astzi adoptat pe scar larg de majoritatea actorilor din scena
Web, succesul su fiind demonstrat de pionieratul celor de la Google prin Google Maps
(http://maps.google.com).
Indicm n continuare o comparaie ntre aplicaiile tradiionale i cele de tip
AJAX:
Web tradiional:
Datele se trimit de la client spre server cu ajutorul formularelor sau a
hiperlegturilor (variabile GET sau POST), aadar prin decizia contient
a utilizatorului (n urma unui clic); rspunsul se returneaz de la server
sub form de cod HTML;
11. Starea iniial a aplicaiei e determinat de transferul dinspre server a
primei pagini (homepage);
Fiecare stare a aplicaiei are asociat o nou pagin generat dinamic
(deci strile aplicaiei sunt pagini diferite din punct de vede al operaiilor
Back/Forward i Add Bookmark/Favorites);
Fiecare pagin generat dinamic implic un refresh complet al paginii
curente, de cele mai multe ori redundant (implic i rencrcarea
elementelor nemodificate de pe pagin);
2.2.10 Fiecare refresh sau ncrcare de pagin nou blocheaz temporar
aplicaia, pn cnd noua pagin sosete de la server, ceea ce afecteaz
fluiditatea experienei de utilizare (comparativ cu aplicaiile desktop unde
durata dintre clic i reacia la clic e de regul insesizabil);
Experiena de utilizare i utilizabilitatea las de dorit, nu doar datorit
comunicrii intermitente cu serverul care suspend utilizarea, ci i
datorit gamei reduse de evenimente la care reacioneaz pagin (de obicei
doar clic-uri);

18

Robert Andrei Buchmann


Rolul browserului e de a formata o pagin (thin client);
AJAX:

Datele pot fi trimise de la client spre server la orice moment, JavaScript


putnd declana transferuri HTTP oricnd, cu sau fr notificarea
utilizatorului; rspunsul se returneaz de la server n format text, fie brut,
fie structurat (XML, JSON), pentru a fi prelucrat prin funcii JavaScript;
Starea iniial a aplicaiei e determinat de transferul dinspre server a
unui ntreg modul client, cu toate strile sale posibile (deci are loc un
transfer iniial masiv care e totui suportat de calculatoarele moderne i
nu necesit instalare, toate interpretoarele necesare fiind ncorporate n
browser);
Fiecare stare a aplicaiei e obinut prin modificarea la nivel de client a
structurii interfeei cu utilizatorul (structura DOM), pe baza unor date
primite de la server (trecerea dintr-o stare n alta nu presupune ncrcare
de pagin nou, deci mecanismele Back/Forward i Bookmark nu
funcioneaz);
Nu are loc refresh redundant, deoarece dup ncrcarea strii iniiale
serverul livreaz doar datele necesare aplicaiei, nu toate elementele
interfeei;
Cererile asincrone de date nu blocheaz funcionarea interfeei cu
utilizatorul (aa cum face refreshul de pagin) interfaa continu s
funcioneze n acele stri care nu au nevoie de datele ateptate de la
server; aceasta asigur o fluiditate rezonabil a experienei de utilizare,
apropiat de cea a aplicaiilor desktop;
3.5.2
Experiena de utilizare i utilizabilitatea sunt mult mbuntite,
nefiind foarte afectate de schimbul intermitent de date cu serverul; n
plus, gama de evenimente la care reacioneaz suprafaa interfeei
utilizatorului e apropiat de cea a aplicaiilor desktop (ex: se poate
declana un transfer
de date la trecerea cursorului peste o anumit zon a paginii care nu
trebuie s fie neaprat un buton sau o imagine, deci schimbul de date cu
serverul poate fi parial ascuns fa de utilizator);
Browserul execut o aplicaie JavaScript cu interfa HTML.

4.1.5. Obiectul XMLHttpRequest


Detaliile legate de mecanismul de transfer al datelor ntre clientul AJAX i server
vor fi discutate pe urmtorul exemplu:
<html>
<head>
<script
type="text/javascript">
var xhr

function modifica()
{
try
{
xhr = new
ActiveXObject("Msxml2.XMLHTTP") }
catch (e)

Tehnologii XML

19
try

{
xhr = new
ActiveXObject("Microsoft.XMLHTTP") }
catch (e)

{
xhr = false
}

if (!xhr && typeof XMLHttpRequest !="undefined")


{
xhr = new XMLHttpRequest()
}
xhr.open("GET","script.php")
xhr.onreadystatechange=function()
{
if (xhr.readyState != 4) return;
document.getElementById("mesaj").innerHTML = xhr.responseText
}
xhr.send(null)
}
</script>
</head>
<body>
<div id="mesaj"></div>
<button onclick="modifica()">Click
Me</button> </body>
</html>

Pagina conine un bloc DIV gol, care este completat la apsarea unui buton cu
textul primit de la server. Sintetizm n continuare componentele mecanismului XHR:
1. Crearea obiectului XHR
y are loc prin trei tentative de instaniere, datorit faptului c diverse browsere
implementeaz sub denumiri diferite clasa XMLHttpRequest.
2. Trimiterea de date spre server
z e asigurat de metodele open (dac se trimit variabile GET) i send (dac se
trimit variabile POST); n exemplul de fa open nu trimite nici o variabil, send trimite
caracterul null, aadar tot ce se transmite spre server e o solicitare a unui script PHP.
3. Generarea datelor de ctre server
aa
scriptul PHP nu primete date de la client, aa c exemplul poate fi
verificat cu un script simplu care genereaz un ir de caractere:
<?php
?>

print "textul mesajului";

4. Recepionarea datelor de la server


- are loc doar cnd proprietatea readyState capt valoarea 4 (condiie care poate fi
completat cu status != 200 dac se dorete prevenirea erorilor de conexiune);
n exemplul de fa, datele sunt preluate de proprietatea responseText sub form de
text brut, pe care se pot aplica operaii de manipulare a irurilor de caractere;
n alte situaii, pe care le vom exemplifica n alte contexte, datele pot fi preluate
prin proprietatea responseXML, direct ca arbore DOM, pe care se pot aplica
operaii de manipulare DOM;

20

Robert Andrei Buchmann

n ultimii ani, adepii AJAX au promovat i un al treilea format de date, JSON,


care se preia din responseText i se convertete n obiect JavaScript prin funcii
specifice de conversie; JSON are fa de XML avantajul simplitii iar fa de
textul brut avantajul complexitii structurilor de date capitolele ce urmeaz vor
prezenta i exemple n acest sens;
5. Utilizarea datelor de la server

are loc prin utilizarea datelor extrase din responseText; n acest caz,
valoarea sa este atribuit coninutului textual al marcatorului cu id=mesaj

fiind vorba de comunicare asincron (metoda open nu a folosit


argumentul false), momentul la care are loc citirea lui responseText este declanarea
evenimentului readystatechange cu readyState=4
6. Reacia paginii HTML la datele serverului

blocul DIV anterior definit n pagin ca o zon vid a documentului e


completat cu datele serverului; acest proces e declanat de evenimentul clic pe butonul
paginii; n general reacia paginii la datele serverului e controlat prin etapele:
a.Definirea poriunilor de document ce urmeaz a fi manipulate. Se realizeaz
prin alocarea de atribute ID i structurarea paginii cu blocuri DIV i SPAN.
b.Localizarea poriunii de document de manipulat. Se realizeaz cu funcii precum
getElementById, getElementsByTagName sau funcii oferite de standardul DOM.
c.Generarea de coninut nou n zona de document localizat. Se realizeaz cu
innerHTML sau funcii DOM ce rescriu anumite noduri ale arborelui.
d.Manipularea de atribute. Se realizeaz cu setAttribute sau vectorul attributes
oferit de DOM.
e.Manipularea de stiluri. Se realizeaz cu className sau style.cssText pentru a
comuta stilul aplicat unui element.
n plus fa de acest mecanism de baz obiectul XHR poate trimite i recepta date
direct prin antetul HTTP (care n mod normal e construit de ctre protocol, att n browser
ct i la server, pentru a descrie mediul de comunicare dintre cele dou pri). Manipularea
antetului HTTP poate fi realizat prin metodele setRequestHeader(), getResponseHeader()
i getAllResponseHeader(). Exemplul de mai jos altereaz numele browserului din antetul
HTTP al cererii, astfel nct serverul s nu mai poat extrage din variabile de mediu
identitatea browserului:
xhr.setRequestHeader("User-Agent","Browserul meu!")

1.4.3 Cadrele interne invizibile


Cadrele interne invizibile sunt folosite ca alternativ de comunicare cu serverul,
atunci cnd obiectul XHR nu este instalat sau este dezactivat n browser. Cadrele interne sau folosit frecvent nainte apariiei obiectului XHR pentru a schimba date cu serverul i sunt
chiar i n prezent preferate de unii dezvoltatori AJAX. Acestea prezint totui o serie de
dezavantaje:
Cadrele interne nu au fost create n acest scop; rolul lor este, asemeni cadrelor
normale, s afieze o pagin Web n interiorul altei pagini diferena fa de
cadrele normale este c cele interne nu se definesc prin mprirea ferestrei
browserului pe orizontal sau vertical (cu FRAMESET), ci prin definirea unei
suprafee dreptunghiulare n interiorul paginii (cu IFRAME). Cadrele interne
devin invizibile dac sunt create cu dimensiunea 0x0, ceea ce permite ca pagina

Tehnologii XML

21

ncrcat de cadru s nu fie o pagin HTML propriu-zis, ci un set de date


invizibil utilizatorului. Acest set de date poate fi apoi accesat prin JavaScript, din
proprietile cadrului intern;
mprosptarea coninutului unui cadru, fie i unul invizibil, genereaz un sunet n
unele browsere care poate deveni iritant pentru utilizator;
Accesul la coninutul unui cadru intern e mai dificil dect accesul la rspunsul
XHR; browserul presupune c un cadru intern, fie i invizibil, conine o pagin
HTML complet (cu head, body etc.). Chiar dac pagina respectiv este doar un
ir de caractere cu datele serverului, acesta se acceseaz prin proprietatea
innerHTML a marcatorului BODY al paginii coninute n cadru;
Un cadru intern poate stoca doar iruri de caractere interpretabile ca HTML. Cadrul
intern nu aplic parsing DOM implicit la pachete XML, aa cum face obiectul XHR
prin proprietatea responseXML. n consecin, dac aplicaia trebuie s gestioneze date
XML, trebuie s instanieze explicit un arbore DOM n care s

salveze rspunsul XML. Instanierea unui arbore DOM se realizeaz n JavaScript


prin dou metode, ce vor trebui incluse ntr-o structur try-catch:
Modelul AJAX implementat prin cadre invizibile difer categoric de modelul
bazat pe XHR. Unii autori consider c folosirea cadrelor invizibile nu ar trebui ncadrat
n modelul AJAX, fiind mai degrab o simulare a sa. Ali autori consider c nu este nimic
n denumirea Asynchronous JavaScript and XML care s exclud cadrele interne i s
impun obiectul XHR. Urmtorul exemplu prezint solicitarea unei adrese po tale de la
server n urma completrii codului potal ntr-un formular:
<html>
<head>
<script type="text/javascript">
function trimite(cod)

{
}

cadru=document.getElementById("cadruint")
cadru.src="scripturi.php?CodPostal="+cod

function citestedate(cdr)
{
documentcadru=cdr.contentWindow.document
raspuns=documentcadru.body.innerHTML
procesare(raspuns)
}
function procesare(rasp)
{
vector=rasp.split(",")
document.getElementById("TXoras").value=vector[0]
document.getElementById("TXjudet").value=vector[1]
document.getElementById("TXadresa").value=vector[2]

}
</script>
</head>
<body>
<iframe id=cadruint width=400 height=50 src=""
onload="citestedate(this)"> </iframe>
<h1>Introduceti datele</h1>

22

Robert Andrei Buchmann


<form >
<table>
<tr>

</tr>
<tr>

<td>Nume</td>
<td><input type=text id=TXnume ></td>

<td>CodPostal</td>
<td><input
type=text
onblur="trimite(this.value)"></td>
</tr>
<tr>
<td>Adresa</td>
<td><input type=text id=TXadresa size=50></td>
</tr>
<tr>
<td>Oras</td>
<td><input type=text id=TXoras ></td>
</tr>
<tr>
<td>Judet</td>
<td><input type=text id=TXjudet ></td>
</tr>
<tr>
<td></td>
<td><input type=submit value=Trimite ></td>
</tr>
</table>
</form>
</body>
</html>

id=TXcodpostal

Modificarea prin DOM a atributului src al cadrului nu e singura metod de a


ncrca date (sau documente) ntr-un cadru. n acelai scop se pot folosi orice operaii care
permit ncrcarea unei pagini ntr-un cadru int (prin atributul target):
<a href=script.php?variabila=valoare target=cadru>....</a> - o hiperlegtur a
crei pagin int va fi afiat n cadrul indicat prin target; ca i n exemplul
anterior, pagina int poate fi un script server la a crui adres se pot concatena
variabile GET;
<form action=script.php target=cadru>....</form> - un formular ale crui date
vor fi trimise spre un script al crui rspuns va fi afiat n cadrul indicat prin
target; aceasta este, dealtfel, metoda prin care modelul AJAX bazat pe cadre
interne permite trimiterea de variabile POST sau uploadul de fiiere.
Totui, cele dou metode sunt replici ale metodelor tradiionale prin care
utilizatorul decide, prin clic-uri, cnd are loc trimiterea de date spre server. Modificarea
dinamic a atributului src confer o dinamic superioar i o subtilitate a schimburilor de
date mai apropiat de cea promovat de modelul AJAX.

1.4.4 XML i JSON


n cele ce urmeaz vom realiza o comparaie ntre formatele JSON i XML
aplicate asupra datelor trimise de server. Prezentm n continuare acelai set de date n
format XML i n format JSON:
XML:
<produs
e>

Tehnologii XML

23

<produs denumire=Televizor pret=100 />


<produs denumire=Calculator pret =200 />

</produse>

Valoare JSON atribuit unei variabile:

produse=[ {denumire:Televizor, pret:100},{denumire:Calculator,pret:200}]

Obiect JSON de transferat (de exemplu generat de un serviciu Web sau de


server):

{ produse: [{denumire:Televizor, pret:100},{denumire:Calculator,pret:200}] }

Astfel, produse devine un vector de dou elemente, fiecare element fiind un obiect
cu cte dou proprieti. Insistm asupra faptului c valorile masive se enumer ntre
paranteze ptrate, iar proprietile obiectelor ntre acolade, fiind posibil orice combinaie
de imbricare ntre acestea (ex: vector de obiecte, obiect cu proprieti vectori, obiect cu
proprieti obiect, vector cu elemente vector etc.).
Se observ c ambele modele (XML i JSON) pot transpune n format text
serializat (ir de caractere) structuri de date arborescente sau obiecte.
Avantajele JSON sunt:
performana, atunci cnd se transfer strict seturi date (n schimb XML devine
esenial atunci cnd se transfer poriuni de documente ce vor fi manipulate prin
DOM, validate sau procesate de instrumente XML);
compatibilitatea cu obiectele JavaScript efortul de extragere a datelor din JSON
e minimal n JavaScript;
accesul facil la proprietile JSON prin sintaxa JavaScript, comparativ cu accesul
mai dificil la XML prin DOM/Xpath n exemplul JSON, al doilea pre poate fi
accesat prin produse[1].pret, n timp ce n exemplul XML ar fi necesar
parcurgerea vectorilor getElementsByTagName sau childNodes pentru nodul
rdcin, urmate apoi de solicitarea atributului pret cu getAttribute.
Suporterii JSON susin c oricum conceptele XML sunt inutile: spaiile de nume
devin inutile dac nu se mai folosesc marcatori iar validarea prin vocabulare e considerat o
delegare inutil a responsabilitiilor:
Principiul XML este c aplicaiile trebuie s fie restrictive la receptarea datelor
(datele fiind validate sau transformate conform regulilor unui vocabular predefinit
de destinatar) i permisive la generarea lor (fiecare aplicaie poate genera orice
structur de date XML);
Principiul JSON este c orice aplicaie trebuie s fie permisiv la receptarea
datelor i restrictiv la generarea lor, adic s poat prelucra orice structuri de
date primite i s fixeze nite reguli stricte pentru structurile de date generate;
Aa cum sunt necesare programe de tip parser pentru a converti un ir de caractere
XML ntr-un arbore de obiecte DOM, parserele JSON convertesc iruri de caractere JSON
n obiecte. Site-ul http://json.org ntreine o list la zi cu site-urile de la care pot fi procurate
parsere JSON pentru diverse limbaje de programare. Pentru JavaScript, parsingul se poate
face n mod nativ funcia eval() convertete un ir de caractere ntr-o expresie sau un bloc
de instruciuni JavaScript, aadar prin aplicarea funciei asupra unui ir JSON stocat n
responseText se obine chiar un obiect JavaScript, mult mai facil de accesat dect un arbore
DOM. Exist i parsere avansate pentru JavaScript, cu metode complexe de manipulare a
structurii JSON, dar acestea trebuie instalate i invocate ca biblioteci de funcii JavaScript
(vezi biblioteca http://json.org/json2.js). Conversia unui ir JSON n obiect se realizeaz n
JavaScript astfel:

24

Robert Andrei Buchmann


obiect=eval('('+xhr.responseText+')')
sau eval('obiect='+xhr.responseText)

Aceasta se realizeaz n mod nativ. Folosirea funciei eval ridic probleme de


securitate datorit faptului c argumentul funciei va fi evaluat i executat chiar dac este
un bloc de instruciuni JavaScript n locul unui ir JSON. Atunci cnd sursa datelor din
responseText nu e de ncredere (ex: responseText conine informaii tastate de un vizitator
ntr-un formular), se recomand folosirea parserelor JSON propriu-zise, disponibile gratuit
ca biblioteci de funcii invocate cu SCRIPT SRC. Aceste parsere realizeaz naintea
evalurii o verificare a structurii argumentului, astfel nct s se asigure c e o structur
JSON i nu un cod surs potenial maliios. Biblioteca json2, propus de David Crockford,
promotorul modelului JSON, ofer funciile:
obiect=xhr.responseText.JSON.parse() conversie din ir JSON
sir=obiect.JSON.stringify() coversie din obiect n ir JSON

n obiect

Aa cum exist protocoale orientate pe transferul de date XML (SOAP, XMLRPC), exist i protocoale de transport JSON (JSON-RPC). Mai mult, comunitatea JSON a
propus nlocuirea obiectului XHR cu un obiect similar, JSONRequest, optimizat pentru
transferuri JSON (la adresa http://json.org exist legturi spre instrumente de acest gen,
inclusiv o extensie add-on pentru Firefox ce implementeaz obiectul JSONRequest). n
contextul nlocuirii XML cu JSON ca format de transfer al datelor structurate, susintorii
JSON arat c pn i litera X din acronimul AJAX i pierde semnificaia. Dei exist o
tendin de migrare a modelului AJAX spre structuri de date JSON, XML rmne un
standard puternic cnd nu e vorba de structuri de date, ci de documente spre exemplu,
atunci cnd serverul genereaz marcatori XML ce trebuie integrai fr modificri direct n
arborele DOM al paginii.

1.4.5 Biblioteci AJAX


Modelul AJAX a dus inevitabil la apariia unor platforme de dezvoltare a
aplicaiilor cu instrumente i componente de nivel nalt, uor de integrat i reutilizabile. Pe
scurt, e vorba de instrumente menite s accelereze procesul de producie a unui site AJAX.
Exemplele anterioare au demonstrat nucleul oricrei aplicaii AJAX de la instanierea prin
tentative i excepii a obiectului XHR pn la recepionarea datelor de la server. Deoarece
acest mecanism e folosit de majoritatea aplicaiilor AJAX n mod identic, dezvoltatorii Web
au definit funcii de nivel mai nalt care s ncapsuleze acest mecanism, mascnd detaliile
sale. Mai mult, s-au creat componente care s compenseze i s mascheze neajunsuri AJAX
precum imposibilitatea de a face upload de fiiere sau de a crea semne de carte pentru stri
diferite ale aplicaiei. Aceast tendin a dus la apariia unei multitudini de biblioteci AJAX
construite pe nivelele:
Nivel 0: mecanisme de nivel sczut, reutilizabil, de conectare asincron la server:
obiectul XHR sau cadrele interne;
Nivel 1: instrumente de nivel nalt de comunicare cu serverul (ce mascheaz
detaliile nivelului 0) Dojo, JSON-RPC, Prototype, Direct Web Remoting;
Nivel 2: instrumente de nivel nalt de construire a interfeei cu utilizatorul
(construite peste nivelul 1) Dojo ofer instrumente i la acest nivel, SmartClient,
Script.aculo.us (bazat pe Prototype), JQuery;

Tehnologii XML

25

Nivel 3: medii de dezvoltare a aplicaiilor AJAX: Rails, Tapestry, AJAX.NET,


SAJAX.
Instrumentele de nivel 1 nu sunt altceva dect biblioteci de funcii sau interfee de
programare (API) care mpacheteaz instanierea i comunicarea asincron prin obiectul
XHR (sau prin alternativ cadrele interne, folosite pentru browserele care nu suport nici
una din tentativele de instaniere XHR). Majoritatea instrumentelor de nivel 1 sunt create
independent fa de tehnologia folosit de server. Unele, precum Direct Web Remoting,
instaleaz i o component Java pe server pentru ascultarea i gestionarea la un nivel mai
nalt a cererilor HTTP prin XHR. Altele, precum JSON-RPC, exploateaz modelul ORB
(Object Request Broker) pentru a permite accesarea obiectelor server direct din scripturi
client.
Instrumentele de nivel 2 sunt medii de generare a interfeei cu utilizatorul
componente GUI, cu funcionaliti, animaii preprogramate i chiar suport pentru operaii
desktop tradiionale precum drag-and-drop. Unele instrumente extind gama de componente
GUI pentru a o apropia ct mai mult de cea a interfeei formularelor Windows sau Mac.
Instrumente precum Backbase sunt de fapt limbaje de marcare (limbaje XML) ce folosesc
proprii marcatori, superiori celor din HTML, mpreun cu funcii cu rol de interpretor.
Instrumentele de nivel 3 sunt medii de dezvoltare complexe bazate pe
generatoare de cod JavaScript (Ruby on Rails genereaz cod i funcii
Prototype la nivelul 1, WebWork2 genereaz cod pentru Dojo);
componente (AJAX.NET pe.ntru .NET, Tapestry pentru Java).
Un numr mare de pachete de funcii JavaScript pentru AJAX sunt construite pe
funciile pachetului Prototype. S-a artat anterior c pachetul este uor de instalat (e vorba
de un singur fiier de tip .js ce conine definiiile tuturor funciilor, iar numele fiierului
conine numrul de versiune al bibliotecii).
Detaliem cteva din facilitile oferite de biblioteca Prototype:
prescurtarea sintaxei JavaScript;
metode noi de localizare a nodurilor DOM (pe baz de stiluri);
extinderea claselor JavaScript;
funcii noi pentru lucrul cu colecii de date (masive,
obiecte); ascunderea i eliminarea facil de noduri DOM;
inserare facil de cod HTML n orice poziie a paginii;
activarea, dezactivarea i focalizarea facil a cmpurilor
formularelor; determinarea poziiei elementelor n pagin.
Script.aculo.us este una din cele mai cunoscute biblioteci JavaScript orientate spre
interfaa cu utilizatorul, ce ncapsuleaz instrumentele oferite de pachetul Prototype n
funcii de nivel i mai nalt. Componentele pachetului vizeaz [Crane07]:
Efecte de animaie aplicabile oricror i orictor elemente din pagin, similare
celor din prezentrile Powerpoint;
Emularea unui mecanism drag-and-drop similar celui consacrat de aplicaiile
desktop;
Componente ce ncapsuleaz funcionaliti de nivel nalt precum mecanismele
avansate de editare sau completare a casetelor de text;
Componente ce permit testarea interfeei utilizatorului.
Autorul pachetului este Thomas Fuchs. Succesul Script.aculo.us e garantat de
adoptarea pachetului n designul unor site-uri de renume. Pachetul poate fi descrcat gratuit
la adresa http://script.aculo.us. Instalarea sa presupune includerea a dou apeluri de

26

Robert Andrei Buchmann

biblioteci JavaScript, una pentru Prototype (versiunea sincronizat cu Script.aculo.us) i


una pentru Script.aculo.us:
<script type=text/javascript
src=scriptaroot/prototype.js> </script>
<script type=text/javascript
src=scriptaroot/scriptaculous.js> </script>

Pachetul Script.aculo.us ofer un nucleu de efecte fundamentale i, pe baza


acestora, o serie de efecte combinate de nivel mai nalt. Fiecare efect este o tranziie ntre
dou stri, aadar fiecare efect permite fixarea unui punct iniial i a unui punct final,
precum i durata desfurrii. Unele efecte sunt parametrizate cu coordonate ale ecranului
sau distane. Toate efectele sunt asincrone n sens AJAX6, deci execuia lor nu ntrerupe
execuia i experiena utilizrii, deci multiple efecte pot fi aplicate simultan aceluiai
element. Efectele Script.aculo.us sunt o resurs deosebit pentru promovarea utilizabilitii
aplicaiilor Web.
Sintaxa general a unui efect este:
new Effect.NumeEfect(element,parametri,{optiuni})

Cuvntul cheie new este opional (ca i var la declararea variabilelor), rolul su
fiind s indice un obiect nou creat.
Opiunile sunt enumerate n format JSON. Cele mai uzuale dintre ele sunt:
duration n secunde;
fps frecvena de afiare a strilor intermediare ale animaiei (numrul de afiri
pe secund, implicit 25);
sync boolean, pentru sincronizarea frecvenei de afiare la efecte simultane;
from punctul de start al efectului;
to punctul de stop al efectului;

transition algoritmul tranziiei, cu variante precum (se prefixeaz cu


Effect.Transitions):
o sinoidal vitez accelerat pn la un punct, apoi decelerat;
o linear vitez constant;
o reverse vitez constant cu inversarea punctelor de start i stop;
o wobble micare dus-ntors repetat pe distane aleatoare;
o flicker salt ntre poziii intermediare dintre start i stop;
o pulse micri repetate (du-te-vino) ntre punctele de start i stop de 5
ori.
Punctele de start i stop sunt definite normalizat, cu valori de la 0.0 la 1.0 mapate
pe extremitile animaiei. Considerm un efect Move ce deplaseaz un element cu 100 de
pixeli la dreapta i n jos:
optiuni={x:100,y:100,mode:relative}
Effect.Move(idmarcator,optiuni)

Lista facilitilor oferite de Scriptaculous este urmtoarea:


6

A nu se confunda execuia asincron a efectelor cu posibilitatea afirii lor sincronizate,


care se refer strict la aspectul lor vizual.

Tehnologii XML

27

Efecte fundamentale:
Morph tranziie ntre un stil CSS i altul
Opacity modificarea transparenei
Highlight evideniere (colorarea/plpirea fundalului pentru atragerea
ateniei)
Move deplasare pe o direcie;
Scale dimensionare (mrire/micorare);
Parallel definirea unui set de efecte care s se execute sincron i simultan
Queues definirea unei cozi (succesiuni) de efecte
Efecte combinate: combinaii ale celor fundamentale, cu efecte similare celor
oferite de Powerpoint:
Appear, Fade, Shake, BlindUp, BlindDown etc.
Helpere:
Transitions, Methods, toggle, multiple
Comportamente:
Draggable, Droppable, Sortable, DelayedObserver
Comportamente avansate (controale GUI preprogramate):
InPlaceEditor, Autocompleter, Slider

WEB SEMANTIC
1.6.2.3

Principiile Web-ului Semantic

Paradigma Semantic Web reprezint o nou viziune asupra sistemului World Wide
Web, o nou arhitectur a informaiei disponibile n acest sistem i un nou mod de regsire
a acestei informaii, inspirate de domeniul inteligenei artificiale. Pe scurt, e vorba de o
convergen ntre:
principiile propuse n inteligena artificial nc din anii 70 (n special
subdomeniul sistemelor expert) n ce privete reprezentarea cunotinelor...
... i arhitectura modern a Web-ului, bazat pe colaborare i interoperabilitate.
Obiectivul Semantic Web este s transforme WWW ntr-o reea global de sisteme
expert, capabile s deduc n mod automat informaii noi din cele existente i s rspund
la ntrebri (interogri) formulate cu ajutorul a ceea ce azi numim motoare de cutare (care
e previzibil c vor evolua n motoare de interogare i ageni inteligeni capabili s
ndeplineasc sarcini i s atrag resurse n numele utilizatorilor). Pentru a se putea
ndeplini acest deziderat, datele disponibile n Internet trebuie s fie reorganizate n baze de
cunotine, fa de Web-ul actual, n care sunt stocate cu precdere n baze de date
relaionale sau XML. Semantic Web se bazeaz pe stocarea informa iei sub form de baze
de cunotine accesibile on-line, de regul folosind tehnologii de stocare din familia bazelor
de date de tip graf (modelul de date RDF).
Bazele de cunotine sunt alctuite din fapte i reguli.
Faptele sunt descrieri de concepte sau afirmaii simple despre un anumit subiect.
Practic, sunt propoziii cu structura de baz: subiect, predicat i complement.
Exemplu: Adrian este rud cu Andrei.
Regulile sunt construcii logice de tip Dac X, atunci Y (interpretat cadin premisa
X, se deduce concluzia Y, unde X i Y sunt fapte). Exemplu: Dac a este rud cu
b, atunci i b este rud cu a. Aceast regul va genera faptul Andrei este rud cu
Adrian de cte ori va ntlni afirmaia Adrian este rud cu Andrei. Avertizm
asupra faptului c uneori regulile pot fi mascate i n afirmaii ( axiome). Regula
din acest exemplu poate s arate i astfel:
Relaia de rud este una reciproc.

Semnificaia acestei afirmaii este aceeai cu a regulii de mai sus. Pentru a face
mai uoar formularea unor reguli populare i intens reutilizate (precum cea data de
reciprocitate), limbaje ca OWL sau RDF Schema ofer sintaxe standardizate ce permit
formularea de axiome ce pot fi interpretate ca reguli de ctre motoarele inferen iale, i
executate n consecin.
Este important ca principiile dup care se construiesc bazele de cuno tin e s fie
cunoscute nainte de a studia limbajele standard ce se folosesc n acest scop.
1. Principiul validitii implicite
Rspundere asupra corectitudinii cunotinelor revine celui care le creeaz, iar
riscurile revin celui care le utilizeaz (consum). Calculatorul nu de ine mecanisme
implicite de stabilire a msurii n care cunotinele stocate reflect realitatea, Semantic Web

30

Robert Andrei Buchmann

ofer doar metode de reprezentare, distribuire i procesare a cunotinelor. De aceea,


calculatorul va accepta n mod implicit orice cunotine ca fiind valide.
Aceasta e o diferen major fa de bazele de date (att relaionale, ct i XML).
La crearea unei baze de date, se impun reguli de validare care s previn tastarea de date
necorespunztoare, care ar putea afecta integritatea. Orice date tastate n tabel sunt filtrate
automat prin aceste reguli, iar cele care nu corespund sunt respinse cu mesaje de eroare.
Astfel, se micoreaz riscurile legate de fenomenul GIGO (garbage in, garbage out, sau
orict de corect ar fi un sistem, dac introduci date eronate, vei obine rezultate eronate).
n bazele de cunotine nu exist mecanisme de validare, ci cel mult mecanisme de
detectare a contradiciilor. Dei exist i aici reguli, ele nu au rol de verificare a
corectitudinii informaiei, ci de deducere a unor afirmaii noi din afirma ii existente, a a
cum s-a artat deja. Afirmaiile contradictorii formeaz un set conflictual, fr ns a se
stabili automat care dintre variante e corect i care nu. Modele de reputaie i ncredere pot
garanta credibilitatea unei baze de cunotine.
n inteligena artificial clasic, la construirea sistemelor expert afirma iile erau
selectate prin proceduri de achiziie a cunotinelor, prin colaborarea ntre inginerul de
cunotine (responsabil cu reprezentarea n calculator a afirmaiilor) i exper i (autorit i n
domeniu, dispui s valideze cunotine i s i explice procese decizionale care apoi s fie
emulate de calculator). Acest mecanism permitea un anumit nivel de validare a
cunotinelor, ns era extrem de costisitor. n Semantic Web este descurajat controlul
autoritativ i e ncurajat validarea colaborativ (n spiritul n care s-a dezvoltat i
Wikipedia).
2.Principiul AAA (al subiectivitii)
Acronimul AAA nseamn Anyone may state Anything about Anything 7. Aa
cum oricine poate scrie orice n propriile pagini Web, oricine trebuie s poat stoca orice
afirmaii ntr-o baz de cunotine. Aadar, principiul e puternic legat de cel precedent, al
validitii implicite: orice afirmaie e considerat valid pn cnd intr n contact cu o
afirmaie contradictorie. Motivele sunt legate de principiul precedent:
WWW este un mediu liber, nimeni nu trebuie s cenzureze informa ia pe care o
conine. Consumatorii informaiei din Web trebuie s decid singuri asupra
credibilitii surselor de informaie. Modelele de reputaie (note acordate de
cititori, butoane Like/Dislike etc.) pot ajuta n aceste decizii. Ele se adreseaz att
cititorilor umani, ct i agenilor software autonomi care vor trebui s ia decizii n
numele oamenilor;
Cunotinele nu trebuie neaprat s reflecte realitatea, trebuie s poat exprima i
realiti alternative (lumi fantastice din lucrri literare, mitologii, viziuni
alternative asupra istoriei sau pur i simplu opinii neconformiste);
Nimeni nu este creditat cu deinerea adevrul absolut. n istoria umanit ii au fost
momente n care afirmaia Pmntul este plat avea valoare axiomatic, autoritativ.
Semantic Web trebuie s fie pregtit pentru orice rsturnri de situa ie, cnd
teorii aparent general acceptate sunt brusc invalidate de noi evidene i experiene
(sau pur i simplu de interesul individual al unui creator de cunotine);
Autoritile ce controleaz informaie tind s o cenzureze, s o deformeze sau pur
i simplu aplic un anumit nivel de subiectivitate n mod involuntar. E preferabil
ca subiectivitatea s fie echitabil aplicabil n tot Internetul.
7

Allemang, Dean and Hendler, James, Semantic Web for the Working Ontologist, Morgan
Kaufmann, 2011

Web Semantic

31

3.Principiul identitii nonambigue


Nu e permis s se foloseasc acelai identificator pentru concepte diferite .
Dac se fac afirmaii despre oameni diferii cu acelai nume, vor trebui s se construiasc
identificatori diferii pentru fiecare individ. Aceast difereniere trebuie s fie garantat
pentru ntreaga reea WWW!
n baze de date, identitatea e asigurat la nivelul unei baze de date (valori-cheie
unice, nume unice de tabele etc.). Cheia primar e o coloan creat special pentru a aloca
identificatori diferii fiecrui individ/obiect din tabel, evitnd riscul ca al i identificatori
tradiionali, precum numele, s se repete n cadrul aceluiai tabel. n programare datele sunt
stocate n variabile cu nume unice ntr-un domeniu de vizibilitate. n aceste cazuri,
identitatea e asigurat cel mult la nivelul unei aplicaii software, alte aplica ii i alte baze de
date ar putea reutiliza aceiai identificatori. n Semantic Web ns, identitatea trebuie
asigurat la nivelul ntregului Internet! Creatorii de cunotine trebuie s foloseasc
identificatori despre care au garania c nimeni altcineva din Internet nu i va folosi n alte
scopuri.
4.Principiul identitii multiple
E permis posibilitatea ca un acelai concept s aib mai mul i identificatori!
Acesta e principiul identitii multiple, care l completeaz pe cel al identitii nonambigue:
Un identificator nu poate fi folosit pentru mai multe concepte diferite, dar un concept
poate avea mai muli identificatori!
Acest principiu permite ca diferii creatori de cunotine s poat stoca afirma ii
despre aceleai concepte fr a se pune de acord n prealabil asupra identificatorilor (aspect
care nici nu ar fi posibil la nivelul ntregului Internet!). Fiecare va folosi identificatori
convenabil alei, fr a se ngrijora dac nu cumva altcineva a memorat afirma ii despre
acelai concept.
Ulterior, dac se dorete fuzionarea afirmaiilor din mai multe surse, i fiecare
surs a folosit ali identificatori pentru aceleai concepte, se pot insera n baza de cuno tin e
relaii de echivalen8. Mai mult, exist chiar situaii n care se urmrete deducerea de
astfel de relaii de echivalen.
5.Principiul Open World
Acest principiu afirm c niciodat nu se tie totul despre o situa ie modelat, c
sistemul trebuie s fie mereu disponibil s primeasc noi afirma ii, care ar putea schimba
semnificaia celor existente, ar putea produce noi concluzii. Versiuni mai tehnice ale
acestui principiu ar putea fi formulate astfel:
s NU se fac deducii bazate pe absena unor afirmaii; s
NU se echivaleze absena unei afirmaii cu negarea sa.

Din acest motiv ntotdeauna regulile funcioneaz dup tiparul...:


Dac apare afirmaia X, atunci se deduce afirmaia Y
...i nu dup tiparul:
Dac apare afirmaia X, atunci se deduce afirmaia Y, altfel se deduce afirmaia Z

n calculator, relaia de echivalen se va declara ntr-o modalitate standard, universal


acceptat ns deocamdat exemplele sunt oferite n limbaj natural, pentru nelegerea
principiilor.

32

Robert Andrei Buchmann

Aadar, principiul Open World interzice concluziile trase din absen a afirma iilor.
Se spune c lumea bazelor de date este de tip Closed World, iar lumea bazelor de
cunotine este de tip Open World.
Se poate remarca faptul c aceste principii au stat dintotdeauna la baza WWW.
Noutatea adus de Semantic Web este c ele nu se mai aplic doar la pagini Web, ci i
conceptelor despre care se vorbete n paginile Web!

2.2 Resurse i identificarea resurselor


Resursa este cea mai vag noiune din Semantic Web. Ea reprezint orice lucru
despre care se poate face o afirmaie (i cum se pot face afirmaii despre orice, putem
considera c orice este o resurs). Nu trebuie s se neleag c doar subiectele afirmaiilor
sunt resurse. n exemplul:
Andrei este rud cu Adrian.

...nu doar Andrei este resurs, ci i relaia de rud, precum i Adrian. Resursele
nu sunt doar conceptele despre care se fac afirmaii, ci toate conceptele despre care s-ar
putea face afirmaii!
n funcie de semnificaia lor, resursele pot fi de mai multe tipuri: proprieti
(utilizate n mod curent ca predicate n afirmaii, dar pot servi uneori i ca subiecte atunci
cnd facem afirmaii despre relaii/atribute), clase (mulimi de indivizi/instane),
indivizi/instane (elemente ale unor mulimi/clase). O ontologie este n general constituit
din axiome afirmaii ce descriu clasele, proprietile i modurile n care pot fi utilizate
mpreun. Axiomele sunt interpretate ca reguli (de tip Dac X atunci Y) a cror execuie
duce la producia de noi fapte. O baz de cunotine e format din ontologie i baza de
fapte (afirmaii despre indivizi aparinnd claselor declarate n ontologie).
Atunci cnd oamenii comunic unii altora cunotine, o fac cu ajutorul unor
termeni alocai conceptelor utilizate n afirmaii, termeni oferi i de un vocabular asupra
cruia interlocutorii se pun de acord. n mod similar, atunci cnd se stocheaz cuno tin e n
calculator, trebuie s se foloseasc o terminologie. La debutul ideii de Semantic Web exista
deja un sistem de alocare de identificatori lipsii de ambiguitate la nivel global: adresele
URL. Dac de exemplu pe serverul Yahoo exist mai multe fi iere pe care proprietarii
doresc s le fac accesibile, adresa se poate prelungi cu o structur virtual de foldere i
subfoldere sau locaii (fragmente) din interiorul unor documente:
http://www.yahoo.com/documente/fisier.doc
http://www.yahoo.com/diverse/muzica/piesa.mp3
http://www.yahoo.com/documente/CodulluiDaVinci.html#capitolul1
http://www.yahoo.com/documente/CodulluiDaVinci.html#capitolul2

Spre deosebire de Web-ul tradiional, n care astfel de construcii au rol de


accesare, n Semantic Web ele capt rol de identificare. Aadar, nu mai vorbim despre
adrese URL (Universal Resource Locator), ci despre URI (Universal Resource Identifier).
Unii dintre aceti identificatori ar putea, teoretic, s funcioneze i ca adrese ale unor pagini
Web descriptive. Spre exemplu, construciile...
http://en.wikipedia.org/wiki/Huma
n

Web Semantic

33

http://en.wikipedia.org/wiki/Brother

...ar putea avea un dublu rol:


1.6.4.3
de a fixa identificatori fr ambiguitate pentru conceptul de om i
relaia de
frate;
1.6.4.4
de a oferi pagini Web pe care se pot citi unele informaii despre conceptul
de om
i relaia de frate.
Aadar, exist numeroase surse on-line care aloc deja URI pentru diverse
concepte (Wikipedia, Facebook pentru persoane i organizaii). Dei acestea ar putea fi o
surs valoroas de identificatori de concepte, e recomandat s nu folosim adrese de pagini
existente n acest scop, s difereniem clar identificatorii fa de adresele de pagini, chiar
dac sintactic arat la fel. Principalul motiv este principiul identit ii non-ambigue: o
persoan i un site despre acea persoan nu sunt acelai lucru (au proprieti diferite) i nu
ar trebui s aib acelai identificator. Dac se dorete ghidarea unui cititor uman spre un
site despre un anumit concept, se recomand construirea de afirmaii care s declare c
conceptul X este reprezentat de site-ul Y (iar X i Y s se pstreze distincte).
Se recomand ca pentru orice concept s se defineasc 3 URI cu o rdcin
comun: unul cu rol de identificator, unul cu rol de adres al unei pagini Web informative
(despre acel concept), unul cu rol de adres al unei baze de cunotine interogabile prin
HTTP. URI ofer o form suficient de complex i independent de limb nct s permit
definirea unui numr teoretic infinit de concepte (exist totu i neajunsul c sunt destul de
lungi, dar vom vedea ulterior i cteva moduri de prescurtare a lor).
Cine definete identificatorii? Avem la dispoziie variantele:
1.6.5.2 Creatorul bazei de cunotine i definete proprii identificatori de
concepte, pornind de la o adres de domeniu pe care o deine (sau achizi ioneaz una), fr
s se intereseze dac nu cumva altcineva n Internet a stabilit deja identificatori pentru
aceleai concepte (n caz c afl ulterior i dorete s conecteze cuno tinele sale cu ale
altora, va putea afirma echivalena ntre identificatorii diferii ai aceluiai concept);
1.6.5.3 Creatorul bazei de cunotine este contient de faptul c altcineva a
standardizat sau promovat unii identificatori de concepte (ca parte din vocabulare
controlate sau standardizate de alte organizaii) i decide s-i adopte la rndul su;
1.6.5.4 Conceptele sunt considerate resurse anonime (fr identitate universal).
n acest caz cunotinele nu vor putea fi conectate cu altele din Internet, deci se ncalc
dezideratul interoperabilitii semantice. Nu are sens ca o baz de cuno tin e s foloseasc
numai concepte anonime ns acestea pot fi utile ntr-o serie de scenarii, cnd nu prezint
interes identitatea conceptului, ci numai poziia sa n afirmaii.
A. Legat de prima variant, oricine poate achiziiona o adres de domeniu, de
exemplu http://expl.ro, apoi s o extind n mod convenabil cu ierarhii fictive de foldere i
ancore, genernd identificatori unici n Internet:
http://expl.ro/concepte/persoane/Ana
http://expl.ro/concepte/relatii/a-fi-mama
http://expl.ro#Ana
http://expl.ro#mama

Dac fiecare construiete identificatori pornind de la propria adres, riscul ca


acelai identificator s fie folosit de organizaii diferite, pentru concepte diferite, e
minimizat (evident, mai trebui s evitm aceast eroare i pe plan intern).

34

Robert Andrei Buchmann

1.6.5.3 Legat de standardizarea conceptelor, exist o serie de organizaii


preocupate n definirea de identificatori pe care s-i utilizeze toat lumea (terminologii,
vocabulare reutilizabile):
Principala organizaie care se preocup de acest lucru este chiar W3C (organiza ia
ce ghideaz evoluia Web-ului). Acetia sunt n special preocupai cu definirea unor
concepte primitive de care este nevoie n orice baz de cuno tin e (Clasa, Resursa,
Proprietatea, relaiile de Apartenen sau Echivalen etc.). W3C propune o colec ie de
identificatori standard pentru astfel de concepte fundamentale i utile grupate n
vocabularele RDF, RDF Schema, OWL. Motoarele infereniale asociaz aceti
identificatori cu o serie de reguli axiomatice care se pot aplica pentru a deriva noi afirma ii
din afirmaii existente;
Mai exist organizaii care standardizeaz sau promoveaz identificatori de
concepte pentru domenii specifice: FOAF este o colecie de concepte pentru a descrie
relaii sociale i persoanele implicate n acestea; Dublin Core este o colec ie de concepte
pentru a descrie surse de informaie i autorii lor; GoodRelations este o colec ie de
concepte dedicat comerului, pentru a descrie produse, comerciani etc.
Dei au aceeai natur (sunt colecii de concepte populare ntr-un anumit domeniu)
ca i prima categorie, pentru acestea se prefer termenul de ontologii n loc de limbaje;
n ultimii ani, Wikipedia a depus eforturi semnificative n ncercarea de a face
coninutul existent n enciclopedie s poat fi tratat ca o baz de cuno tine Semantic Web.
n acest scop, au propus la rndul lor o colecie de identificatori (ontologia DBPedia),
pentru majoritatea conceptelor prezentate n paginile Wikipedia.
1.6.5.4 Legat de resursele anonime, e vorba de concepte fr identificator
universal (URI). Aceasta nu nseamn c nu au nicio identitate. Creatorul bazei de
cunotine le va aloca un nume local prefixat, de tipul:
_:x
_:concept
_:aaa

Aceste nume asigur o identitate local i instabil: se modific n mod


imprevizibil, nu pot fi interrogate direct, totui sunt utile n a conecta la nivel local
afirmaii.

2.3 Modelul de date RDF


2.3.1 Reprezentarea grafic (abstract) a cunotinelor n RDF
n limbajul natural, prile de baz ale oricrei afirmaii (propoziii) sunt subiectul,
predicatul i complementul9. Mai multe astfel de afirmaii conectate prin diveri
delimitatori (conjuncii, semne de punctuaie), formeaz fraze i texte de dimensiuni mai
mari. n RDF, terminologia oficial numete cele 3 componente, n ordinea:
9

n lingvistic mai intervine i atributul dar, conform RDF, acesta poate fi substituit de
complement.

Web Semantic

35

subiect (conceptul despre care se face afirmaia);


predicat, numit i proprietate (conceptul prin care se descrie
subiectul); obiect (conceptul care asigur descrierea).
Reprezentarea abstract a afirmaiilor RDF se realizeaz cu ajutorul grafurilor, n
care nodurile corespund subiectului i obiectului, iar arcele corespund proprietii:
http://expl.ro#FrateCu
http://expl.ro#Andrei

http://expl.ro#Alin

Fig. 1 Reprezentarea grafic a tripletului RDF


Urmtoarele restricii trebuie respectate n ce privete identificatorii folosi i pentru
cele 3 elemente:
Subiectul trebuie s aib un identificator universal (URI) sau local (anonim).
Proprietatea obligatoriu trebuie s aib un identificator de tip URI.
Obiectul poate fi un identificator de tip URI, un concept anonim sau o valoare
(o dat de un anumit tip).
Atunci cnd obiectul este un concept (cu URI sau anonim), se spune c
proprietatea exprim o relaie (ntre dou concepte). Atunci cnd obiectul este o valoare, se
spune c proprietatea exprim un atribut al subiectului, iar n reprezentri grafice valoarea
se ncadreaz n dreptunghi.
http://expl.ro#areVarsta

http://expl.ro#Andrei

20

Fig. 2 Reprezentarea grafic a tripletului RDF cu obiect-valoare


Atunci cnd n mai multe afirmaii apar noduri comune, tripleii pot fi conectai
ntre ei i graful capt complexitate. Considerm urmtoarele afirmaii n limbaj natural:
Ana este mama lui Andrei.
Ana este mama lui Alin.
Alin este tatl lui X.
X are vrsta 20.

Reprezentarea grafic este:


http://expl.ro#esteMamaLui
http://expl.ro#Ana

http://expl.ro#Alin

http://expl.ro#esteMamaLui

http://expl.ro#esteTatalLui

http://expl.ro#Andrei

_:X

http://expl.ro#areVarsta
20

Fig. 3 Reprezentarea grafic a mai multor afirmaii nlnuite


n continuare vom discuta despre utilizarea nodurilor anonime: ca structuri de
date, mai exact concepte ce grupeaz mai multe informaii.

36

Robert Andrei Buchmann

http://expl.ro#Ana
http://expl.ro#locuiesteLa

_:adresa
http://expl.ro#inOras
http://expl.ro#ClujNapoca

http://expl.ro#laNr
20

http://expl.ro#inAp

http://expl.ro#peStrada
http://expl.ro#Bait
a

200

Fig. 4 Utilizarea nodurilor anonime n reprezentarea structurilor de date


Am sugerat deja c nodul anonim nu va putea apare n interogri, deci nu se va
putea pune ntrebarea Care e orasul din _:adresa? ns se va putea pune ntrebarea Care e
oraul n care locuiete Ana? (profitnd de nlnuirea relaiilor locuiesteIn i Oras,
intermediat de nodul anonim, care devine astfel important doar prin poziia sa, nu i prin
identitate).
Un alt exemplu relevant n acest sens este reificarea. Aceasta e o noiune extrem
de important i controversat, strns legat de principiul subiectivit ii: uneori cele 3 pr i
ale propoziiei nu sunt suficiente, mai exact atunci cnd se fac afirmaii despre afirmaii:
Marian crede c Alin este frate cu Andrei.

Modelarea corect n RDF pentru acest caz este urmtoarea: (a) Subiectul este
Marian; (b) Predicatul este crede; (c) Acesta predicat exprim relaia cu o afirmaie
(format la rndul su din Alin, relaia de frate i Andrei). Aadar
reprezentarea grafic ar arta mai degrab astfel:
http://expl.ro#Marian
http://expl.ro#crede

_:afirmatie
http://expl.ro#areSubiect

http://expl.ro#areObiect

http://expl.ro#areProprietate
http://expl.ro#Alin

http://expl.ro#Andrei
http://expl.ro#frateCu

Fig. 5 Utilizarea nodurilor anonime n afirmaii subiective

Web Semantic

37

Reificarea folosete prile propoziiei secundare ca o structur de date, le


grupeaz sub un nod anonim comun (ce reprezint afirmaia), pe care apoi l folosete drept
obiect pentru propoziia principal. Un alt aspect sugerat de acest exemplu este c reificarea
are aplicabilitate atunci cnd dorim s afirmm subiectivitatea sau valabilitatea limitat a
unor cunotine. Afirmaia c Alin e frate cu Andrei este o credin personal a lui Marian.
Cineva care interogheaz baza de cunotine va decide dac s filtreze sau nu credin ele
respective n funcie de cine le crede.
O a treia utilizare important a nodurilor anonime apare n reprezentarea relaiilor
de aritate superioar. Este evident din structura de baz a modelului RDF c triple ii pot
exprima doar relaii binare, ntre un subiect i un obiect. Uneori cuno tin ele trebuie s
exprime mai muli participani la aceeai relaie:
Andrei are 10 la Matematic.
Alin, Andrei i Ana sunt colegi.

n primul caz avem o relaie de aritate 3 ntre Andrei, Matematic i nota 10. Se
creeaz n mod artificial un nod anonim care s grupeze cele 3 componente ale rela iei,
permind interogarea oricreia pornind de la celelalte:
http://expl.ro#Andrei
10
http://expl.ro#are
http://expl.ro#nota
_:relatie

http://expl.ro#curs
http://expl.ro#Matematica

Fig. 6 Utilizarea nodurilor anonime n relaii de aritate 3

2.3.2 Reprezentarea serializat a cunotinelor RDF


1.6.6.3

Reprezentarea n sintaxa N-triples

N-triples10 este sintax brut de serializare RDF. Aceasta e cea mai primitiv
sintax i are un set minim de reguli cu privire la scrierea afirma iilor (reguli pe care le-am
folosit deja n cteva exemple anterioare):
ntre concepte trebuie s apar minim un spaiu sau un Tab;
Orice afirmaie (triplet) trebuie s se ncheie cu un spaiu urmat de un punct i un
salt la rnd nou (Enter);
Identificatorii de tip URI se ncadreaz ntre <...>;
Identitatea resurselor anonime e asigurat prin nume prefixate de _:;

10

http://www.w3.org/2001/sw/RDFCore/ntriples/

38

Robert Andrei Buchmann


Obiectele-valoare sunt implicit de tip text (se trec ntre ghilimele indiferent de
tipul/semnificaia lor) dar pot fi nsoite de:
o Un cod de limb (care precizeaz n ce limb e scris valoarea);
o Un tip de dat, de obicei dintre cele oferite de limbajul XML Schema
(dac dorim ca valoarea s fie considerat de alt tip dect string); unicul
tip oferit de RDF este XMLLiteral (un ir de caractere ce con ine cod
XML bine format).
Comentariile se scriu pe linii noi, ncepute cu un #.

Exemplu:
<http://expl.ro#Alin> <http://expl.ro#esteFrateCu> <http://expl.ro#Andrei> . <http://expl.ro#Alin>
<http://expl.ro#areVarsta> "20"^^<http://www.w3.org/XMLSchema#int> . <http://expl.ro#Alin>
<http://expl.ro#locuiesteIn> <http://expl.ro#Anglia> . <http://expl.ro#Anglia>
<http://expl.ro#areNumele> "Anglia"@ro .

<http://expl.ro#Alin> <http://expl.ro#areNumele> "Alin .


<http://expl.ro#Alin> <http://expl.ro#areEmailul> <mailto:alin@expl.ro> .
<http://expl.ro#Alin> <http://expl.ro#areSiteul> <http://alin.ro> .
<http://expl.ro#Alin> <http://expl.ro#areNumeleFormatat>
"<span class='colorat'>Alin</span>"^^<http://www.w3.org/1999/02/22-rdfsyntax-ns#XMLLiteral> .
2.3.2.2

Reprezentarea n sintaxa Turtle

Turtle11 este o versiune optimizat sintactic pentru N-triples, creat cu scopul de a


face cunotinele mai uor de tastat i de citit. Scopul acestei sintaxe a fost s ofere o serie
de abrevieri, iar fiierele se salveaz cu extensiile .ttl sau .n3.
Cea mai important facilitate sintactic e posibilitatea de a evita repetarea
poriunilor comune din identificatorii URI, cu ajutorul unui prefix (spaiu de nume). De
exemplu, n loc de:
<http://expl.ro#Alin> <http://expl.ro#esteFrateCu> <http://expl.ro#Andrei> .
<http://expl.ro#Alin> <http://expl.ro#locuiesteIn> <http://expl.ro#Anglia> .
<http://expl.ro#Alin> <http://expl.ro#areNumele> "Alin .

...vom putea defini un prefix lociitor pentru partea de URI care se repet (de
asemenea nu mai sunt necesare parantezele ascuite):
@prefix x: <http://expl.ro#>.
x:Alin x:FrateCu x:Andrei .
x:Alin x:locuiesteIn x:Anglia .
x:Alin x:areNumele "Alin .

...sau, i mai simplu, definim un prefix vid:


@prefix : <http://expl.ro#>. :Alin :FrateCu :Andrei . :Alin
:areVarsta 20 .

11

http://www.w3.org/TeamSubmission/turtle/

Web Semantic

39

:Alin :locuiesteIn :Anglia . :Alin :areNumele


"Alin .

Prefixele Turtle mai au i un alt scop, de a facilita folosirea de identificatori de


concepte din alte surse (de exemplu, standardizai), indicnd provenien a lor. Spre exemplu,
conceptul de Resurs (mulimea tuturor lucrurilor) este unul primitiv, ce apare n orice baz de
cunotine. De aceea, W3C a propus un identificator standardizat pentru acesta:
http://www.w3.org/2000/01/rdf-schema#Resource

Pentru a afirma c Alin este o resurs, vom scrie:


@prefix : <http://expl.ro#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Alin :este rdfs:Resource.

Alt categorie de abrevieri oferit de Turtle este eliminarea necesitii de a ataa


tipuri XML Schema atunci cnd e vorba de numere sau valori booleene. Din acest motiv...
<http://expl.ro#Alin> <http://expl.ro#areVarsta> "20"^^<http://www.w3.org/XMLSchema#int> .

...n Turtle se poate scrie:


@prefix : <http://expl.ro#>. :Alin
:areVarsta 20 .

Urmtoarea abreviere pe care o prezentm este posibilitatea de a nu mai repeta un


concept care apare ca subiect n mai multe afirmaii. Urmtoarele exemple sunt echivalente:
N-triples:
<http://expl.ro#Alin> <http://expl.ro#esteFrateCu> <http://expl.ro#Andrei> .
<http://expl.ro#Alin> <http://expl.ro#areNumele> "Alin .

Turtle:
@prefix : <http://expl.ro#>. :Alin :esteFrateCu :Andrei;
:areNumele "Alin .

Mai mult, se simplific i afirmaiile n care att subiectul ct i proprietatea sunt


comune...
N-triples:
<http://expl.ro#Ana> <http://expl.ro#esteMamaLui> <http://expl.ro#Andrei> .
<http://expl.ro#Ana> <http://expl.ro#esteMamaLui> <http://expl.ro#Alin> .
<http://expl.ro#Ana> <http://expl.ro#esteMamaLui> <http://expl.ro#Adrian> .

Turtle:

40

Robert Andrei Buchmann


@prefix : <http://expl.ro#>.
:Ana :esteMamaLui :Andrei, :Alin, :Adrian.

...i exist o notaie particular pentru situaiile n care lista de obiecte este
ordonat i nchis:
@prefix : <http://expl.ro#>.
:Ana :esteMamaLui (:Andrei :Alin :Adrian).

O alt abreviere util n sintaxa Turtle este legat de prezen a conceptelor


anonime. Am artat deja c acestea sunt concepte fr identitate universal (URI), ns au o
identitate local (un nume instabil, ce se schimb la fiecare transfer al cuno tin elor). Din
N-triples este motenit sintaxa clasic pentru indicarea resurselor anonime:
@prefix : <http://expl.ro#>.
:Maria
:esteMamaLui
_:x
:esteTatalLui

_:x .
:Marian.

n Turtle ns, avem i varianta:


@prefix : <http://expl.ro#>.
:Maria
:esteMamaLui

[:esteTatalLui :Marian].

Cu alte cuvinte, parantezele ptrate grupeaz afirmaii cu subiect anonim, fr a


mai trebui indicat subiectul. Alt exemplu, de data aceasta o nln uire a afirma iilor prin
noduri anonime:
@prefix : <http://expl.ro#>.
:Maria
:esteMamaLui
_x
:esteTatalLui
_y
:locuiesteIn

_:x .
_:y .
:ClujNapoca .

...este echivalent cu:


@prefix : <http://expl.ro#>.
:Maria :esteMamaLui [:esteTatalLui [:locuiesteIn :ClujNapoca]].

Afirmaia...
Alin este o Resurs.

...se poate scrie:


Turtle prefixat:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
<http://expl.ro#Alin> rdf:type rdfs:Resource.

Turtle optimizat:

Web Semantic

41

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.


@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
<http://expl.ro#Alin> a rdfs:Resource.

2.4 Reificarea i cunotinele contextuale


n Semantic Web nu doar proveniena conceptelor (sugerat de URI i prefixe)
trebuie explicitat, ci i proveniena afirmaiilor, mai exact contextul n care afirma iile
trebuie considerate valide. Acest model poart numele de reificare i, dup cum s-a amintit
deja, are rolul de a permite s se fac afirmaii despre afirmaii:
Marian crede c Alin este frate cu Andrei.

n acest exemplu, afirmaia Alin este frate cu Andrei devine obiect n afirmaia care
ncepe cu Marian crede c. Am putea spune c afirmaia despre Alin:
este o credin subiectiv a lui Marian;
are drept surs pe Marian;
prezumia de validitate implicit trebuie s fie limitat la Marian (adic s se tolereze
apariia unei afirmaii contradictorii din alt surs);
sau, la modul cel mai general, l are drept context pe Marian.
Contextul poate fi considerat orice concept ce caracterizeaz o afirmaie n
ansamblu su, nu doar o parte a unei afirmaii. Interpretarea pe care o acordm contextului
poate s varieze:
contextul ca surs a afirmaiei, a unei credine sau a unei citri:
Marian crede c Alin este frate cu Andrei.

contextul ca loc/timp n care e valabil afirmaia poate servi i la precizarea timpului


gramatical al afirmaiilor:
Maria i Alin sunt cstorii din 2010.
Maria lucreaz pentru firma ABC n Cluj Napoca.

contextul ca evaluare a unei relaii:


Soarele se rotete n jurul Pmntului este o afirmaie fals.
Pmntul se rotete n jurul Soarelui cu 30 km/s.

E important de sesizat diferena semantic ntre a caracteriza o afirma ie/rela ie i


a caracteriza doar o parte a unei afirmaii. Considerm exemplele:
Maria lucreaz pentru firma ABC din Cluj Napoca.
Maria lucreaz pentru firma ABC n Cluj Napoca.

n primul caz, firma ABC este n Cluj Napoca (indiferent de rolul Mariei). Faptul
c Maria lucreaz la ABC i faptul c ABC se afl n Cluj Napoca sunt conectate (prin
nodul comun ABC) dar nu se influeneaz reciproc (ABC nu e n Cluj Napoca din cauza
relaiei cu Maria i nici relaia Mariei cu firma ABC nu e legat neaprat de Cluj
Napoca).n consecin, nu avem de a face cu un context propriu-zis, ci cu dou afirma ii
conectate:
http://expl.ro#lucreazaLa
http://expl.ro#Maria

http://expl.ro#localizataIn
http://expl.ro#ABC

Fig. 7 Afirmaii nlnuite

http://expl.ro#ClujNapoca

42

Robert Andrei Buchmann

A doua afirmaie n schimb spune explicit c relaia dintre Maria i ABC se


desfoar n Cluj Napoca. Nu e clar dac Maria e din Cluj Napoca, nu e obligatoriu ca
firma ABC s fie din Cluj Napoca, ns afirmaia ca ntreg e valabil n Cluj Napoca:
http://expl.ro#lucreazaLa
http://expl.ro#Maria

http://expl.ro#ABC

http://expl.ro#ClujNapoca

Fig. 8 Afirmaie contextual


n sintaxele RDF tradiionale, contextul poate fi ataat unei afirma ii pe multiple
ci (s-au demonstrat deja n capitolul dedicat reprezentrii grafice RDF):
printr-o relaie de aritate 3;
folosind modelul standard al reificrii;
Din pcate ambele soluii sunt destul de complexe necesit 4-5 afirmaii i
minim 7 noduri (dintre care unul anonim) pentru reprezentare. Cum se estimeaz
posibilitatea ca n viitor Semantic Web s exploateze foarte frecvent astfel de cuno tin e
contextualizate, s-a propus o soluie optimal n acest sens: identificatorii de grafuri.
Conform acestei idei, nu doar conceptele primesc identificatori de tip URI, ci orice mul ime
de afirmaii, deci orice graf RDF. Identificatorul alocat unei mulimi de afirmaii (graf) va fi
contextul acelei mulimi i poate fi la rndul su folosit n afirmaii despre context.

http://expl.ro#Maria

http://expl.ro#lucreazaLa

http://expl.ro#ABC

http://expl.ro#esteUn

http://expl.ro#Oras

Fig. 9 Afirmaie cu context i afirmaie despre context


n acest exemplu avem afirmaiile:
Maria lucreaz pentru firma ABC n Cluj Napoca.
Cluj Napoca este un ora.

Web Semantic

43

Graful Cluj Napoca poate conine oricte afirmaii (care sunt valabile n Cluj
Napoca). Pentru a doua afirmaie, graful Cluj Napoca este un nod, deci avem de a face cu o
situaie n care grafurile se transform n noduri pentru alte grafuri.
Pentru a facilita exprimarea contextelor cu un efort mult mai mic dect al reificrii
s-a propus extinderea modelului RDF de la triplet la cvadruplet, unde al patrulea concept
este contextual (identificatorul de graf). Astfel se promoveaz ideea de grafuri denumite
(identificate). n acest scop s-au propus sintaxe ce le extind pe cele existente deja:
N-quads este o sintax similar cu N-triples, dar cu 4 concepte ntr-o afirma ie, ultima
fiind contextul (identificatorul de graf)12;
Trig este extensia lui Turtle13
Oferim n continuare un exemplu de reprezentare a unui set de cuno tin e n cele
trei variante, pornind de la afirmaiile:
Maria crede c Alin are vrsta 30 i este cstorit cu Raluca.
Andrei crede c Alin are vrsta 20 i este tatl lui Alina.
Andreea crede c toate opiniile Mariei au credibilitate sczut.

Sintaxa Trig ne permite calificarea oricrui set de cunotine cu un identificator de


graf (context), prin ncadrarea ntre acolade:
@prefix :
<http://expl.ro#>. :Maria
{
:Alin :areVarsta 30; :casatoritCu :Raluca.
}
:Andrei
{
:Alin :areVarsta 20; :tatalLui :Alina.
}
:Andreea
{
:Maria :credibilitate :scazuta.
}

ntre acoladele respective pot apare oricte afirmaii i toate vor aparine grafului
denumit, respectiv contextului reprezentat de acesta. S-a ctigat mult n sintax, dar s-a
pierdut relaia :crede, care fie e considerat implicit printr-o conven ie ntre de intorii
cunotinelor i consumatorii acestora, fie e declarat explicit adugnd afirmaii de forma:
:Maria :relatiaCuAfirmatiile :crede. :Andrei :relatiaCuAfirmatiile :crede. :Andreea :relatiaCuAfirmatiile :crede.

Dup cum am sugerat la nceput, contextul poate avea orice relaii cu con inutul
su (loc, timp, evaluare, surs a unui citat etc.). Afirmaii contradictorii pot apare n
contexte diferite (vrsta lui Alin) sau contexte diferite i pot completa reciproc cuno tin ele
(faptele c Alin e cstorit i are copii). n plus, se pot face afirmaii despre contexte,
12
13

http://sw.deri.org/2008/07/n-quads/
http://www4.wiwiss.fu-berlin.de/bizer/trig/

44

Robert Andrei Buchmann

afirmaii despre afirmaii despre contexte etc. (afirmaia Andreei). Limbajul de interogare
SPARQL deine opiuni de filtrare dup graf (context) a cunotinelor, de combinare a
cunotinelor din anumite grafuri sau pur i simplu de ignorare a mpr irii pe contexte, n
funcie de precizia informaiilor care se solicit.
Exemplul de mai sus se poate exprima i n N-quads, varianta extins la N-triples:
<http://expl.ro#Alin> <http://expl.ro#areVarsta> 30 <http://expl.ro#Maria> .
<http://expl.ro#Alin> <http://expl.ro#casatoritCu> <http://expl.ro#Raluca> <http://expl.ro#Maria> .
<http://expl.ro#Alin> <http://expl.ro#areVarsta> 20 <http://expl.ro#Andrei> .
<http://expl.ro#Alin> <http://expl.ro#tatalLui> <http://expl.ro#Alina> <http://expl.ro#Andrei> .
<http://expl.ro#Maria> <http://expl.ro#credibilitate> <http://expl.ro#scazuta> <http://expl.ro#Andreea> .

2.5 Interogarea grafurilor RDF


2.5.1 Interogri SPARQL
Clasificm interogrile n urmtoarele tipuri:
SELECT instruciunea de baz, pentru citire;
SELECT cu clauza GRAPH sau FROM citire cu filtrare dup contexte;
SELECT cu clauza SERVICE accesare la distan a unui serviciu SPARQL endpoint;
ASK interogri booleene (testeaz prezena sau absena unor cunotine);
DESCRIBE returneaz toate cunotinele deinute despre un concept (interogare de
baz n Linked Data, ca rspuns la accesarea conceptelor folosind identificatorii lor ca
adrese);
LOAD ncrcare de cunotine dintr-o surs
extern; INSERT DATA adugare de cunotine;
INSERT WHERE adugare de cunotine la o anumit poziie n graf;
DELETE DATA tergere de cunotine;
DELETE WHERE tergere de cunotine de la o anumit poziie n graf;
INSERT/DELETE modificare de cunotine (nu exist UPDATE);
ADD unific dou contexte (nu se terge coninutul existent la destinaie);
MOVE mut cunotine dintr-un context n altul (redenumete un context, cci se
terge coninutul existent la destinaie);
COPY copiaz cunotine dintr-un context n altul, nlocuind con inutul existent la
destinaie. Pentru exemplificare;
DROP elimin un context cu toate cunotinele sale.
Pentru exemplificarea interogrilor pornim de la urmtorul exemplu:
@base <http://expl.ro>.
<#JamesCameron> <#aRegizat>
<#Arnold>
<#aJucat>
<#guverneaza>
<#Terminator>
<#Titlu>
<#California>
<#Nume>
<#Arnold>
<#Nume>

<#Avatar>, <#Terminator>.
<#Terminator>;
<#California>.
Terminator.
California.
"Arnold Schwarzenegger".

Web Semantic

45

<#JamesCameron> <#Nume>
<#Avatar>
<#Titlu>

James Cameron.
Avatar.

Posibile interogri:
base <http://expl.ro>
SELECT ?film
WHERE {<#JamesCameron> <#aRegizat> ?film}

Rspunde la ntrebarea Ce a regizat James Cameron?


base <http://expl.ro>
SELECT ?propr ?obiect
WHERE {<#Arnold> ?propr ?obiect.}

Rspunde la Ce se tie despre subiectul Arnold?


base <http://expl.ro>
SELECT ?nume
WHERE {<#JamesCameron><#aRegizat>?x.
?nume <#aJucat> ?x.
?nume <#guverneaza><#California>}

Rspunde la Ce guvernator al Californiei a jucat pentru James Cameron?


base <http://expl.ro>
SELECT ?film
WHERE {<#JamesCameron><#aRegizat>?film.
<#Arnold><#aJucat> ?film}

Rspunde la Ce filme cu Arnold a regizat James Cameron?


base <http://expl.ro>
SELECT ?nume
WHERE {
{?nume <#aRegizat> <#Terminator>}
UNION
{?nume <#aJucat> <#Terminator>}
}

Limbajul SPARQL ofer i facilitatea important de a parcurge orice succesiune


de arce n graful RDF, cu ajutorul cilor de proprieti:
base <http://expl.ro>
SELECT ?x
WHERE {<#JamesCameron> <#ARegizat>/<#Titlu> ?x}

46

Robert Andrei Buchmann

Dou particulariti importante ale limbajului SPARQL sunt posibilitatea de


filtrare dup context i interogarea la distan a serviciilor. n setul de cuno tin e aici folosit
nu avem contexte, deci oferim doar un exemplu abstract:
base <http://expl.ro>
SELECT *
WHERE {
GRAPH <#context1> {?x ?y ?z}
}

Rspunde la ntrebarea Selecteaz toate cunotinele din contextul #context1


SELECT *
WHERE {
SERVICE <http://dbpedia.org/sparql> {?x ?y ?z}
}

Rspunde la ntrebarea Selecteaz toate cunotinele oferite de serverul DBPedia .


Un tip important de interogare este CONSTRUCT, care genereaz afirmaii noi din
cele existente. Este important de reinut c nu le adaug la cele existente ci le ofer doar
clientului, deci nu este o operaie de scriere n baza de cuno tin e (generarea de afirma ii
noi cu adugare se realizeaz prin componenta SPARQL Update, mai exact interogrile
INSERT WHERE).
base <http://expl.ro>
CONSTRUCT
{?x <#colaboreaza> ?y.}
WHERE {
?x <#aRegizat> ?
film. ?y <#aJucat> ?
film

Operaia creeaz un nou graf (set de triplei) din rezultatele interogrii, adugnd
totodat o proprietate nou. Poate fi considerat o metod de a produce triplei noi din
triplei existeni, deci un mod de implementare a regulilor! E vorba de reguli de tip querytime (genereaz concluzii la momentul interogrii fr a le aduga n baza de cuno tin e).
Cealalt categorie, regulile design-time se stabilesc nc de la crearea bazei de cuno tin e
(pot fi modificate i pe parcurs) i produc concluziile imediat ce ntlnesc afirma iile, fr
s atepte o interogare pentru asta (interogrile gsesc concluziile gata generate).
base <http://expl.ro>
ASK {
?regizor <#aRegizat> ?film.
?actor <#aJucat> ?film
}

Rspunde la ntrebarea Exist n baza de cunotine regizori i actori care au lucrat


la acelai film? Interogarea ASK are rezultat boolean, verific doar existen a sau absen a
ablonului.

base <http://expl.ro>
DESCRIBE <#Terminator>

Web Semantic

47

Se returneaz toate afirmaiile ce conin conceptul respectiv. Aceasta e interogarea


pe care se bazeaz Linked Data, cnd trateaz un identificator URI ca adres URL. Pe baza
identificatorului, serverul de cunotine aplic o interogare DESCRIBE i returneaz doar
acel set de afirmaii care conin conceptul solicitat.
Interogrile de citire i returneaz rezultatele n diverse moduri:
Exist un format standard numit SPARQL results, cu dou sintaxe, XML i JSON.
Orice motor de interogare trebuie s poat oferi rezultatele n aceste dou formate;
Dac interogarea returneaz cunotine complete (triplei RDF) se poate opta i pentru
una din sintaxele RDF discutate deja, evitnd astfel efortul de a extrage rezultatele din
XML sau JSON;
Dac interogarea e executat la distan, prin unul din protocoalele bazate pe HTTP,
programul ce iniiaz interogarea poate indica prin cmpul Accept sintaxa n care
dorete s primeasc rezultatele.
Formatul SPARQL Results are urmtoarea structur n XML i extensia de fiier
.SRX:
<sparql>
<head>
<variable name=?film />
</head>
<results>
<result>
<binding name=film>
<uri>http://expl.ro#Terminator</uri>

</binding>
</result>
</results>
</sparql>

2.5.2 Interogri SPARQL Update


prefix : <http://expl.ro#>.
INSERT DATA
{
GRAPH :Hi5
{
:PopMaria :eRudaCu :PopMarian.
:PopMarian :eRudaCu :PopAneta,:PopescuAlin.
}
}

- se creeaz contextul Hi5 i se ncarc n el trei relaii de rudenie


prefix : <http://expl.ro#>.
LOAD <http://server.com/exemplu.ttl> INTO GRAPH :Exemplu

- se creeaz contextul Exemplu i se ncarc n el coninutul fiierului Turtle de pe


serverul indicat
prefix : <http://expl.ro#>.
WITH :Exemplu

48

Robert Andrei Buchmann


INSERT {?y :eTatalLui ?x}
WHERE {?x :eFiicaLui ?y}

- n contextul Exemplu se genereaz o relaie de tat pentru fiecare rela ie de fiic


gsit (prin inversarea subiectului i obiectului); acest tip de interogare seamn cu
CONSTRUCT prin aceea c genereaz relaii noi din cele existente dar n timp ce
CONSTRUCT ofer rezultatele direct consumatorului, INSERT le adaug la baza de
cunotine pentru a putea fi interogate i n viitor; practic e un mecanism de executare de
reguli, cci o regul nu e altceva dect un mecanism de generare de afirma ii noi la
descoperirea unui anumit ablon n afirmaii existente.
prefix : <http://expl.ro#>.
WITH :Facebook
DELETE {?x ?y ?z}
WHERE {:Ana :CunoastePe ?x}

- din contextul :Facebook se terg toate afirmaiile despre indivizii pe care i


cunoate :Ana
prefix : <http://expl.ro#>
WITH :Facebook
DELETE {:Ana ?x ?y}
INSERT {:PopAna ?x ?y}
WHERE {:Ana ?x ?y}

- n contextul :Facebook se modific identificatorul Anei n :PopAna; e vorba de o


operaie UPDATE ns, spre deosebire de SQL, aici nu avem o instruciune dedicat acestei
operaii i suntem nevoii s mbinm o tergere cu o inserare
DROP GRAPH :Facebook

- elimin toate afirmaiile din contextul :Facebook

2.6 Reguli i concepte standardizate RDF/S


2.6.1 Vocabulare i ontologii
Un vocabular este un set de concepte cu identificatori fixai i semnifica ie ce se
recomand s fie adoptate de creatorii de cunotine pentru o mai bun performan .
Programele pot fi configurate s recunoasc apariia acestor concepte i s le interpreteze ca
reguli, apoi s execute acele reguli pentru a produce noi afirmaii. Avem i vocabulare
(impropriu numite limbaje) cu care se pot crea vocabulare, precum RDF Schema 14 sau
OWL15. Diferena ntre cele dou este expresivitatea, bogia de reguli care pot fi extrase
din conceptele standardizate. O distincie particular este c OWL ofer mecanisme de
detectare a contradiciilor, deci o form de validare a cunotinelor care pn la acel nivel
nu exist. Vocabularele OWL mai sunt numite i ontologii, datorit posibilitii lor de a
defini relaii complexe ntre toate conceptele unui domeniu de cunoatere. Vocabularele
RDF Schema mai sunt numite i taxonomii, datorit structurii lor ierarhice, de la concepte
14
15

http://www.w3.org/TR/rdf-schema/
http://www.w3.org/TR/owl-features/

Web Semantic

49

vagi, cu proprieti puine (generale) la concepte specifice, cu proprieti detaliate


(specializate) - ierarhie care de obicei constituie scheletul unei poteniale ontologii.
Vocabularele nu sunt neaprat standardizate. Ele pot fi i vocabulare controlate,
propuse de diverse organizaii pentru a deservi un anumit domeniu, devenind suficient de
populare nct s fie adoptate pe scar larg:
FOAF16, set de concepte cu care se pot descrie relaiile dintre
oameni; GoodRelations17, pentru a descrie cataloage de produse;
Dublin Core18, pentru a descrie resurse informaionale (documente, cri etc.);
OpenGraph19, cu acelai scop ca FOAF, dar conceput de Facebook pentru a stoca
relaiile sociale;
voID20, pentru a descrie baze de cunotine (de exemplu cte clase, propriet i,
subiecte, obiecte conine);
SPARQL Service Description21, pentru a descrie capabilitile oferite de un server de
tip SPARQL endpoint (ce contexte ofer, ce versiune de SPARQL suport etc.);
OWL-Time22, pentru a indica n mod precis momente i perioade de timp (util n a
ataa contexte temporale afirmaiilor);
GeoOWL23, pentru a indica n mod precis locaii i concepte spaiale (util n a ata a
contexte spaiale afirmaiilor);
DBPedia24, setul de concepte oferite de Wikipedia, fr a avea un domeniu de utilizare
specific. Obiectivul su este s devin un dicionar de referin pentru diver i termeni
comuni, o limb comun la care s se alinieze ct mai multe baze de cunotine (un
deziderat periculos sub anumite aspecte, ce risc s ncalce principiile descentralizrii
Web).
n continuare vom dedica acest capitol conceptelor standard oferite de
vocabularele RDF i RDF Schema, prezentnd identificatorii lor stabili i, semnifica ia, idei
de utilizare i eventualele reguli pe care ar trebui s le declan eze n sisteme dotate cu
capaciti infereniale.

2.6.2 Concepte RDF/S


Dei RDF i RDF Schema au fost iniial propuse ca vocabulare diferite, primul
prefixat cu rdf, al doilea cu rdfs, adesea e nevoie s fie folosite mpreun chiar n aceea i
afirmaie, deci trasarea unei linii de demarcare ntre cele dou vocabulare e inutil. Prefixul
rdf trebuie asociat spaiului de nume:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

Prefixul rdfs trebuie asociat spaiului de nume:


16
17
18
19
20
21
22
23
24

http://www.foaf-project.org/
http://www.heppnetz.de/projects/goodrelations/
http://dublincore.org/
http://developers.facebook.com/docs/opengraph/
http://vocab.deri.ie/void
http://www.w3.org/TR/2009/WD-sparql11-service-description-20091022/
http://www.w3.org/TR/owl-time/
http://www.w3.org/2005/Incubator/geo/XGR-geo-20071023/
http://dbpedia.org/About

50

Robert Andrei Buchmann


<http://www.w3.org/2000/01/rdf-schema#>

Conceptele acestor vocabulare sunt urmtoarele, ncepnd cu cele mai primitive:


Conceptul de resurs (rdfs:Resource)
Aceasta e considerat mulimea tuturor lucrurilor i include orice concept, orice
clas, orice dat indiferent de tip. Nu exist n univers entit i care s nu poat fi clasificate
drept resurse. Definiia oficial a resursei este una extrem de vag: orice lucru despre care
se poate face o afirmaie, i e inspirat de una din defini iile filosofice ale obiectului, care,
conform lui Charles Peirce, este anything we can think or talk about 25. Din acest motiv,
conceptul e asociat unei reguli de forma:
Dac avem:
?x ?y ?z
Se va genera:
?x a rdfs:Resource
?y a rdfs:Resource
?z a rdfs:Resource

De exemplu, din afirmaia


@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Ana :esteMamaLui :Alin.

se va deduce
:Ana a rdfs:Resource. :esteMamaLui
a rdfs:Resource. :Alin a
rdfs:Resource.

Aceast regul nseamn c indiferent ce afirmaie RDF am face, toate elementele


sale vor deveni resurse. Prin ntrebarea Ce este X? trebuie nelegem o interogare SPARQL
de forma:
SELECT ?multime
WHERE {X a ?multime}

Conceptul de proprietate (rdf:Property)


Aceasta e mulimea tuturor proprietilor pe care le-ar putea avea conceptele,
indiferent c sunt atribute sau relaii cu alte lucruri. Defini ia sa e dat de conven ia RDF
privind structura unei afirmaii: orice lucru care apare la mijlocul unei afirma ii (ntre
subiect i obiect), deci e un rspuns suplimentar care se poate da despre conceptul din
mijloc: pe lng a fi resurs, mai este i o proprietate. Regula este urmtoarea:
Dac avem:
?x ?y ?z
Se va genera: ?
y a rdf:Property

25

http://www.helsinki.fi/science/commens/terms/object.html

Web Semantic

51

Conceptul de mulime (rdfs:Class) i proprietatea de a aparine unei mul imi


(rdf:type, a n Turtle):
Mulimea e sinonim cu clasa n RDF. Aceasta e o posibil surs de confuzie
pentru cei familiarizai cu programarea obiectual, obinuii s vad clasa drept un model
din care se creeaz mai multe obiecte (proprietile sunt deduse din apartenena la
clas). Aici, clasa e mulimea obiectelor care sunt aliniate unui anumit model ( apartenena
la clas e dedus din prezena unei proprieti ). Clasele sunt extrem de importante
deoarece ofer un rspuns mai detaliat la ntrebrile de forma Ce este X? Rspunsul c este
resurs e unul foarte vag, cu ncrctur semantic minim. Rolul RDF Schema i OWL
este s rafineze acest rspuns, s detecteze ct mai precis ce sunt lucrurile n func ie de
relaiile pe care le au, deci clasa funcioneaz i ca o etichet aplicat unui lucru: Om
(eticheta/mulimea tuturor oamenilor), Animal (eticheta/mulimea animalelor),
AnimalPatruped (eticheta/submulimea patrupedelor, ceva mai precis dect a animalelor),
Student (eticheta/mulime general a studenilor), StudentBun (eticheta/submul ime ceva
mai precis a studenilor), StudentDeNota10 (submulime i mai precis). De i cel mai des
apartenena la o clas se deduce prin reguli (RDF Schema i OWL), avem i posibilitatea
de a o afirma direct, caz n care din afirmaii precum
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Ana a :Om.

se va deduce:
:Om a rdfs:Class.

n astfel de afirmaii, regula aplicat este urmtoarea:


Dac avem:
?x a ?z
Se va
genera: ?z a
rdfs:Class.

Conceptele de tip (rdfs:Datatype) i de valoare (rdfs:Literal)


Primul este mulimea tuturor tipurilor de date, al doilea este mul imea tuturor
datelor posibile, a valorilor pe care le pot lua obiectele RDF. Regulile pot deduce c orice
tip de date este un element al primei mulimi i o submul ime a celei de-a doua. Pornind de
la afirmaia
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix
xsd: <http://www.w3.org/2001/XMLSchema#>. :Ana :areVarsta
"20"^^<xsd:integer>.

se va deduce c:

<xsd:integer> a rdfs:Datatype; rdfs:subClassOf rdfs:Literal.

(orice tip de date este o mulime de valori, un element al mulimii tipurilor i o


submulime a mulimii tuturor valorilor posibile)

Relaia de incluziune ntre clase (rdfs:subClassOf)

52

Robert Andrei Buchmann

Aceasta este una din relaiile cele mai importante din RDF Schema, care exprim
incluziunea dintre dou mulimi. Cu ajutorul ei se creeaz ierarhia de clase (taxonomia) ce
constituie scheletul unui vocabular i al unei poteniale ontologii care se poate dezvolta din
acesta. Pornind de la afirmaiile
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Andrei a :Barbat.
:Barbat rdfs:subClassOf :Om. :Om
rdfs:subClassOf :Fiinta.

se vor deduce:

:Andrei a :Om, :Fiinta.


:Barbat rdfs:subClassOf :Fiinta. :Barbat
a rdfs:Class.
:Om a rdfs:Class. :Fiinta
a rdfs:Class.

Regulile aplicate sunt:


Dac avem
?x a ?c1.
?c1 rdfs:subClassOf ?c2.

Se vor genera:

?x a ?c2.
?c1 a rdfs:Class.
?c2 a rdfs:Class.

Dac avem
?c1 rdfs:subClassOf ?c2.
?c2 rdfs:subClassOf ?c3.

Se va genera:

?c1 rdfs:subClassOf ?c3.


?c1 a rdfs:Class.
?c2 a rdfs:Class.
?c3 a rdfs:Class.

Aceast relaie are dou roluri eseniale:


De a defini taxonomia schelet din care se poate dezvolta mai departe o ontologie;
De a oferi mecanisme de mapare ntre baze de cunotine diferite ce folosesc clase
nrudite, chiar identice.
n ce privete primul punct, o taxonomie este o clasificare pe mai multe nivele, un
arbore n care toate nodurile sunt clase i toate arcele sunt relaii de incluziune
(rdfs:subClassOf):
Relaia de particularizare ntre proprieti (rdfs:subPropertyOf)
Acesta e cea de-a doua relaie fundamental a unui vocabular XML Schema. E
menit s completeze taxonomia claselor cu o taxonomie a rela iilor i una a atributelor ce
vor fi folosite n baza de cunotine.
E important s nu se confunde aceast relaia cu cea de incluziune. Propriet ile
RDF nu sunt mulimi, deci nu e vorba de elemente comune ntre dou proprieti.

Web Semantic

53

Subproprietatea e un ceva cu sens mai specific, particularizat la anumite situaii, fa de


supraproprietatea sa. Pornind de la exemplul
:JamesCameron :aRegizat :Terminator. :aRegizat
rdfs:subPropertyOf :aCreat. :aCreat
rdfs:subPropertyOf :aLucratLa.

se vor deduce:

:JamesCameron :aCreat :Terminator. :JamesCameron :aLucratLa :Terminator. :aRegizat


rdfs:subPropertyOf :aLucratLa. :aRegizat a rdf:Property.

:aCreat a rdf:Property. :aLucratLa a


rdf:Property.

Regulile aplicate au fost:


Dac avem:
?x ?p1 ?y
?p1 rdfs:subPropertyOf ?p2
Se va genera:
?x ?p2 ?y
Dac avem:
?p1 rdfs:subPropertyOf ?p2
?p2 rdfs:subPropertyOf ?p3
Se va genera:
?p1 rdfs:subPropertyOf ?p3
?p1 a rdf:Property
?p2 a
rdf:Property ?p3 a
rdf:Property

Prima regul permite nlocuirea unei relaii cu alta, mai general, ntre aceia i
indivizi. A doua regul reprezint tranzitivitatea acestor nlocuiri, precum i detectarea
faptului c toate conceptele implicate ntr-o astfel de ierarhie sunt proprieti.
owl:topObjectProperty

:ALucratLa
:ACreat

:ARegizat
:JamesCameron

:Terminator

Fig. 10 Propagarea proprietilor


Ca i n cazul incluziunii, putem folosi aceast relaie pentru a defini taxonomii de
proprieti sau pentru a mapa proprieti cu semnificaie similar dar identificatori diferi i

54

Robert Andrei Buchmann

(din baze de cunotine diferite). Vocabularul OWL completeaz tabloul cu cteva


proprieti standard:
owl:topObjectProperty relaia universal ntre dou concepte, care exist ntre oricare
dou resurse din univers (faptul c aparin aceluiai univers?);
owl:topDataProperty atributul universal, pe care l are orice concept i poate lua orice
valoare;
owl:bottomObjectProperty relaia absurd ntre dou concepte, nu are voie s apar
n nicio baz de cunotine (sau apariia sa poate fi folosit ca semnal de apari ie a unei
contradicii);
owl:bottomDataProperty atributul absurd (nu poate avea valoare pentru nici un
concept).
Proprietatea unei proprieti de a avea domeniu (rdfs:domain) i codomeniu
(rdfs:range)
Dup ce s-au creat taxonomiile de clase i de proprieti, se recomand ca acestea
s fie conectate. Aceasta presupune ca pentru fiecare proprietate din taxonomie s se indice
cu ce fel (clas) de subiecte (domeniul) i cu ce fel de obiecte (codomeniul) va fi folosit.
Pornind de la afirmaia
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:JamesCameron :ARegizat :Terminator.
:ARegizat rdfs:domain :Regizor; rdfs:range :Film.

regulile vor deduce:


:JamesCameron a :Regizor.
:Terminator a :Film.

Regulile aplicate sunt:


Dac avem:
?x ?p ?y
?p rdfs:domain ?c
Rezult:
?x a ?c
Dac avem:
?x ?p ?y
?p rdfs:range ?c
Rezult:
?y a ?c

Conceptul de Container (rdfs:Container, rdf:Bag, rdf:Seq, rdf:Alt) i rela iile


de apartenen la un container (rdf:_1, rdf:_2 etc.; rdfs:member,
rdfs:ContainerMembershipProperty)
Un container se aseamn cu clasa prin aceea c este o mul ime, ns rela ia pe
care fiecare concept o are cu containerul este de alt natur. Apartenen a la o clas
(rdf:type) ar trebui s fie dictat de o oarecare asemnare ntre indivizi, de prezen a unor
proprieti comune (de aceea poate fi dedus din rdfs:domain i rdfs:range). n schimb un
container poate fi un set de elemente grupate dup orice criterii. Apartenen a elementelor la
un container poate fi afirmat prin dou relaii (spre deosebire de apartenen a la clase, aici
containerul apare ca subiect iar elementele sale ca obiecte):

Web Semantic

55

@prefix : <http://expl.ro#>.
:calculator rdfs:member :procesor, :placaBaza, :disc.

sau
@prefix : <http://expl.ro#>.
:mapaDocumente rdf:_1 :certificatNastere; rdf:_2 :diplomaBacalaureat; rdf:_3 :adeverintaSalariu.

Din prima construcie, regulile vor putea deduce:


:calculator a rdfs:Container.

Din a doua:
:mapaDocumente a rdfs:Container.
:mapaDocumente rdfs:member :certificatNastere, :diplomaBacalaureat, :adeverintaSalariu.

Se recomand adugarea unor declaraii explicite asupra tipului


de container (multime, secven sau set de alternative):
:calculator a rdf:Bag. :mapaDocumente
a rdf:Seq.

:VarianteCadou a rdf:Alt; rdf:_1 :Automobil; rdf:_2 :Canapea; rdf:_3 :Bicicleta.

Conceptul de List (rdf:List, rdf:nil) i relaiile de apartenen la o list


(rdf:first, rdf:rest).
Lista este o colecie de concepte ordonat i nchis, pentru care Turtle ofer o
abreviere sintactic des folosit:
@prefix : <http://expl.ro#>.
:Ana :areCopiii (:Alin :Maria :Marian).

Regulile vor converti ntotdeauna o astfel de afirmaie n urmtorul set:


:Ana :areCopiii [a rdf:List; rdf:first :Alin; rdf:rest [a rdf:List; rdf:first :Maria; rdf:rest [a rdf:List; rdf:first
:Marian; rdf:rest rdf:nil]]].

Interpretarea acestei construcii e urmtoarea: copiii Anei sunt cuprini ntr-o list
al crei prim element e :Alin, urmat de o sublist al crei prim element e :Maria, urmat de
o sublist al crei prim element e :Marian, urmat de un final de list (rdf:nil reprezint
ncheierea listei). Aadar e o structur de concepte ordonate asemntoare cu rdf:Seq dar
care ofer o informaie n plus: e nchis, are un element despre care se poate zice c e
ultimul i nimic dup el nu mai exist. Cu ajutorul interogrilor SPARQL se poate afla
relativ uor care e ultimul element al listei, cutnd conceptul rdf:nil:
prefix : <http://expl.ro#>
SELECT ?element
WHERE {?x rdf:first ?element; rdf:rest rdf:nil}

Listele sunt mai apropiate claselor dect containerele, prin aceea c de obicei
elementele enumerate ntr-o list au o semnificaie comun, ar putea deveni elementele unei
clase. De aceea, vom vedea mai trziu, OWL se bazeaz pe liste la definirea claselor:
permite ca o clas s fie creat prin enumerarea listei elementelor sale ( i prin aceasta
aplic i o nchidere clasei); n plus mai permite ca o clas s fie definit prin intersecie sau
reuniune aplicate asupra unei liste de alte clase.

56

Robert Andrei Buchmann

Conceptul de valoare principal (rdf:value)


Acesta e un concept util n relaiile de aritate superioar, pentru a indica nodul ce
reprezint valoarea principal a relaiei respective. Programele care cunosc deja structura
relaiei de aritate superioar vor putea folosi interogri SPARQL care s extrag doar
aceast valoare principal, ignornd restul structurii.
Andrei are 10 la Matematic.

Exprimarea Turtle a acestei afirmaii se poate realiza n multiple moduri, fiind


recomandat o relaie de aritate 3 construit n jurul unui nod anonim:
:Andrei :areNota [rdf:value 10; :curs :Matematica].

Presupunnd c un program cunoate deja despre ce note este vorba, va putea


formula interogri SPARQL care s acceseze direct valorile rdf:value.
Conceptul de afirmaie reificat (rdf:Statement) i relaiile de apartenen la
o afirmaie reificat (rdf:subject, rdf:predicate, rdf:object)
O afirmaie reificat e o afirmaie ce poate fi folosit ca subiect sau obiect al altei
afirmaii, de obicei pentru a preciza contextul n care e valabil afirma ia sau sursa sa. Am
artat deja c reificarea nu e un model foarte popular deoarece transform afirma ia
reificat ntr-un grup de triplei. Dac dorim s exprimm
Ana crede c Alin are vrsta 30.

vom scrie:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
:Ana :crede _:x.
_:x rdf:subject :Alin; rdf:predicate :areVarsta; rdf:object 30 .
_:x a rdf:Statement.

Proprietatea de denumire (rdfs:label)


Denumirile sunt iruri de caractere menite a fi folosite n rapoarte, pagini Web i
orice document bazat pe cunotine ce se adreseaz unui cititor uman pentru care URI ar
putea crea probleme la citire (mai ales c nu e obligatoriu ca URI s sugereze n vreun fel
semnificaia conceptului, poate fi un ir aleatoriu de caractere!). RDF Schema ofer o
proprietate standard pentru alocarea de denumiri. Dac dorim totui s folosim propriile
proprieti n acest scop (situaie uzual!), putem realiza o mapare fa de rdfs:label. Pornim
de la:
@prefix : <http://expl.ro#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Ana :Nume "Popescu Ana".
:DieHard :Titlu "Die Hard"@en, "Greu de ucis"@ro.

..declarm maparea:

:Nume rdfs:subPropertyOf rdfs:label. :Titlu


rdfs:subPropertyOf rdfs:label.

se va deduce:

:Ana rdfs:label "Popescu Ana".


:DieHard rdfs:label "Die Hard"@en, "Greu de ucis"@ro.

Web Semantic

57

apoi agenii software vor putea prin interogri SPARQL s identifice etichetele
textuale relevante pentru fiecare concept!
Proprietatea de a avea un comentariu (rdfs:comment)
Aceast proprietate funcioneaz similar cu rdfs:label, ne permite s ata m un ir
de caractere unui concept, ns rolul irului de caractere nu e de a oferi o denumire lizibil,
ci de a ataa un comentariu care s explice ct mai detaliat semnifica ia acelui concept
pentru un cititor uman care ar putea opta s parcurg cunotin ele noastre n sintaxa lor
brut, mai ales dac denumirea sau identificatorul URI nu. sunt foarte sugestive:
:ProABC rdfs:comment "acest concept reprezint compania Prosperitas ABC, cu sediul n Cluj
Napoca".

Proprietatea de a avea o pagin Web definitorie (rdfs:isDefinedBy)


n capitolul legat de identitatea n Semantic Web s-a atras aten ia asupra crizei
identitii, prin care un identificator nu ar trebui folosit i pe post de pagin Web. De aceea,
chiar dac Wikipedia ofer pagini Web pentru numeroase concepte, sau Facebook pentru
numeroase persoane, nu ar trebui s folosim acele adrese pentru a identificarea de concepte.
n schimb putem s indicm faptul c dac se doresc informaii detaliate despre concept,
pot fi gsite pe o pagin Wikipedia sau pe alt site. Exemplul urmtor indic faptul c rela ia
de frate poate fi neleas depe pagina oferit de Wikipedia pentru cuvntul brother:
@prefix : <http://expl.ro#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. :esteFrateCu
rdfs:isDefinedBy <http://en.wikipedia.org/wiki/Brother>.

ntr-un capitol ulterior, dedicat fenomenului Linked Data vom arta c un server
poate oferi simultan informaii despre un concept n format HTML i n format RDF. n
acest caz, e recomandat ca baza de cunotine s conin asocieri precum cea de mai sus,
pentru a indica fiierele care sunt reprezentative pentru concept.
Proprietatea de a avea pagini Web descriptive alternative (rdfs:seeAlso)
Cum acelai concept poate fi descris de numeroase pagini Web (site propriu, o
pagin Wikipedia, o pagin Facebook, un blog etc.) avem posibilitatea de a anexa oricte
pagini Web secundare, considerate nedefinitorii pentru nelegerea conceptului, dar totu i
relevante. Printre acestea se pot numra chiar baze de cunotine RDF disponibile direct pe
Web, precum cele oferite de DBPedia:
@prefix : <http://expl.ro#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. :MichaelJackson
rdfs:isDefinedBy <http://www.michaeljackson.com>;

rdfs:seeAlso <http://en.wikipedia.org/wiki/Michaeljackson>;
rdfs:seeAlso < http://dbpedia.org/resource/Michael_Jackson>.

Mai menionm c rdfs:isDefinedBy e o subproprietate a lui rdfs:isDefinedBy,


deci se genereaz automat:
:MichaelJackson rdfs:seeAlso <http://www.michaeljackson.com>.

Aceasta ne permite s obinem toate paginile despre MichaelJackson printr-o


singur interogare SPARQL, cutnd doar relaiile rdfs:seeAlso.

n ncheiere, sintetizm 4 tipuri de ierarhii care pot apare ntr-o baz de cunotine:

58

Robert Andrei Buchmann


ierarhia de clase, bazat pe relaia rdfs:subClassOf, toate nodurile fiind clase; o
posibil ramur ntr-un astfel de arbore ar fi:
:Femeie rdfs:subClassOf :Om. :Om rdfs:subClassOf :Fiinta. :Fiinta rdfs:subClassOf owl:Thing.

ierarhia de proprieti, bazat pe relaia rdfs:subPropertyOf, toate nodurile sunt


proprieti; o posibil ramur ntr-un astfel de arbore ar fi:
:ARegizat rdfs:subPropertyOf :ACreat. :ACreat rdfs:subPropertyOf owl:topObjectProperty.

ierarhia de containere, bazat pe relaii rdfs:member sau rdfs:_1, rdfs:_2 (deoarece


aceste concepte oricum nu deduc concluzii foarte valoroase, n practic sunt
adesea ignorate i nlocuite cu concepte i relaii improvizate); o posibil ramur
ntr-un astfel de arbore ar fi:
:Calculator rdfs:member :UnitateCentrala. :UnitateCentrala rdfs:member :PlacaBaza.

teoretic e posibil i o ierarhie de tip instan-(clas/instan )-(clas/instan )-,


atunci cnd un acelai concept e tratat ca individ i ca mulime n afirmaii diferite;
o posibil ramur ntr-un astfel de arbore ar fi:
:Andrei rdf:type :Om. :Om rdf:type rdfs:Class. rdfs:Class rdf:type rdfs:Resource.

2.7 Reguli i concepte standardizate OWL


Vocabularul OWL, ajuns la versiunea 226, vine s completeze cu o expresivitate
superioar i noi reguli conceptele oferite de RDF Schema. Un beneficiu important pe care
l aduce este posibilitatea de a detecta contradicii. Cu conceptele RDF Schema acest lucru
nu e posibil, deoarece nu exist nicio metod de a exprima negarea, iar pentru a exprima o
contradicie e nevoie s existe simultan n baza de cuno tin e o afirma ie i negarea sa.
Vocabularul OWL ofer prin conceptele sale:
posibilitatea de a afirma explicit c o afirmaie este fals;
posibilitatea de a defini tipuri de date personalizate prin restricii XML Schema;
posibilitatea de a descrie o baz de cunotine n ansamblul ei;
concepte n care negarea este implicit; e vorba de acele rela ii care exprim
incompatibilitatea ntre concepte: distincia ntre indivizi, disjunc ia ntre clase i
proprieti;
relaii pentru exprimarea mai facil a echivalenei, fcnd mai u oare maprile
prin echivalene explicite ntre indivizi, clase i proprieti;
reguli ce pot deduce echivalena i distincia;
noi tipuri de proprieti;
o serie de tehnici de definire a claselor i de deducere a apartenenei indivizilor:
o prin enumerarea direct a elementelor;
o prin operaii pe mulimi (reuniune, intersecie, complement);
o prin restricii aplicate asupra utilizrii proprietilor (o rafinare a modului
de lucru prezentat la rdfs:domain i rdfs:range, n care, pentru a fi inclus
ntr-o clas, nu e suficient s foloseti o proprietate, conteaz i cum o
foloseti).

26

http://www.w3.org/TR/owl-overview/

Web Semantic

59

2.7.1 Clase i relaii introduse de OWL 2


Conceptul de instan, individ (owl:NamedIndividual) i cel de clas OWL
(owl:Class)
Aceasta este mulimea tuturor indivizilor, pe acelai nivel de abstractizare cu
mulimea tuturor claselor. Am prezentat n capitolul precedent posibilitatea de a deduce c
un concept e clas, din afirmaii precum cea de apartenen a unui element la o mul ime.
RDF nu ofer ns i o metod explicit de a afirma c un concept este un individ. OWL
completeaz acest neajuns. Ca i declaraia de clas, de obicei aceast afirma ie se deduce
din relaii instan-clas, nu se afirm direct:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana a :Femeie.

Pe lng deducia asigurat de RDF, un program ce execut i reguli OWL va mai


deduce:
:Ana a owl:NamedIndividual. :Femeie a
owl:Class.

Prin prima concluzie se afirm c :Ana este un individ cu identitate, prin a doua se
afirm c :Femeie este o clas. Observai c pentru mul imea tuturor claselor aveam deja
conceptul standard rdfs:Class, i totui aici s-a dedus owl:Class. Aceasta este considerat o
submulime a lui rdfs:Class.
Conceptele
universale
(owl:Thing,
owl:topObjectProperty,
owl:topDataProperty),
absurde
(owl:Nothing,
owl:bottomObjectProperty,
owl:bottomDataProperty)
i
depreciate
(owl:DeprecateClass,
owl:DeprecatedProperty).
O parte din aceste concepte au fost prezentate deja n seciunea dedicat
taxonomiilor RDF Schema. Conceptele universale i absurde sunt menite s ntregeasc
taxonomia de clase cu mulimea tuturor lucrurilor din univers (owl:Thing) i mul imea vid
(owl:Nothing), respectiv s ntregeasc taxonomia de proprieti cu propriet ile care exist
pentru orice concept (owl:topProperty) i cele care nu au voie s apar pentru niciunul
(owl:bottomProperty). Rolul conceptelor absurde este s fie folosite n concluziile unor
reguli menite s surprind contradiciile. De exemplu, orice concept detectat ca fiind
contradictoriu poate fi declarat membru al lui owl:Nothing i orice relaie contradictorie
poate fi declarat subproprietate a uneia dintre cele dou owl:bottomProperty. Apoi, o
interogare SPARQL poate lista conceptele contradictorii bazndu-se pe aceste relaionri.
Cele dou clase depreciate (una pentru clase, una pentru proprieti) sunt dou
mulimi n care se pot ncadra explicit clase sau proprieti care au fost redefinite n
versiuni mai noi i urmeaz s fie terse sau sunt pstrate din raiuni de documentare:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :ClasaVeche a
owl:DeprecatedClass.

:ProprietateVeche a owl:DeprecatedProperty.

60

Robert Andrei Buchmann

Categorii
de
proprieti:
relaie
(owl:ObjectProperty),
atribut
(owl:DataProperty), adnotare (owl:AnnotationProperty), adnotare de ontologie
(owl:OntologyProperty)
Acestea sunt mulimile relaiilor, atributelor, adnotrilor i proprietilor bazelor de
cunotine, toate submulimi ale lui rdf:Property:
n categoria relaiilor intr (prin deducie) orice proprietate ce are drept obiect un
identificator URI sau nod anonim;
n cea a atributelor intr (prin deducie) orice proprietate ce are drept obiect o
valoare;
n cea a adnotrilor sunt ncadrate implicit proprieti standard ce ata eaz
explicaii suplimentare unui concept: rdfs:label, rdfs:comment, rdfs:seeAlso,
rdfs:isDefinedBy, la care se adaug owl:versionInfo ce ataeaz un comentariu
unei baze de cunotine n ansamblul su, preferabil unul care s indice informa ii
de versiune (data crerii, autor, numr de versiune); subiectul acestei propriet i e
ntotdeauna o baz de cunotine, iar obiectul un ir de caractere;
celelalte proprieti ale bazelor de cunotine sunt ncadrate n clasa
owl:OntologyProperty, le detaliem n continuare:
Conceptul de afirmaie fals (owl:NegativePropertyAssertion, cu
componentele
owl:sourceIndividual,
owl:assertionProperty,
i
owl:targetIndividual/owl:targetValue)
OWL introduce posibilitatea de a afirma explicit valoarea de adevr a afirma iilor.
Tehnica nu e una comod, fiind inspirat din modelul afirmaiilor reificate, n care o
afirmaie e transformat n nod anonim i conectat cu cele trei componente ale sale.
Presupunem c dorim s exprimm:
Ana are varsta 20 este o afirmaie fals.
Ana este mama lui Alin este o afirmaie fals.

Vom introduce cunotinele:

@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
_:afirmatie1
a owl:NegativePropertyAssertion.
owl:sourceIndividual :Ana;
owl:assertionProperty :areVarsta;
owl:targetValue 20 .
_:afirmatie2
a owl:NegativePropertyAssertion.
owl:sourceIndividual :Ana;
owl:assertionProperty :esteMamaLui;
owl:targetIndividual :Alin.

Teoretic regulile ar putea deduce apartenena celor dou noduri anonime la


mulimea owl:NegativePropertyAssertion (liniile ngroate), din prezen a celor trei
componente, scutindu-ne de a afirma explicit acest lucru. Totui, e posibil ca cele trei rela ii
s aib n viitor i alte utilizri sau s fie eliminate cu totul (unii practicieni prefer s
foloseasc structura de la reificare, folosind tot rdf:subject, rdf:predicate, rdf:object pentru a
separa componentele unei afirmaii false). n plus poate fi nevoie frecvent s facem
afirmaii false ntr-o baz de cunotine ce nu suport reguli, caz n care e preferabil s
exprimm complet ideea c vorbim de afirmaii false.

Web Semantic

61

Conceptul de axiom adnotat (owl:Axiom, cu componentele


owl:annotatedSource, owl:annotatedProperty, owl:annotatedTarget)
Este o construcie asemntoare afirmaiilor false sau reificate, dar rolul su este s
ofere o adnotare (comentariu, denumire, site lmuritor) despre o ntreag afirma ie.
Seamn cu reificarea, dar o afirmaie reificat e descris mai departe tot prin triple i RDF,
n timp ce afirmaia adnotat e descris prin proprietile de adnotare oferite de RDF
Schema. Adnotarea de afirmaii e folosit adesea pentru a scrie aceea i afirma ie i n
limbaj natural, oferind astfel o "traducere" din RDF.
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
_:afirmatie1 owl:annotatedSource :Ana;
owl:annotatedProperty :esteMamaLui;
owl:annotatedTarget :Alin;

rdfs:label "Ana este mama lui Alin ".


_:afirmatie1 a owl:Axiom.

Relaia de reciprocitate ntre dou relaii (owl:inverseOf)


Sunt frecvent ntlnite situaiile n care introducem un set de rela ii ntre indivizii
din baza de cunotine i ne ateptm ca n mod automat s se deduc i rela iile inverse:
dac X e parintele lui Y, s nu mai tastm i faptul c Y e copilul lui X. Dac serverul de
cunotine nu suport reguli, astfel de inversiuni se pot genera dinamic prin interogri
CONSTRUCT sau INSERT, atunci cnd e nevoie. Totui, OWL permite generarea
automat a relaiilor inverse printr-o simpl declarare de reciprocitate. Din urmtorul
exemplu
@prefix : <http://expl.ro#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :eParinteleLui
owl:inverseOf :eCopilulLui.

:Alin :eParinteleLui :Andrei.

se va deduce:

:Andrei :eCopilulLui :Alin.

Proprietatea de simetrie a unei relaii (owl:SymmetricProperty)


O variaie a situaiei precedente este situaia n care dorim s afirmm c rela ia
funcioneaz n ambele sensuri fr a i se schimba identificatorul. n mod implicit tripletul
RDF e unidirecional pentru a afirma c dou persoane sunt cstorite trebuie s facem
dou afirmaii, indicnd relaia de cstorie n ambele sensuri. Ca i n cazul precedent,
putem rezolva aceast situaie la momentul interogrii, sau stabilind de la bun nceput o
regul OWL care s genereze automat relaiile inverse. Din exemplul
@prefix : <http://expl.ro#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :eRudaCu a
owl:SymmetricProperty.

:Ana :eRudaCu :Alin.

se va deduce:
:Alin :eRudaCu :Ana.

Proprietatea de reflexivitate a unei relaii (owl:ReflexiveProperty)


Aceasta este o submulime a lui owl:SymmetricProperty i conine acele relaii
care conecteaz un individ cu el nsui. Cu alte cuvinte, toate lucrurile din univers au acea

62

Robert Andrei Buchmann

relaie cu ele nsele. De exemplu, putem indica faptul c orice om se cunoate pe sine,
astfel:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :CunoastePe a
owl:ReflexiveProperty.

:Ana a :Femeie.

se va deduce:

:Ana a owl:NamedIndividual.

iar n baza faptului c Ana este un individ


:Ana :CunoastePe :Ana.

Proprietatea de tranzitivitate a unei relaii (owl:TransitiveProperty)


Aceasta e o alt submulime a lui owl:ObjectProperty, prin care afirmm c o
relaie care nlnuie mai muli indivizi e aplicabil ntre primul i ultimul individ din lan .
Din urmtorul exemplu
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:eFrateCu a owl:TransitiveProperty. :Alin
:eFrateCu :Andrei.

:Andrei :eFrateCu :Mihai.

se va deduce:
:Alin :eFrateCu :Mihai.

Conceptul de lan de proprieti (owl:propertyChainAxiom).


Aceasta e o generalizare a tranzitivitii, cnd lanul de rela ii poate con ine rela ii
diversificate i dorim s indicm semnificaia pe care o poate produce o combina ie de
relaii nlnuite. De exemplu, o relaie de fiu nlnuit cu una de frate trebuie interpretat
ca o relaie de nepot ntre primul i ultimul individ din lan:
@prefix : <http://expl.ro#>.

@prefix owl: <http://www.w3.org/2002/07/owl#>. :eNepotulLui


owl:propertyChainAxiom (:eFiulLui :eFrateCu). :Alin :eFiulLui
:Andrei.

:Andrei :eFrateCu :Mihai.

se va deduce:

:Alin :eNepotulLui :Mihai.

Relaiile de echivalare a indivizilor (owl:sameAs), a claselor


(owl:equivalentClass), a proprietilor (owl:equivalentProperty).
Aceste concepte ne scutesc de a folosi reciprocitatea relaiilor rdfs:subClassOf i
rdfs:subPropertyOf pentru a declara echivalena. Principalele utilizri sunt:
Atunci cnd sunt direct afirmate, echivalenele faciliteaz maparea ntre baze de
cunotine din organizaii diferite sau alinierea unei baze de cuno tin e la un
vocabular standard / controlat, fr a substitui conceptele originale;
n alte situaii echivalenele sunt deduse, nu afirmate direct, prin reguli menite s
surprind situaiile n care un acelai concept are multiple identiti;
n sfrit, echivalenele mai sunt folosite la detectarea contradiciilor (cnd un set
de reguli concluzioneaz simultan c dou concepte sunt identice i distincte). Din
urmtorul exemplu:
@prefix : <http://expl.ro#>.
@prefix alt: <http://altdomeniu.ro#>.

Web Semantic

63

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.


@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana :este :Femeie.
alt:Ann a alt:Woman. :Ana
owl:sameAs alt:Ann.
:Femeie owl:equivalentClass alt:Woman. :este
owl:equivalentProperty rdf:type.

Se vor deduce:

:Ana :este alt:Woman. :Ana


a alt:Woman. :Ana a
:Femeie.

alt:Ann :este alt:Woman.


alt:Ann :este :Femeie.
alt:Ann a :Femeie.

Aadar, echivalena produce dublarea afirmaiilor pentru fiecare pereche de


concepte echivalente gsite. Aceast tehnic poate duce la expandarea puternic a bazei de
cunotine i poate afecta grav performana interogrilor. Din pcate numeroase produse
demo sau gratuite se bazeaz pe ea. Produsele comerciale ncearc s rezolve problema prin
mecanisme optimizate, de exemplu ntreinerea unui index de echivalen e pe baza cruia se
genereaz afirmaiile echivalente doar la momentul interogrii, apoi sunt terse (dup ce nu
mai e nevoie de ele).
Relaiile de distincie ntre indivizi (owl:differentFrom), ntre clase
(owl:disjointWith, owl:complementOf), ntre proprieti (owl:propertyDisjointWith).
Aceste proprieti sunt menite s introduc negaia implicit n afirma ii i s
genereze prin regulile lor contradicii, cnd apar n aceeai baz de cuno tin e alturi de
cele de echivalare. Ca i echivalenele, distinciile pot fi afirmate direct (de exemplu pentru
a realiza o contra-mapare, afirmarea clar a faptului c dou ontologii ce par s con in
aceleai lucruri nu vor s fie echivalate) sau pot fi deduse din alte reguli. Se poate afirma
distincia ntre indivizi (owl:differentFrom), faptul c dou clase nu pot avea elemente
comune (owl:disjointWith) i faptul c dou proprieti nu au voie s apar ntre acela i
subiect i obiect (owl:propertyDisjointWith).
Putem afirma direct o serie de contradicii:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana owl:sameAs :Ann. :Ana
owl:differentFrom :Ann.
:Femeie owl:equivalentClass :Barbat. :Femeie
owl:disjointClass :Barbat.
:areCopilPe owl:propertyDisjointWith :esteCopilulLui. :Maria
:areCopilPe :Andrei.

:Maria :esteCopilulLui :Andrei.

i se vor deduce trei contradicii. Contradicia poate s ia diverse forme, variate


de la un sistem la altul i uneori configurabile prin reguli personalizate (care nu folosesc
concepte standard, ci doar structuri IFTHEN). Moduri de semnalare a contradiciilor

64

Robert Andrei Buchmann

pot fi: semnalarea unei erori, listarea conceptelor contradictorii sau pur i simplu
clasificarea rezultatelor cu ajutorul clasei sau relaiei absurde, care apoi pot fi interogate cu
SPARQL pentru a obine o list a contradiciilor. Exemple de astfel de concluzii ar putea fi:
:Ana a owl:Nothing. :Ann
a owl:Nothing.
:Femeie rdfs:subClassOf owl:Nothing. :Barbat
rdfs:subClassOf owl:Nothing.

:areCopilPe rdfs:subPropertyOf owl:bottomObjectProperty. :esteCopilulLui


rdfs:subPropertyOf owl:bottomObjectProperty.

Evident, n general nu are sens s afirmm direct aceste contradicii. De obicei


mcar una din afirmaiile contradictorii e produs dintr-o succesiune de deducii.

2.7.2 Deducerea distinciilor


n continuare vom sugera o serie de ci pe care se poate deduce distinc ia
indivizilor. n practic distincia trebuie dedus fie pentru a verifica dac exist discrepan e
logice ntre concepte din baze de cunotine diferite (cu prefixe diferite), fie pentru a
verifica dac o anumit baze de cunotine nu este cumva contradictorie cu ea nsi.
Deducerea distinciei dintre indivizi din disjuncie (owl:disjointWith). Din
afirmaiile:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana a :Femeie. :Marian
a :Barbat.

:Femeie owl:disjointWith :Barbat.

se va deduce:
:Ana owl:differentFrom :Marian.

Deducerea disjunciei dintre clase (i a distinciei dintre indivizi) din


complement (owl:complementOf). Din afirmaiile:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana a :Femeie.
_:x owl:complementOf :Femeie. :Marian
a _:x.

se va deduce:

_:x owl:disjointWith :Femeie.

i de aici:

:Ana owl:differentFrom :Marian.

Deducerea distinciei dintre indivizi,


(owl:propertyDisjointWith). Din afirmaiile:
@prefix : <http://expl.ro#>.

@prefix owl: <http://www.w3.org/2002/07/owl#>. :Ana


:eMamaLui :Alin.

:Maria :eCopilulLui :Alin.

din

proprieti

incompatibile

Web Semantic

65

:eMamaLui owl:propertyDisjointWith :eCopilulLui.

se va deduce:
:Ana owl:differentFrom :Maria.

Idem se poate deduce distincia obiectelor, dac subiectul e fix i obiectele variaz.
Deducerea disjunciei claselor sau proprietilor din list de clase disjuncte
(owl:AllDisjointClasses), respectiv list de proprieti incompatibile
(owl:AllDisjointProperties). Din afirmaiile:
@prefix : <http://expl.ro#>.

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.


@prefix owl: <http://www.w3.org/2002/07/owl#>. :StudentGrupa1
owl:members (:Ana :Ann :Andrei). :StudentGrupa1 a
owl:AllDifferent.
:Gen owl:members (:Femeie :Barbat). :Gen a
owl:AllDisjointClasses.
:RelatieRudenie owl:members (:eMamaLui :eCopilulLui).
:RelatieRudenie a owl:AllDisjointProperties.

se vor deduce (pe seturi):

:StudentGrupa1 a owl:Class.
:Ana a :StudentGrupa1, owl:NamedIndividual.
:Ann a :StudentGrupa1, owl:NamedIndividual.
:Andrei a :StudentGrupa1, owl:NamedIndividual.
:Ana owl:differentFrom :Ann, :Andrei.
:Ann owl:differentFrom :Ana, :Andrei.
:Andrei owl:differentFrom :Ann, :Ana.
:Gen a owl:Class.
:Femeie a :Gen, owl:Class.
:Barbat a :Gen, owl:Class.
:Femeie owl:disjointWith :Barbat.
:RelatieRudenie a owl:Class.
:eMamaLui a :RelatieRudenie, rdf:Property.
:eCopilulLui a :RelatieRudenie, rdf:Property.
:eMamaLui owl:propertyDisjointWith :eCopilulLui.

(din prima list)

(din a doua list)

(din a treia list)

Deducerea disjunciei (dar i a unor relaii de incluziune) din reuniune de


clase disjuncte. Din afirmaia:
@prefix : <http://expl.ro#>.

@prefix owl: <http://www.w3.org/2002/07/owl#>. :Om


owl:disjointUnionOf (:Femeie :Barbat).

se va deduce:

:Femeie rdfs:subClassOf :Om. :Barbat


rdfs:subClassOf :Om. :Femeie
owl:disjointWith :Barbat.

Practic e vorba de o nou variant a lui owl:AllDisjointClasses n care avem i


posibilitatea de a crea o supraclas ce sunt nglobeze mulimile disjuncte.

2.7.3 Deducerea echivalenelor

Deducerea echivalenei indivizilor din proprietatea funcional


(owl:FunctionalProperty).

66

Robert Andrei Buchmann

Proprietatea funcional se comport ca o funcie matematic: oricrui subiect i


poate aloca un singur obiect. Dac i aloc mai multe, se va deduce c acestea sunt
identiti multiple ale unui acelai obiect.
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Alin :areMamaPe :Ana. :Alin :areMamaPe :Aneta.

:areMamaPe a owl:FunctionalProperty.

se va deduce:
:Ana owl:sameAs :Aneta.

O persoan nu poate avea dou mame naturale, deci cele dou mame trebuie s fie
una i aceeai.
Dac ajungem pe alte ci i la concluzia c :Ana i :Aneta nu au cum s fie aceeai
persoan, ajungem la contradicie. Acest aspect e valabil pentru toate exemplele ce
urmeaz: regulile prezentate vor detecta echivalene atta timp ct nu exist alte reguli care
s detecteze distincia ntre aceiai indivizi. Altfel se vor produce contradic ii. Detectarea
automat a echivalenelor poate automatiza maparea semantic ntre baze de cuno tin e din
surse diferite, genernd automat echivalene.
Deducerea echivalenei indivizilor
din proprietatea invers funcional
(owl:inverseFunctionalProperty).
Aceasta se comport invers fa de cea funcional: pe orice obiect l poate pune n
relaie cu un singur subiect. Dac apar mai multe subiecte, se va deduce echivalena lor.
@prefix : <http://expl.ro#>.
@prefix alt: <http://altdomeniu.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana :areEmail <mailto:ana@expl.ro>. alt:Aneta
:areEmail <mailto:ana@expl.ro>. :areEmail a
owl:InverseFunctionalProperty.

se va deduce:

:Ana owl:sameAs alt:Aneta.

(ne bazm pe prezumia c dou persoane nu pot avea acelai e-mail, deci dac
apare o astfel de situaie e vorba de aceeai persoan)
Deducerea echivalenei indivizilor din setul de proprieti cheie (owl:hasKey)
Aceasta este o versiune mai precis a proprietii funcionale, sub dou aspecte:
se aplic la o combinaie de mai multe proprieti, care nu vor putea lua aceea i
combinaie de valori (obiecte) pentru dou subiecte din aceeai clas;
efectul e limitat doar la membrii unei clase.
Aadar, putem considera c e o transpunere a noiunii de cheie primar mutipl din
bazele de date relaionale! Din afirmaiile:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Ana :NrMatricol 100; :studentaLa :ASE, a :Student.
:Aneta :NrMatricol 100; studentaLa :ASE; a :Student.
:Student owl:hasKey (:NrMatricol :studentaLa).

se va deduce:

Web Semantic

67

:Ana owl:sameAs :Aneta.

Deducerea
echivalenei
indivizilor
din
cardinalitatea
maxim
(owl:maxCardinality) aplicat ca restricie (owl:Restriction) asupra unei propriet i
(owl:onProperty):
Prin cardinalitate putem impune de cte ori poate fi implicat un anumit subiect
ntr-o anumit relaie. Dac numrul de relaii depete limita pe care o impunem,
obiectele suplimentare trebuie s fie echivalente cu unele dintre celelalte. Din afirmaiile:
@prefix : <http://expl.ro#>.
@prefix alt: <http://altdomeniu.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:CopilCuUnParinte owl:onProperty :areParintePe; owl:maxCardinality 1 .
:Alin a :CopilCuUnParinte; areParintePe :Ana, alt:Maria.

se va deduce:
:CopilCuUnParinte a owl:Restriction,
owl:Class. :Ana owl:sameAs alt:Maria.

Deoarece n prima faz am afirmat c Alin face parte din clasa celor cu un parinte
(mai exact, care au relaia :areParintePe cu un singur obiect), iar apoi am indicat doi prin i,
s-a dedus c acetia trebuie s fie una i aceeai persoan.
Observai modul de creare a clasei CopilCuUnParinte. Aceasta e de un tip
particular, owl:Restriction care e mulimea acelor clase ce sunt create prin astfel de
mecanisme de restricionare a relaiilor (deci orice owl:Restriction e i clas). Dac
proprietatea ce sufer restricia are deja un domeniu declarat, clasa generat prin restric ie
va fi o submulime a acesteia. Din urmtorul set:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:areParintePe rdfs:domain Copil.
:CopilCuUnParinte owl:onProperty :areParintePe; owl:maxCardinality 1 .

se va deduce, pe lng echivalena amintit, i c:


:CopilCuUnParinte rdfs:subClassOf :Copil.

Cu alte cuvinte, mulimea copiilor cu un singur printe e o submulime a mulimii


copiilor, obinut prin restricionarea numrului de utilizri.
Deducerea echivalenei indivizilor din cardinalitate mbinat cu distincii
cunoscute (owl:cardinality):
Exemplul e similar celui de mai sus, dar cardinalitatea e mai mare dect 1, deci
avem nevoie i de o serie de distincii pentru a putea concluziona echivalena:
@prefix : <http://expl.ro#>.

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix


owl: <http://www.w3.org/2002/07/owl#>. :ParinteCuDoiCopii
owl:onProperty :AreCopilPe; owl:cardinality 2 . :Alin a
:ParinteCuDoiCopii, :AreCopilPe :Ana, Andreea, Mihai. :Mihai
owl:differentFrom :Ana, :Andreea.

Diferenierea lui Mihai fa de restul copiilor lui Alin ne permite s concluzionm


care copii ar putea fi echivaleni pentru a menine corectitudinea afirmaiei c Alin are 2
copii:
:ParinteCuDoiCopii a owl:Restriction.

68

Robert Andrei Buchmann


:Ana owl:sameAs :Andreea.

Aici nu am mai folosit owl:maxCardinality ci cardinalitatea precis: Alin are exact


doi copii distinci. Atenie ns, aceasta nu nseamn c baza de cuno tine trebuie s
conin doi copii pentru Alin! n numele principiului Open World, o baz de cunotine nu e
niciodat complet, pot apare n viitor noi afirmaii, deci se tolereaz absen a afirma iilor
despre copii lui Alin. Nu se tolereaz ns depirea acestui numr (mai exact, se ncearc
interpretarea depirii prin astfel de echivalene, dac nu exist probe contrarii care s
afirme distincia).
Deducerea echivalenei indivizilor din list de elemente nedistincte
(owl:oneOf) mbinat cu distincii cunoscute:
@prefix : <http://expl.ro#>.
@prefix alt: <http://altdomeniu.ro#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :LunaIarna
owl:oneOf (:Decembrie :Ianuarie :Februarie).

alt:Gerar a :LunaIarna; owl:differentFrom :Februarie, :Decembrie.

se va deduce:
alt:Gerar owl:sameAs :Ianuarie.

Deducia e explicabil prin caracterul nchis al listei. Enumerarea indic faptul c


pot fi maxim 3 elemente n clasa :LunaIarna, iar dac apare un al patrulea, trebuie s fie
echivalent cu unul din ceilali (altfel ajungem la contradicie).

2.7.4 Deducerea poziionrii n taxonomie


ncadrm n aceast categorie regulile care contribuie la clasificarea indivizilor
(distribuirea lor pe clase), mecanism pe care l-am demonstrat deja la conceptele:
rdfs:domain i rdfs:range, care detecteaz clasa unui individ dup rela iile la care
particip;
rdfs:subClassOf, care asigur propagarea apartenenei unui individ n sus pe
ierarhia de clase.
OWL vine s rafineze criteriile prin care are loc aceast distribuirea a indivizilor
pe clase: sunt luate n considerare numrul de relaii ale unui individ, cu cine are loc rela ia,
ce relaii exist ntre clasa curent alocat i alte clase existente n arbore etc.
Enumerarea elementelor unei mulimi (owl:oneOf, owl:distinctMembers)
O prim categorie, ce lrgete posibilitile de descriere a taxonomiei de clase,
sunt operaiile cu mulimi. Cea mai simpl este enumerarea direct a indivizilor unei
mulimi, ca o list ordonat i nchis (demonstrat deja i la deducerea echivalen elor).
Avem dou moduri de a realiza acest lucru:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :EchipaFotbal
owl:oneOf (:Steaua :Dinamo :Rapid :CainiiRosii).

sau
:EchipaFotbal owl:distinctMembers (:Steaua :Dinamo :Rapid).

Diferena ntre owl:oneOf i owl:distinctMembers este c n al doilea caz se


garanteaz distincia ntre indivizi (se deduc automat distincii ntre fiecare doi membri,

Web Semantic

69

dup cum s-a artat deja n seciunea dedicat deducerii distinciilor) n timp ce primul caz
las loc posibilitii ca unele elemente s fie acelai element cu mai mul i identificatori.
Cele dou afirmaii vor produce:
:Steaua a :EchipaFotbal.
:Dinamo a :EchipaFotbal.
:Rapid a :EchipaFotbal.
:CainiiRosii a :EchipaFotbal.

(doar din owl:oneOf)

A doua enumerare produce i distinciile de care aminteam pentru fiecare pereche


de indivizi.
Intersecia i reuniunea (owl:intersectionOf, owl:unionOf)
n capitolul dedicat conceptelor RDF (seciunea privind maparea) am artat cum se
pot aduga la taxonomie mulimi-reuniune i mulimi-intersecie prin folosirea lui
rdfs:subClassOf. OWL ofer o metod mai direct de a preciza acest lucru:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>. :ScriitorClujean
owl:intersectionOf (:Scriitor :Clujean).
:Om owl:unionOf (:Barbat :Femeie). :Andrei
a :ScriitorClujean, :Barbat.

se vor deduce:

:Scriitor rdfs:subClassOf :ScriitorClujean.


:Clujean rdfs:subClassOf :ScriitorClujean.

(din reuniune)

:Barbat rdfs:subClassOf :Om.


:Femeie rdfs:subClassOf :Om.

(din intersecie)

iar din acestea deduciile discutate deja produc mai departe:


:Andrei a :Scriitor, :Clujean, :Om

(plus declaraiile de individ, clas etc.)


Complementul i diferena (owl:complementOf)
Complementul unei mulimi se folosete cu precdere pentru a detecta contradicii,
ntr-o manier similar cu disjuncia, dup cum s-a demonstrat deja. Complementul unei
clase e format din toate acele concepte ale lui owl:Thing care nu apar in clasei respective.
nceptorii ar putea fi tentai s considere corect afirmaia de mai jos, considernd c cine
nu e femeie trebuie s fie brbat:
:Barbat owl:complementOf :Femeie.

n realitate complementul mulimii :Femeie e format din toate lucrurile din univers
care nu sunt femei, de exemplu o piatr. Pentru a defini corect mul imea Barbat pornind de
la Femeie, va trebui s afirmm:
:Barbat owl:intersectionOf (:Om _:X).
_:X complementOf :Femeie.

OWL nu ofer un concept aparte pentru operaia de diferen, ci se bazeaz tocmai


pe acest ablon ce mbin complementul cu intersecia.
n plus, un motor inferenial complet ar trebui s poat deduce toate legile
matematice legate de operaii cu mulimi, dintre care amintim:
complementul reuniunii a dou mulimi e intersecia complementelor celor dou
mulimi:
:Om owl:unionOf (:Barbat :Femeie).

70

Robert Andrei Buchmann


_:complOm owl:complementOf :Om

se poate deduce:
_:x owl:complementOf :Barbat.
_:y owl:complementOf :Femeie.
_:complOm owl:intersectionOf (_:x _:y).

complementul interseciei a dou mulimi e reuniunea complementelor celor dou


mulimi:
:ScriitorClujean owl:intersectionOf (:Scriitor :Clujean).
_:complSC owl:complementOf :ScriitorClujean.

se poate deduce:
_:x owl:complementOf :Scriitor.
_:y owl:complementOf :Clujean.
_:complSC owl:unionOf (_:x _:y).

complementul submulimii unei mulimi e submulimea complementului acelei


mulimi:
:Barbat rdfs:subClassOf :Om.
_:complBarbat owl:complementOf :Barbat.

se poate deduce:
_:x owl:complementOf :Om.
_:x rdfs:subClassOf _:complBarbat.

Necesitatea i suficiena (owl:Restriction, owl:onProperty, owl:hasValue,


owl:allValuesFrom, owl:someValuesFrom, owl:hasSelf)
Un individ poate fi alocat unei clase n funcie de relaiile la care particip (vezi
RDF Schema) dar i n funcie de indivizii cu care particip la acea rela ie, sau clasele
crora aceti indivizi aparin. Demonstrm mai nti deduciile posibile dintr-o rela ie cu un
anumit individ clar specificat:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:SatelitAlPamantului owl:onProperty :Orbiteaza; owl:hasValue :Pamantul.

Am afirmat c mulimea :SatelitAlPamantului e format din toate acele lucruri X


care au relaia :Orbiteaza cu :Pamantul (care apar n afirmaii de forma X :Orbiteaza
:Pamantul). Aceasta permite dou tipuri de deducii:
dac se mai tie c
:Luna :Orbiteaza :Pamantul.

se poate deduce:

:Luna a :SatelitAlPamantului.

n schimb dac se tie c


:Luna a :SatelitAlPamantului.

se deduce:
:Luna :Orbiteaza :Pamantul.

Deci avem o deducie posibil n ambele sensuri apartenena la o clas poate fi


produs de existena unei relaii cu un anumit individ dar i invers, rela ia cu un individ
dedus din apartenena la o clas.
n plus, din ambele situaii se mai deduce:
:SatelitAlPamantului a owl:Restriction, owl:Class.

Cu alte cuvinte, avem de a face cu o clas-restricie, no iune explicat deja n


exemplele cu cardinalitatea: o clas restricie este detectat automat din utilizarea lui
owl:onProperty, este format din toi indivizii ce respect restric ia i este o submul ime a
domeniului proprietii ce sufer restricia. De exemplu, :Orbiteaza ar putea avea ca

Web Semantic

71

domeniu clasa :Satelit, ceea ce ar face s se deduc urmtoarea afirmaie, asigurnd astfel i
alipirea restriciei la taxonomia existent de clase:
:SatelitAlPamantului rdfs:subClassOf :Satelit.

n continuare generalizm puin aceast situaie:


@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Dramaturg owl:onProperty :aScris; owl:someValuesFrom :PiesaTeatru.
:Alin :aScris :VenireaPrimaverii.
:VenireaPrimaverii a :PiesaTeatru.

Am afirmat c oricine scrie o pies de teatru poate fi considerat dramaturg (dar c


poate s scrie i altceva), apoi am artat c Alin a scris o pies de teatru. Se va deduce:
:Alin a :Dramaturg.
:Dramaturg a owl:Restriction, owl:Class.

Avem de a face cu un mecanism de deducere a tipului subiectului din tipul


obiectelor cu care are relaii! Dac adugm la cele de mai sus:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:aScris rdfs:domain :Scriitor; rdfs:range :Opera.

putem deduce urmtoarele, poziionnd astfel n taxonomie cele dou clase implicate n
restricie:
:Dramaturg rdfs:subClassOf :Scriitor. :PiesaTeatru
rdfs:subClassOf :Opera.

Avem i posibilitatea de a deduce tipul obiectului din tipul subiectelor cu care are
relaii:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Vegetarian owl:onProperty :Mananca; owl:allValuesFrom :MancareVegetariana.
:Alin a :Vegetarian; :Mananca :Salata.

Am afirmat c poi fi vegetarian doar dac mnnci NUMAI elemente ale mulimii
:MancareVegetariana, apoi am indicat c Alin mnnc aa ceva. Se va deduce:
:Salata a :MancareVegetariana. :Vegetarian
a owl:Restriction, owl:Class.

Din nou, clasa-restricie e submulime al domeniului, iar clasa-obiect e


submulime a codomeniului relaiei ce sufer restricia:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
:Mananca rdfs:domain :Fiinta; rdfs:range :Mancare.

Putem deduce:

:Vegetarian rdfs:subClassOf :Fiinta. :MancareVegetariana


rdfs:subClassOf :Mancare.

Urmtorul exemplu este un caz particular al restriciei owl:hasValue i se aplic


indivizilor care au proprieti reflexive (relaii cu ei nii).
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:PersoanaSiguraPeSine owl:onProperty :CunoastePe; owl:hasSelf true.

72

Robert Andrei Buchmann

Am afirmat c oricine se cunoate pe sine aparine clasei :PersoanaSiguraPeSine i


oricine aparine acestei clase se cunoate pe sine, deducia funcioneaz n ambele sensuri,
ca n cazul lui owl:hasValue. Dac pornim de la
:Alin :CunoastePe :Alin.

obinem
:Alin a :PersoanaSiguraPeSine.

Dac pornim de la
:Alin a :PersoanaSiguraPeSine.

obinem
:Alin :CunoastePe :Alin.

n ambele cazuri mai obinem:


:PersoanaSiguraPeSine a owl:Restriction, owl:Class.

Ca i n cazurile precedente, :PersoanaSiguraPeSine devine submul ime a


domeniului proprietii, dac acesta a fost stabilit deja.
Cardinalitatea (owl:cardinality, owl:minCardinality, owl:maxCardinality,
owl:qualifiedCardinality, owl:minQualifiedCardinality, owl:maxQualifiedCardinality,
owl:onClass)
Am artat n capitolul dedicat deducerii echivalenelor cteva exemple de restric ii prin
cardinalitate. Impunnd o limit superioar numrului permis de rela ii pe care le poate avea un
acelai subiect, am putut detecta obiecte echivalente la depirea numrului de rela ii (sau
contradicii, dac echivalenele se contrazic cu distincii garantate de alte reguli).

Cardinalitile pot fi folosite i pentru a deduce apartenena la o clas, dac n loc


s folosim limitarea superioar, precizm valori minime pentru numrul de rela ii al
aceluiai subiect. Orice subiect care va acumula n timp acel numr de rela ii va fi alocat
clasei-restricie. Presupunem c avem:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Parinte owl:onProperty :areCopilPe; owl:minCardinality 1 .
:Alin :areCopilPe :Andrei.

Am afirmat c oricine are mcar un copil se poate numi printe, apoi am fcut o
astfel de afirmaie despre Alin, deci obinem concluzia:
:Alin a :Parinte.
:Parinte a owl:Restriction, owl:Class.

Dac :areCopilPe ar avea i un domeniu, :Parinte ar deveni submulime a acestuia.


Dac folosim cardinalitate mai mare de 1 avem nevoie i de unele distincii pentru
a putea trage concluzia:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix
owl: <http://www.w3.org/2002/07/owl#>. :ParinteCuDoiCopii
owl:onProperty :areCopilPe; owl:cardinality 2. :Alin :areCopilPe :Ana,
:Maria.

Din acest exemplu nu se poate deduce o concluzie pn nu adugm:


:Ana owl:differentFrom :Maria.

n acest moment exist garania c :Alin are doi copii distinci i obinem:
:Alin a :ParinteCuDoiCopii.

Deoarece am folosit cardinalitatea precis i nu pe cea minim, dac mai adugm


un copil distinct:
:Alin :areCopilPe :Andrei.

Web Semantic

73

:Andrei owl:differentFrom :Ana, :Maria.

obinem o contradicie.
n concluzie:
limitnd inferior numrul de relaii ale unui subiect (cu owl:minCardinality) putem
deduce apartenena subiectului la o clas;
limitnd superior numrul de relaii (cu owl:maxCardinality) putem deduce
echivalena indivizilor (dac are relaii cu mai mult de n obiecte, o parte din acele
obiecte trebuie s fie echivalente) sau contradicii (dac echivalen a respectiv e
contrazis de distincii derivate din alte reguli);
folosind cardinalitatea precis (owl:cardinality) putem obine oricare din aceste
efecte, n funcie de cum evolueaz numrul de relaii (dac e sub sau peste
cardinalitatea declarat).
La aceste construcii oferite de OWL 1, OWL 2 a adus o rafinare superioar, cu
ajutorul cardinalitii calificate. Aceasta e o combinaie ntre restric iile de cardinalitate i
cele de necesitate/suficien, cci constrnge simultan numrul de rela ii ale unui subiect i
obiectele cu care acel numr de relaii trebuie afirmate:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Parinte owl:onProperty :areCopilPe; owl:minCardinality 1.
:Bunic owl:onProperty :areCopilPe; owl:minQualifiedCardinality 1; owl:onClass
:Parinte. :areCopilPe rdfs:domain :Om.
:Ana :areCopilPe :Andrei. :Alin :areCopilPe :Ana.

Am afirmat c prinii sunt acei indivizi care au mcar o relaie :areCopilPe


(indiferent cu cine), iar bunicii sunt acei indivizi care au mcar o rela ie :areCopilPe cu un
individ din clasa prinilor. Prima e o restricie cu cardinalitate simpl, a doua are
cardinalitate calificat (dependent) de clasa :Parinte. Se deduce din prima regul
:Ana a :Parinte.

apoi din a doua:


:Alin a :Bunic.

i din a treia, includerea celor dou clase n taxonomie:


:Parinte a owl:Restriction; rdfs:subClassOf :Om. :Bunic
a owl:Restriction; rdfs:subClassOf :Parinte.

n mod similar, prin limitarea superioar a cardinalitii calificate se poate deduce


echivalena obiectelor. Pentru a diversifica puin exemplul fa de precedentele,
presupunem c e vorba de dou baze de cunotine diferite, cu prefixe diferite, dar care
conin informaii despre o aceeai persoan:
n prima baz de cunotine avem:
@prefix : <http://expl.ro#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
<> owl:imports <http://altdomeniu.ro/cunostinte2.owl>.
:Om owl:onProperty :esteCopilulLui; owl:maxQualifiedCardinality 1; owl:onClass :Femeie.
:Alin :esteCopilulLui :Maria; :areTelefonul 01234567; a :Om.
:Maria :lucreazaLa :FirmaABC.
:areTelefonul a owl:InverseFunctionalProperty.

Se observ c aceast baz de cunotine o import pe urmtoarea. Creatorii celei


de-a doua au pregtit posibilul import cu o serie de mapri (echivalene menite s conecteze

74

Robert Andrei Buchmann

afirmaiile din cele dou surse n momentul n care intr n contact, prin import, interogri
federative sau alte ci):
@prefix alt: <http://altdomeniu.ro#>.
alt:Mary alt:parentOf alt:Aly; alt:worksAt :CompanyX; a alt:Woman.
alt:Aly rdf:type alt:Human; alt:hasPhoneNo 01234567 .
:areTelefonul owl:equivalentProperty :hasPhoneNo.
:lucreazaLa owl:equivalentProperty alt:worksAt. :Femeie
owl:equivalentClass alt:Woman. :esteCopilulLui
owl:inverseOf alt:parentOf.

n urma importului, prin maparea proprietii de a avea numr de telefon, se va


obine:
:Alin :areTelefonul 01234567 .
alt:Aly areTelefonul 01234567 .

Coroborat cu faptul c numrul de telefon e o proprietate invers funcional, se


deduce c e vorba de aceeai persoan:
:Alin owl:sameAs alt:Aly.

Aceasta are mai departe consecina:


:Alin :esteCopilulLui :Maria.
alt:Mary alt:parentOf :Alin.

Coroborat cu declararea faptului c aceste dou relaii sunt inverse una fa de


cealalt, obinem:
:Alin :esteCopilulLui :Maria, alt:Mary.

Coroborat cu echivalena claselor :Femeie i alt:Woman, obinem:


:Maria a :Femeie.
alt:Mary a :Femeie.

Coroborat cu faptul c :Alin a :Om i membri clasei :Om pot fi copiii unei singure
femei, se deduce:
:Maria owl:sameAs alt:Mary.

Iat un exemplu de echivalen descoperit, ce completeaz echivalen ele declarate


direct n scopul maprii. Echivalena ne permite mai departe s coroborm urmtoarele:
:Maria :lucreazaLa :firmaABC; alt:worksAt :CompanyX.

Dar cum cele dou relaii de a lucra sunt i ele declarate echivalente, avem de fapt:
:Maria :lucreazaLa :firmaABC, :CompanyX.

Iat cum am descoperit faptul c Maria lucreaz n dou locuri, pornind de la


informaii din dou organizaii diferite i de la o mapare prealabil, ntre cele dou
organizaii, a conceptelor de Femeie, numr de telefon, relaie de printe i proprietate de a
lucra. Acest exemplu evideniaz importana detectrii echivalenelor i a maprilor ntre
taxonomii pentru descoperirea de conexiuni ntre concepte create izolat n prim faz.
Pentru a obine aceste beneficii, organizaiile trebuie s fie dispuse s i pun n comun
cunotinele deinute.

2.8 Accesarea cunotinelor la distan


Cunotinele pot fi extrase n Web prin multiple metode. Cele mai populare sunt
interogrile SPARQL i accesul prin protocolul HTTP la servere ce ofer interfe e de tip
serviciu Web. Unele servere ofer i posibilitatea mbinrii celor dou metode, pe dou ci:
Accept interogri SPARQL i operaii HTTP la interfee (adrese) diferite;

Web Semantic

75

La aceeai interfa permit mbinarea unei operaii HTTP cu o interogare SPARQL


(ataat ca variabil GET sau POST).
Paradigma Linked Data se bazeaz pe accesarea prin HTTP a identificatorilor de
concepte, la care serverul s rspund fie cu un set de cunotin e despre acel concept
(identificatori cu foldere fictive), fie cu toat baza de cuno tine din care clientul s- i
selecteze informaia relevant (identificatori cu ancore). Filtrarea informa iei relevante se
poate realiza cu SPARQL fie la nivelul clientului, fie la al serverului. Aadar sunt posibile
diferite scenarii de combinare ntre interogri i accesul la distan, n funcie de ce faciliti
ofer serverul.
S-au consacrat dou protocoale bazate pe HTTP prin care are loc accesul la
cunotine oferite de servicii Web:
Protocolul SPARQL27;
Protocolul Graph Store28.

Ambele se bazeaz pe metodele cererilor HTTP:


GET pentru a accesa cunotine, cu posibilitatea de a ataa la adresa accesat
variabile care s indice mai precis ce anume dorim s accesm;
POST pentru a trimite cunotine;
PUT pentru a nlocui cunotine existente pe server cu unele
noi; DELETE pentru a terge cunotine de pe server;
HEAD pentru a testa dac un server de cunotine rspunde;
OPTIONS pentru a verifica ce faciliti ofer serverul de cuno tin e;
PATCH pentru a trimite o interogare capabil s modifice cunotine.
Dei limbajul SPARQL este unul uniform implementat, nu acelai lucru se poate
spune despre aceste protocoale. Pe servere diferite se accept operaii HTTP diferite, deci
nu e obligatoriu ca toate aceste metode s fie oferite de un serviciu. Spre exemplu,
majoritatea implementrilor protocolului SPARQL permit doar operaia GET, prin care se
pot citi informaii, cu posibiliatea de a ataa orice interogare SPARQL la adresa accesat:
http://serviciu.com/cunostinte?query=..

Operaia POST este una de adugare de cunotine, iar PUT una de nlocuire a
cunotinelor existente (nlocuirea unui graf/context). Cunotinele trebuie transmise ca
upload de fiier sau prin inserarea coninutului complet al unui fi ier n corpul cererii
HTTP. Dac sunt permise, ambele operaii pot preciza contextul n care s aib loc
modificarea, tot printr-o variabil ataat la adres:
http://serviciu.com/cunostinte?context=..
http://serviciu.com/cunostinte/rdf-graphs/service?graph=..

- pentru protocolul SPARQL


- pentru protocolul Graph Store.

Operaia DELETE este i ea suportat de ambele protocoale, pentru a terge


cunotine dintr-un context, fr a transmite vreo interogare.
Operaia HEAD e menit s testeze dac un serviciu e accesibil, deci nu se
transmite i nu se primete nimic altceva dect antetul HTTP.
Operaia OPTIONS e menit s obin o descriere a capabilitilor oferite de un
serviciu, precum versiunea SPARQL suportat, lista de contexte pe care le conine,
27
28

http://www.w3.org/TR/rdf-sparql-protocol/
http://www.w3.org/TR/sparql11-http-rdf-update/

76

Robert Andrei Buchman

10Proiectarea sistemelor informatice

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