Inquadramento XML Dati semistrutturati Extensible Markup Language Document Type Definitions Leggere paragrafi 4.6, 4.7 Garcia- Molina et al. 1. Information Integration: estrarre informazioni da database diversi come se fosse uno solo 2. Dati semistrutturati: un nuovo modello di dati progettato per gestire problemi di information integration. 3. XML: un linguaggio standard per descrivere schemi di dati semistrutturati e rappresentare i dati. 1 2 Il problema dell Information- Integration Esempio Dati di interesse esistono in diversi posti e potrebbero, in teoria, essere messi in correlazione Ma i diversi database differiscono in: 1. Modello (relazionale, object-oriented?). 2. Schema (normalizzato/non normalizzato?). 3. Terminologia: i consulenti sono impiegati? Pensionati? Contrattisti? 4. Convenzioni (metri o piedi?). 3 Ogni bar ha un database. Uno usa un DBMS relazionale; un altro tiene il menu in un documento Word. Uno memorizza i telefoni dei distributori, un altro no. Uno distingue le ales dalle altre birre un altro no. Uno conta le bottiglie di birra nel magazzino, un altro le casse. 4
Due approcci all integrazione Diagramma di un Warehouse 1. Warehousing : Fai una copia delle sorgenti di dati in un sito centrale e trasformali in un solo schema. Ricostruisci i dati giornalmente o settimanalmente, ma non cercare di mantenerli piu aggiornati di cosi. 2. Mediazione : crea una vista di tutte le sorgenti, come se fossero integrate 1. Rispondi a una query trasformandola nella terminologia delle sorgenti e interroga le sorgenti. 5 Warehouse Wrapper Wrapper Sorgente 1 Sorgente 2 6 Un Mediatore Query utente Risultato Mediatore Query Risultato RisultatoQuery Wrapper Wrapper Query Risultato Query Risultato Sorgente 1 Sorgente 2 7 Dati semistrutturati Scopo: rappresentare dati da sorgenti indipendenti in maniera piu flessibile rispetto ai modelli relazionale e a oggetti Simili agli oggetti, ma con il tipo di ciascun oggetto definito dall oggetto stesso, non da una classe Etichette per indicare il significato delle sottostrutture 8
Dati semistrutturati Un database di dati semistrutturati e una collezione di nodi Ogni nodo e interno o e una foglia Le foglie sono associate a dati di tipo elementare (stringhe, numeri) I nodi interni hanno uno a piu archi uscenti Ogni arco ha una etichetta che indica come il nodo sorgente sia correlato con il nodo destinazione Dati semistrutturati Un nodo interno, la radice, non ha archi entranti e rappresenta l intero database Ogni nodo deve essere raggiungibile dalla radice ma il grafo non e necessariamente un albero Flessibilita : nessuna restrizione su: Etichette sugli archi. Numero di successori con una data etichetta 9 10 Esempi di grafo radice XML bar beer beer XML = extensible Markup Language. name Joe s ServedAt addr Maple manuf manuf prize name A.B. Bud name M lob year 1995 award Oro L oggetto birra per Bud Mentre HTML usa i tag per la formattazione (ad es., corsivo ), XML usa i tag per la semantica (ad es., questo e un indirizzo ). Idea chiave: creare un insieme di tag per un dominio (ad es., genomica), e tradurre tutti i dati in documenti XML usando i tag L oggetto bar per il bar di Joe 11 12
XML ben-formato e valido XML ben formato consente di inventare i tag Simile alle label dei dati semistrutturati. XML valido comprende un DTD (Document Type Definition), che limita le etichette e fornisce una grammatica per il loro uso XML ben formato Si comincia il documento con una dichiarazione, circondata da <??>. Una dichiarazione normale e : <? XML VERSION = 1.0 STANDALONE = yes?> Standalone = nessun DTD Il documento contiene un tag radice che circonda dei tag innestati. 13 14 Tag I tag, come in HTML, appaiono normalmente in coppie, come <FOO> </FOO>. I tag possono essere innestati arbitrariamente Sono permessi anche tag che non richiedono tag di terminazione. In questo caso si usa la sintassi <FOO/> I tag XML sono case sensitive: <FOO> diverso da <foo> Regole per i nomi dei tag (elementi) I nomi possono contenere lettere, numeri e altri caratteri (tranne :) I nomi non possono cominciare con un numero o un carattere di punteggiatura I nomi non possono cominciare con xml (o XML, o Xml, ecc.) I nomi non possono contenere spazi Caratteri non asci come éòá sono ammessi nei nomi 15 16
Commenti La sintassi è simile a quella dell HTML <!-- This is a comment --> Esempio: XML ben formato <? XML VERSION = 1.0 STANDALONE = yes?> <BARS> <BAR><NAME>Joe s Bar</NAME> <BEER><NAME>Bud</NAME> <PRICE>2.50</PRICE></BEER> <BEER><NAME>Miller</NAME> <PRICE>3.00</PRICE></BEER> </BAR> <BAR> </BARS> 17 18 XML e dati semistrutturati XML ben formato con tag innestati corrisponde a grafi di dati semistrutturati. Come i grafi di dati semistrutturati, anche XML consente grafi che non sono alberi Si usano attributi di tipo ID, IDREF e IDREFS che vedremo in seguito Esempio Il documento XML <BARS> e : BARS BAR BAR BAR NAME... BEER BEER Joe s Bar NAME PRICE NAME PRICE Bud 2.50 Miller 3.00 19 20
Terminologia BARS è l elementoradice I vari elementi BAR sono i figli di BAR BARS è il padre dei vari elementi BAR I vari elementi BAR sono fratelli Document Type Definitions Essenzialmente una grammatica context-free per descrivere i tag XML e il loro innestamento Ogni dominio di interesse (ad es., compoenenti elettronici, bar-birrebevitori) crea un DTD che descrive tutti i documenti che questo gruppo condivide. 21 22 XML Schema Una alternativa a DTD per descrivere la struttura di un file XML sono gli XML Schema Struttura di un DTD <!DOCTYPE <root tag> [ <!ELEMENT <name> ( <components> ) <more elements> ]> 23 24
Elementi di un DTD La descrizione di un elemento consiste di un nome (tag) e di una descrizione dei tag innestati tra parentesi Include l ordine dei subtag e la loro molteplicita. Le foglie (elementi di testo) hanno #PCDATA (Parsed Character DATA) al posto dei tag innestati. PCDATA significa che un parser analizzerà il testo per individuare eventuali tag 25 <!DOCTYPE BARS [ ]> Esempio: DTD <!ELEMENT BARS (BAR*)> <!ELEMENT BAR (NAME, BEER+)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT BEER (NAME, PRICE)> <!ELEMENT PRICE (#PCDATA)> NAME e PRICE sono testo Un oggetto BARS ha zero o piu BAR innestati al su interno Un BAR ha un NAME e uno o piu sottooggetti BEER Una BEER ha NAME e PRICE. 26 Descrizione di elementi I subtag devono apparire nell ordine indicato Un tag puo essere seguito da un simbolo che indica la sua molteplicita * = zero o piu + = uno o piu.? = zero o uno. Il simbolo connette sequenze alternative di tags. 27 Esempio: Descrizione di un elemento Un nome e un titolo opzionale (ad es., Prof. ), un nome e un cognome, in questo ordine, o e un indirizzo IP: <!ELEMENT NAME ( )> (TITLE?, FIRST, LAST) IPADDR 28
Uso dei DTD 1. Impostare STANDALONE = no. 2. Una delle due: a) Includere il DTD come un preambolo del documento XML oppure b) Includere DOCTYPE e il tag radice e aggiungere SYSTEM e un percorso al file dove il DTD puo essere trovato. 29 Esempio (a) <? XML VERSION = 1.0 STANDALONE = no?> <!DOCTYPE BARS [ <!ELEMENT BARS (BAR*)> <!ELEMENT BAR (NAME, BEER+)> Il DTD <!ELEMENT NAME (#PCDATA)> <!ELEMENT BEER (NAME, PRICE)> <!ELEMENT PRICE (#PCDATA)> Il documento ]> <BARS> <BAR><NAME>Joe s Bar</NAME> <BEER><NAME>Bud</NAME> <PRICE>2.50</PRICE></BEER> <BEER><NAME>Miller</NAME> <PRICE>3.00</PRICE></BEER> </BAR> <BAR> </BARS> 30 Esempio (b) Si assume che il DTD BARS sia in un file bar.dtd. <? XML VERSION = 1.0 STANDALONE = no?> <!DOCTYPE BARS SYSTEM bar.dtd > <BARS> <BAR><NAME>Joe s Bar</NAME> <BEER><NAME>Bud</NAME> <PRICE>2.50</PRICE></BEER> <BEER><NAME>Miller</NAME> <PRICE>3.00</PRICE></BEER> </BAR> <BAR> </BARS> Ottieni il DTD dal file bar.dtd 31 Attributi I tag di apertura in XML possono avere attributi, come <A HREF = > in HTML. In un DTD, <!ATTLIST element-name attribute-name attribute-type default-value> definisce un attributo e il suo tipo per questo elemento 32
Esempio: Attributi I bar possono avere un attributo kind, che e sushi, sports, oppure other. <!ELEMENT BAR (NAME BEER*)> <!ATTLIST BAR kind ( sushi sports other )> Tipi di attributi Alcuni tipi di attributi (val1 val2 ): l attributo può assumere solo i valori val1, val2, CDATA: sequenza qualunque di caratteri (differisce da PCDATA perchè un parser non analizza il testo al fine di indentificare tag) NMTOKEN: sequenza di lettere, cifre e i segni punto (.), trattino (-), sottolineatura (_) e due punti (:) NMTOKENS: come NMTOKEN con in più spazi, tab, a capo ID, IDREF, IDREFS: li vedremo più avanti 33 34 Valore di default Il valore di default può essere valore: un valore specifico #REQUIRED: un valore per l attributo deve sempre essere specificato #IMPLIED: l attributo può non essere specificato #FIXED valore: il valore dell attributo è fissato a valore Esempio: Uso degli attributi In un documento che consente il tag kind, possiamo vedere: <BAR kind = sushi > <NAME>Akasaka</NAME> <BEER><NAME>Sapporo</NAME>... </BAR> <PRICE>5.00</PRICE></BEER> 35 36
Esempio: valore di default DTD: <!ATTLIST payment type (check cash) "cash"> Valid XML: <payment type="check" /> Valid XML: <payment type="cash" /> Esempio: valore di default DTD: <!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0"> Valid XML: <square width="100" /> 37 38 DTD: Esempio: #IMPLIED <!ATTLIST contact fax CDATA #IMPLIED> Valid XML: <contact fax="555-667788" /> Valid XML: <contact /> DTD: Esempio: #REQUIRED <!ATTLIST person number CDATA #REQUIRED> Valid XML: <person number="5677" /> Invalid XML: <person /> 39 40
DTD: ESEMPIO: #FIXED <!ATTLIST sender company CDATA #FIXED "Microsoft"> Valid XML: <sender company="microsoft" /> Invalid XML: <sender company= IBM" /> Attributi I valori che si specificano per gli attributi devono essere racchiusi tra apici singoli o doppi Se il valore dell attributo contiene apici doppi bisogna usare gli apici singoli <gangster name='george "Shotgun" Ziegler'> E viceversa 41 42 Attributi Dati possono essere memorizzati in elementi o in attributi Ad esempio <person sex="female"> <firstname>anna</firstname> <lastname>smith</lastname> </person> Esempio <person> <sex>female</sex> <firstname>anna</firstname> <lastname>smith</lastname> </person> 43 44
Attributi Gli attributi dovrebbero essere utilizzati per memorizzare metadati, mentre i dati dovrebbero essere memorizzati negli elementi Problemi di utilizzare gli attributi: Gli attributi non possono contenere struttura (gli elementi possono) Gli attributi non sono facilmente estendibili (per cambiamenti futuri) Gli attributi sono più difficilmente manipolabili dai programmi ID e IDREF Sono puntatori da un oggetto ad un altro, in analogia agli attributi NAME = foo e HREF = #foo dell HTML. Consentono di far si che la struttura di un documento XML sia un grafo generale, piuttosto che solamente un albero. 45 46 Creare ID Dare ad un elemento E un attributo A di tipo ID. Quando si usa il tag <E> in un documento XML, dare all attributo A un valore unico. Esempio: <E A = xyz > ID: valori ammessi Il valore di un attributo ID può contenere solo i caratteri ammessi in NMTOKEN e deve cominciare con una lettera Nessun element può avere più di un attributo di tipo ID Il valore di un attributo ID deve essere unico rispetto al valore dell attributo ID di ogni altro elemento 47 48
Creare IDREF Esempio: ID e IDREF Per consentire a oggetti di tipo F di riferire un altro oggetto con un attributo ID, si da a F un attributo di tipo IDREF. Oppure, se si assegna all attributo il tipo IDREFS, si fa si che F faccia riferimento a un insieme di oggetti In questo modo si ottengono grafi che non sono alberi 49 Ridisegnamo il BARS DTD per includere sottoelementi sia BAR che BEER. Entrambi bars e beers hanno un attributo di tipo ID chiamato name. I Bars hanno dei sottooggeti PRICE, che consistono di un numero (il prezzo della birra) e un IDREF thebeer che punta a quella birra. Le birre hanno l attributo soldby, che e un IDREFS che punta ai bar che le vendono. 50 Il DTD <!DOCTYPE Bars [ <!ELEMENT BARS (BAR*, BEER*)> <!ELEMENT BAR (PRICE+)> <!ATTLIST BAR name = ID> <!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICE thebeer = IDREF> <!ELEMENT BEER ()> ]> Gli oggetti bar hanno Name come attributo ID e hanno uno o piu sottooggetti PRICE Gli oggetti PRICE hanno un numero (il prezzo) e un riferimento a una birra <!ATTLIST BEER name = ID, soldby = IDREFS> Gli oggetti BEER hanno un attributo ID chiamato name e un attributo soldby che e un insieme di 51 riferimenti ai bar Documento di esempio <BARS> <BAR name = JoesBar > <PRICE thebeer = Bud >2.50</PRICE> <PRICE thebeer = Miller >3.00</PRICE> </BAR> <BEER name = Bud, soldby = JoesBar, SuesBar, > </BEER> </BARS> 52
Elementi vuoti Elementi vuoti possono avere solo attributi <!ELEMENT element-name EMPTY> Entità Le entità sono variabili usate per riferirsi a stringhe Un riferimento ad una entità di nome ent è &ent; Le entità possono essere interne o esterne Sintassi delle entità interne: <!ENTITY entity-name "entity-value"> Esempio di DTD: <!ENTITY name "Donald"> <!ENTITY surname Duck"> XML: <author>&name;&surname;</author> 53 54 Entità esterne Entità predefinite in XML Sintassi: <!ENTITY entity-name SYSTEM "URI/URL"> Esempio di DTD: <!ENTITY name SYSTEM "http://en.wikipedia.org/donald"> <!ENTITY surname SYSTEM "http://en.wikipedia.org/duck"> XML: <author>&name;&surname;</author> 55 Riferimento a entità < > & " ' Carattere < > & 56
XML Namespaces Possono esserci dei conflitti sui nomi Lo stesso nome può essere usato per indicare cose diverse Esempio <table> <tr> <td>apples</td> <td>bananas</td> </tr> </table> <table> <name>african Coffee Table</name> <width>80</width> <length>120</length> </table> 57 58 Esempio Se uniamo i due documenti xml abbiamo un conflitto Soluzione: usare prefissi e namespaces Esempio <h:table xmlns:h="http://www.w3.org/tr/html4/"> <h:tr> <h:td>apples</h:td> <h:td>bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>african Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> 59 60
Namespaces Con xmlns specifichiamo che i prefissi utilizzati fanno riferimento a spazi di nomi diversi Sintassi dell attributo xmlns xmlns:namespace-prefix="namespaceuri" Quando si specifica xmlns in un tag, tutti i discendenti con lo stesso prefisso sono associati allo stesso namespace xmlns Si noti che l indirizzo usato per identificare il namespace non è usato dal parser per accedere a informazione Server solo a dare al namespace un nome unico Però molto spesso si usa l URI del namespace per indicare una pagina web reale che contiene informazioni sul namespace Ad es, si veda http://www.w3.org/tr/html4/ 61 62 URI (Uniform Resource Identifier) Un URI è una stringa di caratteri che identifica una risorsa internet Il tipo più comuni di URI è l Uniform ResourceLocator (URL) che identifica una risorsa indicando anche il modo con cui accedervi Un altro tipo di URI è l UniversalResource Name (URN) che identifica solo una risorsa senza specificare come accedervi 63 Namespace di default Si può specificare un namespace di default: tutti i tag senza prefisso appartengono a quel namespace Sintassi xmlns="namespaceuri" 64
Esempio <table xmlns="http://www.w3.org/tr/html4/"> <tr> <td>apples</td> <td>bananas</td> </tr> </table> Namespace I namespace sono molto utili per XML Schema 65 66