• Non ci sono risultati.

1 XMLTABLE IntegrazionediXMLinSQL AzzoliniRiccardo2020-05-05

N/A
N/A
Protected

Academic year: 2021

Condividi "1 XMLTABLE IntegrazionediXMLinSQL AzzoliniRiccardo2020-05-05"

Copied!
4
0
0

Testo completo

(1)

Azzolini Riccardo 2020-05-05

Integrazione di XML in SQL

1 XMLTABLE

XMLTABLE è una delle funzioni predefinite di SQL/XML che permettono di estrarre da- ti relazionali da alberi XML (tipicamente, ma non necessariamente, contenuti in delle tabelle) – il “contrario” delle funzioni di publishing. Per illustrarne il funzionamento, si presentano in seguito due esempi, riferiti alla tabella movies_xml:

id movie_xml 001 <movie>

<title>...</title>

<running-time>...</running-time>

<year-released>...</year-released>

<director>

<family-name>...</family-name>

...

</director>

...

</movie>

002 <movie>

<title>...</title>

<running-time>...</running-time>

<year-released>...</year-released>

<director>

<family-name>...</family-name>

...

</director>

<director>

<family-name>...</family-name>

...

</director>

...

</movie>

• Estrarre titolo, lunghezza e anno di ciascun film, ottenendo come risultato una tabella “piatta”, senza XML.

1

(2)

SELECT result.*

FROM

movies_xml, XMLTABLE(

'for $m in $col/movie return $m'

PASSING movies_xml.movie_xml AS "col"

COLUMNS

"title" VARCHAR(80) PATH 'title',

"running_time" INTEGER PATH 'running-time',

"year_released" INTEGER PATH 'year-released' ) AS result;

Gli argomenti di XMLTABLE, che specificano come costruire una relazione a partire da un albero XML, si possono considerare suddivisi in due parti:

– Il row pattern,

'for $m in $col/movie return $m'

PASSING movies_xml.movie_xml AS "col"

indica l’espressione XQuery che viene valutata per generare ciascuna riga della relazione risultante.

– Il column pattern, COLUMNS

"title" VARCHAR(80) PATH 'title',

"running_time" INTEGER PATH 'running-time',

"year_released" INTEGER PATH 'year-released'

determina nomi, tipi e valori degli attributi della relazione risultante. In parti- colare, il valore di ogni attributo è specificato scrivendo, dopo la parola chiave PATH, un’espressione XPath (o XQuery) che viene valutata nel contesto del risultato del row pattern

Il risultato di quest’interrogazione sarà una tabella piatta come la seguente:

title running_time year_released

Star Wars 120 1977

... ... ...

• Calcolare la lunghezza media dei film di ciascun regista1 usciti in ciascuno degli anni 2000, 2001 e 2002, e la lunghezza media complessiva per ciascun anno (su tutti i registi).

1Supponendo che un film possa avere più registi, qui si considera solo quello che compare per primo nel documento XML.

2

(3)

SELECT

result.year_released, result.director,

AVG(result.running_time) AS average_length FROM

movies_xml, XMLTABLE(

'for $m in $col/movie return $m'

PASSING movies_xml.movie_xml AS "col"

COLUMNS

"year_released" INTEGER PATH 'year-released',

"running_time" INTEGER PATH 'running-time',

"director" VARCHAR(80) PATH 'director[1]/family-name' ) AS result

WHERE result.year_released IN (2000, 2001, 2002)

GROUP BY ROLLUP(result.year_released, result.director);

Qui si usano, in combinazione, le funzionalità XML e OLAP di SQL, che consen- tono di effettuare analisi anche relativamente avanzate su dati semi-strutturati, direttamente all’interno del DBMS.

Il risultato della query ha la seguente forma:

year_released director average_length

2000 ... ...

2000 ... ...

2000 ... ...

2000 NULL ...

2001 ... ...

2001 ... ...

2001 NULL ...

2002 ... ...

2002 ... ...

2002 ... ...

2002 ... ...

2002 NULL ...

NULL NULL ...

2 Aspetti non considerati dallo standard

Uno degli aspetti dell’interazione tra il modello relazionale e i modelli semi-strutturati che non viene preso in considerazione dallo standard SQL/XML è la definizione di una

3

(4)

metodologia di progettazione che “guidi” il mapping tra una rappresentazione ad albero e una rappresentazione tabellare dei dati, e viceversa.

Ad esempio, una tabella T con gli attributi A, B, C e le righe (tuple) 1, 2, 3, 4

A B C 1 2 3 4

può corrispondere ad almeno due alberi diversi:

• uno che rappresenta prima le righe, e poi le colonne:

T

1

A B C

2

A B C

3

A B C

4

A B C

• uno che, al contrario, rappresenta prima le colonne, e poi le righe:

T

A

1 2 3 4

B

1 2 3 4

C

1 2 3 4

Al di fuori dello standard, esistono numerose metodologie per effettuare questo mapping, e nessuna di esse prevale sulle altre, quindi, in pratica, le scelte di progettazione sono lasciate al “buon senso” del progettista.

4

Riferimenti

Documenti correlati

dove N è il numero degli elementi costituenti il generico campione e IQR (InterQuartile Range) si calcola, secondo quanto indicato in [24], riordinando il

corrispondente  al  giusto  inervallo  di  rate  trasmissivo.  Ciascun  nodo  mantiene  una  tabella  dove,  per  ogni  vicino,  è  indicato  la  lunghezza 

Corso di Laurea in Ingegneria Gestionale, Meccanica e Meccatronica

[r]

2 punti: risposta corretta, soluzione migliore, buona proprietà di linguaggio, esposizione chiara e leggibile.. 1,8 punti: risposta corretta, soluzione migliore con qualche

2 punti: risposta corretta, soluzione migliore, buona proprietà di linguaggio, esposizione chiara e leggibile.. 1,8 punti: risposta corretta, soluzione migliore con qualche

- il costo del sistema di allarme supera la retribuzione di ciascun dipendente, - la data di nascita di ciascun dipendente non sia antecedente al 1 gennaio 1960. (a) Definire

Ora, un punto che partendo da O si sposta prima nel punto di coordinate v1 , v2 , 0 e poi si sposta di v3 unita’ nella direzione dell’asse z, descrive i due cateti di un