1.34k likes | 1.76k Views
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)
E N D
Atzeni, Ceri, Fraternali, Paraboschi, Torlone Basi di datiQuarta edizioneMcGraw-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) XML Schema Definition (XSD) Linguaggi di interrogazione e trasformazione XQuery XSL
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, ...
Evoluzione dei modelli dei dati Web data XML Data Model Self-defining Data Standard DDL Extended/Object Relational Data ModelObjects & Functions Predefined complex Types NF2 Data Model Nested Relations Hierarchical Fields Predefined simple Types Relational Data Model Flat Relations Predefined, simple Types
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
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
XML • HTML: insieme fisso di tag • XML: standard per creare linguaggi di markup con tag personalizzati (erede di SGML); possono essere usati in qualunque dominio • HTML vs XML <book> <title>The Idea Methodology </title> <author> S. Ceri </author> <author> P. Fraternali </author> <ed> Addison-Wesley </ed> <price> US$ 49 </price> </book> <h1>The Idea Methodology</h1><br> <ul> <li>di S. Ceri, P. Fraternali </li> <li> Addison-Wesley</li> <li> US$ 49 </li> </ul>
Esempio 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>
XML vs HTML XML non rimpiazza HTML! XML e HTML sono nati con scopi diversi: XML progettato per descrivere DATI cosa sono i dati HTML progettato per visualizzare i dati come appaiono i dati
Usi di XML Separare i dati dal modo con cui vengono visualizzati Scambiare i dati tra sistemi eterogenei Scambiare informazioni in sistemi B2B Condividere dati Memorizzare dati Supportare nei moderni browser visualizzazione, validazione, embedding in documenti HTML, trasformazioni con XSL, visualizzazioni con CSS È un documento di testo il software che tratta documenti testuali tratta anche XML
Sintassi XML (http://www.w3schools.com/xml) Un documento XML ben formato deve: Cominciare con una direttiva standard che specifica la versione di XML, ad esempio: <?xml version= “ 1.0”?> Il documento può contenere elementi. Ogni elemento può contenere sia testo che altri elementi. Un elemento dotato di contenuto è delimitato da due tag: uno di apertura e uno di chiusura. Il tag di chiusura deve avere lo stesso nome del tag di apertura, con in più il prefisso“/”. I nomi di tag sono case sensitive.
Sintassi XML (http://www.w3schools.com/xml) In un documento XML ben formato: Se un elemento è privo di contenuto, ha un solo tag, che deve terminare con il simbolo “/>”. Il documento deve avere un elemento radice che racchiude l’intero contenuto. Se un elemento contiene sotto-elementi, il tag di chiusura di ciascun sottoelemento deve precedere il tag di chiusura del sopra-elemento. I valori degli attributi degli elementi devono essere contenuti tra virgolette (singole o doppie).
Elementi <prodottocodice=“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
Attributi <prodottocodice=“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 memorizzare metadati, ad esempio l’identificatore di un elemento, la data di creazione o modifica di un dato, ecc..
Namespace Metodo per evitare conflitti di nome <table> <tr>...</tr> </table> <table> <product>..</product> </table> Si introduce un prefisso <h:table xmlns:h="http://www.w3.org/TR/html4/> <h:tr>...</h:tr> </h:table> <my:table xmlns:my="http://www.me.com/furniture> <my:product> ... </my:product> </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
Document Type Definition (DTD) Detta il tipo di un documento, cioè: i tag ammessi le regole di annidamento dei tag Scopi: Accordarsi su formato/struttura dei documenti Validare documenti XML secondo certe regole 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
Validazione 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)
Modello di contenuto Elementi con un elemento figlio <!ELEMENT PRODOTTO (DESCRIZIONE)> <PRODOTTO> <DESCRIZIONE>…</DESCRIZIONE> </PRODOTTO> Elementi con una sequenza di elementi figli <!ELEMENT MAIL (TO, FROM, TITLE, BODY)> <MAIL> <TO>…</TO> <FROM>…</FROM> <TITLE>…</TITLE> <BODY>…</BODY> </MAIL> Elementi con contenuto di tipo PCDATA (parsed character data = brano di testo qualunque) <!ELEMENT DESCRIZIONE (#PCDATA)> <DESCRIZIONE>Un testo qualsiasi</DESCRIZIONE>
Modello di contenuto Contenuto alternativo <!ELEMENT ARTICOLO (TESTO|FOTO)> <ARTICOLO><TESTO> . . </TESTO></ARTICOLO> <ARTICOLO><FOTO> . . </FOTO><ARTICOLO> Contenuto misto <!ELEMENT ARTICOLO (#PCDATA|FOTO)*> <ARTICOLO> testo </ARTICOLO> <ARTICOLO><FOTO> . . </FOTO><ARTICOLO> Elementi vuoti<!ELEMENT ARTICOLO EMPTY)> <ARTICOLO/> Contenuto arbitrario <!ELEMENT NOTA ANY)> <NOTA> del testo libero</NOTA> <NOTA> <AUTORE>Luca</AUTORE> del testo libero</NOTA>
Occorrenze di un sottoelemento 1 volta <!ELEMENT PRODOTTO (DESCRIZIONE)> 1 o più volte <!ELEMENT LISTA (PRODOTTO+)> 0 o più volte <!ELEMENT LISTA (PRODOTTO*)> 0 o 1 volta<!ELEMENT PRODOTTO (DESCRIZIONE?)>
Esempio di DTD <!ELEMENT ELENCO (PRODOTTO+)> <!ELEMENT PRODOTTO (DESCRIZIONE, PREZZO?)> <!ELEMENT DESCRIZIONE (#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
Dichiarazioni di attributi Per ognielemento dice: qualiattributipuòavere chevaloripuòassumereciascunattributo se esiste e qual è ilvalore di default Esempio di dichiarazione di attributo: <!ATTLIST PRODOTTO codice ID #REQUIRED label CDATA #IMPLIED status (disponibile|terminato) ‘disponibile’>
Tipi di attributi CDATA: dati di tipo carattere (val1 | val2 | val3): un valore della lista ID: identificatore IDREF, IDREFS: valore di un attributo di tipo ID nel documento (o insieme di valori) ENTITY, ENTITIES: nome (nomi) di entità NMTOKEN, NMTOKENS: caso ristretto di CDATA (una sola parola o insieme di parole) codice ID #REQUIRED label CDATA #IMPLIED Status (disponibile|terminato) ‘disponibile’
Vincoli sugli attributi #REQUIRED: il valore deve essere specificato #IMPLIED: il valore può mancare #FIXED “valore”: se presente deve coincidere con “valore” <!ELEMENT FAX (..)> <!ATTLIST FAX Mittente CDATA #FIXED “Politecnico di Milano"> Default : si può specificare un valore come default, usato quando l’attributo è mancante <!ELEMENT SCONTO EMPTY> <!ATTLIST SCONTO Valore CDATA “10"> <SCONTO/> vale 10 <SCONTO valore=”15”/> vale 15
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> ]>
Relazione tra documento e DTD DTD esterno <?XML version="1.0" standalone="no"?> <!DOCTYPE NEWSPAPER SYSTEM ”newspaper.dtd"> <NEWSPAPER>.. </NEWSPAPER> DTD interno <?XML version="1.0" standalone="no"?> <!DOCTYPE NEWSPAPER [ <!ELEMENT NEWSPAPER(…)> ... ]> <NEWSPAPER>.. </NEWSPAPER>
XML 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
XSD 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
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 methis weekend!</body> </note> Note: xmlns: namespace di default xmlns:xsi: URI (Universal Resource Identifier) che introduce l’uso dei tag di XML Schema xsi:schemaLocation: dichiara dove reperire il file XSD (sempre attraverso URI)
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)
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>
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 fisso Obbligatorio o opzionale
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>
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>
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>
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
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>
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>
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
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>
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>
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>
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"/>
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>
Altre caratteristiche di XML Schema Estensioni di tipi Costrutti ANY/ANYATTRIBUTE Elementi contenenti solo testo, testo e attributi
Riferimenti www.w3schools.com www.w3schools.com/xml www.w3schools.com/dtd http://www.w3schools.com/schema/
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
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
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