cerca
Tecnologie Web - XML Schema Definition
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.XMLSchema History

Hide minor edits - Show changes to output

Changed line 195 from:
NB: Se un elemento complesso contiene testo, altri elementi che a loro volta contengono attributi bisogna utilizzare il campo '''mixed''' settato al valore ''TRUE''. Vedere l'esercizio 1 di questo appello d'esame [[ESEMPIO -> http://www.swappa.it/wiki/Uni/TemiEsameTW05]]
to:
'''NOTA''': Se un elemento complesso contiene testo, altri elementi che a loro volta contengono attributi bisogna utilizzare il campo '''mixed''' settato al valore ''TRUE''. Vedere l'esercizio 1 di questo appello d'esame per capire a cosa mi riferisco [[ESEMPIO -> http://www.swappa.it/wiki/Uni/TemiEsameTW05]]
Added lines 194-195:

NB: Se un elemento complesso contiene testo, altri elementi che a loro volta contengono attributi bisogna utilizzare il campo '''mixed''' settato al valore ''TRUE''. Vedere l'esercizio 1 di questo appello d'esame [[ESEMPIO -> http://www.swappa.it/wiki/Uni/TemiEsameTW05]]
Added line 209:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
Added line 215:
>><<
Changed lines 38-39 from:
{+Esempio+}:\\
to:
{+Esempio+}:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
Changed lines 47-48 from:
to:
>><<
Changed lines 78-80 from:
[@<xs:element name="Nome1" type="tipo1" />
to:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
[@

<xs:element name="Nome1" type="tipo1" />
Changed lines 82-83 from:
<xs:element name="Nome3" type="tipo2" fixed="belo" />@]
to:
<xs:element name="Nome3" type="tipo2" fixed="belo" />
@]
>><<
Added line 157:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
Changed lines 168-169 from:
to:
>><<
Changed lines 172-174 from:
[@(1) <xs:element name="persona">
to:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
[@

(1) <xs:element name="persona">
Changed lines 181-182 from:
(8) </xs:element>@]
to:
(8) </xs:element>
@]
>><<
Changed lines 218-220 from:
[@(1) <?xml version="1.0"?>
to:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
[@

(1) <?xml version="1.0"?>
Changed lines 233-235 from:
(14) </schema>@]
to:
(14) </schema>
@]
>><<
Changed line 132 from:
* ''indicatori di ordinamento'', indicano quale deve essere l'ordine con cui devono apparire gli elementi:
to:
* {+''indicatori di ordinamento''+}, indicano quale deve essere l'ordine con cui devono apparire gli elementi:
Changed line 138 from:
* ''indicatori di cardinalità'', indicano quanti elementi possono comparire nel documento:
to:
* {+''indicatori di cardinalità''+}, indicano quanti elementi possono comparire nel documento:
Changed line 142 from:
* ''indicatori di gruppo'', definiscono insiemi di elementi correlati:
to:
* {+''indicatori di gruppo''+}, definiscono insiemi di elementi correlati:
Changed lines 146-163 from:
Un esempio di dichiarazione di elemento complesso è il seguente:
to:
Un complexType si può riferire un due modi:
* '''ref''': riferisce un elemento e quindi anche il suo nome.
* '''type''': riferisce un tipo e quindi solo le sue componenti.

{+Esempio+}:
[@
<xsd:element name="Studenti">
<xsd:complexType>
<xsd:choice>
<xsd:element name="studente" ref="StudentType"/>
<xsd:element name="studente-diplomato" type="GraduateStudent"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
@]


Un {+esempio+}
di dichiarazione di elemento complesso è il seguente:
Changed line 17 from:
# [[#s4| ]]
to:
# [[#s4| Esempio finale]]
Changed lines 142-145 from:
* ''raggruppamento''
** ''Group name''
** ''attributeGroup name
''
to:
* ''indicatori di gruppo'', definiscono insiemi di elementi correlati:
**
''Group name''. Dopo aver definito un gruppo sarà possibile usarlo all'interno di altre definizioni più complesse.
** ''attributeGroup name''. Dopo aver definito un gruppo di attributi, sarà possibile richiamarli in altre dichiarazioni.
Changed line 187 from:
to:
[[#s4]]
Changed line 132 from:
* ''indicatori di ordinamento''
to:
* ''indicatori di ordinamento'', indicano quale deve essere l'ordine con cui devono apparire gli elementi:
Changed lines 138-141 from:
* ''indicatori di cardinalità''
** ''maxOccurs'': max numero di occorrenze (default 1)
** ''minOccurs'': min numero di occorrenze (default 1)
to:
* ''indicatori di cardinalità'', indicano quanti elementi possono comparire nel documento:
** ''maxOccurs'': max numero di occorrenze (default 1). Con "unbounded" l'elemento può comparire infinite volte.
** ''minOccurs'': min numero di occorrenze (default 1).
Changed line 144 from:
** ''Group reference''
to:
** ''attributeGroup name''
Changed lines 92-128 from:
Gli '''elementi complessi''' sono quei componenti dell'XSD che possono contenere attributi o altri elementi al loro interno. Si indicano col tag: [@<xs:complexType> ... </xs:complexType>@]
to:
Gli '''elementi complessi''' sono quei componenti dell'XSD che possono contenere attributi o altri elementi al loro interno.\\
La sintassi per definire un elemento complesso è
:

%center% [@<xs:complexType> ... </xs:complexType>@]

Ci sono quattro tipi di elementi complessi;
* elementi vuoti.
{+Esempio+}:
[@
<prodotto id="12345"/>
@]

* elementi che contengono solo altri elementi.
{+Esempio+}:
[@
<docente>
<nome>Gabriele</nome>
<cognome>Gianini</cognome>
</docente>
@]

* elementi che contengono solo testo.
{+Esempio+}:
[@
<cibo tipo="dessert"> Gelato<cibo/>
@]

* elementi che contengono altri elementi e testo.
{+Esempio+}:
[@
<descrizione>
Accaduto il
<data lang=italian">
17-05-2007
</data>
</descrizione>

@]
Changed lines 64-67 from:
Sono elementi semplici i numeri (es: [@int, float, double, byte, ...@]), le date (es: [@date, duration, ...@]), i booleani ([@boolean@]), valori XML ([@ID, IDREF, ...@]), gli URI ([@uriReference@]), i dati binari o le stringhe di testo (es: [@string@]).

Gli elementi semplici si indicano col tag: [@<xs:element nomeElemento tipoElemento ...>@]
Si possono inoltre definire '''valori fissi''' ([@fixed@]) o di '''default''' ([@default@]); la differenza
è che se nel secondo caso il valore viene applicato al contenuto dell'elemento solo se questo è vuoto, con [@fixed@] l'assegnamento avviene sempre. Alcuni esempi:
to:
Sono elementi semplici i numeri (es: [@int, float, double, byte, ...@]), le date (es: [@date, duration, ...@]), i booleani ([@boolean@]), valori XML ([@ID, IDREF, ...@]), gli URI ([@uriReference@]), i dati binari o le stringhe di testo (es: [@string@]).\\
XML Schema ha 41 tipi di dati predefiniti ed i più utlizzati sono: xs:string; xs:decimal; xs:integer; xs:boolean; xs:data; xs:time.

La sintassi per definire un elemento semplice
è:

%center%[@<xs:element name="xxxx" type="yyyy" />@]

Un elemento semplice può avere
valore:
*
'''default''': il valore di default viene automaticamente assegnato all'elemento nel caso non ne siano assegnati altri.
* '''fixed''': il valore fixed viene automaticamente assegnato all'elemento.

Alcuni esempi:
Changed line 80 from:
E' infine possibile imporre diversi tipi di '''restrizioni''' sui valori, tra cui:
to:
E' infine possibile imporre diversi tipi di '''restrizioni''' sui possibili valori degli elementi:
Changed line 83 from:
* ''pattern'', sequenza di caratteri
to:
* ''pattern'', sequenza di caratteri
Changed lines 132-139 from:
Gli '''attributi''' sono quei componenti dell'XSD che forniscono informazioni aggiuntive sugli elementi complessi. Si indicano col tag: [@<xs:attribute ... ... />@]

Tra le proprietà che possono essere definite al loro interno ricordiamo senz'altro
:
* [@name="NomeAttributo"@] per indicare il nome
* [
@type="TipoAttributo"@] per il tipo, che può essere solo uno di quelli standard, non derivati
* [@use="TipoDiUso"@] che specifica se l'attributo è obbligatorio o opzionale
*
[@default="valoreDef"@], [@fixed="valoreFisso"@] e le varie restrizioni, tutte proprietà che abbiamo già visto per gli elementi semplici.
to:
Gli '''attributi''' sono quei componenti dell'XSD che forniscono informazioni aggiuntive sugli elementi complessi, anche se vengono dichiarati come tipi semplici.\\
La sintassi per la definizione di un attributo è
:

%center%[@<xs:attribute name="xxxx" type="yyyy" use="zzzz" />@]

dove:
* [@name="NomeAttributo"@]
per indicare il nome.
* [@type="TipoAttributo"@] per il tipo, che può essere solo uno di quelli standard, non derivati.
*
[@use="TipoDiUso"@] che specifica se l'attributo è obbligatorio(''required'') o opzionale(''optional'').
Inoltre è possibile inserire una delle seguenti proprietà:
* [@default="valoreDef"@], [@fixed="valoreFisso"@]
.
Changed lines 145-146 from:
[@<xs:attribute name="NomeAttributo1" type="TipoAttributo1" />
to:
[@
<xs:attribute name="NomeAttributo1" type="TipoAttributo1" />
Changed lines 148-149 from:
default|fixed="ciao" use="required|optional" />@]
to:
default|fixed="ciao" use="required|optional" />
@]
Changed lines 11-21 from:
to:
>>left bgcolor=#f5f9fc width=240px border='2px solid #cccccc' padding=5px<<
%center%'''Indice'''

# [[#s1| Cos'è]]
# [[#s2| Elemento <schema>]]
# [[#s3| Componenti]]
# [[#s4| ]]
>><<


[[#s1]]
Changed line 35 from:
to:
[[#s2]]
Changed line 54 from:
to:
[[#s3]]
Changed lines 11-13 from:
!!!Cos'è
L' '''XML Schema Definition''' ('''XSD''') è una specifica della struttura dei documenti XML, più precisa e modulare rispetto ai [[DTD->BDC-DTD]], definita all'interno di un altro documento XML. Un XDS consente di definire elementi e attributi, di dichiarare il tipo di ciascun elemento e attributo sulla base di un insieme ampio di tipi predefiniti, di costruire nuovi tipi con l'aiuto di costruttori di tipi complessi e di esprimere vincoli sulla struttura degli elementi e degli attributi più sofisticati di quelli offerti dai DTD. Un documento XML che rispetta la descrizione del proprio XSD, si dice ''validato'' rispetto ad esso.
to:
!!Cos'è
L' '''XML Schema Definition''' ('''XSD''') è una specifica della struttura dei documenti XML, più precisa e modulare rispetto ai [[DTD->XMLDTD]], definita all'interno di un altro documento XML. Un XDS consente di definire elementi e attributi, di dichiarare il tipo di ciascun elemento e attributo sulla base di un insieme ampio di tipi predefiniti, di costruire nuovi tipi con l'aiuto di costruttori di tipi complessi e di esprimere vincoli sulla struttura degli elementi e degli attributi più sofisticati di quelli offerti dai DTD. Un documento XML che rispetta la descrizione del proprio XSD, si dice ''validato'' rispetto ad esso.

Quindi riassumendo i vantaggi che un XML Schema offre rispetto ad un DTD sono:
* sono adatti per futuri ampliamenti.
* sono più completi e dettagliati dei DTD.
* sono documenti XML.
* supportano i tipi di dati, quindi è più facile: controllare la correttezza dei dati, lavorare con dati provenienti da database, definire restrizioni sui dati, convertire dati da un tipo all'altro.
* supportano i [[namespace->XMLNamespace]].
* sono estendibili, quindi è possibile: riusare uno schema all'interno di altri, creare tipi di dati personalizzati derivandoli da quelli standard, fare riferimento a più schemi dallo stesso documento
.
Changed lines 25-35 from:
!!!Componenti
L'XSD è costituito da un insieme
di ''componenti'' elementari, 13 in tutto, divisi in tre categorie: primari, secondari e di aiuto. Di seguito studieremo solo i primari, ovvero:
* ''elementi semplici''
* ''elementi complessi''
* ''indicatori''
* ''attributi''

Prima di analizzarli singolarmente, anticipiamo che uno XML Schema deve avere la seguente struttura generale:

[@<?xml version
"1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema
">
to:
!!Elemento <schema>
L'elemento <schema> è l'elemento radice
di ogni XML schema e può contenere diversi attributi.\\
{+Esempio+}:\\
[@
<xs:schema xmlns
:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.miosito.org"
elementFormDefault="qualified">
Changed lines 34-38 from:
</xs:schema>@]

Notare come il tag <xs:schema> specifichi attraverso l'attributo ''xmlns'' che in questo documento sarà applicato lo standard del W3C.

!!!!Elementi
semplici
to:
</xs:schema>
@]

Analizziamo questo frammento di codice:
*
''<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"'': il tag <xs:schema> specifica attraverso l'attributo ''xmlns'' che in questo documento sarà applicato lo standard del W3C e che quindi tutti gli elementi e i datatype presenti appartengono al namespace ''http://www.w3.org/2001/XMLSchema''. Di conseguenza gli elementi appartenenti a questo namespace devono essere preceduti da ''xs''.

* ''targetNamespace="http://www.miosito.org"'': indica che gli elementi definiti dallo schema appartengono al namespace ''http://www.miosito.org''.

* ''elementFormDefault="qualified">'': indica che gli elementi usati nei documenti XML conformi a questo schema, hanno nomi qualificati.


!!Componenti
L'XSD è costituito da un insieme di ''componenti'' elementari, 13 in tutto, divisi in tre categorie: primari, secondari e di aiuto. Di seguito studieremo solo i primari, ovvero:
* ''elementi semplici''
* ''elementi complessi''
* ''indicatori''
* ''attributi''

!!!Elementi semplici
Changed line 73 from:
!!!!Elementi complessi e Indicatori
to:
!!!Elementi complessi e Indicatori
Changed line 113 from:
!!!!Attributi
to:
!!!Attributi
Changed lines 127-128 from:
!!!Esempio finale
to:
!!Esempio finale
Changed line 145 from:
!!!!!Commento
to:
!!!Commento
Changed line 155 from:
!!!!!Documento XML valido
to:
!!!Documento XML valido
Added lines 1-4:
(:title Tecnologie Web - DTD:)
[[Torna alla pagina di Tecnologie Web -> TecnologieWeb]]
----
Added lines 1-140:
(:title Tecnologie Web - XML Schema Definition:)

%titolo%''':: Tecnologie Web ::'''

%center%%sottotitolo%'''XML Schema Definition'''

!!!Cos'è
L' '''XML Schema Definition''' ('''XSD''') è una specifica della struttura dei documenti XML, più precisa e modulare rispetto ai [[DTD->BDC-DTD]], definita all'interno di un altro documento XML. Un XDS consente di definire elementi e attributi, di dichiarare il tipo di ciascun elemento e attributo sulla base di un insieme ampio di tipi predefiniti, di costruire nuovi tipi con l'aiuto di costruttori di tipi complessi e di esprimere vincoli sulla struttura degli elementi e degli attributi più sofisticati di quelli offerti dai DTD. Un documento XML che rispetta la descrizione del proprio XSD, si dice ''validato'' rispetto ad esso.

Dal 2 maggio 2001 l'XSD è felicemente diventato %newwin%[[''W3C recommendation''->http://www.w3.org/XML/Schema]], con successiva revisione il 28 ottobre 2004.

!!!Componenti
L'XSD è costituito da un insieme di ''componenti'' elementari, 13 in tutto, divisi in tre categorie: primari, secondari e di aiuto. Di seguito studieremo solo i primari, ovvero:
* ''elementi semplici''
* ''elementi complessi''
* ''indicatori''
* ''attributi''

Prima di analizzarli singolarmente, anticipiamo che uno XML Schema deve avere la seguente struttura generale:

[@<?xml version"1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
"definizione della struttura"
</xs:schema>@]

Notare come il tag <xs:schema> specifichi attraverso l'attributo ''xmlns'' che in questo documento sarà applicato lo standard del W3C.

!!!!Elementi semplici
Gli '''elementi semplici''' sono quei componenti che non possono contenere altri elementi o attributi al loro interno, ma solo tipi standard o loro derivati. I tipi derivati sono generalmente generati con meccanismi di ereditarietà da altri tipi, su cui si applicano alcune restrizioni.\\
Sono elementi semplici i numeri (es: [@int, float, double, byte, ...@]), le date (es: [@date, duration, ...@]), i booleani ([@boolean@]), valori XML ([@ID, IDREF, ...@]), gli URI ([@uriReference@]), i dati binari o le stringhe di testo (es: [@string@]).

Gli elementi semplici si indicano col tag: [@<xs:element nomeElemento tipoElemento ...>@]
Si possono inoltre definire '''valori fissi''' ([@fixed@]) o di '''default''' ([@default@]); la differenza è che se nel secondo caso il valore viene applicato al contenuto dell'elemento solo se questo è vuoto, con [@fixed@] l'assegnamento avviene sempre. Alcuni esempi:
[@<xs:element name="Nome1" type="tipo1" />
<xs:element name="Nome2" type="tipo1" default="ciao" />
<xs:element name="Nome3" type="tipo2" fixed="belo" />@]

E' infine possibile imporre diversi tipi di '''restrizioni''' sui valori, tra cui:
* ''whiteSpace'', tipo di gestione dei whitespace
* ''totalDigit'', numero esatto di caratteri alfanumerici
* ''pattern'', sequenza di caratteri
* ''min/maxLength'', lunghezza minima e massima
* ''min/maxInclusive'', limite numerico inferiore/superiore, esso compreso
* ''min/maxExclusive'', limite numerico inferiore/superiore, esso escluso
* ''length'', numero esatto di caratteri (>=0)
* ''fractionDigit'', numero di decimali dopo la virgola (>=0)
* ''enumeration'', lista di valori accettabili

!!!!Elementi complessi e Indicatori
Gli '''elementi complessi''' sono quei componenti dell'XSD che possono contenere attributi o altri elementi al loro interno. Si indicano col tag: [@<xs:complexType> ... </xs:complexType>@]

Nel caso in cui l'elemento ne contenga altri, è possibile definire ''ordinamenti'', ''cardinalità'' e ''raggruppamenti'' attraverso l'uso degli '''indicatori'''. In dettaglio:

* ''indicatori di ordinamento''
** ''Any'': qualunque elemento, in qualunque ordine
** ''All'': tutti gli elementi, in qualunque ordine
** ''Choice'': uno e un solo elemento
** ''Sequence'': tutti gli elementi, nell’ordine specificato

* ''indicatori di cardinalità''
** ''maxOccurs'': max numero di occorrenze (default 1)
** ''minOccurs'': min numero di occorrenze (default 1)

* ''raggruppamento''
** ''Group name''
** ''Group reference''

Un esempio di dichiarazione di elemento complesso è il seguente:

[@(1) <xs:element name="persona">
(2) <xs:complexType>
(3) <xs:sequence>
(4) <xs:element name="Cognome" type="xs:string" />
(5) <xs:element name="Nome" type="xs:string" maxOccurs="4" minOccurs="1" />
(6) </xs:sequence>
(7) </xs:complexType>
(8) </xs:element>@]

Commenti punto per punto:
* (1) definisce un nuovo elemento che ha nome "persona"
* (2) annuncia che tale elemento è di tipo complesso
* (3) dichiara che gli elementi seguenti dovranno essere tutti utilizzati nell'ordine specificato
* (4) definisce un nuovo elemento semplice di tipo stringa chiamato "Cognome"
* (5) definisce un nuovo elemento semplice di tipo stringa chiamato "Nome", obbligatorio e che può avere massimo 4 occorrenze (es. [[Andrea Giovanni Battista->Uni.Tettamanzi]])
* (6), (7) e (8) sono tags di chiusura

Infine, sottolineiamo come un elemento di tipo complesso possa essere a sua volta un elemento complesso. Pensiamo ad esempio a un elemento che contenga i dati di una persona, tra cui anche l'indirizzo, anch'esso composto da più elementi (via, numero, città, ...). Oltre a permettere una nidificazione che meglio struttura il nostro documento XML, questa proprietà consente di condividere tra più elementi alcuni tipi complessi.

!!!!Attributi
Gli '''attributi''' sono quei componenti dell'XSD che forniscono informazioni aggiuntive sugli elementi complessi. Si indicano col tag: [@<xs:attribute ... ... />@]

Tra le proprietà che possono essere definite al loro interno ricordiamo senz'altro:
* [@name="NomeAttributo"@] per indicare il nome
* [@type="TipoAttributo"@] per il tipo, che può essere solo uno di quelli standard, non derivati
* [@use="TipoDiUso"@] che specifica se l'attributo è obbligatorio o opzionale
* [@default="valoreDef"@], [@fixed="valoreFisso"@] e le varie restrizioni, tutte proprietà che abbiamo già visto per gli elementi semplici.

Un esempio di dichiarazione di attributo è il seguente:
[@<xs:attribute name="NomeAttributo1" type="TipoAttributo1" />
<xs:attribute name="NomeAttributo2" type="TipoAttributo1"
default|fixed="ciao" use="required|optional" />@]

!!!Esempio finale
!!!!!XML Schema
[@(1) <?xml version="1.0"?>
(2) <schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
(3) <xs:element name="note">
(4) <xs:complexType>
(5) <xs:sequence>
(6) <xs:element name="to" type="xs:string">
(7) <xs:element name="from" type="xs:string">
(8) <xs:element name="head" type="xs:string">
(9) <xs:element name="body" type="xs:string">
(10) </xs:sequence>
(11) </xs:complexType>
(12) <xs:attribute name="when" type="xs:date" use="required" />
(13) </xs:element>
(14) </schema>@]

!!!!!Commento
* (1) e (2), indicano la versione e lo standard di riferimento del documento
* (3) definisce un nuovo elemento che ha nome "note"
* (4) annuncia che tale elemento è di tipo complesso
* (5) dichiara che gli elementi seguenti dovranno essere tutti utilizzati nell'ordine specificato
* (6), (7), (8) e (9) definisce quattro nuovi elementi semplici di tipo stringa che compongono l'elemento complesso "note". Essi si chiamano rispettivamente "to", "from", "head" e "body"
* (10) e (11) sono tags di chiusura
* (12) definisce un attributo di nome "when" per il tipo complesso "nome". E' di tipo "data" ed il suo utilizzo è obbligatorio
* (13) e (14) sono tags di chiusura

!!!!!Documento XML valido
[@<?xml version="1.0"?>
<note when="15/07/2006">
<to> Rossi Andrea </to>
<from> Bianchi Riccardo </from>
<head> Promemoria </head>
<body> Compleanno Michela </body>
</note>@]

----
[[Torna alla pagina di Tecnologie Web -> TecnologieWeb]]