dati relazionali e xml - plone sitemontesi/cbd/03sqlxml.pdf · 2013-10-11 · sql/xml 6...
TRANSCRIPT
![Page 1: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/1.jpg)
Dati relazionali e XML
![Page 2: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/2.jpg)
SQL/XML
2
Introduzione (1)
DBMS relazionale
Applicazione
Applicazione
Applicazione
Memorizzazione dei dati Utilizzo dei dati
XML
XML
![Page 3: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/3.jpg)
SQL/XML
3
Introduzione (2)
DBMS relazionale
Applicazione
Applicazione
Applicazione
Utilizzo dei dati
XML
XML
Oggi gran parte dei dati viene memorizzata in database relazionali.
Memorizzazione dei dati
![Page 4: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/4.jpg)
SQL/XML
4
Introduzione (3)
DBMS relazionale
Applicazione
Applicazione
Applicazione
Utilizzo dei dati
XML
XML
Numerose applicazioni utilizzano XML come formato di scambio e manipolazione dei dati.
Memorizzazione dei dati
![Page 5: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/5.jpg)
SQL/XML
5
Introduzione (4)
! XML viene utilizzato principalmente per due tipi di attività di data management: ! Scambio di dati tra applicazioni. ! Rappresentazione di dati semi-strutturati.
! Quando i dati scambiati tra diverse applicazioni sono localmente memorizzati in database relazionali, è necessario un “ponte” tra questi due formati.
! SQL/XML, che è un’estensione standard di SQL, fornisce un linguaggio comune per convertire dati relazionali in XML.
![Page 6: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/6.jpg)
SQL/XML
6
Funzionalità: SQL->XML e XML->SQL
! Per utilizzare congiuntamente dati relazionali e XML occorrono due funzionalità principali: ! Estrazione di XML da una o piu' tabelle relazionali. ! Memorizzazione di XML in una (o più) tabelle relazionali.
! La prima funzionalità è concettualmente più semplice, in quanto XML nasce allo scopo di rappresentare dati sia semi-strutturati che strutturati.
! La seconda è in generale più complessa, per lo stesso motivo.
Dati Strutturati Dati semi-strutturati SQL
XML Dato rappresentabile sia in relazionale che in XML
Dato difficilmente rappresentabile in relazionale
![Page 7: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/7.jpg)
SQL/XML
7
Estrarre XML da una tabella
! Estrarre dati XML a partire da una tabella e' semplice, perche' qualsiasi dato rappresentabile in una tabella e' anche rappresentabile in XML.
! Vediamo due modi alternativi per realizzare questa funzionalità.
XML
![Page 8: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/8.jpg)
SQL/XML
8
1: Estrarre XML da una tabella (XML + XQuery)
! Rappresentare la tabella in XML (mappatura). ! Estrarre dati utilizzando tecnologie XML (XQuery).
XML XML mappatura XQuery
![Page 9: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/9.jpg)
SQL/XML
9
IMPIEGATIID NOME COGNOME SALARIO
imp0001 Mario Rossi 20000imp0002 Giorgio Bianchi 18000
XML XML mappatura XQuery
Partiamo da una tabella relazionale.
![Page 10: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/10.jpg)
SQL/XML
10
XML XML mappatura XQuery
! La mappatura avviene nel seguente modo: ! Il nome della tabella diventa il nome del documento. ! Ogni riga viene inclusa in un elemento <row>. ! Ogni valore (colonna) viene incluso in un elemento con il nome
dell'attributo. ! Valori nulli vengono rappresentati tramite l'attributo xsi:nil="true".
![Page 11: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/11.jpg)
SQL/XML
11
<IMPIEGATI> <row> <ID>imp0001</ID> <NOME>Mario</NOME> <COGNOME>Rossi</COGNOME> <SALARIO>20000</SALARIO> </row> <row> <ID>imp0002</ID> <NOME>Giorgio</NOME> <COGNOME>Bianchi</COGNOME> <SALARIO>18000</SALARIO> </row> </IMPIEGATI>
XML XML mappatura XQuery
Questa è la mappatura definita da SQL/XML.
![Page 12: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/12.jpg)
SQL/XML
12
<xsd:simpleType name="CHAR_6"> <xsd:restriction base="xsd:string"> <xsd:length value="6" /> </xsd:restriction> </xsd:simpleType>
XML XML mappatura XQuery
! Lo standard definisce inoltre uno schema XML contenente le definizioni per ogni tipo di dato SQL e ogni elemento XML.
! Ad esempio, CHARACTER(6) produce:
Frammento di XML Schema, fornito solo a titolo di esempio (non è necessario ricordarne i dettagli)
![Page 13: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/13.jpg)
SQL/XML
13
<salariAlti> { for $e in table("IMPIEGATI")/IMPIEGATI/row where $e/salario > 18000 return <impiegato> {$e/cognome, $e/nome} </impiegato> } </salariAlti>
Funzione NON standard XQuery.
XML XML mappatura XQuery
Interrogazione XQuery, fornita solo a titolo di esempio (XQuery non viene approfondito in questi lucidi)
![Page 14: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/14.jpg)
SQL/XML
14
XML XML mappatura XQuery
! Il risultato è il seguente:
<salariAlti> <impiegato> <nome>Mario</nome> <cognome>Rossi</cognome> </impiegato> </salariAlti>
![Page 15: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/15.jpg)
SQL/XML
15
2: Estrarre XML da una tabella (SQL/XML)
! Estrarre dati dalla tabella (SQL). ! Trasformare questi dati in XML (SQL/XML).
XML Query SQL SQL/XML
![Page 16: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/16.jpg)
SQL/XML
16
XML Query SQL SQL/XML
IMPIEGATIID NOME COGNOME SALARIO
imp0001 Mario Rossi 20000imp0002 Giorgio Bianchi 18000
Partiamo dalla stessa tabella dell’esempio precedente.
![Page 17: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/17.jpg)
SQL/XML
17
XML Query SQL SQL/XML
SELECT i.nome AS nomeImpiegato FROM IMPIEGATI i WHERE salario > 18000
Scriviamo un’interrogazione SQL che ritorni i dati di interesse.
![Page 18: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/18.jpg)
SQL/XML
18
XML Query SQL SQL/XML
SELECT i.nome AS nomeImpiegato FROM IMPIEGATI i WHERE salario > 18000
nomeImpiegato
Mario
Giorgio
![Page 19: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/19.jpg)
SQL/XML
19
XML Query SQL SQL/XML
SELECT XMLELEMENT( NAME "imp", i.nome ) AS nomeImpiegato FROM IMPIEGATI i WHERE salario > 18000
Aggiungiamo i costruttori XML.
![Page 20: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/20.jpg)
SQL/XML
20
XML Query SQL SQL/XML
SELECT XMLELEMENT( NAME "imp", i.nome ) AS nomeImpiegato FROM IMPIEGATI i WHERE salario > 18000
nomeImpiegato
<imp>Mario</imp>
<imp>Giorgio</imp>
Più propriamente, in questo modo non si estrae direttamente dell’XML, bensì tabelle contenenti XML, che può poi essere recuperato ed utilizzato come tale.
![Page 21: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/21.jpg)
SQL/XML
21
Inserimento di XML in DB Relazionali
! Per garantire questa funzionalità, sistemi differenti utilizzano tecniche ad hoc.
! Queste si possono ricondurre a due modalità principali: ! Utilizzo di colonne Object-Relational per memorizzare interi
frammenti XML in un unico campo. ! Shredding (“spezzettamento”) dei documenti, per cui elementi
differenti vengono memorizzati in campi differenti.
![Page 22: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/22.jpg)
SQL/XML
22
Inserire XML (1)
! Un documento XML puo' essere considerato come un tipo di dato di SQL.
! In questo caso, un intero documento viene memorizzato in un attributo (colonna) di una tabella.
XML
XML
XML
XML
![Page 23: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/23.jpg)
SQL/XML
23
Inserire XML (2)
! Con qualche limitazione, un documento XML puo' essere spezzato in frammenti e memorizzato a pezzi.
<impiegato> <ID>imp0001</ID> <COGNOME>Rossi</COGNOME> <SALARIO>20000</SALARIO> </impiegato> <impiegato> <ID>imp0002</ID> <COGNOME>Bianchi</COGNOME> <SALARIO>18000</SALARIO> </impiegato>
ID COGNOME SALARIOimp0001 Rossi 20000imp0002 Bianchi 18000
FILE DI DEFINIZIONE DEL MAPPING
![Page 24: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/24.jpg)
Il linguaggio SQL/XML
![Page 25: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/25.jpg)
SQL/XML
25
Estrarre XML tramite SQL/XML (1)
! SQL/XML definisce i seguenti operatori. ! XMLELEMENT ! XMLFOREST ! XMLCONCAT ! XMLAGG ! XMLGEN
XML Query SQL SQL/XML
![Page 26: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/26.jpg)
SQL/XML
26
Estrarre XML tramite SQL/XML (2)
! Una query SQL/XML ha la seguente struttura: SELECT Attr1, Attr2, ..., Costruttore XML FROM... WHERE...
! Per calcolarne il risultato, ! PRIMA si considera solo SQL, e si calcola una
tabella come se fosse SELECT *. ! POI si costruisce il risultato, selezionando gli
attributi richiesti (Attr1, Attr2...) e costruendo il codice XML PER OGNI TUPLA.
![Page 27: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/27.jpg)
SQL/XML
27
Tabella utilizzata negli esempi
id nome cognome dipartimento licenziato salario
imp0001 Mario Rossi Vendite null 20000
imp0002 Giorgio Bianchi Vendite null 18000
imp0003 Luca Verdi Contabilità null 15000
imp0004 Gianni Neri Contabilità 01/01/03 15000
IMPIEGATO
![Page 28: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/28.jpg)
SQL/XML
28
XMLELEMENT
! XMLELEMENT permette di creare un elemento XML. ! Come argomenti prende:
! Il nome dell'elemento. ! Una eventuale lista di attributi. ! Il contenuto dell'elemento.
![Page 29: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/29.jpg)
SQL/XML
29
XMLELEMENT – esempio
SELECT i.id, XMLELEMENT( NAME "imp", i.nome ) AS risultato FROM IMPIEGATI i
![Page 30: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/30.jpg)
SQL/XML
30
XMLELEMENT – esempio
SELECT i.id, XMLELEMENT( NAME "imp", i.nome ) AS risultato FROM IMPIEGATI i
nome dell'elemento
contenuto
![Page 31: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/31.jpg)
SQL/XML
31
XMLELEMENT – risultato
SELECT i.id, XMLELEMENT( NAME "imp", i.nome ) AS risultato FROM IMPIEGATI i
nome dell'elemento
contenuto
id risultato
imp0001 <imp>Mario</imp>
imp0002 <imp>Giorgio</imp> imp0003 <imp>Luca</imp> imp0004 <imp>Gianni</imp>
![Page 32: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/32.jpg)
SQL/XML
32
XMLELEMENT
! Il contenuto di un elemento puo' essere formato concatenando piu' valori SQL.
! L'operatore di concatenazione e' ||.
![Page 33: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/33.jpg)
SQL/XML
33
XMLELEMENT
SELECT i.id, XMLELEMENT( NAME "imp", i.nome || ' ' || i.cognome ) AS risultato FROM IMPIEGATI i
id risultato
imp0001 <imp>Mario Rossi</imp>
imp0002 <imp>GiorgioBianchi</imp> imp0003 <imp>Luca Verdi</imp> imp0004 <imp>Gianni Neri</imp>
![Page 34: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/34.jpg)
SQL/XML
34
XMLATTRIBUTES
! Per dichiarare una lista di attributi si utilizza l'operatore XMLATTRIBUTES.
! Ogni parametro di XMLATTRIBUTES viene inserito in un attributo che, se non dichiarato esplicitamente, prende il nome della colonna relazionale dalla quale e' stato selezionato.
![Page 35: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/35.jpg)
SQL/XML
35
XMLELEMENT ed XMLATTRIBUTES
SELECT i.id, XMLELEMENT( NAME "imp", XMLATTRIBUTES(i.salario as "sal"), i.nome || ' ' || i.cognome ) AS risultato FROM IMPIEGATI i
id risultato
imp0001 <imp sal="20000">Mario Rossi</imp>
imp0002 <imp sal="18000">Giorgio Bianchi</imp> imp0003 <imp sal="15000">Luca Verdi</imp> imp0004 <imp sal="15000">Gianni Neri</imp>
![Page 36: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/36.jpg)
SQL/XML
36
XMLELEMENT
! Nel contenuto di un elemento si possono specificare piu' oggetti, sia elementi sia stringhe di caratteri.
! Proviamo a creare un elemento che contenga altri due elementi e del testo.
![Page 37: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/37.jpg)
SQL/XML
37
XMLELEMENT – esempio SELECT i.id, XMLELEMENT( NAME "imp", XMLELEMENT( NAME "co", i.cognome), ' del dipartimento ', XMLELEMENT( NAME "dip", i.dipartimento) ) AS risultato FROM IMPIEGATI i
Come detto, il primo parametro specifica
il nome dell’elemento risultante.
![Page 38: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/38.jpg)
SQL/XML
38
XMLELEMENT – esempio SELECT i.id, XMLELEMENT( NAME "imp", XMLELEMENT( NAME "co", i.cognome), ' del dipartimento ', XMLELEMENT( NAME "dip", i.dipartimento) ) AS risultato FROM IMPIEGATI AS i
Di seguito sono elencati i contenuti. In ordine,
specifichiamo un elemento <co>,
un contenuto testuale, un elemento <dip>.
![Page 39: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/39.jpg)
SQL/XML
39
XMLELEMENT – risultato
id risultato imp0001 <imp><co>Rossi</co> del dipartimento
<dip>Vendite</dip></imp>
imp0002 <imp><co>Bianchi</co> del dipartimento <dip>Vendite</dip></imp>
imp0003 <imp><co>Verdi</co> del dipartimento <dip>Contabilità</dip></imp>
imp0004 <imp><co>Neri</co> del dipartimento <dip>Contabilità</dip></imp>
![Page 40: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/40.jpg)
SQL/XML
40
XMLFOREST
! XMLFOREST e' un modo rapido per produrre una lista di elementi semplici.
! Il comportamento dei suoi parametri e' lo stesso di XMLATTRIBUTES.
![Page 41: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/41.jpg)
SQL/XML
41
XMLFOREST – esempio
SELECT i.id, XMLELEMENT( NAME "imp", XMLFOREST( i.nome, i.cognome AS "co", i.dipartimento AS "dip") ) AS risultato FROM IMPIEGATI i
In mancanza di un nome esplicito, viene utilizzato il nome della colonna corrispondente.
![Page 42: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/42.jpg)
SQL/XML
42
XMLFOREST – risultato
id risultato
imp0001 <imp><nome>Mario</nome> <co>Rossi</co><dip>Vendite</dip></imp>
imp0002 <imp><nome>Giorgio</nome> <co>Bianchi</co><dip>Vendite</dip></imp>
imp0003 <imp><nome>Luca</nome><co>Verdi</co> <dip>Contabilità</dip></imp>
imp0004 <imp><nome>Gianni</nome><co>Neri</co> <dip>Contabilità</dip></imp>
![Page 43: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/43.jpg)
SQL/XML
43
XMLCONCAT
! XMLCONCAT concatena i suoi argomenti, producendo una foresta di elementi.
! XMLCONCAT puo' concatenare anche elementi costruiti tramite XMLELEMENT.
![Page 44: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/44.jpg)
SQL/XML
44
XMLCONCAT – esempio
SELECT i.id, XMLCONCAT( XMLELEMENT( NAME "co", i.cognome), XMLELEMENT( NAME "dip", i.dipartimento) ) AS risultato FROM IMPIEGATI i
![Page 45: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/45.jpg)
SQL/XML
45
XMLCONCAT – risultato
id risultato imp0001 <co>Rossi</co>
<dip>Vendite</dip> imp0002 <co>Bianchi</co>
<dip>Vendite</dip> imp0003 <co>Verdi</co>
<dip>Contabilità</dip> imp0004 <co>Neri</co>
<dip>Contabilità</dip>
![Page 46: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/46.jpg)
SQL/XML
46
XMLAGG
! Nel caso sia necessario aggregare piu' tuple sulla base di uno o piu' attributi, SQL utilizza il costrutto GROUP BY.
! XMLAGG permette di recuperare le tuple aggregate dal GROUP BY.
![Page 47: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/47.jpg)
SQL/XML
47
XMLAGG
<dip nome="Contabilità"> <imp></imp> <imp></imp> </dip>
id nome cognome dipartimento licenziato salario
imp0001 Mario Rossi Vendite null 20000
imp0002 Giorgio Bianchi Vendite null 18000
imp0003 Luca Verdi Contabilità null 15000
imp0004 Gianni Neri Contabilità 01/01/03 15000
<dip nome="Vendite"> <imp></imp> <imp></imp> </dip>
![Page 48: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/48.jpg)
SQL/XML
48
XMLAGG
SELECT XMLELEMENT( NAME "dipartimento", XMLATTRIBUTES(i.dipartimento AS "nome"), XMLAGG( XMLELEMENT( NAME "imp", i.cognome) ) ) AS risultato FROM IMPIEGATI i GROUP BY dipartimento
![Page 49: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/49.jpg)
SQL/XML
49
XMLAGG
risultato <dipartimento nome="Vendite"> <imp>Rossi</imp> <imp>Bianchi</imp> </dipartimento> <dipartimento nome="Contabilità"> <imp>Verdi</imp> <imp>Neri</imp> </dipartimento>
![Page 50: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/50.jpg)
SQL/XML
50
XMLGEN
! Un'altra possibilita' per creare XML e' XMLGEN. ! E' possibile specificare esplicitamente il codice XML,
inserendovi dati tramite variabili, indicate tra parentesi graffe.
! Le variabili possono essere utilizzate anche per i nomi degli elementi, cosa non possibile tramite XMLELEMENT, che prevede che i nomi degli elementi vengano forniti esplicitamente tramite una costante.
![Page 51: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/51.jpg)
SQL/XML
51
XMLGEN
SELECT XMLGEN( '<impiegato> <nome>{$nome}</nome> <salario>{$sal}</salario> </impiegato>', i.nome, i.salario AS "sal" ) AS risultato FROM IMPIEGATI i WHERE salario > 15000
Riferimento per nome
![Page 52: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/52.jpg)
SQL/XML
52
XMLGEN
risultato
<impiegato> <nome>Rossi</nome> <salario>20000</salario> </impiegato>
<impiegato> <nome>Bianchi</nome> <salario>18000</salario> </impiegato>
![Page 53: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/53.jpg)
SQL/XML
53
Le specifiche di SQL/XML
! ISO/IEC 9074-14:2003 ! Corrispondente a quanto trattato nei presenti lucidi.
! ISO/IEC 9075-14:2006 ! Aggiunge la possibilità di eseguire interrogazioni in XQuery,
di cui viene adottato il modello dei dati, e di validare documenti XML.
! ISO/IEC 9075-14:2008 ! La più recente, non ancora diffusa e adottata.
![Page 54: Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6 Funzionalità: SQL->XML e XML->SQL ! Per utilizzare congiuntamente dati relazionali e XML occorrono](https://reader035.vdocuments.site/reader035/viewer/2022063003/5f7415fa6116414592782a48/html5/thumbnails/54.jpg)
SQL/XML
54
Riferimenti
! Alcuni articoli su SQL/XML: ! Una descrizione dello standard descritto in questi lucidi:
www.acm.org/sigmod/record/issues/0206/standard.pdf ! Un approfondimento sulle nuove funzionalità:
www.sigmod.org/sigmod/record/issues/0409/11.JimMelton.pdf ! Alcuni sistemi che supportano SQL/XML:
! Oracle database server. ! DB2.