8-XML e basi di dati in Internet 1 Sommario Introduzione Dati Strutturati , Semistrutturati, e Dati non strutturati. XML: Modello dei dati gerarchico (Albero). XML: Documenti, DTD, e XML Schema. XML: Documenti and Database. XML: Interrogazioni. – Xpath – XQuery 2 Introduzione Sebbene HTML è usato per formattare e strutturare documenti Web, non è adatto per specificare dati strutturati estratti da database. Un nuovo linguaggio — detto XML (eXtended Markup Language) si è affermato come lo standard per strutturare e scambiare dati sul Web. XML può essere usato per ottenere più informazioni sulla struttura and significato dei dati nelle pagine Web piuttosto che specificare come le pagine Web sono formattate per la visualizzazione. Gli aspetti di formattazione sono specificati separatamente — per esempio, usando un linguaggio di formattazione come XSL (eXtended Stylesheet Language). 3 Dati Strutturati, semi-strutturati e non strutturati. Le informazioni immagazzinate in database sono note come dati strutturati perché sono rappresentati in un formato “stretto”. Il DBMS allora che tutti i dati seguano le strutture e i vincoli specificati nello schema. In alcune applicazioni, i dati sono raccolti in una maniera ad-hoc prima che sia noto come essi verranno immagazzinati e maneggiati. Questi dati possono avere una certa struttura, ma non tutte le informazioni raccolte avranno identica struttura. Questo tipo di dati è noto come dati semi-strutturati. – Nei dati semi-strutturati, le informazioni dello schema sono inframmezzate ai dati, poiché ciascun oggetto può avere differenti attributi che non sono noti a priori. Quindi questo tipo di dati sono detti dati auto-descrittivi. Una terza categoria è nota come dati non strutturati, perché vi è una indicazione molto limitata del tipo dei dati. Un tipico esempio è un documento di testo che contiene informazioni legate con esso. Le pagine Web in HTML che contengono alcuni dati sono considerati dati non strutturati. 4 Dati Strutturati, semi-strutturati e non strutturati(cont.) I dati semi-strutturati possono essere rappresentati da un grafo diretto, come mostrato. Le etichette o tags sul grafo diretto rappresentano i nomi di schema — nomi di attributi, tipi oggetto (o tipi entità o classi), e relazioni. I nodi interni rappresentano oggetti individuali o attributi composti. I nodi foglia rappresentano i valori effettivi dei dati atomici. 5 FIGURE 26.1 Representing semistructured data as a graph. 6 XML Hierarchical (Tree) Data Model FIGURE 26.3 A complex XML element called <projects>. 7 XML Hierarchical (Tree) Data Model (cont.) L’oggetto base in XML è il documento XML. Vi sono due principali concetti di strutturazione che sono usati per costruire un documento XML : elementi e attributi. Gli attributi in XML forniscono informazioni aggiuntive che descrivono gli elementi. Come in HTML, gli elementi sono identificati in un documento dal loro tag di inizio and tag di fine. The nomi dei tag sono racchiusi tra le parentesi angolari <…>, and i tag di fine sono are ulteriormente identificati da un backslash </…>. Gli elementi complessi sono costruiti da altri elementi gerarchicamente, mentre gli elementi semplici contengono i valori dei dati. E’ naturale vedere la corrispondenza tra la rappresentazione XML testuale e la struttura ad albero. Nella rappresentazione ad albero, i nodi interni rappresentano elementi complessi, mentre i nodi foglia rappresentano elementi semplici. Perciò il modello XML è chiamato un modello ad albero or gerarchico. 8 XML Hierarchical (Tree) Data Model (cont.) 1. 2. 3. E’ possibile caratterizzare tre tipi principali di documenti XML Documenti XML incentrati sui dati : Questi documenti hanno molti dati di dimensioni ridotte che sguono una specifica struttura, e quindi possono essere estratti da un database strutturato. Essi sono formattati come documenti XML per scambiarli o visualizzarli su Web. Documenti XML incentrati sul documento : Questi sono documenti con grande quantità di testo, come news articoli or libri. In questi documenti vi sono pochi ( o nessun) dato strutturato. Documenti XML ibridi : Questi documenti possono avere parti che contengono dati strutturati e altre parti che sono prevalentemente testuali o nonstrutturati. 9 Documenti XML, DTD, and XML Schema. Well-Formed – Deve iniziare con una dichiarazione XML per indicare la versione di XML usata—come altri rilevanti attributi. – Deve seguire la struttura sintattica del modello ad albero: questo significa che ci deve essere un unico elemento radice, e che ogni elemento deve contenere una coppia di tag di inizio e fine correlati tra loro, contenuta tra i tag dell’elemento padre. – Un documento XML ben formato è sintatticamente corretto. Questo gli consente di essere processato da generici processori che attraversano il documento e creano la rappresentazione interna ad albero. DOM (Document Object Model) - Allows programs to manipulate the resulting tree representation corresponding to a well-formed XML document. The whole document must be parsed beforehand when using dom. SAX - Allows processing of XML documents on the fly by notifying the processing program whenever a start or end tag is encountered. Valid – Un criterio più forte per un documento XML è essere valido. In questo caso, il documento deve essere ben formato, e in aggiunta deve essere scritto in modo che i nomi utilizzati nelle coppie di tag di inizio e fine siano coerenti con la struttura specificata in un file DTD (Document Type Definition) o in un file XML schema. 10 XML Documents, DTD, and XML Schema (cont.) FIGURE 26.4 An XML DTD file called projects. 11 XML Documents, DTD, and XML Schema (cont.) Notazione XML DTD A * following the element name means that the element can be repeated zero or more times in the document. This can be called an optional multivalued (repeating) element. A + following the element name means that the element can be repeated one or more times in the document. This can be called a required multivalued (repeating) element. A ? following the element name means that the element can be repeated zero or one times. This can be called an optional single-valued (non-repeating) element. Un elemento che appare senza i precedenti tre simboli deve apparire esattamente una volta nel documento. Questi sono elementi a singolo valore(non ripetuti) necessari. Il tipo di un elemento viene specificato tra parentesi di seguito all’elemento. Se le parentesi comprendono nomi di altri elementi, questi ultimi all’interno della struttura ad albero sono i figli dell’elemento a cui le parentesi stesse si riferiscono. Se le parentesi includono la parola chiave #PCDATA o uno degli altri tipi di dato disponibili in XML DTD, l’elemento è un nodo foglia. PCDATA sta per “ parsed character data”, che è analogo al tipo di dati stringa. Nella specifica degli elementi le parentesi possono essere nidificate. Un simbolo barretta ( e1 | e2 ) specifica che o e1 or e2 possono apparire nel documento. 12 XML Documents, DTD, and XML Schema (cont.) Limitationi of XML DTD I tipi di dato del DTD non sono molto generali. DTD ha la sua particolare sintassi e pertanto richiede processori specializzati. Potrebbe essere vantaggioso specificare lo schema dei documenti XML usando le regole sintattiche of XML stesso in modo tale che gli stessi processori dei documenti XML possano processare le descrizioni dello schema XML. Tutti gli elementi DTD sono sempre forzati a seguire l’ordine del documento pertanto non sono permessi elementi non ordinati. 13 XML Schema per Projects <xs: schema xmlns:xs=“http:// www.w3.org/2001/XMLSchema”> <xs: element name=“projects”> <xs: sequence> <xs: element name=“project” minOccurs=“1” maxOccurs=“unbounded”> <xs: sequence> <xs:element name= “Name” type “xs:string”/> ……….. <xs: element “Deptno” type=“xs:unsignedInt” minOccurs=“0” maxOccurs=“1”/> <xs: element name= “Worker” minOccurs=“1” maxOccurs=“unbounded”> <xs: sequence> <xs:element name=“SSN” type=“xs:string”/> ……….. <xs: element name=“hours” type= “xs:float”/> </ xs: sequence> </ xs: element > </ xs: sequence> </xs: element> </ xs: sequence> </xs: element> </xs: schema> 14 The ER conceptual schema diagram for the COMPANY database. 15 Result of mapping the COMPANY ER schema into a relational schema. 16 XML Documents, DTD, and XML Schema (cont.) FIGURE 26.5 An XML schema file called company. 17 FIGURE 26.5 (continued) An XML schema file called company. 18 FIGURE 26.5 (continued) An XML schema file called company. 19 FIGURE 26.5 (continued) An XML schema file called company. 20 XML Documents, DTD, and XML Schema (cont.) XML Schema Descrizione dello schema e Namespace XML : E’ necessario identificare lo specifico set of elements (tags) del linguaggio di XML schema specificando un file immagazzinato in un sito Web. La seconda linea dell’esempio specifica il file usato nell’ esempio, cioè: "http://www.w3.org/2001/XMLSchema". Ogni definizione di questo tipo è chiamata un namespace XML. Il nome di file è assegnato alla variabile xsd utilizzando l’attributo xmlns (XML namespace), e questa variabile è usata come prefisso per tutti i tag del XML schema. Annotazioni,documentazione e linguaggio usato: Gli elementi xsd:annotation e xsd:documentation sono usati per prevedere commenti e altre descrizioni nel documento XML. L’ attributo XML:lang dell’elemento xsd:documentation specifica il linguaggio usato. Eg. “en” Element e Type: Noi specifichiamo root element del ns. XML schema. Nel XML schema, l’attributo name del tag xsd:element specifica il nome dell’elemento, chiamato company per il “root element” nel ns. esempio. La struttura del root element company è xsd:complexType. 21 XML Documents, DTD, and XML Schema (cont.) XML Schema Elementi di primo livello nel database company: Questi elementi sono chiamati employee, department, and project, e ciascuno è specificato in un tag xsd:element. Se un tag ha solo attributi e nessun ulteriore sotto-elemento o dato, può essere terminato con il simbolo back slash (/>) e chiamato Empty Element. Specificazione del tipo dell’elemento e minime e massime occorenze: Se noi specifichiamo l’ attributo type in an xsd:element, questo significa che la struttura dell’elemento sarà descritta separatamente, tipicamente usando l’elemento xsd:complexType. I tag minOccurs e maxOccur sono usati per specificare i limiti inferiore e superiore del numbero di occorrenze di un elemento. Il default è esattamente una occorrenza. Specificazione delle keys: Per specificare primary keys, è usato il tag xsd:key. Per specificare foreign keys is usato il tag xsd:keyref. Quando specifichiamo una foreign key, l’ attributo refer of the tag xsd:keyref specifica la primary key referenziata mentre i tag xsd:selector and xsd:field specificano il tipo dell’elemento referito e la foreign key. 22 XML Documents, DTD, and XML Schema (cont.) XML Schema Specificare la struttura degli elementi complessi via tipi complessi : Nel nostro esempio elementi complessi sono Department, Employee, Project, and Dependent, che usano il tag xsd:complexType. Noi specifichiamo ciascuno di questi come una sequenza di sottoelementi correspondenti agli attributi del database di ciascun tipo di entità usanso i tag xsd:sequence and xsd:element of XML schema. A ciascun elemento è assegnato un nome ed un tipo mediante gli attributi name and type of xsd:element. Possiamo anche specificare gli attributi minOccurs and maxOccurs se necessitiamo modificare il default di esattamente una occorrenza. Per gli attributi (optional) del database dove “null is allowed”, dobbiamo specificare minOccurs = 0, dove per gli attributi multivalore del database dobbiamo specificare maxOccurs = “unbounded” sull’elemento corrispondente. Attributi composti (compound) : Attributi Composti nello Schema ER sono anche specificati come complex types in the XML schema, come illustratto dai tipi complessi Address, Name, Worker, and WorkesOn. Avrebbero comunque potuto essere inseriti direttamente nelle definizioni degli elementi padre. 23 XML Documents and Databases. Approaches to Storing XML Documents Usando un DBMS per immagazzinare i documenti come testo : Possiamo usare un DBMS per immagazzinare interi documenti XML come campi di testo all’interno dei record del DBMS. Questo approccio può essere usato se il DBMS ha un modulo per l’elaborazione documentale che dovrebbe lavorare per immagazzinare documenti “schemaless” and “document-centric” XML. Usando un DBMS per immagazzinare i contenuti dei documenti come dati : Questo approccio dovrebbe lavorare per immagazzinare una collezione di documenti che seguono uno specifico XML DTD or XML schema. Poiché tutti i documenti hanno la stessa struttura, noi possiamo progettare un RDBMS per memorizzare gli elementi di livello foglia all’interno dei documenti XML . Progettare un sistema specializzato per la memorizzazione di dati XML nativi: Un nuovo tipo di sistema database basato sul modello gerarchico (ad albero) dovrebbe essere disegnato ed implementato. Il sistema dovrebbe includere tecniche di indexing and querying, e dovrebbe lavorare per tutti i tipi di documenti XML. Creando o pubblicando documenti XML personalizzati a partire da basi di dati relazionali preesistenti Siccome ci sono enormi quantità di dati già memorizzate in database relazionali, parte di questi dati potrebbe essere formattato come documenti per lo scambio o la visualizzazione su Web the Web. 24 XML Documents, DTD, and XML Schema (cont.) Extracting XML Documents from Relational Databases. Supponiamo che una applicazione ha bisogno di estrarre documenti XML for informationi su studenti, corsi, e votazioni (grade) da un database universitario. I dati necessari per questi documenti è contenuto in the database attributi dei tipi di entità course, section, and student come mostrato (parte del ER principale), e le relazioni s-s and c-s tra loro. 25 FIGURE 26.7 Subset of the UNIVERSITY database schema needed for XML document extraction. 26 XML Documents, DTD, and XML Schema (cont.) Estrazione di documenti XML da Database Relazionali. Una delle possibili gerarchie che può essere estratta dal sottodatabase potrebbe scegliere course come radice. 27 FIGURE 26.8 Hierarchical (tree) view with COURSE as the root. 28 FIGURE 26.9 XML schema document with COURSE as the root. 29 XML Documents, DTD, and XML Schema (cont.) Eliminazione dei cicli per la conversione di grafi in alberi E’ possbile avere un sottinsieme più complesso con uno o più cicli, indicando relazioni multiple tra le entità . Supponiamo di aver bisogno delle informazioni in tutti i tipi di entità e relazioni nella figura sotto per un particolare documento XML, con student come elemento radice. 30 FIGURE 26.6 An ER schema diagram for a simplified UNIVERSITY database. 31 XML Documents, DTD, and XML Schema (cont.) Eliminazione dei cicli per convertire grafi in alberi Una via per interrompere i cicli è replicare i tipi di entità coinvolte nei cicli Prima replichiamo INSTRUCTOR come mostrato nella parte (2) della figura chiamando la replica alla destra INSTRUCTOR1. La replica INSTRUCTOR sulla sinistra rappresenta la relazione tra istruttori e la sezione in cui essi insegnano mentre la replica INSTRUCTOR1 sulla destra rappresenta la relazione tra istruttori e dipartimento in cui ciascuno Abbiamo ancora il ciclo COURSE, possiamo replicare COURSE in una maniera simile, ottenendo la gerarchia della parte (3) . La replica COURSE1 alla sinistra rappresenta la relazione tra i corsi e le loro sezioni mentre la replica COURSE alla destra rappresenta la relazione tra corsi e il dipartimento che offre ciascun corso. 32 FIGURE 26.13 Converting a graph with cycles into a hierarchical (tree) structure. 33 XML Querying XPath Una espressione XPath ritorna una collezione di elementi nodi che soddisfa certi pattern specificati nell’espressione. I nomi nell’espressione XPath sono nomi di nodo nel documento ad albero XML che sono o nomi di tag (elementi) o nomi di attributi, possibilmente con additionali conditioni di qualificazione per ulteriormente resringere i nodi che rispettano il pattern. Vi sono due principali separatori che specificano un path: singolo slash (/) and doppio slash (//). Un singolo slash prima di un tag specifica che il tag deve apparire come un figlio diretto del precedente(genitore) tag, mentre un doppio slash specifica che il tag può apparire come un discentente del precedente tag ad ogni livello. E’ consuetudine includere il nome di file in ogni query XPath consentendoci di specificvare ogni nome di file locale o nome di path che specifica il path. doc(www.company.com/info.XML)/company => COMPANY XML doc 34 XML Querying 1. Ritorna il nodo radice COMPANY e tutti i suoi nodi discendenti, il che significa che ritorna il documento XML intero. 2. Ritorna tutti i nodi (elementi) department e i loro sottalberi discendenti. 3. Ritorna tutti i nodi employeeName che sono diretti figli di un nodo employee, tale che il nodo employee ha un altro elemento figlio employeeSalary il cui valore è più grande di 70000. 4. Questo ritorna lo stesso risultato di 3. eccetto che in questo esempio viene specificato il path name completo 5. Questo ritorna tutti i nodi projectWorker and i loro nodi discendenti che sono figli sotto un path /company/project e che hanno un nodo figlio hours con valore più grande di 20.0. 35 FIGURE 26.14 Some examples of XPath expressions on XML documents that follow the XML schema file COMPANY in Figure 26.5. 36 XML Querying XQuery XQuery usa espressioni XPath, ma ha costrutti aggiuntivi. XQuery permitte la specifica di query più generali su uno o più documenti XML. La forma tipica di una query in XQuery is nota come FLWR expression, che sta per le quattro clausole principali di XQuery ed ha la seguente forma: FOR <variabili legate a nodi individuali (elementi)> LET <variabli legate a collezioni di nodi (elementi)> WHERE <condizioni di qualificazione> RETURN <specificazione di risultati di query> 37 XML Querying 1. 2. 3. 4. Questa query the first and last names of employees who earn more than 70000. The variable $x is bound to each employeeName element that is a child of an employee element, but only for employee elements that satisfy the qualifier that their employeeSalary is greater that 70000. Questo è un modo alternativo per rintracciare gli stessi elementi rintracciati dalla prima query Questa query illustra come un operazione di join può essere eseguita in presenza di più di una variabile. La variabile $x è legata ad ogni elemento projectWorker che è un figlio del progetto n.5, mentre la variabile $y è legata a ogni elemento employee. La condizione di join confronta i valori di SSN al fine di recuperare il nome degli employee 38 FIGURE 26.15 Some examples of XQuery queries on XML documents that follow the XML schema file COMPANY in Figure 26.5. 39