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à: &lt 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
Scarica

XML Basics