Interfata Web Xml Pentru Realizarea Si Administrarea Bazei de Date

INTERFATA WEB PENTRU REALIZAREA SI ADMINISTRAREA DE BAZE DE DATE XML

CUPRINS

CAPITOLUL I

1.1.Interfete WEB

1.2. Baze de date

1.2.1. Introducere

1.2.2. Definirea bazei de date

1.2.3. Clasificarea sistemelor de baze de date

1.2.3.1. Clasificare după modelul de date

1.2.3.2. Clasificare după numărul de utilizatori

1.2.3.3. Clasificare după numărul de stații

1.2.4. Componentele unui sistem de baze de date

1.2.4.1. Hardware

1.2.4.2. Software

1.2.4.3. Utilizatorii

1.2.4.4. Date persistente

1.2.5. Arhitectura internă a sistemlor de baze de date

1.2.6. Baze de date XML

1.2.6.1. Clasificare documente XML

1.2.6.2. Baze de date cu suport XML (XML-enabled)

1.2.6.3.Baze de date XML native (NXD-native XML Database)

1.3.Prezentarea temei și descrierea aplicației

1.3.1.Prezentarea temei

1.3.2.Descrierea aplicației

CAPITOLUL II

2.1.XML

2.2.Aplicații XML

2.3.Reguli ale limbajului XML

2.3.1.Regulile de sintaxă XML

2.3.2.Structura unui document XML

2.3.3.DTD.

2.3.4.Scheme XML

2.3.5.Tipuri de date predefinite utilizate în schemele XML

2.3.6.CodeIgniter

2.3.6.1. URL-uri CodeIgniter

2.3.6.2. Controller

2.3.6.3.View

2.3.6.4.Model.

2.3.6.5.Helper

2.3.6.6.URL Helper

2.3.6.7.Plugin

2.3.6.8.Catching

CAPITOLUL III

3.1.Partea practică

3.2.Descriere funcționarea aplicației

3.2.1 Crearea bazelor de date

3.2.2.Afișare baze de date..

3.2.3. Creare tabele

3.2.4.Afișare tabele

3.2.5. Afișare conținut tabele

3.2.6.Adăugarea de date în tabel

CAPITOLUL IV4.1.Concluzii

4.2.Bibliografie

CAPITOLUL I

1.1.Interfete WEB

Primele funcționalități oferite de resursele Web (paginile Web) au fost în direcția interacțiunilor cu utilizatori umani, prin conținut textual și imagini.

Web centrat pe utilizator uman – modelul primar după care operează mare parte din Web în prezent – majoritatea cererilor Web sunt inițiate de utilizatori umani. Exemplu: urmărirea stării comenzilor

Web-ul bazat pe text nu suportă, însă, bine interacțiunea între programe (software), mai ales transferurile de volume mari de date. Serviciile Web constituie un răspuns la această problemă, permițând aplicațiilor Internet să interacționeze, să comunice și să se integreze într-o manieră eficientă.

Orice serviciu care este disponibil în Internet, folosește un sistem de transmitere de mesaje bazate pe XML și nu este legat de un anume sistem de operare sau limbaj de programare.

În plus, alte caracteristici care se doresc de la un serviciu Web:

– să se auto-descrie: un serviciu publicat ar trebui să aibă publicată și o interfață publică a sa. De obicei și interfața e descrisă în format XML (ex pentru servicii SOAP)

– să poată fi descoperit: să fie publicat, să existe mecanisme prin care aplicațiile interesate să poată descoperi serviciul și localiza interfața acestuia.

Dacă se continuă în direcția unor servicii care se pot ușor descoperi, care se auto-descriu și care respectă standardele bine stabilite, atunci se va putea ajunge la integrarea automată a aplicațiilor (care nu necesită intervenția unui programator / utilizator uman):

Există mai multe framework-uri propuse pentru servicii Web, care însă partajează un set comun de tehnologii: SOAP, WSDL, UDDI.

Arhitectura serviciilor Web:

 Din perspectiva rolurilor participanților

o Furnizorul serviciului – implementează serviciul și-l face disponibil în Internet

o Solicitantul serviciului – utilizează un serviciu Web, pe care-l solicită deschizând o conexiune și trimițând o cerere XML

o Registru de servicii

 Din perspectiva stivei de protocoale implicate în servicii Web

o Descoperire servicii: responsabil cu centralizarea serviciilor într-un registru comun, și furnizarea unei funcționalități de publicare / regăsire facile; via Universal Description, Discovery, and Integration (UDDI) (http://www.xmethods.net/)

o Descrierea serviciilor: responsabil cu descrierea interfețe publice a unui anumit serviciu; via Web Service Description Language (WSDL). WSDL = o gramatică XML pentru specificarea interfeței publice a unui serviciu Web.

o Transmiterea mesajelor în format XML: responsabil cu codarea mesajelor într-un format XML comun, astfel încât acestea să fie înțelese de furnizor și solicitant; via XML-RPC și SOAP.

o Transport: responsabil cu transportul mesajelor între aplicații; HTML, SMTP, FTP etc.

Etapele creării și consumării serviciilor Web:

1.Din perspectiva furnizorului serviciului:

oDezvoltarea nucleului funcțional al serviciului Web care va fi oferit;

oDezvoltarea unui wrapper (SOAP de exemplu) pentru nucleul serviciului;

oFurnizarea descrierii serviciului (un fișier WSDL pentru serviciile SOAP);

oDesfășurarea (deployment-ul) serviciului – poate consta în integrarea cu un server Web;

oPublicarea existenței și specificațiilor serviciului respectiv – de obicei, se publică într-un director UDDI global, public sau privat.

2.Din perspectiva clientului:

oIdentificarea și descoperirea serviciilor relevante aplicației client – prin căutarea în registre (directoare) de servicii publice/private;

oOdată identificat serviciul dorit, se localizează descrierea acestuia (dacă e serviciu SOAP, atunci există un document WSDL).;

oCrearea aplicației client;

oÎn final, executarea aplicației client pentru a invoca efectiv serviciul Web.

1.2. Baze de date

1.2.1. Introducere

În ultimii ani, dezvoltarea sistemelor de baze de date reprezintă unul dintre cele mai importante aspecte în domeniul tehnologiei informației, având un impact decisiv asupra modului de organizare și funcționare a numeroaselor instituții și servicii. Acestea sunt companiile de comunicație, intreprinderile de comerț, serviciile bancare, serviciile de transport, asigurările, universitățile etc. Acestea sunt dependente de funcționarea corectă și neîntreruptă a sistemelor de baze de date.

Sistemele de baze de date sunt o componentă importantă a vieții de zi cu zi în societatea modernă. Zilnic, majoritatea persoanelor desfășoară activități care implică interacțiunea cu o bază de date: depunerea sau extragerea unei sume de bani din bancă, rezervarea biletelor de tren sau de avion, căutarea unei cărți într-o bibliotecă computerizată, gestiunea angajaților dintr-o firmă, cumpărarea unor produse etc.

Bazele de date pot avea mărimi (număr de înregistrări) și complexități extrem de variate, de la câteva zeci de înregistrări (de exemplu, baza de date pentru o agendă de telefon a unei persoane) sau pot ajunge la milioane de înregistrări (de exemplu, baza de date pentru cărțile dintr-o bibliotecă, baza de date cu stocarea angajaților unei firme sau baza de date unde se păstrează informații despre situația studenților etc).

Marea majoritate a sistemelor de baze de date existente în momentul de față sunt relaționale și există un număr mare de astfel de sisteme comerciale care pot fi achiziționate și folosite pentru propriile dezvoltări. Modelul relațional de baze de date a fost introdus în anul 1970 de către E.F.Codd.

o Utilizatorii unei baze de date au posibilitatea să efectueze mai multe categorii de operații asupra datelor stocate aici:

• Introducerea de noi date (insert)

• Ștergerea unor date existente în baza de date(delete)

• Actualizarea datelor stocate(update)

• Interogarea bazei de date (query) pentru regăsirea anumitor

informații, selectate după un criteriu ales.

1.2.2. Definirea bazei de date

În sensul larg, o bază de date (database) este o colecție de date corelate din punct de vedere logic, care reflectă un anumit aspect al lumii reale și este destinat unui anumit grup de utilizatori.

În acest sens, bazele de date pot fi create și menținute manual (un exemplu ar fi fișele de evidență a cărților dintr-o bibliotecă, așa cum erau folosite cu ani în urmă) sau computerizat așa cum sunt majoritatea bazelor de date în momentul de față. O definiție într-un sens mai restrâns a unei baze de date este următoarea:

“O bază de date este o colecție de date centralizate, creată și menținută computerizat, în scopul prelucrării datelor în contextual unui set de aplicații. Prelucrarea datelor se referă la operațiile de introducere, ștergere, actualizare și interogare a datelor.”

Orice bază de date are următoarele proprietăți implicite:

• Baza de date este o colecție logică coerentă de date ce are cel puțin un înțeles

• Baza de date este destinată, construită și populată de date despre un domeniu bine precizat. Ea are un grup de utilizatori și se adresează unui anumit grup de aplicații

• O bază de date reprezintă câteva aspecte ale lumii reale creând orizontul propriu. Schimbările orizontului sunt reflectate în baza de date.

1.2.3. Clasificarea sistemelor de baze de date

Se pot lua în considerare mai multe criterii de clasificare ale sistemelor de baze de date.

1.2.3.1. Clasificare după modelul de date

Majoritatea sistemelor de baze de date actuale sunt realizate în modelul de date relațional sau în modelul de date orientat obiect. Dezvoltarea continuă a acestor modele a condus către o nouă categorie de baze de date numite obiect-relaționale, care combină caracteristicile modelului relațional cu caracteristicile modelului orientat obiect.

Modelul de date relațional (Relational Model) se bazează pe noțiunea de relație din matematică, care corespunde unei entități de același tip și are o reprezentare ușor de înțeles și de manipulat, ce constă dintr-un tabel bidimensional, compus din linii și coloane. Fiecare linie din tabel reprezintă o entitate și este compusă din mulțimea valorilor atributelor entității respective, fiecare atribut corespunzând unei coloane a tabelului.

Chiar dacă noțiunile de relație și tabel diferă în esența lor, relația reprezentând o mulțime de entități și tabelul o reprezentare vizuală a acesteia, cele două denumiri se pot folosi, în general pentru același scop. Pe baza acestor noțiuni, se poate sintetiza esența modelului relațional prin următoarele caracteristici:

• Datele sunt percepute de utilizatori ca tabeleOperatorii relaționali care pot fi folosiți pentru prelucrarea datelor generează un tabel rezultat din tabelele operanzi

• Asocierea dintre tabele se realizează prin intermediul egalității valorilor unor atribute comune, ceea ce permite rezolvarea oricărei interogări.

Pe lângă avantajul unui model de date precis și simplu, sistemele de baze de date relaționale mai beneficiază și de un limbaj de programare recunoscut și acceptat, limbajul SQL (Structured Query Language), pentru care au fost emise mai multe standarde de către Organizația Internațională de Standardizare (International Standardization Office-ISO). Majoritatea sistemelor de gestiune a bazelor de date relaționale actuale implementează

versiunea din anul 1992 a standardului pentru limbajul SQL, denumită SQL 92 sau SQL2.

Modelul de date orientat obiect (Object Model) este un concept unificator în știința calculatoarelor, fiind aplicabil în programare, în proiectarea hardware, a interfețelor, a bazelor de date etc. Sistemele de baze de date orientate obiect se bazează pe limbaje de programare orientate obiect cu capacități de persistență, în care datele sunt independente de timpul de viață al programelor care le creează sau accesează, prin memorare pe suport magnetic (disc).

Există și unele domenii, în special cele care manipulează tipuri de date complexe, cum ar fi proiectarea asistată de calculator, sisteme de informații geografice, medicină etc, în care modelul relațional s-a dovedit a fi insuficient de expresiv și cu performanțe de execuție reduse.

Caracteristicile importante ale modelului orientat obiect sunt: abstractizarea, moștenirea, încapsularea, modularizarea.

Din perspectiva realizării bazelor de date, o altă proprietate a modelului obiect, persistența, este aceea care asigurămemorarea transparentă pe suport magnetic a obiectelor care alcătuiesc o bază de date orientată obiect.

Modelul de date obiect-relațional (Object-Relational Model) reprezintă extinderea modelului relaționaructured Query Language), pentru care au fost emise mai multe standarde de către Organizația Internațională de Standardizare (International Standardization Office-ISO). Majoritatea sistemelor de gestiune a bazelor de date relaționale actuale implementează

versiunea din anul 1992 a standardului pentru limbajul SQL, denumită SQL 92 sau SQL2.

Modelul de date orientat obiect (Object Model) este un concept unificator în știința calculatoarelor, fiind aplicabil în programare, în proiectarea hardware, a interfețelor, a bazelor de date etc. Sistemele de baze de date orientate obiect se bazează pe limbaje de programare orientate obiect cu capacități de persistență, în care datele sunt independente de timpul de viață al programelor care le creează sau accesează, prin memorare pe suport magnetic (disc).

Există și unele domenii, în special cele care manipulează tipuri de date complexe, cum ar fi proiectarea asistată de calculator, sisteme de informații geografice, medicină etc, în care modelul relațional s-a dovedit a fi insuficient de expresiv și cu performanțe de execuție reduse.

Caracteristicile importante ale modelului orientat obiect sunt: abstractizarea, moștenirea, încapsularea, modularizarea.

Din perspectiva realizării bazelor de date, o altă proprietate a modelului obiect, persistența, este aceea care asigurămemorarea transparentă pe suport magnetic a obiectelor care alcătuiesc o bază de date orientată obiect.

Modelul de date obiect-relațional (Object-Relational Model) reprezintă extinderea modelului relațional cu caracteristici ale modelului obiect, extindere necesară pentru realizarea bazelor de date care definesc și prelucrează tipuri de date complexe.

În esență, modelul obiect-relațional păstrează structurarea datelor în relații (reprezentate ca tabele), dar adaugă posibilitatea definirii unor noi tipuri de date, pentru domeniile de valori ale atributelor. Tipurile de date definite de utilizator pot fi extinse prin mecanismul de moștenire și pentru fiecare tip sau subtip se pot defini metode pe care le pot executa obiectele de acel tip.

De asemenea mai sunt încă în funcțiune baze de date modele mai vechi: modelul ierarhic și modelul rețea.

În modelul de date ierarhic (Hierarchical Model) o bază de date se reprezintă printr-o structură ierarhică de înregistrări de date (records) conectate prin legături (links). Modelul ierarhic a fost primul model folosit pentru dezvoltatea bazelor de date.

Modelul de date rețea (Network Model) folosește o structură de graf pentru definirea schemei conceptuale a bazei de date; nodurile grafului sunt tipuri de entități (înregistrări, records), iar muchiile grafului reprezintă în mod explicit asocierile (legăturile,

links) dintre tipurile de entități.

La fel ca și modelul ierarhic, dezavantajul principal al modelului rețea este acela că fiecare interogare trebuie să fie prevazută încă din faza de proiectare, prin memorarea explicită a legăturilor între tipurile de entități.

1.2.3.2. Clasificare după numărul de utilizatori

Majoritatea sistemelor de baze de date sunt sisteme multiutilizator, adică permit accesul concurent (în acelați timp) a mai multor utilizatori la aceeași bază de date. Există și un număr redus de sisteme monoutilizator, adică suportă accesul doar al unui utilizator (la un moment dat).

1.2.3.3. Clasificare după numărul de stații

O altă clasificare este cea după numărul de stații pe care este stocată baza de date

Există două categorii de sisteme de baze de date: centralizate și distribuite.

Un sistem de baze de date centralizat (Centralized Database System) este un sistem de baze de date în care datele și sistemul de gestiune sunt stocate pe un singur calculator.

Un sistem de baze de date distribuit (Distributed Database System) poate avea atât datele, cât și sistemul de gestiune, distribuite pe mai multe calculatoare interconectate printr-o rețea de comunicație.

1.2.4. Componentele unui sistem de baze de date

Un sistem de baze de date (Database System) reprezintă un ansamblu de componente care asigură crearea, utilizarea și întreținerea uneia sau mai multor baze de date. Componentele unui sistem de baze de date sunt: hardware, software, utilizatori, date persistente.

1.2.4.1. Hardware

Calculatoarele pe care sunt instalate de obicei sistemele de baze de date sunt PC standard, dar și calculatoare multiprocesor foarte puternice. Performanțele generale de operare ale calculatorului (numărul și viteza procesoarelor, dimensiunea și viteza de operare a memoriei etc) influențează în mod corespunzător perfomanțele sistemului de baze de date. Cea mai importantă caracteristică a calculatorului pe care funcționează sistemul de baze de date este capacitatea harddisk-ului, utilizată pentru memorarea datelor din baza de date.

Deoarece într-un sistem de baze de date este necesar accesul rapid la oricare dintre înregistrările de date, pentru memorarea acestora se folosesc discurile magnetice (harddiskuri).

Benzile magnetice (care oferă acces secvențial la înregistrările de date) se folosesc pentru duplicarea (backup), salvarea și restaurarea datelor.

1.2.4.2. Software

Între baza de date (colecția de date memorate fizic în fișiere pe harddisk-uri) și utilizatorii sistemului există un nivel software, numit sistem de gestiune a bazei de date (SGBD)-(DataBase Management System). O bază de date computerizată poate fi generată și menținută fie cu ajutorul unui grup de programe de aplicație specifice acestui scop, fie cu acest SGBD.

Figura 2.1. Componente ale sistemului de baze de date

1.2.4.3. Utilizatorii

Utilizatorii unui sistem de baze de date se împart în câteva categorii:

• Programatorii de aplicații sunt cei care dezvoltă aplicațiile de baze de date în anumite medii de programare. Aplicațiile pot fi aplicații desktop (stand alone) și aplicații client-server.

Aplicațiile desktop sunt aplicațiile care se instalează și rulează pe un anumit calculator. Acestea sunt aplicații implementate în medii de programare cum ar fi: Visual Basic, Visual C, Java, C++, Delphi etc, iar aplicațiile clientserver sunt aplicații care se instalează pe un calculator numit server și rulează de pe orice calculator aflat în acea rețea. Aceste aplicații sunt aplicații web implementate în limbajul de scripturi php sau asp, cu interfața dezvoltată în html. Pentru ca aceste aplicații să funcționeze trebuie instalat și un server de web, cum ar fi Apache sau IIS și pe fiecare calculator de unde va fi accesată aplicația, precum și un browser de web: Internet Explorer, Netscape, Modzilla etc.

• Utilizatorii obișnuiți sunt acei utilizatori care accesează baza de date prin intermediul unei aplicații de baze de date. Acești utilizatori au drepturi limitate asupra accesului la datele din baza de date, ei neavând cunoștințe aprofundate asupra structurii și a datelor din acea bază de date.

• Administratorul bazei de date (DataBase Administrator) care este o persoană autorizată, care are ca sarcină administrarea resurselor, autorizarea accesului la baza de date, a coordonării și monitorizării utilizatorilor acelei baze de date. Administratorul bazei de date efectuează și operații periodice de salvare a datelor (backup) și de refacere a lor atunci când este necesar.

1.2.4.4. Date persistente

Datele memorate într-o bază de date sunt date persistente, adică date care rămân memorate pe suport magnetic, independent de execuția programelor de aplicații. Datele persistente ale unei baze de date se introduc, se șterg sau se actualizează în funcție de date de intrare provenite de la tastatură. Inițial datele de intare sunt date nepersistente, ele devenind persistente după ce au fost validate de SGBD. Datele de ieșire ale unui sistem de baze de date sunt tot date nepersistenete, ele provenind din operații de interogare a bazei de date și puse la dispoziție utilizatorului sunt formă de raport, afișare etc.

1.2.5. Arhitectura internă a sistemlor de baze de date

Arhitectura internă a unui sistem de baze de date propusă prin standardul ANSI/X3/SPARC (1975) conține trei niveluri funcționale ce vor fi descrise mai jos.

Una din caracteristicile fundamentale a bazelor de date este dată de faptul că produce câteva niveluri de abstractizare a datelor, prin ascunderea detaliilor legate de stocarea datelor, detalii ce nu sunt utile utilizatorilor bazei de date. Se definește modelul datelor ca un set de concepte ce poate fi utilizat în descriereea structurii datelor. Prin structura bazei de date se înțelege tipul datelor, legătura dintre ele, restricțiile ce trebuie îndeplinite de date. Cele mai multe baze de date includ un set de operații ce specifică modul de acces la date.

O structură de date asociată unei baze de date poate fi reprezentată pe trei niveluri, având ca scop separarea aplicațiilor utilizatorului de baza de date fizică. Schema bazei de date pe cele trei niveluri poate fi văzută astfel:

• Nivelul intern constituit din schema internă ce descrie structura de stocare fizică a datelor în baza de date, utilizând un model al datelor fizice. La acest nivel se descriu detaliile complete ale stocării, precum și modul de acces la date.

• Nivelul conceptual sau schema conceptuală descrie structura întregii baze de date pentru o comunitate de utilizatori. La nivelul conceptual se face o descriere completă a bazei de date, ascunzând detaliile legate de stocarea fizică, concentrându-se asupra descrierii entităților, tipurilor de date, relațiilor dintre ele, precum și a restricțiilor asociate. Poate fi utilizat cu bune rezultate, la model de nivel înalt sau un model specific de implementare.

• Nivelul extern sau nivelul vizual (utilizator) include o colecție de scheme externe ce descriu baza de date prin prisma diferiților utilizatori. Fiecare grup de utilizatori descrie baza de date prin prisma propriilor interese. Există tendința la acest nivel ca grupuri de utilizatori să ascundă detalii de care nu sunt interesate. Și la acest nivel se pot folosi modele de implemetare sau modele de nivel înalt.

Figura 2.2. Arhitectura internă a unui sistem de baze de date

1.2.6. Baze de date XML

Un fișier XML poate fi considerat o bază de date în sensul cel mai general al cuvântului, acesta fiind de fapt o colecție de date. Ca format de baze de date, are o serie de avantaje:

Este autodescriptiv

Este portabil

Datele sunt descrise fie sub formă arborscentă, fie de graf

Există mai multe tipuri de utilizări ale documentelor XML împreună cu bazele de date. Optarea pentru un tip sau altul de utilizare se face în primul rând în funcție de natura documentelor XML care trebuie stocate și gestionate.

1.2.6.1. Clasificare documente XML

Documentele XML pot fi calsificate în documente orientae spre date (data oriented XML documents) și documente orientate pe documente (document oriented XML documents).

Documentele orientate pe date sunt documentele care utilizează XML la nivelul transportului de date. Acestea sunt de regulă consumate de către mașină și se carecterizează în primul rând printr-o structură regulată.

Exemple de documente orientate spre date sunt: comenzi, rezervări de locuri, date științifice, pagini Web dinamice, cataloage online. De regulă acest tip de documente nu necesită utilizarea bazelor de date native XML ca format, ci a bazelor de date relaționale sau orientate pe obiect ca suport XML, îmoreună cu un software de transfer a datelor. Conținutul acestor documente este cunoscut sub denumirea de date structurate.

Documentele orientate pe document sunt destinate de regulă consumului uman. Ca exemplu menționăm cărțile, articolele, cursurile electronice, textele publicitare sau chiar orice alt document XHTML. Se caractrizeză printr-o structură neregulată, conținut preponderent mixt, granularitate mică. Ordinea în carea par descendeții unui element (PCDATA) conteză întotdeauna.

Documentele orientate pe document sunt editate manual în XML sau convertite în XML din alte formate (SGML, PDF, RTF), conținutul acestora nefiid preluat dintr-o bază de date așa cum este cazul documentelor orientate pe date. Acestea formează datele nestructurate.

În practică nu se poate face o departajare clară între cele două tipuri de documente. Ca urmare pot exista documente hibride, care au fie structură preponderentă regulată cu porțiuni neregulate, fie nu sunt structurate, însă în cadrul documentului apar fragmente structurate.

Cunoașterea tipului de document folosit va determina tipul bazei de date ce va fi folosit în lucrarea de față.

1.2.6.2. Baze de date cu suport XML (XML-enabled)

Bazele de date XML-enabled sunt acele baze de date care au un alt model de date, altul decât XML. De regulă, cel mai des întâlnit fiind modelul de date relațional. Instanțe individulae ale acestui model sunt mapate către una sau mai multe instanțe ale modelului XML.

În general, bazele de date XML-enabled conțin softawer pentru transferul datelor între ele cât și pentru transferul fișierelor XML. Ca regulă generală, software-ul utilizat de baze de date XML nu poate manipula toate documentele XML. În schimb se pot ocupa de subclase de documente care sunt necesare pentru a modela datele datele în baza de date.

De exemplu, un software de transfer de date care lucrează cu baze de date relaționale rareori se ocupă de conținutul amestecat de documente XML, deoarece nu este ușor de modelat utilizând modelul relațional de date.

Avantajul principal al bazelor de date XML-enabled este faptul că păstrează datele și aplicațiile intacte. Adică, adăugarea funcționalităților XML bazelor de date este de fapt o simplă adăugare și configurare a software-ului ce transferă datele între documente XML și bazele de date, nefiind necesară schimbarea datelor sau aplicțiilor deja existente.

Așadar, într-o bază de date XML-enabled datele existente pot fi folosite pentru a crea documente XML, dar în acelaș timp datele dintr-un document XML pot fi stocate într-o bază de date. De asemenea, în bazele de date XML-enabled, XML nu este vizibil și schema bazei de date trebuie mapată la o schemă XML.

Aceste baze de date se folosesc atunci când XML este folosit ca format de date de schimb și nu necesită schimbări ale aplicațiilor existente.

1.2.6.3.Baze de date XML native (NXD-native XML Database)

Conform XML:DB Initiative, care concentrează eforturile de standardizre și dezvoltare de specificații în acest domeniu, o bază de date nativă XML se caracterizează prin:

Existența unui model pentru documentul XML, iar datele sunt stocate și extrase conform acelui model

Are un document XML ca unitate fundamentală de stocare, în aceeași manieră în care o bază de date relațională are o înregistrare ca unitate logică fundamentală de stocare.

Nu este necesară existența unui model particular de stocare, ci poate fi construită pe o bază de date relațională, ierarhică sau orientată pe obiect, sau poate utiliza un format propriu de stocare.

Bazele de date native XML sunt acele baze de date în care modelul XML este folosit direct. Adică, folosește un set de structuri ce pot stoca documente arbitrare XML.

Acest lucru avantajează bazele de date native XML în două situații:

În cazul în care schema documentelor de stocat nu este cunoscută la proiectare

În cazul în care modelul de date nu este potrivit în alte modele, cum ar fi modelul relațional.

Bazele de date XML-enable nu funcționează potrivit în primul caz deoarece baza de date trebuie configurată pentru fiecare schemă XML pentru care datele vor fi stocate, în al doilea caz, XML enabled ar putea funcționa însă numai pentru anumite clase de date.

Bazele de date XML native se pot folosi pentru:

Managementul documentelor, cum ar fi documentații, broșuri, pagini Web, deoarece modelul de date XML este potrivit pentru acest tip de date.

Date semi-structurate.

Tranzacții de lungă durată

Arhivarea documentelor.

Datorită structurilor folosite pentru stocarea XML este vizibil în cadrul bazelor de date native XML, nefiind necesară o mapare a schemei deoarece modelul de date XML este folosit direct de bazele de date native XML.

Bazele de date suportă limbajul de interogare XML și poate fi utilizat împreună cu baze de date deja existente. Acestea sunt cele mai utilizate pentru stocarea dcoumentelor și datelor semi-structurate.

1.3.Prezentarea temei și descrierea aplicației

1.3.1.Prezentarea temei

Lucrarea de față reprezintă implementarea a numeroase tehnologii pentru dezvoltarea unei aplicații de mangement a bazelor de date. La dezvoltarea aplicției s-a folosit standardul XML, întrucât este o tehnologie nouă comparativ cu celelalte sisteme de management al bazelor de date.

Tehnologia XML a fost adoptată agresiv încă de la apariție, în special de marile companii, a căror busines avea nevoie de ceva nou și potrivit nevoilor lor.

XML s-a dovedit a fi un standard de succes, iar în managemntul resurselor electronice a devenit indispensabil.

1.3.2.Descrierea aplicației

Aplicația este o interfață Web în care utilizatorii pot administra baze de date.

Aplicația permite utilizatorilor să creeze, să șteargă o bază de date, cât și să prelucreze conținutul lor. Astfel aplicația permite definirea câmpurilor din tabele, a caracteristicilor câmpurilor (denumire, lungime, tip), cât și operații clasice cu tabele (ștergere, adăugare elemente).

La construirea aplicației nu s-au folosit baze de date XML deja dezvoltate deoarece aplicația este una de mici dimensiuni. Așadar s-a construit o bază de date utilizând tehnologia XML proiectată pentru necesitățile aplicației. Orientată spre demonstarea flexibilității și performanțelor tehnologiei XML, aplicația servește un număr relativ mic de clienți prin intermediul mijloacelor disponibile open-source.

Aplicația nu depinde de platforma folosită, acest lucru fiind o consecință a folosirii tehnologiei XML cât și a standardului PHP.

Interfața Web a fost construită utilizând tehnologie PHP prin intermediul framework-ului CodeIgniter.

Pentru rularea aplicației este necesară instalarea PHP5 și a framework-ului CodeIgniter.

CAPITOLUL II

2.1.XML

Limbajul XML, acronimul de la eXtensible Markup Language, a fost definit de consorțiul W3C în anul 1996.

XML, ca și HTML se bazează pe tag-uri.

XML poate fi folosit de autorii de pagini Web ale căror nevoi depășesc limitele HTML-ului.

XML a fost creat pentru descrierea structurilor de date.

Tag-urile XML nu sunt predefinite; altfel spus, XML permite crearea tag-urilor personalizate, ceea ce este nemaipomenit.

Pentru descrierea structurilor de date, documentele XML pot utiliza un DTD (Document Type Definition).

Un document care conține un DTD este autodescriptiv.

XML a fost conceput pentru a stabili și a menține o interoperabilitate cu HTML.

2.2.Aplicații XML

Prezentăm în continuare, o scurtă listă de aplicații XML:

structurarea datelor în baze de date;

structurarea documentelor;

grafică vectorială (VML, sau Vector Markup Language);

prezentări multimedia (SMIL – Synchronized Multimedia Integration Language; HTML + TIME, sau HTML Timed Interactive Multimedia Extensions);

comunicarea deschisă între aplicații, via Web cu ajutorul mesajelor bazate pe XML (SOAP, sau Simple Object Access Protocol);

schimbul de informații financiare (OFX, sau Open Financial Exchange);

tranzacții comerciale pe Internet (XFDL, sau eXtensible Forms Description Language);

resurse umane (HRMML, sau Human Resource Management Markup Language);

formatarea formulelor matematice pe Web (MathML, sau Mathematical Markup Language);

descrierea structurilor moleculare (CML, sau Chemical Markup Language);

scrierea partiturilor muzicale (MusicML, sau Music Markup Language);

buletine meteo (OMF, sau Weather Observation Markup Format);

tranzacții imobiliare (RETS, sau Real Estate Transaction Standard).

2.3.Reguli ale limbajului XML

Înainte de a începe crearea unui document XML este important să cunoașteți câteva din regulile XML pe care este bine să le respectați.

Regulile pe care trebuie să le respecte documentele XML facilitează atât crearea instrumentelor de analiză a documentelor cât și lucrul efectiv cu XML. Regulile sunt simple, multe dintre ele fiindu-vă cunoscute de la HTML.

Regulile XML pot fi clasificate în două categorii:

reguli de sintaxă XML;

reguli de validitate a documentelor XML.

2.3.1.Regulile de sintaxă XML

Cea mai mare parte a regulilor de sintaxă XML sunt mult mai stricte decât cele aplicate unui document HTML..

Iată cum definim paragraful: „Învață să privești dincolo de aparene!” în toate cele trei limbaje (figura 1.1).

În exemplul precedent sintaxa XHTML este judecată corect atunci când exemplul HTML nu a fost considerat ca un document XHTML bine format, și nu trebuie să fie analizată de un parser. Aceasta nu înseamnă că un navigator nu va face analiza documentului, nu-l va interpreta și nu va identifica tag-ul care nu este bine format.

În cea mai mare parte a cazurilor, navigatoarele nu vor analiza documentul XHTML ca pe un document XHTML ci mai degrabă ca un document HTML; eventual, ele vor analiza documentul XHTML ca un document XML. Pentru moment puteți folosi un singur parser pentru a verifica erorile conținute de documentele dumneavoastră, înainte ca acestea să fie găzduite de un server.

Toate elementele XML trebuie să conțină, obligatoriu un tag de deschidere și unul de închidere. Acesta nu este cazul limbajului HTML, încare mai multe elemente sunt definite cu tag-urile de închidere facultative.

Limbajul HTML permite definirea fără ghilimele a valorilor atributelor. În XML, XHTML regula este alta: toate valorile atributelor trebuie să fie delimitate de ghilimele.

Iată cum delimităm valorile a trei atribute în limbajele: HTML, XHTML, XML (figura 1.3).

Toate atributele trebuie să conțină valori

Pentru ce mai mare parte a atributelor, această regulă este destul de simplă.

Iată cum definim valorile pentru atributul checked, care aparține elementului <INPUT> în limbajele HTML și XHTML (figura 1.4).

Regulile de sintaxă se învață și se aplică ușor deoarece sunt foarte simple dar și foarte stricte. Un document XML este bine format dacă respectă toate notațiile și regulile structurale XML.

Dacă un document XML bine format respectă regulile unui DTD asociat el se numește document valid. Atenție! Nu întotdeauna un document bine format are o structură validă!

2.3.2.Structura unui document XML

Un document bine format satisface un minimum de criterii de conformitate XML. Atunci când creați un document XML bine format, puteți începe direct prin a adăuga elementele de care aveți nevoie și prin a introduce datele documentului, exact ca la crearea unei pagini Web în (X)HTML. După cum ați remarcat în conversația anterioară, într-un document XML dumneavoastră sunteți aceia care … inventați propriile elemente în loc de a utiliza elementele predefinite. Vă asigurăm că nu veți avea nici o problemă de prelucrare sau de afișare a unui document XML bine format în Microsoft Internet Explorer.

După cum ați putut constata, un document XML conține două părți principale:

prologul;

elementul rădăcină (numit și elementul document).

Elementul rădăcină. Cea de-a doua parte a unui document XML corespunde unui element unic desemnat ca element rădăcină sau element document, care poate conține alte elemente.

Într-un document XML, elementele indică structura logică a documentului și conțin informațiile corespunzătoare. Un element tip cuprinde un tag de deschidere, conținutul elementului și tag-ul de închidere. Conținutul elementului poate fi constituit din date de tip caracter, alte elemente imbricate (nested), sau combinații ale celor două.

După cum ați putut constata, nu puteți insera direct caracterele speciale: <, >, &, © în datele din conținutul unui element. O soluție de a ocoli această restricție este de a utiliza o referință de caracter (exemplu,&#169 pentru caracterul ©) sau o referință de entitate generală predefinită (exemplu &lt; pentru caracterul <). Totodată, dacă doriți să inserați mai multe caractere speciale (<, >, & etc.), utilizarea referințelor este complicată și creează dificultăți la citirea datelor. În acest caz este mult mai simplu de a plasa textul care conține caractere speciale în interiorul unei secțiuni CDATA.

O secțiune CDATA permite afișarea (fără erori!) datelor care conțin caractere speciale.

Utilizați entități predefinite

Într-un document XML, puteți utiliza o referință la o entitate predefinită pentru a insera unul din cele cinci caractere listate în figura 3.5.

Specificațiile XML utilizează termenul entitate, în sens general pentru a se referi la unul din tipurile de stocare, asociate documentelor XML:

întreg documentul XML;

o secțiune DTD externă;

un fișier extern, definit ca o entitate externă într-un DTD și referită cu ajutorul unei referințe de entitate;

un șir de caractere între ghilimele, definit ca o entitate internă într-un DTD și referită cu ajutorul unei referințe de entitate.

În particular, mecanismul entităților XML este util pentru stocarea blocurilor de text XML foarte des utilizate, ceea ce permite inserarea rapidă a textului, acolo unde doriți.

Referințele entităților generale interne se definesc în DTD prin tag-ul <!ENTITY>.

Puteți afecta unei entități generale interne întreaga valoare a unei expresii generale interne, cu respectarea următoarelor reguli:

șirul poate fi delimitat cu ajutorul unor ghilimele simple (’) sau duble (”);

șirul nu poate conține ghilimele identice cu cele ale delimitatorilor;

șirul nu poate conține caracterul (&), excepție făcând începutul unei referințe de entitate caracter sau entitate generală;

șirul nu poate conține caracterul (%);

conținutul șirului trebuie ev

Declarația unei entități trebuie să preceadă referința la această entitate.

Referința de entitate &cp; conține numele entității (cp) plasat între & și ;. Numele entității (cp) reprezintă numele atribuit entității în declarația <!DOCTYPE>.

Entitatea cp se mai numește entitate generală internă analizabilă (corespunde tipului XML bine format). Utilizarea unei entități generale internă prezintă avantajul următor: puteți modifica valoarea în tot documentul XML.

2.3.3.DTD

O declarație de tip document este un bloc de tag-uri XML, care se plasează în prologul unui document XML valid. O declarație de tip de document are următoarea sintaxă:

<!DOCTYPE nume_element DTD>

unde,

nume_element este numele elementului rădăcină;

􀂃DTD este definiția tipului de document (Document Type Definition), care conține declarații ce definesc elementele, atributele și alte caracteristici ale documentului.

DTD-ul se compune dintr-o paranteză dreaptă deschisă ([), urmată de o serie de declarații de tag-uri, urmate de o paranteză dreaptă închisă (]). Declarațiile de tag-uri descriu structura logică a documentului; altfel spus, ele definesc elementele documentului, atributele și alte caracteristici.

Un DTD (Document Type Definition) poate conține următoarele tipuri de declarații:

declararea tipurilor de elemente, utilizând cuvântul cheie ELEMENT;

declararea listei de atribute;

declararea entităților (interne, externe); entități analizabile, entități care nu sunt analizabile utilizând cuvântul cheie ENTITY;

declararea notațiilor, utilizând cuvântul cheie NOTATION;

instrucțiuni de prelucrare;

comentarii;

referințe de entități de parametrii.

2.3.4.Scheme XML

Pe parcursul lucrării am învățat să utilizăm DTD XML pentru a defini vocabularul și structura documentelor XML. Am învățat de asemenea cum să validăm un document în raport cu un DTD, verificând structura documentului cu cea descrisă prin DTD.

Autorii XML-ului doreau la început să conserve o compatibilitate maximă cu SGML (Standard Generalized Markup Language) predecesorul său, mult mai complex. Din acest motiv, versiunea 1.0 a recomandării XML specifică o formă simplificată a DTD-ului pentru crearea de vocabulare și validarea documentelor XML.

O dată cu dezvoltarea și răspândirea XML-ului, limitele DTD-ului apăreau din ce în ce mai jenante.

2.3.5.Tipuri de date predefinite utilizate în schemele XML

Unul din principalele avantaje ale schemelor XML este acela că permit specificarea tipului de conținut și a atributelor elementelor XML. O schemă XML poate specifica dacă un element trebuie să conțină un număr (întreg, zecimal etc.) ceea ce un DTD nu permitea.

Cele mai importante tipuri de datepredefinite utilizate în schemele XML sunt următoarele:

tipuri simple numerice

Boolean (definește tipul de date boolean – true sau false; 1 sau 0);

Binary (definește tipul de date binar);

Integer (orice întreg situat în intervalul închis -126789 la 126789);

NonPositiveInteger (orice număr întreg negativ sau nul situat în intervalul închis -126789 la 0);

nonNegativeInteger (orice număr întreg pozitiv sau nul situat în intervalul închis 0 la 126789);

positiveInteger (orice număr întreg pozitiv situat în intervalul închis 1 la 126789);

negativeInteger (orice număr întreg negativ situat în intervalul închis -126789 la -1);

byte (orice număr întreg situat în intervalul închis -1 la 126);

short (orice număr întreg situat în intervalul închis -1 la 12678);

int (orice număr întreg situat în intervalul închis -1 la 126789675);

long (orice număr întreg situat în intervalul închis -1 la 12678967543233);

unsignedByte (orice număr întreg situat în intervalul închis 0 la 126);

unsignedShort (orice număr întreg situat în intervalul închis 0 la 12678);

unsignedInt (orice număr întreg situat în intervalul închis 0 la 1267896754);

unsignedLong (orice număr întreg situat în intervalul închis 0 la 12678967543233);

decimal (orice număr zecimal pozitiv sau negativ);

float (orice număr zecimal situat în intervalul 3.4e+38 la 1.4e-45).

tipuri temporale

time (definește ora);

date (definește data calendaristică: zzllaa);

dateTime (Exemplu: 2003-09-01 T13:20:00+02:00);

duration (Exemple: P-1347M; P134Y; P3Y4M10J T8H30M13S);

GYearMonth (Exmplu: 2003-09).

tipuri DTD

ID;

IDREF;

IDREFS;

NMTOKEN;

NMTOKENS;

ENTITY;

NOTATION;

Name.

tipuri particulare

string (definește un șir de caractere);

hexBinary (definește datele în sistemul hexazecimal);

any URI (definește un identificator de resurse).

Schema XML descrie structura documentelor XML în mod similar DTD-urilor. Schemele XML fac distincție între două tipuri de elemente:

elemente de tip simplu, care nu pot avea nici fii, nici atribute;

elemente de tip complex, care pot avea elemente fii și atribute.

2.3.6.CodeIgniter

Codeigniter s-a impus in ultimii ani printre framework-urile PHP celebre si intensiv folosite de catre dezvoltatorii web. CodeIgniter permite dezvoltarea rapida de aplicatii web, ofera solutii la o mare parte dintre problemele intalnite in mod frecvent de programatorii PHP, este un framework suplu, este construit folosind arhitectura MVC si impune folosirea ei in cadrul aplicatiei, este opensource si bine documentat.

Primul lucru pe care il remarca un nou utilizator al CI este usurinta cu care se instaleaza acesta pe server, faptul ca nu este necesar accesul la promptul de comanda al serverului, posibilitatea de lucra cu majoritatea tipurilor de baze de date.

Un aspect extrem de important al CI este organizarea codului. Lucrul cu baza de date este separata de Controller, prezentarea este separata de aplicatie in sine. Acest lucru permite lucrul eficient in echipe de dezvoltatori. Daca o echipa lucreaza la design-ul aplicatiei acest lucru nu afecteaza echipa care se ocupa de functionalitatile necesare si interogarea bazei de date. Pentru acceasi aplicatie se pot realiza mai multe "skin-uri" care se pot schimba intre ele relativ usor. Acest lucru este foarte important pentru ca de foarte multe ori ne-am intalnit cu situatii in care un client dorea modificarea designului si dupa implementarea modificarilor descopeream ca unele functii nu se comporta cum ne asteptam sau, si mai grav, eram nevoiti sa rescriem aproape toata aplicatia pentru ca nu exista o minima organizare a codului.

Un alt deosebit de util al CI este posibilitatea de a extinde bibliotecile de baza, de a scrie clase si biblioteci noi pe care apoi sa le integram usor in structura framework-ului. De asemenea daca dorim sa nu folosim o parte dintre clasele din nucleul CI putem sa facem acest lucru intr-un mod relativ usor.

CodeIgniter permite si chiar faciliteaza realizarea de aplicatii prietenoase cu motoarele de cautare. CI permite realizarea unei scheme de URL-uri prietenoase de genul  www.siteulmeu.com/numele-paginii, permitand astfel navigarea prin URL, oferind utilizatorului inca o cale de a accesa continutul cautat intr-un mod cat mai facil, dar acest lucru implica folosirea rewrite engine.

2.3.6.1. URL-uri CodeIgniter

URL-urile (Uniform Resource Locator) in CodeIgniter au un model bazat pe segmente URI (Uniform Resource Identifier), segmente din URL ce urmează modelul Model->view->Controller. De exemplu exemplu.com/clasa/funcție/ID:

– primul segment reprezintă clasa controller-ului ce trebuie apelată.

– al doilea segment reprezinta functia clasei, sau metoda, ce trebuie apelată

– al treilea segment, și orice alt segment adițional, reprezintă identificatorul (ID) și orice variabilă ce va fi trimisă controller-ului.

2.3.6.2. Controller

Un controller este o clasă al cărei nume poate fi asociat cu un URI.

De exemplu: exemplu.com/index.php/blog/

În acest URI CodeIgniter va încerca să găsească un controller numit blog.php și să îl încarece. În momentul în care numele controlleru-lui se potrivește cu primul segment din URI, acesta îl va încărca.

Blog.php

<?php

Class Blog extends Controller{

Function index()

{

Echo ‘Hello!’;

}

}

}

?>

La apelarea www.exemplu.com/index.php/blog se va încărca controllerul blog.php și se va afișa mesajul.

Clasele trebuie să înceapă cu literă mare și trebuie să moștenească funcțiile de la Controller.

<?php

Class Blog extends Controller{

}

Funcția index() este încărcată implicit dacă cel de-al doilea segment din URI lipsește. Adică exemplu.com/index.php/blog/ și exemplu.com/index.php/blog/index/ vor afișa acelaș rezultat.

Cel de-al doilea segment din URI determină care funcție din controller va fi apelată.

<?php

Class Blog Extends Controller{

Function index()

{

Echo ’Hello’;

}

Function mesaj()

{

Echo ’Mesaj’;

}

}

?>

Pentru afișarea celui de-al doilea mesaj se va apela URL-ul:

www.exemplu.com/index.php/blog/mesaj/

2.3.6.3.View

Un view este o pagină web ce nu poate fi apelată direct decât prin intermediul controller-ului și care afișează informațiile primite de la controller.

Pentru a încărca un view trebuie folosită funcția:

$this->load->view(‘nume_fisier_view’);

Această funcție se va apela din interiorul unei metode ale controller-ului ori de câte ori va fi necesară afișarea datelor din controller:

<?php

Class Blog extends Controller{

Function index()

{

$this->load->view->(‚blog_view’);

}

}

?>

La apelarea functiei se va afisa pagina blog_view.php.

De asemenea se pot incarca mai multe view-uri simultan:

Function index()

{

$this->load->view->(’blog_view’);

$this->load->view->(‚about’);

$this->load->view->(’contact’);

}

2.3.6.4.Model

Un model reprezinta o clasa sau mai multe clase php ce permit lucrul cu informatiile din bazele de date.

Structura de baza a unui model este:

Class Model_nume extends Model{

Function Model_nume()

{

Parent::Model();

}

}

Numele claselor trebuie sa inceapa cu litera mare si sa extinda clasa Model..

Fisierul se va salva cu numele clasei scris cu litere mici:

apllication/models/model_nume.

Modelele se incarca din interiorul functiilor controller-ului cu functia:

$this->load->model(‚Model_nume’);

Odata incarcat se pot accesa functiile modelului utilizand un obiect cu acelasi nume ca si clasa:

$this->load->model(‚Model_nume’);

$this-> Model_nume->function;

2.3.6.5.Helper

Un helper ajuta la realizarea unei sarcini. De exemplu URL Helper ajuta la crearea link-urilor, Form Helpers ajuta la crearea elementelor formularului, Text Helper ajuta la formatarea textelor.

Helper-ele se regasesc in system/helpers sau system/application/helpers si nu se incarca implicit.

Incarcarea helper-elor se face cu ajutorul functiei:

$this->load->helper(‚nume’);

File Helper-ul ajuta la lucrul cu fisiere. Acesta se incarca prin comanda:

$this->load->helper(‚file’);

Functii:

Read_file(‚cale’) – returneaza datele continute in calea specificata

Write_file(‚cale’)- scrie date in fisierul continut in specificatie

Delete_files(‚cale’)- sterge toate fisierele din calea specificata

Get_filenames(‚cale’) – returneaza un vector cu numele fisierelor continute in calea specificata

Get_dir_file_info(‚cale’)- construieste un vector cu numele, dimensiunea, data si permisiunile fisierelor dic calea specificata

Form Helper-ul ajuta la lucrul cu formulare. Hlper-ul se incarca prin comanda:

$this->load->helper(form)

Functii:

Form_open() – creeaza un tag de inceput de formular cu un URL construit dupa preferinta

Form_open(blog/mesaj) – va crea un formular care indica spre URL-ul de baza plus segmentele URI aditionale

Se pot aduga atribute prin specificarea ca parametru secund:

$atributes=array(‚atr1’=>’data’,’atr2’=’timp’);

Echo form_open(‚blog/mesaj’,$atributes)

Se pot adauga campuri ascunse:

$hidden = array(’nume’=>’Nume’,’id’=’123’);

Echo form_open(‚blog/mesaj’,$hidden);

De asemenea se poate transmite un vector ca parametru:

$data=array(

‚nume’=>’me’

‚email’=>’[anonimizat]’,

‚url’=>’http://exemplu.com’

);

Echo form_hidden($data);

Rezultat:

<input type=”hidden” name=”name” value=”me”/>

<input type=”hidden” name=”email” value=”[anonimizat]”/>

<input type=”hidden” name=”url” value=”http://exemplu.com”/>

Form_input()creaza un camp standard pentru introducerea textului, de asemenea se poate trimite un vector ca parametru.

$data=array(

‚name’=>’username’,

‚id’=>’username’,

‚value’=>’me’,

‚maxlength’=>’100’,

‚size’=>’50’,

‚style’=>’width:50%’,

);

Echo form_input($data);

Rezultat:

<input type=”text”name=”username” id=”username” value=”me” maxlenght=”100” size=”50” style=”width:50%”/>

Form_password()- creaza un camp standard pentru introduceres textului, dar de tip password

Form_text()- creaza un camp standard pentru introduceres textului, dar de tip text

Form_dropdown()- creeaza un meniu de tip drop-down

Form_checkbox()-creeaza un camp de tip checkbox

Form_radio() – creeaza un camp de tip radio

Form_submit() – creeaza un buton de submit

Form_label() – creeaza o eticheta

2.3.6.6.URL Helper

URL Helper ajuta la lucrul cu URL-uri si se incarca prin comanda:

$this->load->helper(‚url’);

Functii:

Site_url() – returneaza URL-ul site-ului specificat in fisierul de configurare. La acesta se va adauga se va aduga index.php si URL-uri aditionale

Echo site_url(„blog/mesaj”)=>http://exemplu.com/index.php/blog/mesaj

Base_url() – returneaza URL-ul de baza specificat in fisierul de configurare (http://exemplu.com)

Current_url() – returneaza URL-ul complet al paginii vizualizate

Uri_segments() – returneaza segmentele URI pentru orice pagina ce contine aceasta functie

Index_page() – returneaza pagina index a site-ului

Anchor(uri segments, text, atributes) – creeaza link HTML pe baza URL-ului site-ului

-primul parametru contine segmente URI ce pot fi adaugate URL-ului site-ului

-al doilea parametru contine textul ce va fi afisat pentru link

-al treilea parametru contine atribute ce pot fi adaugate link-ului

Echo anchor(blog/mesaj,’My Blog’)=>

mailto() – creaza un link email

echo mailto (‚[anonimizat]’,’Contact Me’);

redirect() – redirectioneaza catre un URL din site

-realizeaza o redirectionare de header la URI-ul specificat

-nu se specifica intreaga cale ci doar segmentul URI catre controller

– al doilea parametru permite alegerea intre metoda „location” de redirectionare si metoda „refresh” de reimprospatare

-al treile parametru poate fi folosit pentru a trimite coduri HTTP Response

If($logged_in==FALSE)

{

Redirect(‚login/form/’,’refresh’);

}

//with 301 redierct

Redirect(‚/mesaj/13’,’location’,301);

2.3.6.7.Plugin

Plugin-urile sunt aproape identice cu Helper-ele. Diferenta dintre ele consta in faptul ca un Plugin ofera numai o singura functie, spre deosebire de Helpere care sunt o colectie de functii. Plugin-urile se salveaza in system/plugins sau system/application/plugins.

Pentru a incarca un Plugin se foloseste comanda:

$this->load->plugin(‚nume’);

Se pot incarca mai multe Plugin-uri simultan. Odata incarcat Plugin-ul poate fi apelat ca o functie PHP.

2.3.6.8.Catching

Pentru a obtine performante maxime CodeIgniter pune la dispozitie optiunea de caching. Prin caching paginile sunt salvate complet pe server in folderul de cache, astfel incat datele se vor incarca mai rapid la o reutilizare.

Catching-ul poate fi activat per pagina si se poate seta timpul cat o pagina trebuie sa ramana in cache pana la reimprospatare. La o prima incarcare a unei pagini, aceasta va fi salvata in directorul system/cache. La o incarcare ulterioara a paginii aceasta va fi extrasa din cache si trimisa browser-ului utilizatorului.

Activarea functieie de cache se realizeaza prin comanda:

$this->output->cache(n) –unde n este numarul de minute pana la reimprospatare.

Comanda poate fi scrisa oriunde in interiorul unei functii. Pentru stergerea cache-ului se va elimina comanda din functie.

CAPITOLUL III

3.1.Partea practică

Aplicația reprezintă o interfață Web cu structura schemei logice din figură.

Pe pagina de start sunt afișate numărul bazelor de date și numele lor, cât și opțiunea pentru accesarea conținutului lor. De asemenea, tot în pagina de start există un link pentru creearea unei baze de date, cât și un link pentru ștergerea unei baze de date.

Se poate selecta din pagina de start o bază de date pentru afișare. In pagina de afișare sunt listate tabelele existente în baza de date cât și opțiuni de creare sau ștergere tabele.

La crearea unui tabel se vor defini 3 câmpuri : denumire, tip și lungime.

3.2.Descriere funcționarea aplicației

In continuare sunt prezentate părți ale aplicației cu diagrame de funcționare și explicația codului folosit.

3.2.1 Crearea bazelor de date

Baza de date luată ca entitate pentru aplicație este de fapt un folder. In interiorul folderului se vor scrie fișiere de tip xml cât și fișiere de tip dtd.

Pentru crearea folderelor am creat un controller baza.php și un view corespunzător controlleru-lui.

<?php

Class Baza extends Controller {

Function Baza(){

Parent::Controller();

$this->load->helper(‘form’);}

Am creat clasa Baza ce extinde clasa Controller. În constructorul Baza() am încărcat helper-ul pentru formular.

Function index(){

$this->load->view(‘baza_view’);}

În funcția index() am încîrcat view-erul baza_view.php. View-erul este o pagina HTML în care am introdus un formular în care se va scrie numele pentru baza de date ce va fi creată:

<?php echo form_open(‘baza/folder’);?>

<h5>Nume baza de date</h5>

<input type=”text”name=”caleFolder”value=””size=”12”>

<div><input type=”submit”value=”Submit”/></div>

</form>

Numele folderului este reținut prin metoda $_POST. După apăsarea butonului Submit se apelează funcția folder() din controller-ul baza.php și se transmit variabileke reținute prin $_POST.

Function folder(){

$scale_folder=$_POST[“caleFolder”];

If(!file_exists($cale_folder)){

If(mkdir($cale_folder,0777)){

Echo “Folder$cale_folder creat”;}

Else {

Echo’Eroare create folder’. $cale_folder; }

În funcția folder am reținut într-o variabilă numele introdus în formular și am creat (mkdir()), în cazul în care nu este deja creat un folder cu acelaș nume (!file_exists()), un folder cu numele reținut în variabilă.

3.2.2.Afișare baze de date

Afișarea bazelor de date presupune scanarea directorului cu bazele de date.

Pentru scanare am folosit funcția directory_map() din helperu-ul ‘directory’ al framework-ului CodeIgniter.

Am creat un controller baza1.php și un view corespunzător baza1_view.php.

Am încărcat în constructorul baza1() helper-ul pentru directoare și helper-ul pentru formular.

$this->load->helper(‘directory’);

$this->load->helper(‘form’);

Function index (){

$map=directory_map(‘./databases’,TRUE);

$map_1=count($map);

$data[‘map_1’]=$map_1;

$this->load->view(‘test_view2,$data);

}

În fucnția index() se salvează elementele vectorului generat de directory_map() și apoi se numără elementele. Aceste date sunt trimise către viewer-ul baza1_view.php unde am creat un formular de tip select de dimensiunea variabilei $map_1 în care s-a reținut numărul elementelor vectorului.

<h5><?php echo”Total:”.$map_1;?></h5>

<select name=”dir”value=””size=”<?php echo $map_1?”>

<?php foreach ($map as $v):?>

<option value=”$v”><?php echo $v?></option>

<?endforeach;?>

Viewer-ul va crea câte o opțiune cu numele fișierului găsit la scanare.

3.2.3. Creare tabele

Tabelul ca entitate pentru aplicație este un fișier XML în care sunt stocate câmpuri și datele corespunzătoare lor.

Pentru a crea un fișier XML cu câmpuri predefinite de utilizator trebuie creat un foșier DTD, care ulterior va fi parse-uit(analizat). După analiza fișierului DTD se va crea fișierul XML cu restricțiile impuse de DTD.

Pentru crearea fișierului DTD am folosit un controller și două view-uri.

Function index(){

$this->load->view(‘form_view’);}

Funcția index încarcă view-erul form_view.php care afișează o căsuță de text pentru introducerea numărului de câmpuri pentru tabel.

<?php echo form_open(‘form/formular’);?>

<input type=”text”name=”fieldNr” value=””size=”12”>

Numărul de câmpuri este transmis prin $_POST funcției formular(), în care am salvat numărul de câmpuri într-o variabilă și am transmis variabila către viewer-ul form1_view.php.

$x=$_POST[“fieldNR”];

$data[‘nrField]=$x;

$this->load->view(‘form1_view’,$data);

În form1_view.php am creat o buclă ce va afișa un număr de câmpuri egal cu variabila pentru completarea denumirii, a tipului și lungimii.

<?php for($i=0;$i<$nrField;++$i):

Echo „Campul ”.($i+1). „are”?>

<p>Nume</p>

<input type=”text” name=”fieldName_<?php echo$i;?>”value=”/><br>

După Submit se transmit prin $_post funcției display() din controller și numele tabelului.

<input type=”hidden”name=”x”value=”<?php echo $nrField; ?>”>

<input type=”text” name=”tableName”value=””/><br>

În funcția display() a controller-ului am reținut în variabile numele tabelului și numărul câmpurilor necesare pe ntru crearea fișierului DTD.

Pentru generarea fișierului DTD în funcția display() am folosit două instrucțiuni for și metoda PHP de scriere într-un fișier fwrite().

$file=”test.dtd”;

În variabila $file am reținut numele fișierului cu extensia dtd.

Urmează o secțiune de verificare la deschiderea fișierului pentru scriere.

$fh=fopen($file, ‘w’) or die(“fail”);

Scrierea în fișier am realizat-o cu instrucțiunea fwrite():

Fwrite($fh,’<?xml version=”1.0”?>’);

Fwrite($fh,”/n”);

Fwrite($fh,”<!ELEMENT”.$z.”(“));

Acest cod va scrie în fișierul text.dtd.

<?xml version=”1.0”

<!DOCTYPE nume_tabel[

<!ELEMENT nume_tabel(

În continuare am transmis dinamic numele câmpurilor reținute în variabile, transmise prin $_POST anterior:

For($y=0;$y<$v;$y++)

{

$e=$_POST[“fieldname_$y”];

$de_afisat.=$e.”,”;

}

$de_afisat=substr($de_afisat,0,-1);

Fwrite($fh,$de_afisat.”)>/n”);

Această instrucțiune parcurge elementele vectorului cu numele câmpurilor reținut în variabila $e și le scrie în fișierul test.dtd consecutiv concatenate cu simbolul ”,”. Cu substr() am șters simbolul concatenat pentru ultimul element al vectorului.

Acest cod va scrie un fișier pentru un număr de 3 câmpuri.

Cea de-a doua instrucțiune for creează entitățile de tip element pentru fișierul XML.

For($y=0;$y<$v;$y++)

{

$e=$_POST[“fieldname_$y”];

Fwrite($fh,”<!ELEMENT”.$e.”(#PCDATA)>/n”;

}

Fwrite($fh,”]>”);

Fclose($fh);

Asftfel se parcurge din nou vectorul cu câmpuri și se scrie pentru fiecare câmp o sintaxă:

<!ELEMENT camp(#PCDATA)>

Ultima linie scrisă în fișierull DTD sunt elementele de închidere “]>” după care fișierul este închis.

Fiecare tabel va fi un fișier xml generat dinamic dupa restricțiile menționate în fișierul DTD.

3.2.4.Afișare tabele

Fiecare bază de date conține câte un fișier DTD și un fișier XML. Pentru afișarea exclusiv a tabelelor am creat un filtru de extensie.

Am folosit din nou helper-ul directory a cărui cale este o variabilă în care am reținut numele bazelor de date. De exemplu la selectarea unei baze de date se va scana directorul cu numele bazei de date și se va reține în variabila $map vectorul ce are ca elemente conținutul directorului.

$map=directory_map(‘./$table’,TRUE);

Pentru filtrare am realizat o funcție care verifică dacă ultimele patru caractere din numele tabelei sunt .xml, adică dacă ai extensia xml.

Foreach($map as $var){

If(substr($var,-4)==’.xml’){//este xml}

Else {/*nu este xml*/}

}

3.2.5. Afișare conținut tabele

Pentru afișarea conținutului unui tabel am realizat o funcție în care am folosit proprietatea XML_ELEMENT_NODE pentru entități XML.

$root=$dom->documentElement;

$first=$root->firstChild;

$node=$first;

While($node){

If($node->nodeType==XML_ELEMENT_NODE){

Print $node->nodeValue.”/n”;

}

$node=$node->nextSibling;

}

În variabila $root am reținut elementul rădăcină al fișierului XML care coincide cu numele tabelului. În continuare am selectat primul nod descendent și l-am reținut într-o variabilă $node. Am verificat dacă această variabilă $node este de tip”node” și în caz afirmativ se afișează valoarea nodului. Funcția continuă cu selectarea următorului frate (Sibling) după care bucla se reia. Acest lucru se traduce astfel: fiecare nod din fișierul XMl este de fapt numele unui câmp a cărui valoare este afișată prin $node-:nodeValue.

3.2.6.Adăugarea de date în tabel

Adăugarea informațiilor în tabel presupune o adăugare a unui nod text la un nod element, adică introducerea datelor într-un câmp. Pentru acest lucru am realizat o funcție în care am reținut într-o variabilă textul untrodus dintr-un formular.

$txt=$_POST[‘textField’];

$var=$dom->createTextNode(“$txt”);

Adăugarea în baza de date se realizează ca mai jos, unde $fieldName este numele câmpului în care va fi introdus textul.

$filedName->appendChild($var);

CAPITOLUL IV

4.1.Concluzii

Formatul de date XML devine formatul comun acceptat in industrie pentru schimbul de informatii dintre diverse sisteme eterogene. Din acest motiv, este important ca o baza de date sa fie capabila sa stocheze informatiile nu doar in formatele traditionale, relationale, ci si in format XML. Stocand datele XML in format nativ se castiga foarte mult in performanta, aceasta materializandu-se in costuri reduse.

Un plus de performanta la o tehnologie de baze de date inseamna o infrastructura redusa, servere cu mai putine procesoare, deci un sistem informatic ceva mai ieftin, costuri mai mici pentru licentiere, deci per total o economie de bani. Standardul industrial al datelor in format XML prezinta o serie de avantaje si dezavantaje. Avantajul major este acela ca este adoptat de toti producatorii de tehnologie din industrie, dar in schimb are dezavantajul ca este un format nu foarte eficient din punct de vedere al stocarii datelor. De aceea devine foarte util ca baza care stocheaza aceste date sa aiba capabilitati de compresie, care sa duca la scaderea spatiului si resurselor de stocare necesare pentru a pastra date in format XML.

Aplicația pe care am folosit-o reprezintă în linii mari câteva concept software relative noi. Cu această aplicație am prezentat modul de realizare a unei unelte pentru administrarea bazelor de date cu produse software gratuite.

Framework-ul CodeIgniter mi-a pus la dispoziție abordarea Model View Controller ce mi-a scurtat timpul de implementare. Pe lângă acest lucru, funcțiile din framework au avut de asemenea un aport semnificativ la scurtarea codului scris.

Tehnologia XML folosită arată încă o dată faptul că o bază de dae poate fi chiar și un fișier text. De asemenea, spre deosebire de bazele de date clasice, structura unui fișier XML este flexibilă.

XML este simplu de învățat și simplu de implementat. Nu necesită resurse exaggerate. În plus, combinat cu limbajul PHP demonstrează incă o dată faptul că XML este o tehnologie puternică și fiabilă pentru viitor.

4.2.Bibliografie

4.2.Bibliografie

Similar Posts