CSE 6331 © Leonidas Fegaras XQuery 1 XQuery Leonidas Fegaras.
XQuery in DB2, Oracle ed SQL Server - cs.unibo.itmontesi/CBD/05QueryNeiDBMS.pdf ·...
Transcript of XQuery in DB2, Oracle ed SQL Server - cs.unibo.itmontesi/CBD/05QueryNeiDBMS.pdf ·...
XQuery in DB2, Oracle e SQL Server
Introduzione l Analizziamo il supporto allo standard XQuery fornito dai DBMS più diffusi, evidenziando eventuali differenze tra lo standard e le sue implementazioni.
l Esamineremo i DBMS: -‐ DB2 Express-‐C (Versione 10.1) -‐ Oracle XML DB (Versione 11.2) -‐ MS SQL Server 2012 l Mostreremo alcune query effeNuate sui tre sistemi, soNolineando le eventuali differenze. Inoltre, meNeremo l'accento sulle feature esclusive dei tre sistemi, e sulle tecniche che quesQ meNono a disposizione degli utenQ per integrare archivi XML con database relazionali.
l Infine faremo qualche riferimento ad Oracle Berkeley XML, un insieme di librerie dedicate alla gesQone di database XML.
XQuery in DB2, Oracle e SQL Server
DocumenQ di esempio
Mostreremo alcune interrogazioni XQuery eseguite sui diversi DBMS. I documenQ che andremo ad interrogare sono Employees.xml e Departments.xml, che rappresentano gli impiegaQ di un'azienda ed i diparQmenQ in cui lavorano. I due documenQ sono 'collegaQ' dall'aNributo deptno, che verrà uQlizzato per effeNuare eventuali join.
XQuery in DB2, Oracle e SQL Server
Documento di esempio: Departments
Departments.xml <depts> <dept deptno="10" dname="Administration"/> <dept deptno="20" dname="Marketing"/> <dept deptno="30" dname="Purchasing"/> <dept deptno="40" dname="Publishing"/> <dept deptno="50" dname="Transport"/> </depts>
XQuery in DB2, Oracle e SQL Server
Documento di esempio: Employees
Employees.xml <emps>
<emp empno="1" deptno="10" ename="John" salary="21000"/> <emp empno="2" deptno="10" ename="Jack" salary="310000"/> <emp empno="3" deptno="20" ename="Jill" salary="100001"/> <emp empno="4" deptno="30" ename="Andrew" salary="50000"/> <emp empno="5" deptno="30" ename="Smith" salary="123000"/> <emp empno="6" deptno="30" ename="James" salary="34000"/> <emp empno="7" deptno="40" ename="Tom" salary="210000"/> <emp empno="8" deptno="40" ename="Derek" salary="223000"/> <emp empno="9" deptno="50" ename="Alice" salary="120000"/> <emp empno="10" deptno="50" ename="Sandra" salary="12000"/>
</emps>
XQuery in DB2, Oracle e SQL Server
DB2, XML e XQuery l DB2 permeNe di inserire in tabelle relazionali colonne di Qpo XML, in cui è poi possibile inserire dei daQ uQlizzando dei normali comandi INSERT combinaQ con la funzione XMLPARSE, che prende in input una stringa e (se possibile) la converte in un frammento XML che il DBMS riesce a gesQre. l Perchè sia possibile uQlizzare il Qpo XML, il database deve usare la codifica UTF-‐8 (questa opzione si può scegliere alla sua creazione). l Le interrogazioni XQuery andranno poi inserite all'interno della clausola SELECT di interrogazioni SQL, uQlizzando la funzione XMLQUERY, e resQtuiranno dei frammenQ XML. l E' possibile anche uQlizzare altre funzioni per combinare query relazionali e interrogazioni XQuery: XMLEXISTS può essere uQlizzata all'interno della clausola WHERE, mentre XMLTABLE viene uQlizzata all'interno della clausola FROM.
XQuery in DB2, Oracle e SQL Server
DB2: Path expression DB2 fornisce un supporto completo per tua gli assi delle path expression, tua i Qpi di nodo e tua i test previsQ dallo standard XPath.
Esempi: l /descendant-or-self::book[attribute::year>1992] (seleziona tua gli elemenQ 'book' appartenenQ all'asse 'descendant-‐or-‐self' che abbiano un aNributo 'year' con valore maggiore di 1992) l /child::bib/child::book/child::text() (seleziona tua gli elemenQ di Qpo testuale figli di un elemento 'book' a sua volta figlio di un elemento 'bib')
XQuery in DB2, Oracle e SQL Server
DB2: Creazione di una tabella XML
Per iniziare la nostra serie di esempi, dobbiamo creare delle tabelle in grado di contenere daQ di Qpo XML: per fare questo, è sufficiente specificare XML come Qpo di dato di una colonna. Nel nostro caso, vogliamo due tabelle, ciascuna delle quali conterrà uno dei documenQ visQ in precedenza.
Esempi database CREATE TABLE employees (data XML) CREATE TABLE departments (data XML)
XQuery in DB2, Oracle e SQL Server
DB2: Inserimento di daQ XML in una tabella
Per inserire i daQ nelle tabelle che abbiamo costruito, basterà usare la funzione XMLPARSE all'interno di una normale clausola INSERT, passandole una stringa rappresentante il documento XML che vogliamo inserire nella tabella. E' possibile scegliere se mantenere o meno il whitespace.
Esempio insert INSERT INTO departments(data) VALUES (XMLPARSE (document cast ('<depts> <dept deptno="10" dname="Administration"/> .... <dept deptno="50" dname="Transport"/> </depts>' as clob) preserve whitespace) )
XQuery in DB2, Oracle e SQL Server
DB2: XQuery in SELECT Ora che abbiamo inserito i daQ nelle tabelle, cominciamo a fare qualche query. In questo primo esempio, vogliamo estrarre i nomi di tua i diparQmenQ ed inserirli in elemenQ XML <deptName>. UQlizziamo la funzione XMLQUERY per inserire l'interrogazione XQuery in un'espressione SQL.
XQuery 1 SELECT XMLQUERY
('for $d in $list//dept return <deptName>{ $d/@dname }</deptName>' passing dtable.data as "list")
FROM departments dtable
La clausola passing serve per specificare su quale frammento XML si sta lavorando. In questo caso passiamo il contenuto della tabella departments come ‟list”: in questo modo verrà creata una variabile $list che potremo uQlizzare all'interno della query per riferirci al frammento XML che abbiamo inserito in precedenza nella tabella.
XQuery in DB2, Oracle e SQL Server
DB2: XQuery con where ed order by in SELECT Complichiamo un po' la query: adesso vogliamo estrarre i nomi e gli sQpendi di tua gli impiegaQ con sQpendio superiore a 50.000. Inoltre, vogliamo che i risultaQ siano inseriQ in elemenQ <empSalary> ed ordinaQ per sQpendio.
XQuery 2 SELECT XMLQUERY
('for $e in $list//emp where $e/@salary > 50000 order by $e/@salary return <empSalary>{ $e/@ename }{$e/@salary}</empSalary>' passing etable.data as "list")
FROM employees etable
XQuery in DB2, Oracle e SQL Server
DB2: : XQuery con let ed operatori aggregaQ in SELECT
Vogliamo estrarre per ogni impiegato il suo nome, il suo sQpendio e la media degli sQpendi del diparQmento in cui lavora.
XQuery 3 SELECT XMLQUERY
('for $e in $list//emp let $avgsal := avg($list//emp[@deptno = $e/@deptno]/@salary) return <averages>{$e/@ename}{$e/@salary}{$avgsal}</averages>' passing etable.data as "list")
FROM employees etable
La clausola let verrà eseguita ad ogni ciclo del for, calcolando per ogni elemento <emp> la media dei valori @salary di tua gli elemenQ <emp> con il suo stesso @deptno.
XQuery in DB2, Oracle e SQL Server
DB2: Operatori condizionali
In questo esempio vogliamo creare un elemento <salaries> che sia vuoto se l'impiegato John guadagna più dell'impiegato Smith, e che contenga lo sQpendio di Smith altrimenQ.
XQuery 4 SELECT XMLQUERY
('let $john := $list//emp[@ename="John"] let $smith := $list//emp[@ename="Smith"] return if ($john/@salary > $smith/@salary) then <salaries/> else <salaries>{$smith/@salary}</salaries>' passing etable.data as "list")
FROM employees etable
XQuery in DB2, Oracle e SQL Server
DB2: Operatori su insiemi
In questo esempio vogliamo estrarre i nomi di tua gli impiegaQ che lavorano nel diparQmento con @deptno 30, e di quelli che guadagnino meno di 100.000.
XQuery 5 SELECT XMLQUERY
('let $emps30 := $list//emp[@deptno = 30] let $empspoor := $list//emp[@salary < 100000] for $e in ($emps30 union $empspoor) return <empName>{$e/@ename}</empName>' passing etable.data as "list")
FROM employees etable
In questo caso, la clausola let è al di fuori della clausola for e quindi viene calcolata soltanto una volta.
XQuery in DB2, Oracle e SQL Server
DB2: QuanQficatori
In questo esempio vogliamo estrarre i nomi e gli sQpendi di tua gli impiegaQ, ma solo se c'è almeno un impiegato che abbia uno sQpendio superiore a 100000.
XQuery 6 SELECT XMLQUERY
('if (some $emp in $list//emp satisfies ($emp/@salary > 100000))
then <results>
{for $e in $list//emp return <emp>{$e/@ename}{$e/@salary}</emp>}
</results> else
<results/>' passing etable.data as "list")
FROM employees etable
XQuery in DB2, Oracle e SQL Server
DB2: Join
In questo esempio, vogliamo selezionare il nome di tua gli impiegaQ che lavorano nel diparQmento chiamato ‟Purchasing”.
XQuery 7 SELECT XMLQUERY
('let $purchasingdep := $dlist//dept[@dname = "Purchasing"] for $e in $elist//emp where $e/@deptno = $purchasingdep/@deptno return <empName>{$e/@ename}</empName>' passing etable.data as "elist", dtable.data as "dlist")
FROM employees etable, departments dtable
Perchè il join tra le due tabelle funzioni, dobbiamo uQlizzare la clausola passing per passare sia il contenuto di employees che quello di departments.
XQuery in DB2, Oracle e SQL Server
DB2: Join, clausola let ed operatori aggregaQ
Ora vogliamo selezionare, per ogni diparQmento, il suo nome e la somma degli sQpendi degli impiegaQ che ci lavorano.
XQuery 8
SELECT XMLQUERY
('for $d in $dlist//dept let $sumsalary := sum($elist//emp[@deptno = $d/@deptno]/@salary) return <deptCost>{$d/@dname} {$sumsalary}</deptCost>' passing etable.data as "elist", dtable.data as "dlist")
FROM employees etable, departments dtable
XQuery in DB2, Oracle e SQL Server
DB2: UlQmo esempio di XQuery in SELECT Vogliamo selezionare per ogni diparQmento il numero dei suoi impiegaQ ed il loro sQpendio medio. Vogliamo che i risultaQ siano ordinaQ in base al costo totale (la somma degli sQpendi) di ogni diparQmento, e che solo i diparQmenQ con più di un impiegato siano inclusi in questa query.
XQuery in DB2, Oracle e SQL Server
XQuery 9 SELECT XMLQUERY
('for $d in $dlist//dept let $emps := $elist//emp[@deptno = $d/@deptno] where count($emps) > 1 order by sum($emps/@salary) descending return <big-dept> {$d/@dname} <headcount> {count($emps)}</headcount> <avgsal>{avg($emps/@salary)}</avgsal> </big-dept>'
passing etable.data as "elist", dtable.data as "dlist") FROM employees etable, departments dtable
Oracle DB e XQuery
l Oracle DB fornisce un supporto completo ad XQuery, in maniera molto simile a DB2: come si vedrà negli esempi, gran parte delle funzioni uQlizzate sono le stesse.
l Oracle XML DB è progeNato con parQcolare aNenzione alla coesistenza tra XML ed SQL.
XQuery in DB2, Oracle e SQL Server
Oracle DB: Funzionalita‘ non supportate
Anche se OracleDB implementa tuNe le caraNerisQche principali di XQuery, alcune funzionalita‘ presenQ nello standard non sono supportate: l version encoding: non è possibile specificare la codifica uQlizzata all'interno dell'espressione XQuery;
l xml:id: se si uQlizza questa funzionalita‘, viene generato un errore; l xs:duraOon: questo Qpo di dato non è supportato; è possibile usare i Qpi xs:yearMonthDuraQon o xs:DayTimeDuraQon in alternaQva.
l schema validaOon feature (opzionale nello standard); l module feature (opzionale nello standard).
XQuery in DB2, Oracle e SQL Server
Oracle DB e XPath 2.0
OracleDB fornisce pieno supporto alle funzioni e agli operatori inclusi in XPath 2.0 (come le operazioni tra insiemi e i quanQficatori già visQ per DB2), con alcune eccezioni: l non è possibile uQlizzare le funzioni standard per la definizione di espressioni regolari, ma bisogna usare quelle built-‐in all'interno del DBMS;
l non sono supportate le funzioni fn:id e fn:idref; l non è supportata la funzione fn:collecOon senza argomenQ.
XQuery in DB2, Oracle e SQL Server
Oracle DB: Creazione di una tabella XML
Come in DB2, in Oracle DB è possibile inserire all'interno di tabelle relazionali delle colonne di Qpo XML, uQlizzando la parola chiave XMLType. E' inoltre possibile creare delle tabelle che siano esse stesse di Qpo XML.
Esempi: Creazione di una tabella XML: CREATE TABLE employees OF XMLType Creazione di una tabella relazionale con una colonna XML: CREATE TABLE departments
(id NUMBER(4), data XMLType)
Negli esempi seguenQ, assumeremo che sia employees che departments siano tabelle di Qpo XML.
XQuery in DB2, Oracle e SQL Server
Oracle DB: Implementazioni dell'XMLType
L‘XMLType è un costruNo astraNo, e può essere implementato dal DBMS in due modi: l All'interno di un LOB (Large OBject), ovvero come una semplice stringa. l In uno Structured Storage: scegliendo questa ozpione, il DBMS si costruirà automaQcamente tabelle e viste che seguano lo schema XML del documento e le userà per contenere i singoli nodi che esso conQene, rimanendo fedele al suo DOM (Document Object Model). La scelta dell'implementazione non ha nessuna conseguenza sui metodi che l'utente dovrà usare per operare sugli elemenQ XMLType; avrà però conseguenze sulle prestazioni delle query. Non è possibile definire una delle due modalità di storage come ‟superiore”: per oNenere le prestazioni migliori, è necessario provare caso per caso.
XQuery in DB2, Oracle e SQL Server
Oracle DB: Inserimento di daQ XML in una tabella
Per inserire daQ all'interno di una tabella o di una colonna XML, si usa la funzione XMLType all'interno di un comando INSERT, passandole il frammento XML che si vuole inserire.
Esempio: INSERT INTO departments VALUES (XMLType ('<depts> <dept deptno="10" dname="Administration"/> <dept deptno="20" dname="Marketing"/> <dept deptno="30" dname="Purchasing"/> <dept deptno="40" dname="Publishing"/> <dept deptno="50" dname="Transport"/> </depts>'))
XQuery in DB2, Oracle e SQL Server
Oracle DB: Esempio di query e differenze da DB2 Mostriamo una query che avevamo già eseguito in DB2: le differenze sono davvero poche. In questo esempio vogliamo estrarre il nome e lo sQpendio di tua gli impiegaQ con sQpendio superiore a 50000, ordinaQ dal meno pagato al più pagato.
Esempio di XQuery SELECT XMLQUERY
('for $e in //emp where $e/@salary > 50000 order by $e/@salary return <empSalary>{ $e/@ename }{$e/@salary}</empSalary>' passing etable.object_value returning content)
FROM employees etable
A parte alcune piccole differenze nella clausola passing e l'aggiunta della clausola returning content, il sistema di query è sostanzialmente lo stesso di DB2.
XQuery in DB2, Oracle e SQL Server
Oracle DB: Esempio di join Mostriamo una query in cui si effeNua il join tra due tabelle XML: anche in questo caso, la sintassi è estremamente simile a quella uQlizzata in DB2. Lo scopo della query è estrarre tua gli impiegaQ che lavorano nel diparQmento chiamato ‟Purchasing”.
Esempio di XQuery con join SELECT XMLQUERY
('for $e in $elist//emp let $d := $dlist//dept[@dname = "Purchasing"] where $e/@deptno = $d/@deptno return $e' passing etable.object_value as "elist",
dtable.object_value as "dlist" returning content) FROM employees etable, departments dtable
XQuery in DB2, Oracle e SQL Server
DB2: Operare direNamente sui documenQ XML
Se non si vuole inserire i daQ dentro delle tabelle, è possibile uQlizzare la funzione doc() per effeNuare query direNamente su file XML. Vediamo un esempio della stessa query vista poco fa, ma questa volta applicata al file employees.xml.
SELECT XMLQUERY ('for $e in doc(‟employees.xml”)//emp where $e/@salary > 50000 order by $e/@salary return <empSalary>{ $e/@ename }{$e/@salary}</empSalary>' returning content)
FROM DUAL
La tabella DUAL è presente di default in tua i database Oracle, ed è vuota: serve solamente ad ovviare al faNo che la clausola FROM è obbligatoria in tuNe le query SQL, anche nel caso in cui i daQ vengano presi tramite altri mezzi (come, in questo caso, la funzione doc() ).
XQuery in DB2, Oracle e SQL Server
SQL Server: Versione di XQuery supportata
l Microsor SQL Server supporta solo un soNoinsieme delle funzionalità di XQuery, basandosi sulla Working Drar del 2004 dello standard.
l Di seguito vedere quali sono le funzionalita‘non implementate da questo sistema.
XQuery in DB2, Oracle e SQL Server
SQL Server: Sequenze e Path
Per quanto riguarda le Sequenze, sono da segnalare le seguenQ limitazioni: l Le sequenze devono essere omogenee, quindi possono essere composte solo da nodi o da valori atomici;
l Non è supportato il costruNo to per costruire le sequenze; l Non è possibile usare gli operatori union, intersect, except per combinare sequenze formate da nodi.
Le Path Expressions sono supportate, ma non del tuNo: l Si possono uQlizzare solo gli assi child, descendant, parent, aUribute, self, descendant-‐or-‐self;
l Sono supportaQ solo i Qpi di nodo comment(), node(), processing-‐instruc=on(), text().
XQuery in DB2, Oracle e SQL Server
SQL Server: Espressioni FLWOR
Le espressioni FLWOR sono interamente supportate. l E' da segnalare che in SQL Server 2008 R2 le espressioni assegnate ad una variabile tramite una clausola LET verranno inserite nelle query ogni volta che la variabile sarà referenziata al suo interno.
l Questo significa che l'espressione non verrà eseguita una volta sola, ma verrà ricalcolata ogni volta che si farà riferimento a quella variabile.
XQuery in DB2, Oracle e SQL Server
SQL Server: Altre funzionalità
Altri operatori supportaQ sono: l Costrua condizionali if-‐then-‐else; l Operatori di confronto; l Operatori logici (solo and e or: not è disponibile come funzione); l Tua gli operatori aritmeQci ecceUo idiv; l TuNe le funzioni aggregate; l Espressioni con quanQficatori esistenziali ed universali (some/saOsfies e every/saOsfies).
XQuery in DB2, Oracle e SQL Server
SQL Server: Creazione di una tabella XML
Come per DB2, per operare su daQ XML dobbiamo per prima cosa creare una tabella adaNa a contenerli. Per fare ciò, è sufficiente inserire al suo interno una colonna di Qpo XML.
Esempio di tabelle CREATE TABLE employees(
col1 int primary key, data XML)
CREATE TABLE departments(
col1 int primary key, data XML)
XQuery in DB2, Oracle e SQL Server
SQL Server: Inserimento di daQ XML in una tabella
Per inserire daQ nella tabella che abbiamo appena creato, è sufficiente inserire una stringa contenente il frammento XML nell'operazione INSERT.
Esempio di insert INSERT INTO departments VALUES (1, ('<depts> <dept deptno="10" dname="Administration"/> <dept deptno="20" dname="Marketing"/> <dept deptno="30" dname="Purchasing"/> <dept deptno="40" dname="Publishing"/> <dept deptno="50" dname="Transport"/> </depts>'))
XQuery in DB2, Oracle e SQL Server
SQL Server: differenze da DB2 ed OracleDB Mostriamo la stessa query che avevamo effeNuato per DB2 e OracleDB: vogliamo estrarre nome e sQpendio degli impiegaQ che guadagnano più di 50.000, ordinaQ per sQpendio.
Esempio di XQuery: SELECT data.query
('for $e in //emp where $e/@salary > 50000 order by $e/@salary return <employee>{ $e/@ename }{$e/@salary}</employee>')
AS result FROM employees
A parte alcune variazioni nel passaggio dei daQ (invece di uQlizzare una clausola passing, applichiamo direNamente la funzione query() alla colonna XML ‟data” contenuta nella tabella employees), la sintassi è sempre la solita.
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: un insieme di librerie
l Oracle Berkeley non è un vero e proprio DBMS, ma un insieme di librerie che possono essere uQlizzate da tua i più comuni linguaggi di programmazione per gesQre con semplicità database XML.
l Oracle Berkeley non fornisce nessun supporto per database relazionali. l E' possibile operare anche tramite un'interfaccia testuale che interpreta direNamente alcuni comandi (come negli esempi che mostreremo in seguito).
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: Operazioni principali
l L'oggeNo fondamentale, in Oracle Berkeley, è il container (vagamente paragonabile alle tabelle dei DBMS relazionali).
l Una volta creato un container, è possibile inserirvi dei documenQ XML. l E' possibile recuperare dei frammenQ XML da un container effeNuando un'interrogazione XQuery.
l Si può uQlizzare XML Schema per inserire dei constraint (vincoli) sui documenQ. l E' anche possibile creare degli indici che aumenQno le prestazioni.
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: Creazione di un container
E' possibile scegliere due Qpi diversi di memorizzazione: l per documento: i documenQ vengono salvaQ esaNamente come sono staQ daQ al sistema; l per nodi: i documenQ vengono scomposQ nei nodi che li formano, che vengono poi salvaQ separatamente. La memorizzazione per nodi dà la possibilità di modificare il documento in futuro, e garanQsce prestazioni migliori.
Esempio (tramite console):
dbxml> createContainer esempio.dbxml
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: Inserire un documento
Per inserire documenQ nel container corrente si uQlizza l'operazione ‟putDocument <namePrefix> <string> [f|s|q]”. l MeNere ‟f” come terzo parametro indica che la stringa conQene il path del file XML che si vuole inserire. l MeNere ‟s” come terzo parametro indica che la stringa conQene il frammento XML che si vuole passare.
Esempi (tramite console):
dbxml> putDocument book1 '<book><title>Title1</title><author>Author1</author><pages>100</pages></book>' s dbxml> putDocument book1'Document.xml' f
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: query Per recuperare i documenQ inseriQ dei container, si effeNuano interrogazioni XQuery. Oracle Berkeley effeNuerà la ricerca su tua i documenQ contenuQ nel container.
Esempi (tramite console):
Restituire l'intero contenuto della collezione: dbxml> query 'collection("esempio.dbxml")' Restituire il titolo di tutti i libri che abbiano John come autore: dbxml> query 'collection("esempio.dbxml")/book[author="John"]/title' Restituire il titolo di tutti i libri con prezzo maggiore di 100: dbxml> query 'for $book in collection("esempio.dbxml") where $book/price > 100 return $book/title'
XQuery in DB2, Oracle e SQL Server
Oracle Berkeley: vincoli
l Durante la creazione di un container, è possibile legare ad un documento XML uno schema; in questo modo, si potranno inserire soltanto documenQ XML che superino la validazione con quello schema. l E' anche possibile specificare vincoli diversi per documenQ diversi, all'interno dello stesso container.
XQuery in DB2, Oracle e SQL Server
Installazione DB2
l Dal sito hNp://www-‐01.ibm.com/sorware/data/db2/ è possibile effeNuare il download dei sorware necessari all'esecuzione di DB2. l La versione gratuita del DBMS è chiamata ‟DB2 Express-‐C”. l Dal'indirizzo hNp://www.ibm.com/developerworks/downloads/im/data/ è possibile scaricare IBM Data Studio, un'interfaccia grafica gratuita estremamente uQle per effeNuare qualunque Qpo di operazione.
XQuery in DB2, Oracle e SQL Server
Installazione di Oracle XML
l Dal sito www.oracle.com, nella sezione Downloads, è possibile scaricare gratuitamente Oracle Database 11g, che conQene anche Oracle XML. l Anche in questo caso è necessaria un'interfaccia grafica per interagire in maniera semplice con il DBMS: si chiama Oracle SQL Developer, anche questa scaricabile dalla sezione Downloads di www.oracle.com.
XQuery in DB2, Oracle e SQL Server
Installazione di Microsor SQL Server 2012
l Dal sito hNp://www.microsor.com/sqlserver è possibile scaricare MS SQL Server 2012 Express, una versione gratuita del DBMS. l Scegliendo il paccheNo di download Express with Tools, verrà installata anche l'interfaccia grafica SQL Server Management Studio Express.
XQuery in DB2, Oracle e SQL Server