STAW 08/12: Programare Web. Suita de tehnologii HTML5
Semantic Web: baze de date native XML (laborator)
1. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
Web semantic
Dr. SabinCorneliu Buraga
Facultatea de Informatica
Universitatea “A.I.Cuza” – Iasi, Romania
http://www.infoiasi.ro/~busaco/
Dr. Sabin Buraga http://www.purl.org/net/busaco
2. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
Marcarea datelor pentru <Web />
Baze de date native XML
Limbajul de interogare XQuery
Detalii in [TX, 153‐177]
Dr. Sabin Buraga http://www.purl.org/net/busaco
3. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
cuprins
Interogarea datelor XML
Introducere
Stocarea datelor XML
Definitii
Limbajul XQuery
Sisteme de manipulare a informatiilor XML
Dr. Sabin Buraga http://www.purl.org/net/busaco
4. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
intro
In sens strict, un document XML
este o baza (colectie) de date
viziune centrata spre documente (document centric)
Dr. Sabin Buraga http://www.purl.org/net/busaco
5. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
intro
Pentru managementul datelor XML,
trebuie sa existe suport pentru:
stocare (documente/arbori XML)
scheme: DTD, scheme XML, RELAX NG etc.
limbaje de interogare: XPath, XSLT, XQuery,...
procesare – via API‐uri (SAX, DOM,...)
Dr. Sabin Buraga http://www.purl.org/net/busaco
6. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
intro
Mai trebuie asigurate:
stocarea eficienta
mecanismele de indexare
securitatea datelor
tranzactiile
integritatea datelor
accesul concurent multiuser
trigger‐ele
interogarile rapide in documente multiple
...
Dr. Sabin Buraga http://www.purl.org/net/busaco
7. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
stocarea datelor XML
Maniere:
documente centrate pe date
(datacentric documents)
viziunea centrata pe documente
(documentcentric documents)
Dr. Sabin Buraga http://www.purl.org/net/busaco
8. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
stocarea datelor XML
Documente centrate pe date:
XML folosit pentru transportul datelor
Documente XML proiectate pentru a fi eficient
procesate de calculator:
structura regulata, reprezentari fine ale datelor
Exemple: orare de curse aeriene, date stiintifice,
ordine de plata
Caracter structurat al datelor stocare in baze de
date relationale + interschimb de date
Dr. Sabin Buraga http://www.purl.org/net/busaco
9. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
stocarea datelor XML
Viziunea centrata pe documente:
XML utilizat pentru date destinate oamenilor
Exemple: carti electronice, mesaje email,
documente XHTML
Caracter semistructurat al datelor
(structura interna nu este atit de regulata)
Ordinea aparitiei unor elemente situate
pe acelasi nivel (siblings) este, uzual, importanta
Documentele sunt concepute manual sau provin din
alte formate, fara a fi stocate in baze de date clasice
Dr. Sabin Buraga http://www.purl.org/net/busaco
10. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
stocarea datelor XML
Practic, cele doua categorii nu pot fi distinse
intotdeauna clar
Dr. Sabin Buraga http://www.purl.org/net/busaco
11. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
stocarea datelor XML
Datele se stocheaza in baze de date
relationale, orientate‐obiect ori ierarhice
Datele pot fi accesate in format XML Modelul RHOX
(Relational,
via sisteme XMLenabled Hypertext, Object,
Schema DB ↔ schema XML XML)
Adoptarea unui model obiect‐relational
XML binding
Documentele (nu datele) sint stocate
in baze de date native XML ori in sisteme
de management al continutului (CMS‐uri)
Dr. Sabin Buraga http://www.purl.org/net/busaco
12. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
“definitii”
Baze de date native XML ≡ baze de date proiectate
special pentru a stoca documente XML
unitatea fundamentala de stocare (logica)
este documentul XML (si nu inregistrarea – record)
nu necesita folosirea unui sistem de stocare fizica
Dr. Sabin Buraga http://www.purl.org/net/busaco
13. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
“definitii”
Baze de date native XML
arhitectura interna poate fi bazate pe
text (fisier, cimp BLOB/CLOB) sau model (arbore DOM)
utilizate pentru stocarea informatiilor centrate
pe documente si pentru managementul datelor
semi‐structurate
Dr. Sabin Buraga http://www.purl.org/net/busaco
14. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
aspecte importante
Normalizarea
Dependente functionale
Redundanta & anomaliile
cauzate de actualizarile datelor XML
Integritatea referentiala
ID, IDREF, key & keyref (XML Schema), XLink
Scalabilitatea
Operatiile sa aiba loc in termen rezonabil
si pentru documente XML de mari dimensiuni
Dr. Sabin Buraga http://www.purl.org/net/busaco
15. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
facilitati
Utilizarea colectiilor de documente
colectie ≡ tabela (la modelul relational)
ori director (la sistemul de fisiere)
Recurgerea la limbaje de interogare
Suport pentru tranzactii, locking, concurenta
Folosirea de API‐uri
Dr. Sabin Buraga http://www.purl.org/net/busaco
16. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
facilitati
Optimizarea accesului (roundtripping)
Accesul la date la distanta (remote data)
Suportul pentru indexare
(value/structural/fulltext indexes)
Dr. Sabin Buraga http://www.purl.org/net/busaco
17. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
RDBMS vs. XMLDBS
Baze de date relationale Baze de date native XML
O baza de date relationala O baza de date XML
contine tabele contine colectii
O baza de date relationala O colectie contine documente
contine inregistrari avind XML avind scheme identice ori
aceeasi schema diferite
O inregistrare reprezinta o lista Un document XML reprezinta
neordonata de valori iden‐ un arbore de noduri, ce poate
tificate prin nume si avind tipuri include date semi‐structurate
apriori stabilite
O interogare intoarce un set O interogare intoarce o sec‐
neordonat de inregistrari venta ordonata de noduri
Dr. Sabin Buraga http://www.purl.org/net/busaco
18. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare
Scop #1
Dezvoltarea unor limbaje de interogare
a continutului XML
Dr. Sabin Buraga http://www.purl.org/net/busaco
19. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare
Necesitati:
Obtinerea rezultatelor in format XML
Suportul pentru procesare pe partea de server
Realizarea de operatii complexe
(selectii, extractii, reductii, restructurari,...)
Suportul pentru alte standarde XML
(XPath, spatii de nume, XML Schema etc.)
Suportul pentru noi tipuri de date
Dr. Sabin Buraga http://www.purl.org/net/busaco
21. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery
Model:
document XML ≡ arbore compus din noduri
(conform XPath 2.0 + XSLT 2.0)
Documentul XML interogat poate avea asociata
o schema (optionala)
Dr. Sabin Buraga http://www.purl.org/net/busaco
22. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery
O valoare (value) ≡ secventa de noduri
sau de valori atomice
O secventa de noduri este ordonata, de obicei
in ordinea aparitiei acestora in document
Valorile atomice sunt cele tipice (vezi XML Schema)
Dr. Sabin Buraga http://www.purl.org/net/busaco
23. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery
Spatii de nume ce pot fi folosite:
xs (schema XML) http://www.w3.org/2001/XMLSchema
xsi (instanta de schema XML)
http://www.w3.org/2001/XMLSchema-instance
xdt (tipuri de date XPath 2.0)
http://www.w3.org/2003/xpath-datatypes
local (functii XQuery locale)
http://www.w3.org/2003/11/xquery-local-functions
xml (XML)
http://www.w3.org/XML/1998/namespace
Dr. Sabin Buraga http://www.purl.org/net/busaco
24. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery
Pentru selectarea nodurilor, se foloseste XPath
Orice expresie XPath reprezinta un program XQuery
Rezultatul unui program XQuery este o padure
(secventa de arbori XML)
Ca la XSLT, interogarile pot fi incluse in sabloane
care sa genereze rezultatul dorit
<proiecte>
{ /projects/project/* } Program XQuery
ce contine o expresie
</proiecte> XQuery
Dr. Sabin Buraga http://www.purl.org/net/busaco
25. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery
O expresie de forma $nume este o referinta
la variabila nume
Variabilele pot fi folosite
(si) in cadrul expresiilor XPath
Variabilele pot contine valori sau rezultate
ale expresiilor FLOWR
(ForLetOrderWhereResult)
Dr. Sabin Buraga http://www.purl.org/net/busaco
26. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – expresii
for serveste la atasarea de valori unor variabile,
in maniera iterativa (se permit si join‐uri)
let asigneaza valoarea unei expresii unei variabile
where permite formularea de conditii (filtrari de date)
asociate unei constructii for
order by specifica ordinea de selectare a valorilor
return intoarce rezultatul unei expresii XQuery,
putind include sabloane, expresii XPath,
sub‐expresii FLOWR imbricate
Dr. Sabin Buraga http://www.purl.org/net/busaco
27. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – expresii
Exemplu:
for $stud in doc (students.xml)//student
where $stud/year = 2 return $stud/name
echivalent cu fraza SQL
select stud.name from students stud where stud.year = 2
Dr. Sabin Buraga http://www.purl.org/net/busaco
28. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – expresii
Se poate recurge la facilitatile XPath 2.0:
cuantificatori (all si some),
expresii conditionale (if...then...else),
operatori (cei de la XPath 2.0 + suplimentari),
functii (predefinite ori scrise de utilizator)
Nu sunt acceptate toate axele XPath
Dr. Sabin Buraga http://www.purl.org/net/busaco
29. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – expresii
Pot fi declarate tipuri de date
(cele oferite de XML Schema)
pentru valorile intoarse
for $contor as xs:integer in 1 to 5
return $contor * 3
Dr. Sabin Buraga http://www.purl.org/net/busaco
31. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – functii uzuale
Data & timp: duration-equal(), time-less-than()...
Noduri: name(), local-name(), namespace-uri(), root()
Secvente: zero-or-one(), one-or-more(), exactly-one(), index-of(),
empty(), exists(), distinct-values(), remove(), insert-before(),
reverse(), unordered(), deep-equal(),...
Context: position(), last(), current-dateTime(),...
Generare de secvente: doc(), collection()
Detalii la http://www.w3.org/TR/xpath-functions/
Pot fi folosite si functii externe
Dr. Sabin Buraga http://www.purl.org/net/busaco
32. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – exemple
for $proj in
doc (http://www.infoiasi.ro/projects.xml)/projects/*
where some $projid in $proj/@id
satisfies ($projid = $stud/project)
return
Generarea
<project class={ $proj/@class }>
altei structuri
{ $proj/title } XML
{ $proj/desc }
</project>
Dr. Sabin Buraga http://www.purl.org/net/busaco
33. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – exemple
(: Listeaza ca document XHTML toti studentii
ale caror nume contin 'Ping' si se termina cu 'uin‘ :)
<div class=stud>
{
for $stud in doc (students.xml)//student
let $e := $stud/name[ contains (string (.), Ping)
and ends-with (string (.), uin) ]
where exists ($e)
return
<p><span class=name> { $stud/name/text() } </span>
cu proiectul <span class=title> { $stud/project/text() }
</span></p>
}
</div>
Dr. Sabin Buraga http://www.purl.org/net/busaco
34. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – exemple
(: Fibonacci recursiv – dupa Chris Wallace, 2008 :)
declare function s:fib-rec ($n as xs:integer)
as xs:integer? {
if ($n < 0) then ()
else if ($n = 0) then 0
else if ($n = 1) then 1
else s:fib-rec ($n - 1) + s:fib-rec ($n - 2)
};
A se consulta si http://en.wikibooks.org/wiki/XQuery/
Dr. Sabin Buraga http://www.purl.org/net/busaco
35. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – exemple
Modularizare via fisiere‐modul (.xqm) si functii‐utilizator
module namespace utils=http://urn:infoiasi.ro:xdb-utils;
(: Declara o secventa de nume de luni :)
declare variable $utils:months { (Ian, Feb, Mar, Apr, Mai, Iun,
Iul, Aug, Sep, Oct, Nov, Dec)
};
(: Transforma data in forma dd Mmm yyyy :)
declare function utils:format-date-RO ($date as xs:dateTime)
as xs:string {
string-join ((
day-from-date ($date),
item-at ($utils:months, month-from-date ($date)),
year-from-date ($date)), )
};
Dr. Sabin Buraga http://www.purl.org/net/busaco
37. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: xquery – exemple
(: Autentificare prin nume de cont & parola preluate
din sesiunea HTTP curenta; intoarce o pereche
(user, password) sau o secventa vida in caz de esec :)
declare function main:checkUser() as xs:string* {
let $user := request:get-session-attribute (user),
$pass := request:get-session-attribute (password),
$login := xdb:authenticate (xmldb:exist:///db,
$user, $pass)
return
if ($login) then Se folosesc functii
($user, $pass) externe – aici, oferite
else de serverul eXist
()
};
Dr. Sabin Buraga http://www.purl.org/net/busaco
38. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: alte limbaje
Limbajul XQuery in varianta actuala nu ofera
suport pentru actualizarea datelor XML
(operatii CRUD – Create, Read, Update, Delete)
XUpdate – in curs de standardizare,
dar suportat deja de o serie de aplicatii
www.w3.org/TR/xquery‐update‐10/
Viitoarele versiuni ale XQuery vor include
si posibilitati de actualizare a datelor
Dr. Sabin Buraga http://www.purl.org/net/busaco
39. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: alte limbaje
Pentru tipuri particulare de documente,
pot fi folosite limbaje de interogare speciale
exemplu: SPARQL pentru RDF
Dr. Sabin Buraga http://www.purl.org/net/busaco
40. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
interogare: implementari
Instrumente, aplicatii & implementari (exemple):
Editare & depanare: <oXygen />, Stylus Studio
Suport pentru baze de date native XML:
Berkeley DB XML, eXist, Mark Logic’s CIS, Sedna
Sisteme relationale XMLenabled:
Oracle, MS SQL Server
API‐uri – e.g., Saxon (Java, .NET),
XML::XQuery (modul Perl),
XQuery API for Java (XQJ) – JSR 225
Dr. Sabin Buraga http://www.purl.org/net/busaco
41. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare
Scop #2:
Implementarea unor sisteme de management
al informatiilor XML
Dr. Sabin Buraga http://www.purl.org/net/busaco
42. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare
Middleware:
DB2XML, DBIx::XML, XDBC (XML DataBase Connectivity)
Sisteme de baze de date native XML:
Berkeley DB XML, DBDOM, eXist, Tamino, XDB, Xindice,...
Servere (suportind) XML:
AxKit, Enhydra, WebObjects
Servere XMLenabled:
DB2 Information Integrator, MS SQL, Oracle,…
Dr. Sabin Buraga http://www.purl.org/net/busaco
43. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare
Motoare de interogare XML
Conectoare (XML data binding)
Sisteme de management al continutului:
Docato, Dynabase, Frontier, iENGINE, Mark Logic’s CIS,
Prowler, Syncato, UltraXML,...
API‐uri:
Persistent DOM (PDOM), XML:DB, XQJ
Dr. Sabin Buraga http://www.purl.org/net/busaco
44. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare: utilizari
Integrarea datelor semi‐structurate:
date privitoare la afaceri
“Get a coherent view of the mess in the back office”
(Michael Champion)
analiza cererilor de plata
productia de stiri (online)
date financiare
Dr. Sabin Buraga http://www.purl.org/net/busaco
45. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare: utilizari
Integrarea datelor semi‐structurate:
informatii privitoare la transport (aerian)
industrii: medicala, de divertisment,...
suportul acordat clientilor
(in contextul CRM – Client Relationship Management)
informatii din domeniul legal
Dr. Sabin Buraga http://www.purl.org/net/busaco
46. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare: utilizari
Necesitatea suportului pentru tranzactii
stocare
cozi de mesaje
arhive
meta‐date
depozite
Dr. Sabin Buraga http://www.purl.org/net/busaco
47. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare: exemple
Elsevier Science
peste 2 TB de informatii
>5 mil. articole, >60 mil. referinte + rezumate,
>1000 carti,...
Mark Logic’s CIS
Oxford University Press
platforma online de publicare,
continutul stocat in format XML, facilitati de cautare
Mark Logic’s CIS
Dr. Sabin Buraga http://www.purl.org/net/busaco
48. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
manipulare: exemple
Autodesk
manuale (HTML, PDF, CHM,...) in >30 de limbi
X‐Hive/DB
Las Vegas Sun
>10 GB (peste 750000 doc. XML, imagini si doc. PDF)
FDX XML Server
US Navy
peste 100 mii volume tehnice
Tamino
Dr. Sabin Buraga http://www.purl.org/net/busaco
49. <?xml version=“1.0” ?>
Semantic Web <curs desc=“…” />
rezumat
Interogarea datelor XML
Introducere
Stocarea datelor XML
Definitii
Limbajul XQuery
Sisteme de manipulare a informatiilor XML
Dr. Sabin Buraga http://www.purl.org/net/busaco