Introduzione a XML Corso Drupal 8-9 ottobre 2014 Introduzione XML: Uno standard W3C di complemento a HTML I due aspetti di XML: documento-centrico and data-centrico Motivazioni HTML descrive la presentazione dei dati XML ne descrive il contenuto L’utente può definire tag per descrivere il contenuto Il formato è text based. Formato ideale per lo scambio di informazioni. Tecnologia chiave per le applicazioni distribuite. Tutti i più diffusi sistemi di database sono stati aggiornati con tecnologie atte a conservare e costruire documenti XML. XML è relazionato a dati object-oriented e semi-strutturati. Corso Drupal 8-9 ottobre 2014 Pagina 2 Dati semistrutturati Un documento HTML (una lista di studenti) visualizzata sul Web <dt>Name: John Doe <dd>Id: s111111111 <dd>Address: <ul> <li>Number: 123</li> <li>Street: Main</li> </ul> </dt> <dt>Name: Joe Public <dd>Id: s222222222 … … … … </dt> Corso Drupal 8-9 ottobre 2014 Pagina 3 Dati semistrutturati / 2 Per rendere la lista degli studenti che abbiamo visto prima ‘consumabile’ da altre macchine sul Web, dovrebbe avere le seguenti caratteristiche Essere object-like Be auto-descrittiva (alcune informazioni riconducibili a uno schema, come I nomi degli attributi, dovrebbero essere parte dei dati stessi) Dati che abbiano queste caratteristiche sono definiti semistrutturati. Corso Drupal 8-9 ottobre 2014 Pagina 4 Modello dei dati semistrutturati Set di coppie etichetta-valore. name {name: "Alan", tel: 2157786, email: “[email protected]” } tel email “Alan” 2157786 “[email protected]” Graph Model: Nodes represent objects connected by labeled edges to values I valori stessi possono essere strutture {name: {first: “Alan”, last: “Black”}, tel: 2157786, name email: “[email protected]” } first “Alan” Corso Drupal 8-9 ottobre 2014 tel email 2157786 “[email protected]” last “Black” Pagina 5 Modello dei dati semistrutturati / 2 È consentita la duplicazione di etichette {name: "Alan", tel: 2157786, tel: 2498762"} La sintassi consente facilmente la descrizione di gruppi di oggetti {person: {name: “Alan”,tel: 2157786,email: “[email protected]”} person: {name: “Sara”,tel: 2136877,email: “[email protected]”} person: {name: “Fred”,tel: 7786312,email: “[email protected]”} } Non c’è bisogno che tutti gli oggetti all’interno di un set abbiano la stessa struttura {person:{name: “Alan”,tel: 2157786,email: “[email protected]”}, person:{name: {first: “Sara”,last: “Black”},email: “[email protected]”}, person:{name: “Fred”, tel: 7786312, height: 168} } Corso Drupal 8-9 ottobre 2014 Pagina 6 Modello dei dati semistrutturati / 3 È facile rappresentare dei dati relazionali {r1: {row: {row: r2: {row: row: row: } {a: {a: {c: {c: {c: a1, a2, c2, c3, c4, b: b: d: d: d: b1, c: c1}, b2, c: c2}}, d2}, d3}, d4}} Anche i dati object-oriented sono rappresentati naturalmente (ogni nodo ha un object id unico, o menzionato esplicitamente o generato dal sistema) {person: &o1{name: “Mary”, age: 45, child: &o2, child: &o3}, person: &o2{name: “John”, age: 17, relatives: {mother: &o1, sister: &o3}}, person: &o3{name: “Jane”, country: “Canada”, mother: &o1} } Corso Drupal 8-9 ottobre 2014 Pagina 7 Modello dei dati semistrutturati / 4 Sintassi formale per il modello di dati semistrutturati <ssd-expr> ::== <value> | oid <value> | oid <value> ::== atomicvalue | <complexvalue> <complexvalue> ::== { label:<ssd-expr>, ..., label:<ssd-expr> } Un valore object-id (oid) è detto DEFINITO se appare prima di un valore, altrimenti è detto USATO Una espressione ssd (ssd-expr) è consistente se Un oid è definito al massimo una volta e Se un oid è usato, deve anche essere stato definito. È un modello di dati potente e flessibile che consente di rappresentare delle informazioni senza dover seguire le stringenti regole di un database. Corso Drupal 8-9 ottobre 2014 Pagina 8 Che cosa sono i dati auto-descrittivi? Non auto-descrittivi (relazionali, object-oriented): Data part: (#12345, [“Students”, {[“John”, s111111111, [123,”Main St”]], [“Joe”, s222222222, [321, “Pine St”]] } ]) Schema part: PersonList[ ListName: String, Contents: [ Name: String, Id: String, Address: [Number: Integer, Street: String] ] ] Corso Drupal 8-9 ottobre 2014 Pagina 9 Che cosa sono i dati auto-descrittivi? / 2 Auto-descrittivi: I nomi degli attributi sono incorporati nei dati stessi, ma sono distinti dai valori Non serve uno schema per determinare cosa è cosa (ma uno schema potrebbe comunque essere comodo) (#12345, [ListName: “Students”, Contents: { [ Name: “John Doe”, Id: “s111111111”, Address: [Number: 123, Street: “Main St.”] ] , [Name: “Joe Public”, Id: “s222222222”, Address: [Number: 321, Street: “Pine St.”] ] } ]) Corso Drupal 8-9 ottobre 2014 Pagina 10 XML – Lo standard di fatto per i dati semistrutturati XML: eXtensible Markup Language Ideale per i dati semistrutturati per i quali è diventato uno standard Usato per descrivere i contenuti piuttosto che presentarli Differisce da HTML per i seguenti motivi Nuovi tag possono essere definiti liberamente dall’autore del documento (estensibile) I tag non sono semantici. Per esempio, in HTML <table>…</table> significa: mostra il contenuto in una tabella; in XML: nessun significato speciale. Le strutture dei dati possono essere nidificate arbitrariamente Il documento XML può contenere opzionalmente uno schema che descriva la sua struttura Intollerante ai bug; I browser fanno del loro meglio per visualizzare pagine HTML anche se scritte male, mentre un processore XML respingerà un documento anche se contenente un solo errore Corso Drupal 8-9 ottobre 2014 Pagina 11 Sintassi XML Elementi XML elemento: frammento di testo confinato da tag definiti dall’utente: <person> <name>Alan</name> <age>42</age> <email>[email protected]</email> </person> Note: Gli elementi devono includere tag di apertura e chiusura Niente virgolette a delimitare il testo: XML tratta tutti I dati come testo. È definito come PCDATA (Parsed Character Data). Gli elementi vuoti: <married></married> possono essere abbreviati in <married/> Corso Drupal 8-9 ottobre 2014 Pagina 12 Sintassi XML / 2 Le collezioni di dati sono espresse usando delle strutture ripetute. Es. L’insieme delle persone al quarto piano: <table> <description>Persone al quarto piano</description> <people> <person> <name>Alan</name><age>42</age<<email>[email protected]</email> </person> <person> <name>Patsy</name><age>36</age><email>[email protected]</email> </person> <person> <name>Ryan</name><age>58</age><email>[email protected]</email> </person> </people> </table> Corso Drupal 8-9 ottobre 2014 Pagina 13 Sintassi XML / 3 Attributi XML • • Gli attributi definiscono alcune proprietà degli elementi Sono espressi tramite delle coppie nome-valore <product> <name language="French">trompette six trous</name> <price currency="Euro">420.12</price> <address format="XLB56" language="French"> <street>31 rue Croix-Bosset</street> <zip>92310</zip> <city>Sevres</city> <country>France</country> </address> </product> • • Come per i tag, un utente può definire un qualsiasi numero di attributi I valori degli attributi devono essere inclusi fra virgolette Corso Drupal 8-9 ottobre 2014 Pagina 14 Sintassi XML / 4 Attributi ed Elementi Un dato attributo può apparire solo una volta all’interno di un tag; il suo valore è sempre una stringa D’altro canto I tag che definiscono elementi o sotto-elementi possono essere ripetuti un qualsiasi numero di volte e I loro valori possono essere stringhe o ulteriori sotto-elementi Gli stessi dati possono essere codificati utilizzando attributi, elementi o una combinazione dei due <person name="Alan" age="42"> <email>[email protected]</email> </person> or <person name="Alan"> <age>42</age> <email>[email protected]</email> </person> Corso Drupal 8-9 ottobre 2014 Pagina 15 Sintassi XML / 5 XML References Usare l’attributo id per definire una reference (simile a un oid) Usare l’attributo idref (in un elemento vuoto) per puntare una reference precedentemente definita. <state id="s2"> -- defines an id or a reference <scode>NE</scode> <sname>Nevada</sname> </state> <city id="c2"> <ccode>CCN</ccode> <cname>Carson City</cname> <state-of idref="s2"/> -- refers to object called s2; -- this is an empty element </city> Corso Drupal 8-9 ottobre 2014 Pagina 16 Sintassi XML / 6 Combinare elementi e testo XML consente la combinazione di PCDATA e sotto-elementi all’interno di un elemento. <person> This is my best friend <name>Alan</name> <age>42</age> I am not sure of the following email <email>[email protected]</email> </person> Questo sembra innaturale dal punto di vista di un database, ma dalla prospettiva di un documento è perfettamente naturale! Corso Drupal 8-9 ottobre 2014 Pagina 17 Sintassi XML / 7 Ordine • Il modello di dati semistrutturati è basato su collezioni non ordinate, dove invece XML è ordinato. I seguenti due frammenti di dati semistrutturati sono equivalenti: person: {fname: "John", lname: "Smith:} person: {lname: "Smith", fname: "John"} ma i seguenti due frammenti XML non lo sono: <person><fname>John</fname><lname>Smith</lname></person> <person><lname>Smith></lname><fname>John</fname></person> • A rendere le cose peggiori, gli attributi NON sono ordinati in XML; I seguenti due esempi sono equivalenti: <person fname="John" lname="Smith"/> <person lname="Smith" fname="John"/> Corso Drupal 8-9 ottobre 2014 Pagina 18 XML Syntax - Continued Altri costrutti XML Commenti: <!-- this is a comment --> Processing Instruction (PI): <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="classes.xsl"?> Queste istruzioni sono passate alle applicazioni che processano i file XML. CDATA (Character Data): è usato per delimitare blocchi di testo che contengono marcatori da non elaborare: <![CDATA[<start>this is not an element</start>]]> Entità: < sta per < Corso Drupal 8-9 ottobre 2014 Pagina 19 Documenti XML well-formed Un documento XML è well-formed se I tag sono sintatticamente corretti Ogni tag ha un corrispettivo tag di fine I tag sono correttamente nidificati Esiste un tag di root Un tag non abbia due istanze dello stesso attributo Un documento XML deve essere well-formed perchè possa essere elaborato. Corso Drupal 8-9 ottobre 2014 Pagina 20 Terminologia attributi <?xml version=“1.0” ?> Root element elements <PersonList Type=“Student” Date=“2002-02-02” > <Title Value=“Student List” /> <Person> ……… </Person> <Person> Empty ……… element </Person> </PersonList> Element (or tag) names • Gli elementi sono nidificati • Gli elementi root contengono tutti gli altri Corso Drupal 8-9 ottobre 2014 Pagina 21 Ancora Terminologia Tag di apertura <Person Name = “John” Id = “s111111111”> Content of Person John is a nice fellow Testo “standalone”, non molto utile come dato, non uniforme <Address> <Number>21</Number> Nested element, <Street>Main St.</Street> child of Person </Address> ……… Figlio di Address, Discendente di Person </Person> Genitore di Address, Avo di number Tag di chiusura: Ciò che è stato aperto deve essere chiuso Corso Drupal 8-9 ottobre 2014 Pagina 22 Modello dati di XML person name Bart Simpson tel tel email 051–011022 02–4447777 [email protected] Document Object Model (DOM) – DOM Tree Le foglie sono vuote oppure contengono PCDATA A differenza del modello di albero semistrutturato, I nodi sono etichettati da tag. Corso Drupal 8-9 ottobre 2014 Pagina 23