Limbajul XML, recomandare W3C, permite modelarea unui spectru larg de informații, de la text în limbaj natural până la date complet structurate. Astfel XML pune la dispoziție posibilitatea de reprezentare a propriilor date utilizând un set de standarde care să le asigure interoperabilitatea, stabilitatea și independența.
Dintre motivele pentru care limbajul XML este răspândit în dezvoltarea arhitecturilor actuale, adăugând valoare informației și facilitând evoluția documentelor în timp, indiferent de scopul și natura acestora, amintim:
XML s-a dovedit a fi util atât în aplicații Web cât și în cele non-Web, putând fi folosit în structuri informaționale, programare distribuită, sisteme de tip integrat și în stocarea de meta-date cu un caracter local.
Probabil, cel mai important element în crearea unei baze de date este stabilirea modelelor de date stocate: modele de tip înregistrare sau modele de tip document. De exemplu, meta-limbajul XML este folosit pentru a face transportul de date între baza de date și o (posibil non-XML) aplicație? Sau este folosit integral, ca în cazul documentelor XHTML și DocBook? Acest lucru este important deoarece toate reprezentările datelor orientate-înregistrare conțin o serie de caracteristici proprii, la fel ca și reprezentările datelor centrate-document.
Modelul de reprezentare orientat-document este utilizat pentru a crea documente semi-structurate cu conținut mixt care sunt menite a fi "consumate" de către persoane.
Un exemplu de utilizare a acestui tip de reprezentare a datelor este următorul:
<html xmlns ="http://www.w3.org/1999/xhtml"> <head> <title>Sample Web Page</title> </head> <body> <h1>My Sample Web Page</h1> <p> All XHTML documents must be well-formed and valid. </p> <img src="http://www.example.com/sample.jpg" height ="50" width = "25"/> </body> </html>
Un alt exemplu important de utilizare a meta-limbajului XML este cel orientat-înregistrare.
Într-un model de reprezentare centrat pe înregistrări, meta-limbajul XML este folosit ca un format de stocare sau de interschimbare pentru date structurate, care apar într-o ordine regulată, acestea fiind procesate de către mașină și nu de către om. În acest model, faptul că datele sunt stocate sau transferate în format XML, este pur întâmplător, din moment ce acestea ar putea fi stocate sau transferate în alte formate care ar putea fi sau nu mai potrivite pentru sarcina de îndeplinit, în functie de date și de modul în care acestea sunt utilizate. Un exemplu de utilizare a formatului XML este SOAP. Acesta este un protocol bazat pe XML, folosit pentru schimbul de informații într-un mediu descentralizat și distribuit. Un mesaj SOAP este constituit din trei părți: un plic care definește un cadru de lucru pentru a descrie ce conține mesajul și cum trebuie procesat acesta, un set de reguli de codificare pentru reprezentarea instanțelor tipurilor de date definite-aplicație și o convenție pentru reprezentarea procedurilor de cerere și de răspuns.
Un exemplu de mesaj SOAP este următorul:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
În ambele modele care folosesc meta-limbajul XML, este uneori necesară stocarea datelor XML într-un depozit sau într-o bază de date care permite stocarea și trimiterea la nivel înalt a datelor, mai ales dacă acestea vor fi accesate de mai mulți utilizatori.
Documentele centrate-înregistrare folosesc meta-limbajul XML pentru transportul de date. Sunt proiectate pentru a fi ințelese la nivel de mașină. Nu este important pentru aplicație sau pentru baza de date dacă aceste date sunt sau nu stocate, pe o perioadă de timp, într-un document XML. Exemple de documente orientate-înregistrare sunt: comenzile de vânzări, orarele de zbor, datele științifice și cotațiile la bursă.
Aceste documente centrate-înregistrare se caracterizează printr-o structură regulată, date bine definite (cea mai mică unitate independentă de date este la nivel de atribut sau de token-uri - PCDATA) și au posibilitatea de a avea conținut mixt. Ordinea în care apar datele nu contează decât atunci când se face validarea documentului.
Tipurile de date care se găsesc în documentele ce folosesc reprezentarea centrată pe înregistrare pot avea origini atât în baza de date (caz în care se vrea expunerea acesteia în limbajul XML) cât și în afara bazei de date (caz în care se vrea stocarea datelor într-o baza de date). Un exemplu pentru cele menționate anterior este multitudinea de date moștenite stocate în baze de date relaționale.
Multe documente care sunt bogate în text sunt centrate-înregistrare. De exemplu, a se considera o pagina de pe Amazon.com care afișează informații despre o carte. Chiar dacă pagina conține foarte mult text, structura acelui text este în mod evident regulată, o mare parte din el este comună pentru toate paginile care descriu cărți și fiecare din acele texte specifice tuturor paginilor sunt de dimensiuni limitate. Astfel, pagina ar putea fi construită dintr-un document simplu și orientat-înregistrare care conține informație despre o singură carte și este obținut din baza de date, și dintr-o singură foaie de stil XSL care adaugă textele comune.
În general, orice sit Web care construiește dinamic documente HTML, completând un sablon cu ajutorul înregistrărilor dintr-o baza de date, poate fi probabil înlocuit cu o serie de documente centrate-înregistrare și una sau mai multe foi de stil.
De exemplu, se consideră următorul document care descrie informații despre zborul unui avion:
<FlightInfo> <Airline>ABC Airways</Airline> provides <Count>three </Count>non-stop flights daily from <Origin>Dallas</Origin> to<Destination>Fort Worth</Destination>. Departure times are <Departure>09:15</Departure>, <Departure>11:15</Departure>, and <Departure>13:15</Departure>. Arrival times are minutes later. </FlightInfo>
Acesta poate fi construit din următorul document și o simplă foaie de stil: <Flights> <Airline>ABC Airways</Airline> <Origin>Dallas</Origin> <Destination>Fort Worth</Destination> <Flight> <Departure>09:15</Departure> <Arrival>09:16</Arrival> </Flight> <Flight> <Departure>11:15</Departure> <Arrival>11:16</Arrival> </Flight> <Flight> <Departure>13:15</Departure> <Arrival>13:16</Arrival> </Flight> </Flights>
La momentul actual, documentele centrate-înregistrare stau la baza serviciilor Web, iar sistemele de baze de date relaționale se potrivesc ca platformă pentru procesarea documentelor XML centrate-înregistrare.
Datele centrate-document sunt utilizate pentru a crea documente semi-structurate menite a fi citite de către utilizatori. Exemple ar fi: cărți, email-uri, advertismente și orice document HTML. Aceste documente sunt caracterizate printr-o structură minimal regulată sau neregulată, date mai mari și dispersate (cea mai mică unitate de date poate fi la nivelul unui element cu conținut mixt sau la nivelul documentului în întregime) și mult conținut mixt. Ordinea în care elementele similare sau token-urile PCDATA apar este aproape mereu semnificativă.
Documentele centrate-document sunt de obicei scrise de mână în format XML sau alt format, cum ar fi: RTF, PDF, SAU SGML și convertite apoi în XML. Spre deosebire de documentele centrate-înregistrare, de obicei, cele centrate-document nu iși au originea în baza de date.
Următorul exemplu este centrat-document:
<Product> <Intro> The <ProductName>Turkey Wrench</ProductName> from <Developer>Full Fabrication Labs, Inc.</Developer> is <Summary>like a monkey wrench, but not as big.</Summary> </Intro> <Description> <Para>The turkey wrench, which comes în <i>both right- and left- handed versions (skyhook optional)</i>, is made of the <b>finest stainless steel</b>. The Readi-grip rubberized handle quickly adapts to your hands, even în the greasiest situations. Adjustment is possible through a variety of custom dials.</Para> <Para>You can:</Para> <List> <Item><Link URL="Order.html">Order your own turkey wrench</Link></Item> <Item><Link URL="Wrenches.htm">Read more about wrenches</Link></Item> <Item><Link URL="Catalog.zip">Download the catalog</Link></Item> </List> <Para>The turkey wrench costs <b>just $19.99</b> and, if you order now, comes with a <b>hand-crafted shrimp hammer</b> as a bonus gift.</Para> </Description> </Product>
O multitudine de date orientate-înregistrate pot fi citite la fel de ușor ca o linie dintr-un raport de inventar, însă o multitudine de date orientate-obiect oferă mai multe de citit: paragrafe, antete, liste și formatare (eventual și link-uri hipertext), pentru distingerea unor cuvinte specifice sau a unor fraze.
Un exemplu de date orientate-document:
<Memo> Please make sure you are at the <Location>ninth floor</Location>by <MeetingTime>10:30 AM</MeetingTime> to<Purpose>discuss the budget</Purpose> </Memo>
Un exemplu de date orientate-înregistrare:
<Memo>
<MeetingTime>10:30AM</MeetingTime>
<Purpose>Discuss Budget</Purpose>
<Location>ninth floor</Location>
</Memo>
Datele XML orientate-document sunt folosite pentru a marca texte narative menite a fi citite de către om. Datele orientate-înregistrare sunt folosite pentru a interschimba înregistrari între baze de date, menite a fi procesate de catre masina.
Instanțele documentelor orientate-document sunt ușor de citit, fără marcaje, iar instanțele documentelor orientate-înregistrare sunt lipsite de sens fără marcaje.
Datele XML orientate-document au de obicei conținut mixt, iar cele orientate-înregistrare nu.
În documentele orientate-înregistrare, ordinea sub-elementelor contează în general doar în anumite situații, însă pentru documentele orientate-document contează aproape mereu această ordine.
Documentele orientate-document pot opera de obicei cu marcaje necunoscute, eliminând marcajele și păstrând conținutul. Aplicațiile orientate-înregistrare operează în general cu marcaje necunoscute ignorand aceste marcaje și conținutul de asemenea.
Documentele ce conțin date orientate-document sunt ușor de redat pe anumite tipuri de dispozitive de ieșire. Este foarte ușor a formata primul exemplu in HTML. Aceasta deoarece exemplul chiar seamăna cu formatul HTML.
Pe de altă parte, documentele orientate-înregistrare sunt tipic mai ușor de procesat cu ajutorul programelor deoarece datele sunt mai bine organizate.
Sunt documentele orientate-înregistrare mai eficiente decât cele orientate-document? Uneori nu există un răspuns evident. Dar, din moment ce XML a fost creat pentru a reprezenta date, nu text liber de format, cum ar fi memo-urile, documentele XML ar trebui sa fie centrate-înregistrare.
XML este un limbaj de marcare capabil să stocheze conținut informațional din diverse surse, incluzând documente structurate sau semi-structurate, baze de date relaționale și containere de obiecte.
Ca metodă de reprezentare a acestor informații se folosește o reprezentare ierarhică care fiind auto-descriptivă, oferă posibilitatea de redare a datelor fără pierderea semanticii, fiind ușor de interpretat de aplicații. Astfel o aplicație care primește un document XML poate să-l interpreteze în multiple feluri, poate să-l filtreze în funcție de conținut sau poate să-l restructureze în funcție de nevoile respectivei aplicații. Această caracteristică de auto-descriere împreună cu modul de structurare, face ca limbajul XML să fie ideal pentru reprezentarea și schimbul de informații. Având această modalitate de stocare în format ierarhic ne putem folosi de proprietățile nodurilor care joacă rol de părinți și copii și care pot să moștenească atribute sau să dețină unele proprii. Dacă documentele sunt stocate și reprezentate în format XML, atunci este posibil să interogăm conținutul acestor documente cu rolul de a-l extrage, sintetiza și analiza. Totuși eficiența de extragere a acestor date depinde de felul în care aceste date sunt stocate și de aplicația care realizează această operațiune.
Cel mai evident mod de a integra XML în baze de date convenționale este acela de a implementa structurile XML cu ajutorul modelelor de date folosite la ora actuală, cum ar fi modelul relațional. Maparea documentelor XML în baze de date relaționale nu se realizează ușor datorită diferențelor între cele două modele de reprezentare. Modelul relațional este un model structurat pe trei nivele, unde bazele de date sunt reprezentate ca o colecție de tabele ce conțin înregistrări formate dintr-un număr fixat de câmpuri. Valorile câmpurilor trebuie să fie atomice și nu pot fi liste de valori. Spre deosebire de acest model, documentele XML sunt arbori adnotați de o adâncime arbitrară. Din punct de vedere structural este mai ușor de mapat baze de date relaționale în format XML. XML este format din elemente cu atribute. Un element părinte poate avea unul sau mai mulți copii ca într-o bază de date tipic ierarhică. Modul de ordonare al elementelor devine astfel important într-o schema XML. Asta face din reprezentarea în XML a bazelor de date mai dificilă.
O bază de date oferă posibilitatea indexării informației și facilitează astfel accesul atât prin structură cât și prin conținut. Totuși această metodă nu este eficientă de a fi mapată în structurile ierarhice ale documentelor XML, mai ales pentru volume mari de date.
Dacă se dorește integrarea formatului XML în baze de date convenționale se pot implementa structuri XML asemănătoare modelului relațional cum ar fi structurile de date SQL. Conversia datelor SQL existente în obiecte XML este îngreunată de absența tipurilor de date în XML, prezente doar în XMLSchema.
| XML | RDMS |
|---|---|
| Date într-o singură structură ierarhică | Date în tabele multiple |
| Nodurile au valori ale elementelor și/sau atributelor | Celulele au o singură valoare |
| Elementele pot fi imbricate | Valori atomice ale celulelor |
| Elementele sunt ordonate | Ordinea nu este definită pentru rând/coloană |
| Elementele pot fi recursive | Suport scăzut pentru elemente recursive |
| Schema optională | Schema obligatorie |
| Preluare/Stocare directă de documente XML | Operațiuni de JOIN necesare pentru preluare de date |
| Interogări cu standarde XML (XQuery, XPath) | Interogări cu SQL |