Atzeni, Ceri, Fraternali, Paraboschi, Torlone Basi di dati Quarta edizione McGraw-Hill, 2014

120
1 P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. Torlone Basi di dati. Modelli e linguaggi di interrogazione, 4e ©2013 McGraw-Hill Education (Italy) S.r.l. Atzeni, Ceri, Fraternali, Paraboschi, Torlone Basi di dati Quarta edizione McGraw-Hill, 2014 Capitolo 14: Basi di dati per XML

description

Atzeni, Ceri, Fraternali, Paraboschi, Torlone Basi di dati Quarta edizione McGraw-Hill, 2014. Capitolo 14: Basi di dati per XML. Sommario. Definizione e storia di eXtensible Markup Language (XML) elementi attributi Schemi documentali: Document Type Definition (DTD) - PowerPoint PPT Presentation

Transcript of Atzeni, Ceri, Fraternali, Paraboschi, Torlone Basi di dati Quarta edizione McGraw-Hill, 2014

Page 1: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

1

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Atzeni, Ceri, Fraternali, Paraboschi, Torlone

Basi di datiQuarta edizione

McGraw-Hill, 2014

Capitolo 14:

Basi di dati per XML

Page 2: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

2

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Sommario

• Definizione e storia di eXtensible Markup Language (XML)• elementi • attributi

• Schemi documentali: • Document Type Definition (DTD)• XML Schema Definition (XSD)

• Linguaggi di interrogazione e trasformazione• XQuery• XSL

Page 3: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

3

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XML

• eXtensible Markup Language• Formato di file proposto dal W3C per

distribuire documenti elettronici sul World Wide Web

• Esempi di documenti elettronici: libri, manuali, cataloghi di prodotti, moduli d’ordine, giornali, formule matematiche, messaggi, ...

Page 4: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

4

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Evoluzione dei modelli dei dati

NF2 Data ModelNested RelationsHierarchical FieldsPredefined simple Types

XML Data ModelSelf-defining DataStandard DDL

Extended/Object Relational Data Model Objects & FunctionsPredefined complex Types

Relational Data ModelFlat RelationsPredefined, simple Types

Web dataWeb data

Page 5: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

5

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XML

• Concezione originale: un meta-linguaggio per la specifica di linguaggi di markup

• Come in HTML• I dati XML sono documenti• Le proprietà dei dati sono espresse mediante marcatura del contenuto

• Come nelle basi di dati• Esiste un modello dei dati (DTD, XSD)• Esistono linguaggi di query e trasformazione (XQuery, XSL)• I dati sono neutri rispetto alle modalità di rappresentazione

Page 6: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

6

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Evoluzione

• 1986: Standard Generalized Markup Language (SGML) ISO 8879-1986• Novembre 1995: HTML 2.0• Gennaio 1997: HTML 3.2• Agosto 1997: XML W3C Working Draft• Feb 10, 1998: XML 1.0 Recommendation• Dec. 13, 2001: XML 1.1 W3C Working Draft • Oct. 15, 2002 : XML 1.1 W3C Candidate Recommendation • 2003 : XML 1.1 Standard

Page 7: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

7

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XMLXML

• HTML: insieme fisso di tagHTML: insieme fisso di tag• XML: standard per creare linguaggi di markup XML: standard per creare linguaggi di markup

con tag personalizzati (erede di SGML); possono con tag personalizzati (erede di SGML); possono essere usati in qualunque dominioessere usati in qualunque dominio

• HTML vs XMLHTML vs XML

<h1>The Idea Methodology</h1><br><ul> <li>di S. Ceri, P. Fraternali </li> <li> Addison-Wesley</li> <li> US$ 49 </li></ul>

<book> <title>The Idea Methodology </title> <author> S. Ceri </author> <author> P. Fraternali </author> <ed> Addison-Wesley </ed> <price> US$ 49 </price></book>

Page 8: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

8

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di documento XMLEsempio di documento XML

<?xml version="1.0"?><elenco> <prodotto codice=“123kl14”> <descrizione> Forno </descrizione> <prezzo> 1040000 </prezzo> </prodotto> <prodotto codice=“432sd35”> <descrizione> Frigo </descrizione></prodotto></elenco>

Page 9: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

9

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XML vs HTML

• XML non rimpiazza HTML!XML non rimpiazza HTML!

• XML e HTML sono nati con scopi diversi:XML e HTML sono nati con scopi diversi:• XMLXML progettato per descrivere DATI progettato per descrivere DATI

cosa sono i daticosa sono i dati• HTML HTML progettato per visualizzare i dati progettato per visualizzare i dati

come appaiono i dati come appaiono i dati

Page 10: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

10

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Usi di XML

• Separare i dati dal modo con cui vengono Separare i dati dal modo con cui vengono visualizzativisualizzati

• Scambiare i dati tra sistemi eterogeneiScambiare i dati tra sistemi eterogenei• Scambiare informazioni in sistemi B2BScambiare informazioni in sistemi B2B• Condividere datiCondividere dati• Memorizzare datiMemorizzare dati• Supportare nei moderni browser visualizzazione,

validazione, embedding in documenti HTML, trasformazioni con XSL, visualizzazioni con CSS

• È un documento di testo È un documento di testo il software che tratta il software che tratta documenti testuali tratta anche XMLdocumenti testuali tratta anche XML

Page 11: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

11

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Sintassi XML (http://www.w3schools.com/xml)

• Un documento XML ben formato deve:Un documento XML ben formato deve:• Cominciare con una direttiva standard che Cominciare con una direttiva standard che

specifica la versione di XML, ad esempio: specifica la versione di XML, ad esempio: <?xml version= “ 1.0”?><?xml version= “ 1.0”?>

• Il documento può contenere elementi. Ogni Il documento può contenere elementi. Ogni elemento può contenere sia testo che altri elemento può contenere sia testo che altri elementi. Un elemento dotato di contenuto è elementi. Un elemento dotato di contenuto è delimitato da due delimitato da due tagtag: uno di : uno di aperturaapertura e uno di e uno di chiusurachiusura. Il tag di chiusura deve avere lo . Il tag di chiusura deve avere lo stesso nome del tag di apertura, con in più il stesso nome del tag di apertura, con in più il prefissoprefisso “/”“/”. I nomi di tag sono . I nomi di tag sono case sensitivecase sensitive..

Page 12: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

12

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Sintassi XML (http://www.w3schools.com/xml)

• In un documento XML ben formato:In un documento XML ben formato:• Se un elemento è privo di contenuto, Se un elemento è privo di contenuto, ha un solo tagha un solo tag, ,

che deve terminare con il simbolo che deve terminare con il simbolo “/>”“/>”..• Il documento deve avere un elemento radice che Il documento deve avere un elemento radice che

racchiude l’intero contenuto.racchiude l’intero contenuto.• Se un elemento contiene sotto-elementi, il tag di Se un elemento contiene sotto-elementi, il tag di

chiusura di ciascun sottoelemento deve precedere il chiusura di ciascun sottoelemento deve precedere il tag di chiusura del sopra-elemento.tag di chiusura del sopra-elemento.

• I valori degli attributi degli elementi devono essere I valori degli attributi degli elementi devono essere contenuti tra virgolette (singole o doppie).contenuti tra virgolette (singole o doppie).

Page 13: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

13

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

ElementiElementi

<prodotto codice=“123kl14”><descrizione>

Forno a ventilazione forzata </descrizione> <prezzo valuta=“USD”> 624 </prezzo> <immagine src=“foto1.jpg” /> </prodotto>• Possono avere un contenuto (testo o altri elementi)• Sono in relazione gerarchica (padre-figlio)• Possono avere attributi

Page 14: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

14

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

AttributiAttributi

<prodotto codice=“123”> <descrizione> Forno </descrizione> <prezzo> 104 </prezzo> </prodotto>• Proprieta con valori di tipo stringa• I valori vanno racchiusi tra “ ”• Differiscono dagli elementi perché non possono

contenere elementi figli• In genere sono usati per In genere sono usati per memorizzare metadatimemorizzare metadati, ad , ad

esempio l’identificatore di un elemento, la data di esempio l’identificatore di un elemento, la data di creazione o modifica di un dato, ecc..creazione o modifica di un dato, ecc..

Page 15: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

15

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

NamespaceNamespace

Metodo per evitareMetodo per evitareconflitti di nomeconflitti di nome<table><table> <tr>...</tr><tr>...</tr></table></table><table><table> <product>..</product><product>..</product></table></table>

Si introduce un Si introduce un prefissoprefisso

<h:table <h:table xmlns:h="http://www.w3.org/TR/html4/xmlns:h="http://www.w3.org/TR/html4/>>

<h:tr>...</h:tr><h:tr>...</h:tr>

</h:table></h:table>

<my:table <my:table xmlns:my="http://www.me.com/furniturexmlns:my="http://www.me.com/furniture>>

<my:product> ... </my:product><my:product> ... </my:product>

</my:table</my:table>>Un XML namespace è una collezione di nomi (attributi, elementi,…), identificata da un URI (Uniform Resource Identifier)

URI = nozione estesa di URL (Uniform Resource Locator)

Un documento XML può far riferimento ad oggetti diversi (DTD, documenti XML, etc.).

È più importante identificare un oggetto che localizzarlo

Page 16: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

16

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Document Type Definition (DTD)Document Type Definition (DTD)

• Detta il tipo di un documento, cioè:Detta il tipo di un documento, cioè:• i tag ammessii tag ammessi• le regole di annidamento dei tagle regole di annidamento dei tag

• Scopi:Scopi:• Accordarsi su formato/struttura dei documentiAccordarsi su formato/struttura dei documenti• Validare documenti XML secondo certe regoleValidare documenti XML secondo certe regole

• Esempio di dichiarazione di un elemento:Esempio di dichiarazione di un elemento:

• <!ELEMENT PRODOTTO (DESCRIZIONE, PREZZO)>

• L’elemento prodotto contiene al suo interno un elemento descrizione seguito da un elemento prezzo

Page 17: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

17

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Validazione di un documento XMLValidazione di un documento XML

• Un documento XML la cui sintassi è corretta (cioè soddisfa le regole di scrittura di documenti XML) è detto“well-formed” (ben formato)

• Un documento che rispetta i vincoli dettati da un DTD è detto “valid” (valido)

Page 18: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

18

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Modello di contenuto Modello di contenuto

• Elementi con un elemento figlioElementi con un elemento figlio

<!ELEMENT PRODOTTO (DESCRIZIONE)><!ELEMENT PRODOTTO (DESCRIZIONE)><PRODOTTO> <DESCRIZIONE><PRODOTTO> <DESCRIZIONE>……</DESCRIZIONE> </PRODOTTO></DESCRIZIONE> </PRODOTTO>

• Elementi con una sequenza di elementi figliElementi con una sequenza di elementi figli <!ELEMENT MAIL (TO, FROM, TITLE, BODY)><!ELEMENT MAIL (TO, FROM, TITLE, BODY)>

<MAIL> <TO><MAIL> <TO>……</TO> <FROM></TO> <FROM>……</FROM> <TITLE></FROM> <TITLE>……</TITLE> </TITLE> <BODY><BODY>……</BODY> </MAIL></BODY> </MAIL>

• Elementi con contenuto di tipo PCDATA (parsed character data = Elementi con contenuto di tipo PCDATA (parsed character data = brano di testo qualunque)brano di testo qualunque)<!ELEMENT DESCRIZIONE (#PCDATA)><!ELEMENT DESCRIZIONE (#PCDATA)>

<DESCRIZIONE><DESCRIZIONE> Un testo qualsiasiUn testo qualsiasi </DESCRIZIONE></DESCRIZIONE>

Page 19: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

19

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Modello di contenuto Modello di contenuto

• Contenuto alternativoContenuto alternativo<!ELEMENT ARTICOLO (TESTO|FOTO)><!ELEMENT ARTICOLO (TESTO|FOTO)><ARTICOLO><TESTO> <ARTICOLO><TESTO> . . . . </TESTO></ARTICOLO></TESTO></ARTICOLO><ARTICOLO><FOTO> <ARTICOLO><FOTO> . . . . </FOTO><ARTICOLO></FOTO><ARTICOLO>

• Contenuto mistoContenuto misto<!ELEMENT ARTICOLO (#PCDATA|FOTO)*><!ELEMENT ARTICOLO (#PCDATA|FOTO)*><ARTICOLO> <ARTICOLO> testotesto </ARTICOLO> </ARTICOLO><ARTICOLO><FOTO> <ARTICOLO><FOTO> . . . . </FOTO><ARTICOLO></FOTO><ARTICOLO>

• Elementi vuotiElementi vuoti<!ELEMENT ARTICOLO EMPTY)><!ELEMENT ARTICOLO EMPTY)>

<ARTICOLO/><ARTICOLO/>• Contenuto arbitrario Contenuto arbitrario

<!ELEMENT NOTA ANY)><!ELEMENT NOTA ANY)><NOTA> del testo libero</NOTA><NOTA> del testo libero</NOTA><NOTA> <AUTORE><NOTA> <AUTORE>LucaLuca</AUTORE> </AUTORE> del testo liberodel testo libero</NOTA></NOTA>

Page 20: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

20

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Occorrenze di un sottoelemento Occorrenze di un sottoelemento

• 1 volta1 volta <!ELEMENT PRODOTTO <!ELEMENT PRODOTTO

(DESCRIZIONE)>(DESCRIZIONE)>• 1 o più volte1 o più volte

<!ELEMENT LISTA (PRODOTTO+)><!ELEMENT LISTA (PRODOTTO+)>• 0 o più volte0 o più volte

<!ELEMENT LISTA (PRODOTTO*)><!ELEMENT LISTA (PRODOTTO*)>• 0 o 1 volta0 o 1 volta

<!ELEMENT PRODOTTO (DESCRIZIONE?)><!ELEMENT PRODOTTO (DESCRIZIONE?)>

Page 21: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

21

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di DTDEsempio di DTD

<!ELEMENT ELENCO (PRODOTTO+)><!ELEMENT ELENCO (PRODOTTO+)><!ELEMENT PRODOTTO (DESCRIZIONE, PREZZO?)><!ELEMENT PRODOTTO (DESCRIZIONE, PREZZO?)><!ELEMENT DESCRIZIONE (#PCDATA)><!ELEMENT DESCRIZIONE (#PCDATA)><!ELEMENT PREZZO (#PCDATA)><!ELEMENT PREZZO (#PCDATA)>

<elenco>

<prodotto codice=“123”>

<descrizione> Forno </descrizione>

<prezzo> 1040000 </prezzo>

</prodotto>

<prodotto codice=“432”>

<descrizione> Frigo </descrizione>

</prodotto>

</elenco>

NOTA: un DTD NON è un documento XML

Page 22: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

22

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Dichiarazioni di attributiDichiarazioni di attributi

• Per ogni elemento dice:Per ogni elemento dice:• quali attributi può avere• che valori può assumere ciascun attributo• se esiste e qual è il valore di default

• Esempio di dichiarazione di attributo:Esempio di dichiarazione di attributo:

<!ATTLIST PRODOTTO codice ID #REQUIRED

label CDATA #IMPLIED status (disponibile|terminato) ‘disponibile’>

Page 23: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

23

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Tipi di attributiTipi di attributi

• CDATA:CDATA: dati di tipo carattere dati di tipo carattere• (val1 | val2 | val3): (val1 | val2 | val3): un valore della listaun valore della lista• ID:ID: identificatore identificatore• IDREF, IDREFS:IDREF, IDREFS: valore di un attributo di tipo ID nel valore di un attributo di tipo ID nel

documento (o insieme di valori)documento (o insieme di valori)• ENTITY, ENTITIES:ENTITY, ENTITIES: nome (nomi) di entità nome (nomi) di entità• NMTOKEN, NMTOKENS:NMTOKEN, NMTOKENS: caso ristretto di CDATA (una caso ristretto di CDATA (una

sola parola o insieme di parole)sola parola o insieme di parole)

codice ID #REQUIREDlabel CDATA #IMPLIEDStatus (disponibile|terminato) ‘disponibile’

Page 24: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

24

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Vincoli sugli attributiVincoli sugli attributi

• #REQUIRED: #REQUIRED: il valore deve essere specificatoil valore deve essere specificato• #IMPLIED: #IMPLIED: il valore può mancareil valore può mancare• #FIXED “valore”: #FIXED “valore”: se presente deve coincidere con se presente deve coincidere con

“valore”“valore” <!ELEMENT FAX (..)> <!ATTLIST FAX Mittente CDATA #FIXED “Politecnico di Milano"> • Default : Default : si può specificare un valore come default, usato si può specificare un valore come default, usato

quando l’attributo è mancante quando l’attributo è mancante <!ELEMENT SCONTO EMPTY> <!ATTLIST SCONTO Valore CDATA “10">

<SCONTO/> vale 10 <SCONTO valore=”15”/> vale 15

Page 25: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

25

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Un esempio completo

<!DOCTYPE NEWSPAPER [ 

<!ELEMENT NEWSPAPER (ARTICLE+)>

<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>

<!ELEMENT HEADLINE (#PCDATA)>

<!ELEMENT BYLINE (#PCDATA)>

<!ELEMENT LEAD (#PCDATA)>

<!ELEMENT BODY (#PCDATA)>

<!ELEMENT NOTES (#PCDATA)> 

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>

<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>

<!ATTLIST ARTICLE DATE CDATA #IMPLIED>

<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

]>

Page 26: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

26

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Relazione tra documento e DTDRelazione tra documento e DTD

• DTD esternoDTD esterno<?XML version="1.0" standalone="no"?><!DOCTYPE NEWSPAPER SYSTEM ”newspaper.dtd"><NEWSPAPER>.. </NEWSPAPER>

• DTD internoDTD interno<?XML version="1.0" standalone="no"?><!DOCTYPE NEWSPAPER [ <!ELEMENT NEWSPAPER(…)> ...]><NEWSPAPER>.. </NEWSPAPER>

Page 27: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

27

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XML SchemaXML Schema

Storia: - inizialmente proposto da Microsoft - divenuto W3C recommendation (maggio ‘01)

Scopo: definire gli elementi e la composizione di un documento XML in modo più preciso del DTD Un XML Schema definisce regole riguardanti:

• Elementi• Attributi• Gerarchia degli elementi• Sequenza di elementi figli• Cardinalità di elementi figli• Tipi di dati per elementi e attributi• Valori di default per elementi e attributi

Page 28: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

28

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSD vs DTDXSD vs DTD

• XML Schema = insieme di elementi XML standard per definire schemi di documenti detti XSD = XML Schema Definition: schema di un tipo di documenti

• Gli XSD sono:• Estendibili (ammettono tipi riusabili definiti

dall’utente)• In formato XML• Più ricchi e completi dei DTD• Capaci di supportare tipi di dati diversi da

PCDATA• Capaci di gestire namespace multipli

Page 29: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

29

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Documento XML con riferimento a XSD

<?xml version="1.0"?><note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=http://www.w3schools.com/note.xsd” >

<to> Tove </to> <from> Jani </from><head> Reminder </head>

<body> Don’t forget me this weekend! </body> </note>

Note:xmlns: namespace di defaultxmlns:xsi: URI (Universal Resource Identifier) che introduce l’uso dei tag di XML Schemaxsi:schemaLocation: dichiara dove reperire il file XSD (sempre attraverso URI)

Page 30: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

30

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di XML Schema

<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="note">

<xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="head" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence>

</xs:complexType> </xs:element></xs:schema>

xs: namespace per XSchema (contiene tutti i tag XSD)

Page 31: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

31

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Elementi semplici (Simple elements)

• Possono contenere solo testo (no elem. o attributi)• Forme di dichiarazione: <xs:element name="nome" type="tipo"/> <xs:element name="nome" type=“tipo” default=“xyz” /> <xs:element name="nome" type=“tipo” fixed=“xyz” />

• Tipi: stringhe, numerici, date, time, Boolean, ecc..• Esempi di definizione di elementi semplici in XSD

<xs:element name=“età” type=“xs:integer”/><xs:element name=“cognome” type=“xs:string”/>

• Esempi di elementi semplici XML<età> 65 </età><cognome> Rossi </cognome>

Page 32: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

32

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Attributi

• Definizione di attributi <xs:attribute name="name" type="type"/>

<xs:attribute … default|fixed=“xyz” use=“required|optional”/>

• Esempio di definizione di attribute<xs:attribute name=“lang” type=“xs:string”/>

• Esempio di uso di un attributo<lastname lang=“it”> qwerty </lastname>

Valore di default o fissoObbligatorio o opzionale

Page 33: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

33

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Restrizioni

• Consentono di dichiarare vincoli sui valori di un tipo elementare (detti tipi base)

<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType></xs:element>

Page 34: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

34

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Enumerazione

• Particolare tipo di restrizione che consente di enumerare i valori di un elemento o attributo

<xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType></xs:element>

Page 35: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

35

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Elementi complessi (Complex elements)

• Esistono quattro tipi di elementi complessi:• Vuoti (empty)• Contenenti solo altri elementi• Contenenti solo testo• Contenenti testo e/o altri elementi

• Sintassi per definire elementi complessi:

<xs:element name="name"> <xs:complexType>

. . element content . . </xs:complexType> </xs:element>

Page 36: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

36

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Costrutto sequence

• Sequenza (= record): gli elementi devono apparire nell’ordine indicato

<xs:element name="libro"> <xs:complexType> <xs:sequence> <xs:element name="titolo“ type="xs:string"/> <xs:element name="autore" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType></xs:element>• La sequenza può contenere sia sottoelementi che

attributi

Page 37: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

37

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Costrutto sequence con attributi

<xs:element name="libro"> <xs:complexType> <xs:sequence> <xs:element name="titolo“ type="xs:string"/> <xs:element name="autore" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="editore" type="xs:string" use="required"/> <xs:attribute name="pubblicazione" type="xs:date"/> </xs:complexType></xs:element>

Page 38: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

38

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Specifica del contenuto: costrutto all

• Come la sequenza ma gli elementi possono apparire nel documento in qualsiasi ordine

<xs:element name="libro"> <xs:complexType> <xs:all> <xs:element name="titolo“ type="xs:string"/> <xs:element name="autore" type="xs:string" maxOccurs="unbounded"/> </xs:all> </xs:complexType></xs:element>

Page 39: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

39

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Costrutto choice

• Sequenza (= OR)<xs:element name="parte"> <xs:complexType> <xs:choice> <xs:element name="capitolo" type="xs:string" maxOccurs="unbounded"/> <xs:element name="appendice" type="xs:string" maxOccurs="unbounded"/> </xs:choice> </xs:complexType></xs:element>• Gli elementi interni appaiono in alternativa nel

documento

Page 40: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

40

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Elementi EMPTY

• Gli elementi senza sottoelementi interni si dichiarano come complex type privi di sottoelementi

<xs:element name="product"> <xs:complexType> <xs:attribute name="prodid“ type="xs:integer"/> </xs:complexType> </xs:element>

Page 41: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

41

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Elementi MIXED

<xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:integer"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element>

• Esempio<letter> Dear Mr.<name>John Smith</name>. Your order

<orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>.

</letter>

Page 42: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

42

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Specifica della cardinalità

• Indica la cardinalità dei sotto-elementi• La sintassi prevede l’uso di due attributi:

• maxOccurs: max numero di occorrenze • minOccurs: min numero di occorrenze

• Se non specificati: default = 1 <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element>

Page 43: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

43

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Definizioni di tipi riusabili

• Consente di definire tipi e riusarli per:• Tipare attributi• Definire altri tipi

• ATTENZIONE: Definizione di tipo, non di elemento<xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element

name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>

• Riuso del tipo, per definire elementi/attributi<xs:element name="employee" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:attribute name="member" type="personinfo"/>

Page 44: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

44

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Definizione di gruppi di elementi

• Consente di definire blocchi di elementi e riusarli per definire altri tipi o elementi (si può fare anche con attributi, usando attributeGroup)

<xs:group name="custGroup"> Definizione di gruppo riusablie <xs:sequence> <xs:element name="customer" type="xs:string"/> <xs:element name="orderdetails" type="xs:string"/> <xs:element name="billto" type="xs:string"/> </xs:sequence> </xs:group> <xs:element name="order" type="ordertype"/><xs:complexType name="ordertype"> Riuso di “custGroup” <xs:group ref="custGroup"/> <xs:attribute name="status" type="xs:string"/></xs:complexType>

Page 45: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

45

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Altre caratteristiche di XML Schema

• Estensioni di tipi• Costrutti ANY/ANYATTRIBUTE• Elementi contenenti solo testo, testo e attributi

Page 46: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

46

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Riferimenti

• www.w3schools.com• www.w3schools.com/xml• www.w3schools.com/dtd• http://www.w3schools.com/schema/

Page 47: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

47

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSL

Page 48: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

48

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSL

• Standard W3C: 16 novembre 1999 (1.0)

• XSL = eXtensible Stylesheet Language• Un foglio di stile è un file in cui sono

condensate le specifiche modalità di presentazione

• si può quindi separare (più o meno nettamente) la definizione dei contenuti dalla loro resa grafica

Page 49: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

49

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Fogli di stile

• 1996: DSSSL - standard che definisce fogli di stile per SGML (ISO/IEC 10179:1996)

• 1996-1998: CSS - fogli di stile per HTML - sono attualmente disponibili due specifiche: CSS1 e CSS2 (approvati dal W3C rispettivamente nel Dicembre 1996 e nel Maggio 1998)

• Agosto 1997: Microsoft, Arbortext e Inso Corp. sottopongono la specifica XSL al W3C (sottoinsieme di DSSSL) per dati XML altamente strutturati - è diventato standard nel 1999

Page 50: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

50

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSL

• Linguaggio per rappresentare l’output di XML formattato

• e per convertire un documento XML in un altro documento (XML, HTML, o qualunque formato)

• Usa la notazione XML

Page 51: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

51

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSLT

XSL = XSLT + XSL FO• XSLT (XSL Transformation) Trasforma un documento XML

in un altro documento XML o altro tipo di documento (HTML, ecc.)

• Può: • aggiungere nuovi elementi; • rimuovere elementi presenti; riorganizzare gli elementi;• decidere quali visualizzare, ecc.

• XSL FO (Formatting Object) contiene le istruzioni per formattare l’output di un documento XML

Page 52: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

52

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSLT

XML

XSLT

XML

XSL HTML

Page 53: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

53

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XSLT

• Utilizza XPath per definire le parti del documento sul quale effettuare le trasformazioni

• Per gli elementi sui quali devono essere applicate le trasformazioni vengono definiti dei template

Page 54: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

54

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Template

• Per assegnare uno stile ad un particolare elemento XML oppure per applicare delle trasformazioni si usa un template nel foglio di stile

• Il foglio di stile può essere eseguito da un processore XSLT che scandisce il documento XML sorgente, identifica gli elementi per i quali è stato definito un template nel foglio di stile, ed effettua le azioni specificate nel template.

Page 55: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

55

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di template (1)

<xsl:template match=paragrafo> … <xsl:template>• La clausola match definisce su quali elementi si applica il

template• Per ogni elemento si possono specificare più template (si

applica il più specifico oppure si assegna una priorità per l’applicazione)

• Un template può specificare lo stile per più elementi

Page 56: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

56

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di template (2)

<xsl:template match=paragrafo> <fo:blocco font-size="10pt" space-before="12pt"> <xsl:apply-templates/> </fo:block></xsl:template>

• All’interno del template si specifica come si devono processare gli elementi figli (xsl:apply-templates)

• Nell’esempio: gli elementi “paragrafo” diventano oggetti di formattazione “blocco” che vengono visualizzati con 10 punti e 12 punti di spazio dopo ogni blocco

Page 57: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

57

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Match

• Si possono specificare gli elementi figli da processare utilizzando i seguenti simboli:

• | operatore or• . Elemento corrente• // discendenti• / figli• .. Padre• @ identifica un attributo• first-of-any(), first-of-type()• last-of-any(), last-of-type()

Page 58: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

58

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Struttura di un documento XSL

xsl:stylesheet

template per il documento

(template per un elemento figlio)*

azione sul documento

azione sull’elementofiglio

<?xml version=“1.0”?><xsl:stylesheet>

<xsl:template match=“/”> [azione] </xsl:template>

<xsl:template match=“Elenco”> [azione] </xsl:template>

<xsl:template match=“Libro”> [azione] </xsl:template> ...

</xsl:stylesheet>

Page 59: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

59

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Intestazione

• Il foglio di stile è interamente contenuto in un tag di tipo xsl:stylesheet, e inizia con una intestazione come segue:<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> </xsl:stylesheet>

• Possiamo riconoscere due dichiarazioni: spazio dei nomi e numero di versione. Lo spazio dei nomi è obbligatorio, e deve utilizzare l'URL mostrato. Serve a distinguere il particolare formato XSLT utilizzato. Il numero di versione serve a distinguere un foglio di stile che usa un certo standard da eventuali future revisioni. Tutte le regole di trasformazione sono contenute nel corpo di questo tag.

Page 60: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

60

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

match specifica il nodo da sostituire

• L'attributo match usa una espressione XPath per specificare a quali nodi si deve applicare. Nella maggior parte dei casi seleziona solo uno specifico tipo di nodo. C'è da tenere presente che le espressioni XPath sono relative al nodo corrente.

• Quindi indicare solamente un tipo di nodo permette di selezionare uno dei figli del nodo corrente.

• In ogni caso è abbastanza frequente specificare nodi che non sono figli del nodo corrente, come pure è possibile selezionare attributi o altri elementi del documento XML.

Page 61: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

61

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio

• <xsl:template match="/"> <html> <body bgcolor="#ffffff"> <table border="0" cellspacing="0"><xsl:apply-templates select="*" /> </table>

</body> </html> </xsl:template>

• Questa regola serve a iniziare la trasformazione di documento. Il nodo radice viene trasformato in un documento HTML con lo sfondo bianco che contiene una tabella.

Page 62: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

62

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Mode, modalità di processing

• L'attributo mode permette di applicare un template in casi diversi.

• La modalità viene specificata da apply-templates. Così si possono avere due template con la stessa espressione di match (si riferiscono agli stessi nodi) ma usati in casi distinti.

• Per esempio, un template per costruire l'indice e un altro per il corpo del documento, ma che si applicano agli stessi in momenti diversi.

Page 63: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

63

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Name, nome di un template

• Un template può avere un nome e può venire chiamato esplicitamente utilizzando xsl:call-template, per di più specificando dei parametri.

• Definizione<xsl:template name="row">

<tr><td> <xsl:value-of select="."/> </td></tr></xsl:template>

• Uso<xsl:call-template name="row"/>

Page 64: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

64

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

xsl:apply-templates

• A xsl:apply-templates si ricorre all'interno di un template. Serve a selezionare i nuovi nodi che devono essere aggiunti alla lista corrente. Se non viene specificato alcun attributo vengono selezionati tutti i nodi figli del nodo corrente.

• Si specifica con l'attributo select, usando XPath, quali nodi devono essere ulteriormente elaborati.

• Non necessariamente sono figli ma posso essere i nipoti oppure degli antenati, o ancora possono essere trattati in maniera particolare gli attributi.

Page 65: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

65

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

xsl:for-each

• <xsl:template match="chap"> <xsl:for-each select="p">

<xsl:value-of select="."> </xsl:for-each>

</xsl:template> equivale a (senza una regola)<xsl:template match="chap">

<xsl:apply-templates select="p"/> </xsl:templates> <xsl:template match="p">

<xsl:value-of select="."/> </xsl:templates>

Page 66: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

66

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

xsl:value-of

• È infatti possibile utilizzare delle espressioni che calcolano l'output. <xsl:template match="ragione_sociale"> <td><xsl:value-of select="."/></td> </xsl:template>

• Il corpo della regola non contiene altri tag ma semplicemente xsl:value-of. Questo comando serve a produrre un output calcolato.

Page 67: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

67

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

xsl:value-of

• Nell'esempio si seleziona il nodo corrente (.). • Le regole per il calcolo del valore di un nodo

(valore che viene inviato nell'output) sono abbastanza intuitive: • Il valore di un nodo testo è uguale al testo

stesso. • Il valore di un nodo tag è uguale alla

concatenazione dei valori dei nodi contenuti.

Page 68: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

68

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

value template

• Gli attributi in output hanno una prerogativa: possono essere calcolati senza utilizzare xsl:value-of (attribute value template)

• Negli attributi si possono inserire espressioni tra graffe.value="{/document/@title}"

• Il valore dell'attributo non è scritto esplicitamente ma calcolato in base all'espressione tra graffe. Ciò che è fuori dalle graffe è considerato testo normale (copiato così com'è) mentre l'espressione tra graffe viene calcolata, come la select di xsl:value-of.

• L'espressione dell'esempio imposta l'attributo value uguale all'attributo title del document.

Page 69: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

69

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Output

• Fin qui abbiamo costruito l'output semplicemente copiando i tag che non fanno parte dell'XSLT.

• Ma in generale possiamo creare tag arbitrari, con nomi derivati dall'input. Per fare questo usiamo una serie di comandi che permettono di comporre a volontà l'output.

Page 70: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

70

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match=“Elenco"> <xsl:apply-templates/> </xsl:template> <xsl:template match=“Libro"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Titolo"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Autore"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Data"> <xsl:apply-templates/> </xsl:template> <xsl:template match="ISBN"> <xsl:apply-templates/> </xsl:template> <xsl:template match=“Editore"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template></xsl:stylesheet>

Document/

ElementElenco

ElementLibro

ElementLibro

ElementLibro

ElementTitolo

ElementAutore

ElementData

ElementISBN

ElementEditore

......

TextIl signore..

TextTolkien

Text2002

Text88-452-…

TextBompiani

azione

Estrarre il testo

azione

Page 71: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

71

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Trasformazione<?xml version="1.0"?><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro></Elenco>

Il Signore degli Anelli J.R.R. Tolkien2002 88-452-9005-0 BompianiIl nome della rosa Umberto Eco1987 55-344-2345-1 BompianiIl sospetto F. Dürrenmatt 199088-07-81133-2 Feltrinelli

Page 72: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

72

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Elenco libri</TITLE> </HEAD> <BODY> <xsl:apply-templates/> </BODY> </HTML> </xsl:template> <xsl:template match=“Elenco"> <xsl:apply-templates/> </xsl:template> <xsl:template match=“Libro"> <xsl:apply-templates/> </xsl:template> …</xsl:stylesheet>

Creare un documento HTML

Page 73: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

73

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Trasformazione

<?xml version="1.0"?><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro></Elenco>

<HTML><HEAD><TITLE>Book Catalogue</TITLE></HEAD><BODY>Il Signore degli Anelli J.R.R. Tolkien2002 88-452-9005-0 BompianiIl nome della rosa Umberto Eco1987 55-344-2345-1 BompianiIl sospetto F. Dürrenmatt 199088-07-81133-2 Feltrinelli</BODY></HTML>

Page 74: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

74

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio: creare una tabella

<HTML><HEAD><TITLE>Elenco libri</TITLE></HEAD><BODY><TABLE BORDER="1" WIDTH="100%"> <TR> <TD> Il Signore degli Anelli </TD> <TD> J.R.R. Tolkien </TD> <TD> 2002 </TD> <TD> 88-452-9005-0 </TD> <TD> Bompiani </TD> </TR> <TR> <TD> Il nome della rosa </TD> <TD> Umberto Eco </TD> <TD> 1987 </TD> <TD> 55-344-2345-1 </TD> <TD> Bompiani </TD> </TR> <TR> <TD> Il sospetto </TD> <TD> F. Dürrenmatt </TD> <TD> 1990 </TD> <TD> 88-07-81133-2 </TD> <TD> Feltrinelli </TD> </TR></TABLE></BODY></HTML>

Page 75: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

75

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match=“Elenco”> <HTML> <HEAD> <TITLE>Elenco libri</TITLE> </HEAD> <BODY> <TABLE BORDER="1" WIDTH="100%"> <xsl:apply-templates/> </TABLE> </BODY> </HTML> </xsl:template> <xsl:template match=“Libro"> <TR> <xsl:apply-templates/> </TR> </xsl:template> <xsl:template match="Titolo | Autore | Data | ISBN | Editore"> <TD> <xsl:apply-templates/> </TD> </xsl:template></xsl:stylesheet>

Esempio: creare una tabella

Page 76: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

76

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Trasformazione XML-XML

<?xml version="1.0"?><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro></Elenco>

<?xml version="1.0"?><NuovoElenco> <Libro> <Titolo>Il Signore degli Anelli</Titolo> <Editore>Bompiani</Editore> </Libro> <Libro> <Titolo>Il nome della rosa</Titolo> </Libro> <Libro> <Titolo>Il sospetto</Titolo> <Editore>Feltrinelli</Editore> </Libro></NuovoElenco>

Il nuovo elenco per ogni libro contiene solo il loro titolo e, se questo è disponibile, anche la sua casa editrice.

Page 77: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

77

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Trasformazione XML-XML

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">

<NuovoElenco>

<xsl:for-each select=“Elenco/Libri">

<Libro>

<Titolo><xsl:value-of select=“Titolo"/> </Titolo>

<xsl:if test=“@disponibilità = ‘S’">

<Editore><xsl:value-of select=“Editore"/></Editore>

</xsl:if>

</Libro>

</xsl:for-each>

</NuovoElenco>

</xsl:template>

Page 78: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

78

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Associare un foglio di stile ad un documento XML

<?xml version="1.0"?><?xml-stylesheet type=“text/xsl” href=“file://localhost/EsempiXML-XSL/libri.xsl”?><!DOCTYPE Elenco SYSTEM "file://localhost/EsempiXML-XSL/libri.dtd"><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> …</Elenco>

Page 79: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

79

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Linguaggi di Linguaggi di interrogazione interrogazione

per XMLper XML

Page 80: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

80

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Interrogazione di dati XML

• XML è un formato di rappresentazione di dati semi-strutturati

• Un insieme di documenti o anche un singolo documento (ad es: la Divina Commedia) possono essere considerati come depositi interrogabili di informazione

• Nasce l’esigenza di tecnologie di memorizzazione persistente e di interrogazione di dati in formato XML

Page 81: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

81

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XQuery

• Linguaggio “alla SQL” per l’interrogazione di dati XML, definito da W3C• Inizio lavori 1998• Proposta W3C: 15 Febbraio 2001• Si basa su XPath per identificare

frammenti XML

Page 82: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

82

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio di documento<?xml version="1.0"?><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro></Elenco>

File:

libri.xml

Page 83: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

83

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Path expression in XPath

• Idea: usare una sintassi simile a quella dei pathname dei file per “navigare” la struttura ad albero di un documento

• Una espressione XPath è una stringa contenente nomi di elementi e operatori di navigazione e selezione:

. Nodo corrente

.. Nodo padre del nodo corrente/ nodo radice, o figlio del nodo corrente// discendente del nodo corrente@ attributo del nodo corrente* qualsiasi nodo[p] predicato (se l’espressione p, valutata, ha valore

booleano)[n] posizione (se l’espressione n, valutata, ha valore

numerico)

Page 84: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

84

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempi base di path expressions

• Una path expression può iniziare con doc(posizione_documento)

Restituisce l’elemento radice del documento specificato e tutto il suo contenuto: doc (“libri.xml”)

• A partire dalla radice del documento si possono specificare delle espressioni per estrarre il contenuto desiderato

• Esempio: doc (“libri.xml”)/Elenco/LibroRestituisce la sequenza di tutti gli elementi di tipo Libro

contenuti nel documento libri.xml

Page 85: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

85

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempi di path expressions

doc (“libri.xml”)/Elenco/Libro

<Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro>

c

<?xml version="1.0"?><Elenco> <Libro disponibilità=‘S’> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘N’> <Titolo>Il nome della rosa</Titolo> <Autore>Umberto Eco</Autore> <Data>1987</Data> <ISBN>55-344-2345-1</ISBN> <Editore>Bompiani</Editore> </Libro> <Libro disponibilità=‘S’> <Titolo>Il sospetto</Titolo> <Autore>F. Dürrenmatt</Autore> <Data>1990</Data> <ISBN>88-07-81133-2</ISBN> <Editore>Feltrinelli</Editore> </Libro></Elenco>

Page 86: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

86

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Condizioni su elementi/attributi

• Esempio: doc (“libri.xml”)/Elenco/Libro[Editore=‘Bompiani’]/Titolo

Restituisce la sequenza di tutti i titoli dei libri dell’editore Bompiani che si trovano nel documento

Risultato:

<Titolo>Il Signore degli Anelli</Titolo><Titolo>Il nome della rosa</Titolo>

Page 87: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

87

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Ricerca di sotto-elementi a qualsiasi livello

• Esempio: doc(“libri.xml”)//Autore

Restituisce la sequenza di tutti gli autori che si trovano nel documento libri.xml, annidati a qualunque livello

<Autore>J.R.R. Tolkien</Autore><Autore>Umberto Eco</Autore><Autore>F. Dürrenmatt</Autore>

Page 88: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

88

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Condizione sulla posizione dei sottoelementi e uso di wildcard

• Esempio: doc (“libri.xml”)/Elenco/Libro[2]/*Restituisce tutti i sottoelementi (*) contenuti nel

secondo libro del documento libri.xml

<Titolo>Il nome della rosa</Titolo><Autore>Umberto Eco</Autore><Data>1987</Data><ISBN>55-344-2345-1</ISBN><Editore>Bompiani</Editore>

Page 89: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

89

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

XQuery

• Linguaggio “alla SQL” per l’interrogazione di dati XML, definito da W3C

• Si basa su XPath per identificare frammenti XMLÈ BASATO SULLA ELABORAZIONEDI SEQUENZE DI NODI

Page 90: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

90

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni FLWOR

• Una interrogazione XQuery è un’espressione complessa che consente di estrarre parti di un documento e costruire un altro documento

• Si basa (tipicamente) su 5 clausole (cfr SQL):• FOR iterare i valori di variabili su sequenze di nodi• LET legare variabili a intere sequenze di nodi• WHERE esprimere condizioni sui legami effettuati• ORDER BY imporre un ordinamento alla sequenza risultante• RETURN costruire il risultato (strutturato - cfr select in OQL)

Page 91: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

91

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni FOR

• Esempio:for $libro in doc(“libri.xml”)//Libroreturn $libro

• La clausola for valuta la path expression, che restituisce una sequenza di elementi, e la variabile $libro itera all’interno della sequenza, assumendo ad ogni iterazione il valore di un nodo (libro) diverso

• La clausola return costruisce il risultato, in questo caso l’interrogazione restituisce semplicemente ogni valore legato a $libro - cioè di tutti i libri del documento

Page 92: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

92

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni FOR annidate

• Le espressioni FOR possono essere annidate: for $libro in doc(“libri.xml”)//Libro

for $autore in $libro/Autorereturn $autore

• Semantica: per ogni valore di $libro (libro), per ogni valore di $autore (un autore del libro corrente), inserisci nel risultato l’autore legato a $autore

Page 93: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

93

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni LET

• Consentono di introdurre nuove variabili:let $libri := doc(“libri.xml”)//Libroreturn $libri

• La clausola let valuta l’espressione (//Libro) e assegna alla variabile $libri l’intera sequenza restituita

• La valutazione di una clausola let assegna alla variabile un singolo valore: l’intera sequenza dei nodi che soddisfano l’espressione

• La query dell’esempio precedente è esprimibile come:for $libro in doc(“libri.xml”)//Librolet $a := $libro/Autore (: $a vale l’intera sequenza degli autori del libro :)return $a

Page 94: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

94

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni LET

for $libro in doc(“libri.xml”)//Librolet $a := $libro/Autorereturn <libro>

<titolo> { $libro/titolo } </titolo> <autori> { $a } </autori> </libro>

for $libro in doc(“libri.xml”)//Librofor $a := $libro/Autorereturn <libro> { $libro/titolo }

<titolo> { $libro/titolo } </titolo> <autore> { $a } </autore> </libro>

Page 95: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

95

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

FLWR expressions: interpretazione

• FOR : iterazione• ogni valore nella sequenza

partecipa a una diversa “tupla di legami”

• LET : assegnamento• di una sequenza a una variabile

(non aumenta il numero di tuple di legami)

• WHERE : filtraggio• viene valutata su ogni tupla

separatamente, filtrandole in base alle condizioni espresse

• RETURN : ricostruzione• è eseguita una volta per

ciascuna tupla di legami

Page 96: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

96

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Clausola WHERE

• La clausola WHERE esprime una condizione: solamente le tuple che soddisfano tale condizione vengono utilizzate per invocare la clausola RETURN

• Le condizioni nella clausola WHERE possono contenere diversi predicati connessi da AND e OR. Il not() è realizzato tramite una funzione che inverte il valore di verità

• Esempio:for $libro in doc (“libri.xml”)//Librowhere $libro/Editore=“Bompiani” and $libro/@disponibilità=“S”return $libro

• Restituisce tutti i libri pubblicati da Bompiani che sono disponibili

Page 97: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

97

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Clausola WHERE

• Spesso le clausole where possono essere omesse usando opportune Path Expression

• Esempio:

for $libro indoc(“libri.xml”)//Libro[Editore=“Bompiani” and

@disponibilità=“S”]

return $libro• Restituisce tutti i libri pubblicati da Bompiani che sono

disponibili

Page 98: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

98

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Clausola RETURN

• Genera l’output di un’espressione FLWR che può essere:

• Un nodo

• Una “foresta” ordinata di nodi

• Un valore testuale (PCDATA)

• Può contenere dei costruttori di nodi, dei valori costanti, riferimenti a variabili definite nelle parti FOR e LET, ulteriori espressioni annidate

<Autore>F. Dürrenmatt</Autore>

<Autore>J.R.R. Tolkien</Autore><Autore>Umberto Eco</Autore><Autore>F. Dürrenmatt</Autore>

F. Dürrenmatt

Page 99: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

99

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Clausola RETURN

• Un costruttore di elemento consta di un tag iniziale e di un tag finale che racchiudono una lista (opzionale) di espressioni annidate che ne definiscono il contenuto

• Esempio: for $libro in doc(“libri.xml”)//Libro

where $libro/Editore=“Bompiani”return <LibroBompiani>

{ $libro/Titolo } </LibroBompiani>

nuovo nuovo elementoelemento

<LibroBompiani><Titolo>Il Signore degli Anelli</Titolo></LibroBompiani><LibroBompiani><Titolo>Il nome della rosa</Titolo></LibroBompiani>

espressione espressione annidataannidata

Page 100: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

100

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Clausola RETURN

• Esempio (variante): for $libro in doc(“libri.xml”)//Libro

where $libro/Editore=“Bompiani”return <Libro-Bompiani>

{ $libro/Titolo/text() } </Libro-Bompiani>

<Libro-Bompiani>Il Signore degli Anelli</Libro-Bompiani><Libro-Bompiani>Il nome della rosa</Libro-Bompiani>

estrae il solo contenuto PCDATA di un elemento

Page 101: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

101

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

“Cardinalità” delle sequenze costruite nel risultato

• La clausola return è eseguita tante volte quanti sono i distinti assegnamenti delle “tuples of bound variables”

• Nel seguente esempio, in base alla semantica della clausola let, la return è eseguita una sola volta

• (si nota che il nuovo tag <Libro-Bompiani> è creato una sola volta):

let $libri := doc(“libri.xml”)//Libro[Editore=“Bompiani”]return <Libro-Bompiani>

{ $libri/Titolo } </Libro-Bompiani>

<LibroBompiani><Titolo> Il Signore degli Anelli </Titolo><Titolo> Il nome della rosa </Titolo>

</LibroBompiani>

Path expression che inizia da una sequenza

Page 102: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

102

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Ordinare il risultato

• Esempio:for $libro in doc(“libri.xml”)//Libroorder by $libro/Titoloreturn

<Libro>{ $libro/Titolo,

$libro/Editore } </Libro>

• I libri vengono ordinati rispetto al titolo• I matching della variabile, inizialmente generati in “document

order”, sono riordinati prima di essere passati alla clausola return per generare il risultato

Page 103: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

103

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Funzioni aggregate

• Esempio:for $e in doc(“libri.xml”)//Editore let $libro := doc(“libri.xml”)//Libro[Editore = $e]where count($libro) > 100return $e

• Restituisce gli editori con oltre 100 libri in elenco• ATTENZIONE:

• la “cardinalità” del risultato, cioè il numero di editori, dipende da quante volte è eseguita la return, e questo a sua volta dipende dalle clausole for (la clausola let non influenza tale cardinalità)

• Ogni editore “promosso” viene restituito oltre cento volte !!!

Page 104: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

104

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

distinct-values()

• Iteriamo $e solo sui distinti valori di Editore:for $e in distinct-values( doc(“libri.xml”)//Editore )let $libro := doc(“libri.xml”)//Libro[Editore = $e]where count($libro) > 100return $e

• Restituisce gli editori con oltre 100 libri in elenco• Ogni editore “promosso” è considerato una sola volta (si “candida”

una sola volta ad essere filtrato da parte della clausola where)

Page 105: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

105

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Espressioni condizionali

• Estrarre, per ogni libro con almeno un autore, il titolo e i primi due autori, aggiungendo un elemento vuoto et-al se il libro ha più di due autori.

<risultati> { for $book in doc("libri.xml")//libro where count($book/autore) > 0 return <libroCompatto> {$book/titolo} {for $author in $book/autore[position()<=2] return $author } {if (count($book/autore) > 2) then <et-al/> else () } </libroCompatto>} </risultati>

Page 106: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

106

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Costruzione di strutture con attributi

• Estrarre una lista con un elemento per ogni libro, e il numero degli autori di ciascuno inserito come attributo

<listaLibriConNumAutori>{ for $libro in doc("libri.xml")//libro let $authors := $libro/autore return <libro numAutori="{ count($authors)}"/>}</listaLibriConNumAutori>

Page 107: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

107

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Comandi di aggiornamento

• XQuery Update permette di esprimere comandi di modifica

• Inserire come autore Italo Calvino nel libro intitolato «Il Visconte dimezzato»

insert node <autore>Italo Calvino</autore> as first into doc ("libri.xml")//libro[titolo="Il Visconte dimezzato"]

• Rimuovere il secondo autore dal libro intitolato «Il Visconte dimezzato»

delete node doc ("libri.xml")//libro[titolo="Il Visconte dimezzato"]/autore[position()=2]

Page 108: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

108

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Estensioni in XQuery 3.0

• XQuery 3.0 ha introdotto alcune novità• Clausola group by

• Consente di esprimere raggruppamenti in modo più compatto ed efficace rispetto a XQuery 1.0

• Opzione allowing empty nel for nidificato• Equivalente al join esterno (outer join) di SQL

• Supporto per la gestione di flussi (stream) di dati

Page 109: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

109

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Basi di dati XML

• Due principali famiglie di sistemi• Basi di dati XML native

• Sfruttano tecnologie specifiche per XML per memorizzare e indicizzare collezioni di documenti

• Adottano linguaggi di interrogazione specifici per XML (es: XQuery)

• Basi di dati relazionali con supporto XML• Usano il modello relazionale, esteso in modo opportuno per

supportare dati XML • Sfruttano estensioni di SQL per l’interrogazione (es:

SQL/XML)

Page 110: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

110

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Basi di dati XML native

• Adottano un modello logico dei dati non-relazionale, standard o proprietario

• ES: DOM, XPath Data Model, XML Information Set• Utilizzano schemi fisici di memorizzazione proprietari:

• ES: metodi basati su testo (CLOB), metodi mutuati dalle basi ad oggetti

• Sono in grado di gestire tutte le caratteristiche sintattiche dei documenti (si parla di document-centric XML data)

• ES: entity, ordine dei sottoelementi, commenti ecc..• Organizzano i dati in collezioni di documenti, con un ruolo simile

alle istanze di database dei sistemi relazionali• Esempi di DBMS: Tamino, Xyleme, ecc..

Page 111: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

111

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Basi di dati relazionali con supporto XML

• Memorizzano internamente i documenti XML in tabelle• Implicano una conversione di ingresso

XMLrelazionale e in uscita relazionale XML• Differiscono per lo schema relazionale usato per

mappare i dati XML • Fisso, indipendente dal DTD• Variabile, dipendente dal DTD

• Normalmente non preservano tutte le caratteristiche sintattiche di XML

Page 112: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

112

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Mapping XML-relazionale

• Custom• Il progettista definisce volta per volta a mano lo schema del database

in cui riversare documenti XML• Canonico

• Insieme di tabelle fisso indipendente dal tipo di documento. Può porre vincoli sullo schema dei documenti XML memorizzabili che devono contenere elementi predefiniti

• Basato sullo schema del documento: • Detta regole generali per mappare strutture XML in tabelle, per

esempio per mappare un generico elemento e i suoi attributi in una tabella equivalente. Non pone vincoli sui documenti memorizzabili, ma lo schema relazionale risultante varia per diversi tipi di documento

Page 113: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

113

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Architettura

• Il DBA può caricare documenti nel sistema ed effettuare query da console

• Le applicazioni passano attraverso una interfaccia programmativa (API) per memorizzare o interrogare documenti

• Le conversioni di formato sono a carico del processore XML, oppure dell’applicazione (con l’aiuto della API a disposizione)

Page 114: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

114

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio: supporto per dati XML in Oracle 9i -- query

• Uso di colonne CLOB OracleText (un tipo proprietario) e di operatori che estendono il predicato SQL CONTAINS per il reperimento di elementi in documenti XML

• Es: INPATH(XPath) restringe una ricerca di stringhe all’interno del frammento XML denotato dall’espressione XPath

• Uso del tipo SQL 99 XMLType, con metodi per la creazione e manipolazione di dati XML

• Es: existNode(varchar XPath): conta le occorrenze di sotto-elementi denotati dall’espressione in ingresso; extract(varchar XPath) estrae un frammento di XML

Page 115: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

115

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio: supporto per dati XML in Oracle 9i -- API

• XML SQL Utility (XSU) fornisce una API per programmi PL/SQL e Java

• Trasforma tabelle o view relazionali in documenti XML• Divide in frammenti documenti XML e li inserisce in tabelle

relazionali• Usa un mapping canonico a tre elementi <ROWSET>,

<ROW>, <COLUMN_NAME>• Supporta tabelle con colonne di tipo complesso• Si appoggia su JDBC e facilita la trasformazione del risultato

di una query in un albero DOM, la modifica e creazione di dati XML

Page 116: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

116

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

SQL/XML

• Un’estensione di SQL per sfruttare caratteristiche di XML

• Studiato dal consorzio SQLX• Parte dello standard ISO• Contiene varie parti: XMLType, funzioni XSL su

colonne di tipo XML, funzioni di generazione di XML da dati relazionali

Page 117: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

117

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Generazione di XML da dati relazionali

• Esprimibile mediante funzioni nella clausola SELECT• XMLELEMENT: crea una lista di

elementi• XMLATTRIBUTES: crea attributi

all’interno di elementi• XMLFOREST: crea una lista di

elementi contenenti altri elementi

Page 118: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

118

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Esempio

CREATE TABLE movie( movie_ID INTEGER, title CHAR VARYING (100), year_released SMALLINT, genre CHAR VARYING (20) ARRAY [ 10 ], description CHAR VARYING (300), long_description CHAR LARGE OBJECT (2500), run_time INTEGER, MPAA_rating CHAR (4))

Page 119: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

119

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

Costruzione di elementi con attributi

SELECT XMLELEMENT( NAME “movieTitle”, XMLATTRIBUTES(B.year_released as “movieYear”) B.Title ) AS xmldataFROM movie AS BWHERE B.Title like ”%Rose%”

Risultato<movieTitle movieYear=“1979”> The Rose </movieTitle><movieTitle movieYear=“1986”> The name of the Rose </movieTitle><movieTitle movieYear=“1989”> The war of the Roses </movieTitle>

Page 120: Atzeni, Ceri, Fraternali,  Paraboschi, Torlone  Basi di dati Quarta edizione McGraw-Hill, 2014

120

P. Atzeni, S. Ceri, P. Fraternali, S. Paraboschi, R. TorloneBasi di dati. Modelli e linguaggi di interrogazione, 4e

©2013 McGraw-Hill Education (Italy) S.r.l.

RiferimentiRiferimenti

• DOM: DOM: http://www.w3.org/DOM/

• XPath Data Model: XPath Data Model: http://www.w3.org/TR/xpath• XML Infoset: XML Infoset: http://www.w3.org/TR/xml-infoset/

• XQuery: XQuery: http://www.w3.org/XML/Query– XQuery Use Cases: XQuery Use Cases: http://www.w3.org/TR/xquery-use-cases/

• SQL/XML: SQL/XML: J. Melton, Advanced SQL:1999, Morgan J. Melton, Advanced SQL:1999, Morgan Kaufmann, 2003Kaufmann, 2003

• eXist, Saxon, Galax...eXist, Saxon, Galax... BaseX:BaseX:– eccellente per esercitarsieccellente per esercitarsi