XML: XML Schema - Dipartimento di Scienze Ambientali, Informatica

Transcript

XML: XML Schema - Dipartimento di Scienze Ambientali, Informatica
XML: XML Schema
Uno XML Schema è un documento XML che descrive
la grammatica di un linguaggio XML utilizzando
un linguaggio di markup specifico.
In quanto documento XML, uno XML Schema ha un
root element che contiene tutte le regole di
definizione della grammatica.
XML Schema prevede la possibilità di rendere
modulare la definizione della struttura di un
documento XML tramite la dichiarazione di tipi e
di elementi.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Analogamente a quanto avviene con i DTD è
possibile validare un documento rispetto ad un
particolare schema.
Gli schemi XML prevedono la possibilità di creare dei
modelli dati fortemente tipati ( C, Java,DDL SQL)
e sono compatibili con i namespace.
Non sono sostitutivi dei DTD, ma i due sistemi
devono/possono essere utilizzati in concomitanza
( in XML Schema non è possibile definire le entità)
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
In generale per i documenti scambiati tra utenti è
preferibile utilizzare ancora i DTD, in altri casi
invece (strutture dati o basi di dati) XML Schema
L'impiego degli schemi in fase di validazione è molto
più dispendioso, in termini di risorse
computazionali, rispetto ai DTD.
Nella pratica, non sempre si attua la validazione di
un documento XML al fine di risparmiare risorse
computazionali.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
In particolare quindi un XML Schema:
●
●
definisce gli elementi che possono essere presenti in un
documento
definisce gli attributi che possono essere presenti in un
documento
●
definisce quali elementi sono elementi figlio
●
definisce l'ordine degli elementi figlio
●
definisce il numero degli elementi figlio
●
definisce se un elemento è vuoto o possa contiene del testo
●
definisce i tipi di dati per elementi ed attributi
●
definisce i valori di default o prefissati per elementi ed attributi
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Inoltre un XML Schema:
●
È estensibile
●
È più ricco di contenuti e più potente rispetto al DTD
●
È scritto in XML
●
Supporta i tipi di dati
●
Supporta i NAMESPACE
Per queste ragioni gli schemi sono considerati i
successori dei DTD e destinati ad essere utilizzati
sempre maggiormente
W3C Recommendation del 2 Maggio 2001
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Gli Schemi XML sono estensibili proprio perché
scritti in XML e quindi è possibile:
●
●
●
Riutilizzare uno Schema in altri Schemi
Creare tipi di dati personalizzati derivati dai tipi di
dati standard
Utilizzare vari schemi all'interno dello stesso
documento XML
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Con il supporto per i tipi di dati:
●
è più semplice descrivere i contenuti ammissibili
●
è più semplice verificare la correttezza dei dati
●
●
●
●
è più semplice lavorare con dati provenienti da basi
di dati
è più semplice definire delle restrizioni sui dati
(data facets)
è più semplice definire formati dei dati (data
patterns)
è più semplice convertire dati di diverso tipo
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Permette una comunicazione consistente dei
documenti:
"03-11-2007" potrebbe essere interpretato come il 3 Novembre
oppure l'11 Marzo dipendentemente dal formato data
adottato.
In XML Schema una definizione del tipo
<date type="date">2007-03-11</date>
assicura che non cim siano dubbi nell'interpretazione in quanto il
tipo data XML "date" utilizza il formato "AAAA-MM-DD".
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
... Definizione dello schema ...
</xs:schema>
L'elemento root del documento è rappresentato dal tag
<xs:schema>. Esso indica al parser che in questo documento
saranno utilizzati dei tag definiti dal namespace standard del W3C
per XML Schema indicato all'URI:
http://www.w3.org/2001/XMLSchema
Per il momento considereremo i NAMESPACE un meccanismo
per identificare tag appartenenti ad una specifica
grammatica. Nel nostro caso questi tag speciali sono
caratterizzati dal prefisso xs:
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
XML Schema prevede il tag <xs:element> per la definizione degli
elementi utilizzabili in un documento XML, specificando
nell'attributo name il nome del tag relativo.
In ogni tag <xs:element> si indica il tipo di dato dell'elemento e se
ne definiscono gli eventuali attributi.
Ad esempio, qui si specifica che l'elemento testo può contenere
soltanto valori di tipo stringa:
<xs:element name="testo" type="xs:string" />
Questa dichiarazione corrisponde alla seguente dichiarazione DTD:
<!ELEMENT testo (#PCDATA)>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Per associare un documento (più propriamente detto
un'istanza di schema) al proprio schema si utilizzano degli
attributi associati al namespace XSI (XML Schema
Instance) sul root element:
<?xml version="1.0"?>
<testo
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:noNamespaceSchemaLocation="schema.xsd">
Un testo qualunque
</testo>
Il root element è <testo> dello schema visto in precedenza.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
TIPI DI DATI IN XML Schema
●
●
Semplici
elementi che NON possono contenerne altri
elementi che NON prevedono attributi
Complessi
elementi che possono contenerne altri
elementi che possono avere attributi
Si possono usare tipi di dato semplici predefiniti oppure è possibile
personalizzarli.
Sono previsti numerosi tipi di dato predefiniti
Un tipo complesso viene definito con il tag complexType
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
TIPI DI DATI BASE
Tipo di dato
xs:string
xs:integer
xs:decimal
xs:boolean
xs:date
xs:time
xs:uriReference
Descrizione
Stringa di caratteri
Numero intero
Numero decimale
Valore booleano
Data
Ora
URI
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Elementi semplici (Simple Elements)
<nome>Pippo</nome>
<eta>20</eta>
<datanascita>1987-05-15</datanascita>
<xs:element name="nome" type="xs:string"/>
<xs:element name="eta" type="xs:integer"/>
<xs:element name="datanascita" type="xs:date"/>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Elementi semplici (Simple Elements)
Gli elementi semplici possono avere dei valori di default o prefissati:
Un valore di default viene automaticamente assegnato all'elemento quando non
viene specificato alcun valore per l'elemento nel documento.
Un valore prefissato (fixed) viene automaticamente assegnato all'elemento e
non può essere specificato un valore diverso.
<xs:element name="colore" type="xs:string" default="rosso"/>
<xs:element name="colore" type="xs:string" fixed="rosso"/>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
<xs:element name="quantita" type="xs:integer" />
<quantita>123</quantita>
<quantita>centoventitre</quantita>
XML Schema prevede anche la possibilità di definire tipi di dato semplici
personalizzati come derivazione di quelli predefiniti e permette di
definire alcune restrizioni sui valori ammissibili:
●
●
●
●
●
RESTRIZIONI
RESTRIZIONI
RESTRIZIONI
RESTRIZIONI
RESTRIZIONI
SUI VALORI
SU UN INSIEME DI VALORI
SU UNA SERIE DI VALORI
SUI WHITESPACES
SULLA LUNGHEZZA
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
XML Schema prevede il tag <xs:attribute> per la definizione degli
attributi
<xs:attribute name="titolo" type="xs:string" use="required" />
L'attributo use consente di specificare alcune caratteristiche come la
presenza obbligatoria (required) oppure un valore predefinito
(default) in combinazione con l'attributo value. Ad esempio, la
seguente definizione indica un attributo il cui valore predefinito è
"test":
<xs:attribute name="titolo" type="xs:string" use="default"
value="test" />
Se non si specifica esplicitamente l'obbligatorietà
dell'attributo, esso è considerato opzionale.
Anche gli attributi in XML Schema sono fortemente tipati.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SUI VALORI
<xs:element name="quantita" >
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UN INSIEME DI VALORI - ENUMERAZIONE
<xs:element name="auto">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="FIAT"/>
<xs:enumeration value="BMW"/>
<xs:enumeration value="AUDI"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="auto"
type="TipoAuto"/>
<xs:simpleType name="TipoAuto">
<xs:restriction base="xs:string">
<xs:enumeration value="FIAT"/>
<xs:enumeration value="BMW"/>
<xs:enumeration value="AUDI"/>
</xs:restriction>
</xs:simpleType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 1
<xs:element name="letteraminuscola">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è UNA SOLA lettera
MINUSCOLA dalla “a” alla “z”.
Per definire numeri si utilizza la sintassi [0-9]
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 2
<xs:element name="scelta">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[abc]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è UNA SOLA lettera “a”, “b”
oppure “c”.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 3
<xs:element name="parola5">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][a-z][a-z][a-z][A-Za-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è una parola di 5 caratteri che
comincia per lettera maiuscola, seguita da tre lettere
minuscole e terminata da una lettera che può essere
maiuscola o minuscola.
ES: Ancora, AncorA
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 4
<xs:element name="parola">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è una parola composta da 0 o
più occorrenze di lettere minuscole
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 5
<xs:element name="coppiedilettere">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è una parola composta da una
o più coppie di lettere di cui la prima minuscola e la
seconda maiuscola.
ES: cAsA, cImA, sI, nO, gIaRdInO
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 6
<xs:element name="genere">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="maschio|femmina"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
I soli valori ammissibili sono “maschio” o “femmina”
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SU UNA SERIE DI VALORI - 7
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Il solo valore ammissibile è una parola composta da
esattamente 8 caratteri tra cui lettere maiuscole e
minuscole dalla “a” alla “z” e numeri da “0” a “9”
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SUI WHITESPACES (SPAZI) - 1
<xs:element name="elemento">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Tutti i whitespace (Horizontal Tab (HT), Line-feed
(LF), Carriage-return (CR), spazio) vengono
preservati.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SUI WHITESPACES (SPAZI) - 2
<xs:element name="elemento">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Tutti i whitespace vengono rimpiazzati da spazi.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SUI WHITESPACES (SPAZI) - 3
<xs:element name="elemento">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Tutti i whitespace vengono rimpiazzati da spazi, inoltre
vengono eliminati gli spazi a destra e a sinistra (leading
e trailing) e gli spazi multipli vengono ridotti ad un unico
spazio.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SULLA LUNGHEZZA - 1
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Lunghezza di esattamente 8 caratteri.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema - Restrizioni
RESTRIZIONI SULLA LUNGHEZZA - 2
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="8"/>
<xs:maxLength value="12"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Lunghezza compresa tra 8 e 12 caratteri.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
ELEMENTI COMPLESSI
Un elemento complesso è un elemento che contiene altri
elementi e/o attributi
Esistono quattro tipi di elementi complessi, ognuno dei
quali può contenere attributi
●
●
●
●
elementi che contengono solo altri elementi
elementi vuoti
elementi che contengono solo testo
elementi che contengono altri elementi e testo
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Definire un elemento di tipo complesso corrisponde a definirne la
relativa struttura.
<xs:element name="NOME_ELEMENTO">
<xs:complexType>
... Definizione del tipo complesso ...
... Definizione degli attributi ...
</xs:complexType>
</xs:element>
Se l'elemento può contenere altri elementi possiamo definire la
sequenza di elementi che possono stare al suo interno utilizzando
uno dei costruttori di tipi complessi previsti...
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
●
●
●
●
●
●
<xs:sequence>
Consente di definire una sequenza ordinata di
sottoelementi
<xs:choice>
Consente di definire un elenco di sottoelementi
alternativi
<xs:all>
Consente di definire una sequenza non ordinata
di sottoelementi, un insieme.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
<persona>
<nome>Alessandro</nome>
<cognome>Sorato</cognome>
</persona>
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="cognome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Un elemento incluso in un tipo complesso può
essere a sua volta associato ad un altro tipo
complesso.
In questo modo i tipi possono essere composti,
modulari, e la definizione di un tipo può essere
condivisa da più elementi.
Ciò si può ottenere anche con i DTD mediante
l'impiego delle entità parametriche, ma risulta
difficilmente applicabile e molto meno
comprensibile rispetto all'utilizzo di XML Schema.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
<xs:element name="persona" type="infopersona"/>
<xs:complexType name="infopersona">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="cognome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="docente" type="infopersona"/>
<xs:element name="studente" type="infopersona"/>
<xs:element name="personale" type="infopersona"/>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
<xs:element name="personale" type="infopersonaext"/>
<xs:complexType name="infopersonaext">
<xs:complexContent>
<xs:extension base="infopersona">
<xs:sequence>
<xs:element name="indirizzo" type="xs:string"/>
<xs:element name="CAP" type="xs:integer"/>
<xs:element name="citta" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
ELEMENTI COMPLESSI – EMPTY (Vuoti)
<prodotto prodid="123456" />
<xs:element name="prodotto">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="xs:integer">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
Esiste anche una forma compatta in cui i tag in corsivo possono
essere omessi.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
ELEMENTI COMPLESSI – TEXT ONLY (Solo Testo e attributi)
<xs:element name="nomelemento">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="tipobase">
<xs:element name="nomelemento">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="tipobase">
....
....
....
....
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Si usano i costrutti extension/restriction per espandere o limitare il tipo base
per l'elemento.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
ELEMENTI COMPLESSI - TEXT ONLY (Solo Testo ed attributi)
<taglia country="IT">48</taglia>
<taglia country="US">34</taglia>
<xs:element name="taglia" type="TipoTaglia"/>
<xs:complexType name="TipoTaglia">
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
ELEMENTI COMPLESSI – MIXED CONTENT
<comunicazione>
Gentile cliente,<nome>Alessandro Sorato</nome>.
Il suo ordine n. <orderid>123456</orderid>
sarà evaso il <dataspedizione>2007-05-15</dataspedizione>.
</comunicazione>
<xs:element name="comunicazione">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="dataspedizione" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
L'impiego dell'indicatore choice permette di specificare
una scelta possibile tra vari elementi (oppure)
<xs:element name="persona">
<xs:complexType>
<xs:choice>
<xs:element name="docente" type="infopersona"/>
<xs:element name="studente" type="infopersona"/>
</xs:choice>
</xs:complexType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
L'impiego dell'indicatore all permette di specificare la
presenza di un insieme di elementi indipendentemente
dall'ordine. Le cardinalità previste sono solo 0,1 per il
minimo e 1 per il massimo.
<xs:complexType name="infopersona">
<xs:all>
<xs:element name="nome" type="xs:string" minOccurs="1"
maxOccurs="1"/>
<xs:element name="cognome" type="xs:string" minOccurs="1"
maxOccurs="1"/>
</xs:all>
</xs:complexType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Sequenze ed alternative possono essere combinate tra
loro, come avviene nei DTD, e possono essere indicate
le occorenze/ripetizioni.
<xs:complexType name="TipoImpegno">
<xs:sequence>
<xs:element name="durata" type="xs:string"/>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="appuntamento" type="TipoAppuntamento"/>
<xs:element name="riunione" type="TipoRiunione"/>
<xs:element name="videoconferenza" type="TipoVidConf"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Si possono definire il numero di occorrenze previste utilizzando gli
attributi minOccurs e maxOccurs il cui valore di default è 1.
<xs:element name="paragrafo">
<xs:complexType>
<xs:element name="testo"
maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>
Il valore unbounded indica che non è stabilito un massimo numero di
elementi testo che possono stare all'interno di un paragrafo.
La definizione della struttura di un elemento contiene la definizione di
ciascun elemento che può stare all'interno della struttura stessa.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Esistono anche i tipi anonimi, ovvero quando il tipo di un elemento
viene dichiarato insieme all'elemento stesso (anonymous type).
<xs:complexType name="infopersona">
<xs:sequence>
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="cognome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="recapito" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Questo costrutto non prevede (ovviamente) la condivisione del
tipo come abbiamo detto precedentemente.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Ci sono poi degli indicatori di gruppo utilizzati per definire insiemi di
elementi che possono essere correlati. All'interno della dichiarazione
di un gruppo di elementi si devono usare gli indicatori all, choice, o
sequence
<xs:group name="gruppoinfopersona">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="cognome" type="xs:string"/>
<xs:element name="compleanno" type="xs:date"/>
</xs:sequence>
</xs:group>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Una volta che il gruppo è stato definito, esso può essere riutilizzato
all'interno di un'altra definizione.
<xs:element name="persona" type="infopersona"/>
<xs:complexType name="infopersona">
<xs:sequence>
<xs:group ref="gruppoinfopersona"/>
<xs:element name="nazione" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Allo stesso modo si possono definire gruppi di attributi con la seguente
definizione ed il suo successivo utilizzo.
<xs:attributeGroup name="nomegruppoattributi">
...
</xs:attributeGroup>
<xs:element name="nomeelemento">
<xs:complexType>
<xs:attributeGroup ref="nomegruppoattributi"/>
</xs:complexType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Gli elementi <any> e <anyAttribute> permettono di estendere
un documento XML con elementi non specificati nello schema
senza comprometterne la validazione.
<xs:element name="persona">
<xs:element name="persona">
<xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:sequence>
<xs:element name="nome"
type="xs:string"/>
<xs:element name="nome"
type="xs:string"/>
<xs:element name="cognome"
type="xs:string"/>
<xs:element name="cognome"
type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Le definizioni appena create possono essere utilizzate nei seguenti modi:
<persone>
<persona>
<persone>
<persona genere="maschio">
<nome>Mario</nome>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<cognome>Rossi</cognome>
<lavori>
<lavoro>docente</lavoro>
</lavori>
</persona>
<persona>
<nome>Andrea</nome>
</persona>
<persona genere="femmina">
<nome>Laura</nome>
<cognome>Bianchi</cognome>
</persona>
</persone>
<cognome>Bianchi</cognome>
</persona>
</persone>
Supponendo che ci siano altri schemi che definiscano “lavori” e “genere”, i
documenti utilizzano le definizioni da vari schemi.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: STRING
In ogni caso viene validato correttamente.
<xs:element name="persona"
type="xs:string"/>
<xs:element name="persona"
type="xs:normalizedString"/>
<xs:element name="persona"
type="xs:token"/>
<persona>Alessandro Sorato</persona>
<persona>
Alessandro Sorato
Nel primo caso il parser XML mantiene inalterati
white spaces, nel secondo, i white spaces
vengono sostituiti da spazi singoli, nel terzo i
white spaces vengono rimossi (rimangono
inalterati gli spazi singoli).
</persona>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: STRING
In ogni caso viene validato correttamente.
<xs:element name="persona"
type="xs:string"/>
<xs:element name="persona"
type="xs:normalizedString"/>
<xs:element name="persona"
type="xs:token"/>
<persona>Alessandro Sorato</persona>
<persona>
Alessandro Sorato
Nel primo caso il parser XML mantiene inalterati
white spaces, nel secondo, i white spaces
vengono sostituiti da spazi singoli, nel terzo i
white spaces vengono rimossi (rimangono
inalterati gli spazi singoli).
</persona>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: STRING e restrizioni applicabili
●
enumeration
●
length
●
maxLength
●
minLength
●
pattern
●
whiteSpace
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: DATE & TIME
<xs:element name="dataora"
type="xs:dateTime"/>
<xs:element name="periodo"
type="xs:duration"/>
YYYY-MM-DDThh:mm:ss
P nY nM nD T nH nM nS
<dataora>2005-02-24T10:00:00</dataora>
<periodo>P3Y</periodo>
<dataora>2005-02-24T10:00:00.5</dataora>
<periodo>P3Y1M6D</periodo>
<dataora>2005-02-24T10:00:00Z</dataora>
<periodo>P3Y1M6DT4H</periodo>
<dataora>2005-02-24T10:00:00-03:00</dataora
>
<periodo>-P3M</periodo>
<dataora>2005-02-24T10:00:00+03:00</dataora
>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: DATE & TIME
●
date
Defines a date value
●
dateTime
Defines a date and time value
●
duration
Defines a time interval
●
gDay
Defines a part of a date - the day (DD)
●
gMonth
Defines a part of a date - the month (MM)
●
gMonthDay
Defines a part of a date - the month and day (MM-DD)
●
gYear
Defines a part of a date - the year (YYYY)
●
gYearMonth
Defines a part of a date - the year and month (YYYY-MM)
●
time
Defines a time value
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: Date & TIME e restrizioni
●
Enumeration
●
MaxExclusive
●
MaxInclusive
●
MinExclusive
●
MinInclusive
●
Pattern
●
whiteSpace
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: NUMERICI
<xs:element name="numero"
type="xs:decimal"/>
<xs:element name="numero"
type="xs:integer"/>
<numero>347.5</numero>
<numero>347</numero>
<numero>275.45687</numero>
<numero>+275</numero>
<numero>0</numero>
<numero>-6</numero>
<numero>0</numero>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: NUMERICI
●
byte
A signed 8-bit integer
●
decimal
A decimal value
●
int
A signed 32-bit integer
●
integer
An integer value
●
long
A signed 64-bit integer
●
negativeInteger
An integer containing only negative values ( .., -2, -1.)
●
nonNegativeInteger
An integer containing only non-negative values (0, 1, 2, ..)
●
nonPositiveInteger
An integer containing only non-positive values (.., -2, -1, 0)
●
positiveInteger
An integer containing only positive values (1, 2, ..)
●
short
A signed 16-bit integer
●
unsignedLong
An unsigned 64-bit integer
●
unsignedInt
An unsigned 32-bit integer
●
unsignedShort
An unsigned 16-bit integer
●
unsignedByte
An unsigned 8-bit integer
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: NUMERICI e restrizioni
●
enumeration
●
fractionDigits
●
maxExclusive
●
maxInclusive
●
minExclusive
●
minInclusive
●
pattern
●
totalDigits
●
whiteSpace
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Tipi di dati: ALTRO
<xs:attribute name="abilitato"
type="xs:boolean"/>
<utente abilitato="true">Alessandro</utente>
<xs:attribute name="src" type="xs:anyURI"/>
<img src="http://www.dsi.unive.it/image.gif" />
<xs:element name="blob"
type="xs:hexBinary"/>
<xs:element name="blob"
type="xs:base64Binary"/>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XML Schema
Esempio di schema articolo1.xsd
La possibilità di dichiarare elementi e tipi di dato implica l'esistenza di un ambito di
visibilità o contesto dei componenti dichiarati. I componenti di uno schema dichiarati
al livello massimo, cioè come sottoelementi diretti dell'elemento root, sono
considerati dichiarati a livello globale e possono essere utilizzati nel resto dello
schema.
Nella dichiarazione di un tipo complesso è possibile fare riferimento ad elementi già
esistenti dichiarati a livello globale oppure si possono definire nuovi elementi. La
definizione di nuovi elementi all'interno di una definizione di tipo o di elemento
costituisce una dichiarazione a livello locale. Ciò vuol dire che l'utilizzo di questi
elementi è limitato alla definizione del tipo complesso in cui sono dichiarati e non
possono essere utilizzati in altri punti dello schema.
I nomi degli elementi devono essere univoci nel contesto in cui compaiono. Questo
significa, però, che in contesti diversi possiamo avere elementi con lo stesso nome
ma con struttura diversa senza rischio di conflitti.
Per fare un'analogia con i classici linguaggi di programmazione, le dichiarazioni globali e
locali di componenti di uno schema corrispondono alle dichiarazioni di variabili globali
e locali in un programma.
Esempio di schema articolo2.xsd
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
E' auspicabile integrare elementi derivanti da grammatiche
diverse. Ciò ci consentirebbe di riutilizzare parti di
grammatiche già definite evitando di dover rifare parte di
lavoro già fatto in altri ambiti (o da altri).
PROBLEMA
●
●
un documento che utilizza due grammatiche
presenta il problema della validazione: a quale
schema si deve fare riferimento per validare un
documento XML "ibrido"?
due linguaggi potrebbero avere tag ed attributi
con lo stesso nome, anche se utilizzabili in
contesti diversi: come fare a risolvere questo
tipo di ambiguità?
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
Un namespace è un insieme di nomi di elementi e
nomi di attributi identificati univocamente da un
identificatore, un prefisso.
L'identificatore univoco individua l'insieme dei nomi
distinguendoli da eventuali omonimie in altri
namespace
Il concetto non è affatto nuovo in informatica:
●
DATABASE: campi di una tabella
●
JAVA: variabili nei packages
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
In XML, un XML Schema definisce implicitamente un
namespace degli elementi e degli attributi che possono
essere usati in un documento XML.
In un documento XML si fa riferimento ad un namespace
utilizzando un attributo speciale (xmlns) associato al
root element, come nel seguente esempio:
<articolo xmlns="http://www.e-terna.net/xmlschema/articolo">
L'identificatore di un namespace è un URI (Uniform
Resource Identifier)
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
Per mettere in relazione un namespace con il relativo XML
Schema occorre dichiararlo nell'elemento radice
<articolo
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.e-terna.net/xmlschema/articolo"
xmlns="http://www.e-terna.net/xmlschema/bibliografia"
xsi:schemaLocation="http://www.eterna.net/xmlschema/articolo articolo.xsd"
xsi:schemaLocation="http://www.eterna.net/xmlschema/bibliografia bibliografia.xsd"
>
L'attributo xmlns:xsi specifica la modalità con cui viene
indicato il riferimento allo schema, mentre l'attributo
xsi:schemaLocation indica il namespace ed il file in cui è
definito il relativo XML Schema separati da uno spazio.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
Riportare il riferimento ad un namespace per ogni elemento
è di solito scomodo e rende di difficile lettura il
documento XML.
Si creano quindi delle abbreviazioni per fare riferimento ai
namespace.
Le abbreviazioni sono costituite da caratteri alfanumerici
seguiti da due punti (:) dichiarati nel root element ed
utilizzati come prefissi dei nomi degli elementi.
Ecco perché i “:” nei nomi XML sono
sconsigliati!!!
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Namespace
Le dichiarazioni xmlns:art e xmlns:bibl assegnano i
prefissi art: e bibl: ai relativi namespace e questi
prefissi vengono utilizzati per ciascun elemento
del documento XML.
Esempi:
CorsodiXML1.xml
e
CorsodiXML2.xml
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Vincoli di Integrità
I DTD hanno la forte limitazione di non gestire dei
vincoli di unicità e di integrità referenziale.
E' presente il meccanismo basato sull'uso di attributi
di tipo ID ed IDREF ma esso è estremamente
limitato, in quanto l'unicità degli elementi non
dipende dai valori degli elementi stessi, ma da un
identificatore esterno.
Nell'esempio dell'anagrafica, con i DTD non è
possibile stabile che una persona sia identificata
univocamente dal proprio nome e cognome.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Vincoli di Integrità
XML Schema introduce dei costrutti analoghi a quelli
usati nelle basi di dati per la definizione dei
vincoli.
●
vincoli di unicità (elemento unique)
●
vincoli di chiave primaria (elemento key)
●
vincoli di chiave esterna (elemento keyRef)
I vincoli di integrità in XML Schema si basano
sull'utilizzo di espressioni XPath.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari