Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6...

54
Dati relazionali e XML

Transcript of Dati relazionali e XML - Plone sitemontesi/CBD/03SQLXML.pdf · 2013-10-11 · SQL/XML 6...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.