XML Schema introduce il concetto di tipo di dato semplice per definire gli elementi che non possono contenere altri elementi e non prevedono attributi. Si possono usare tipi di dato semplici predefiniti oppure è possibile personalizzarli.
Sono previsti numerosi tipi di dato predefiniti, alcuni dei quali sono riportati nella seguente tabella:
|
Ad esempio, la seguente dichiarazione:
<xs:element name="quantita" type="xs:integer" />
permette l'utilizzo dell'elemento quantita in un documento XML consentendo soltanto un contenuto di tipo intero. In altre parole, sarà considerato valido l'elemento <quantita>123</quantita> mentre non lo sarà l'elemento <quantita>uno</quantita>.
XML Schema prevede anche la possibilità di definire tipi di dato semplici personalizzati come derivazione di quelli predefiniti. Se, ad esempio, abbiamo bisogno di limitare il valore che può essere assegnato all'elemento <quantita> possiamo definirlo nel seguente modo:
<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>
In altre parole, la dichiarazione indica che l'elemento <quantita> è di tipo semplice e prevede una restrizione sul tipo di dato intero predefinito accettando valori compresi tra 1 e 100.
I tipi di dato complessi si riferiscono ad elementi che possono contenere altri elementi e possono avere attributi. Definire un elemento di tipo complesso corrisponde a definire la relativa struttura.
Lo schema generale per la definizione di un elemento di tipo complesso è il seguente:
<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:
Per ciascuno di questi costruttori e per ciascun elemento è possibile definire il numero di occorrenze previste utilizzando gli attributi minOccurs e maxOccurs. Ad esempio, se l'elemento testo può essere presente una o infinite volte all'interno di un paragrafo possiamo esprimere questa condizione nel seguente modo:
<xs:element name="paragrafo">
<xs:complexType>
<xs:element name="testo" minOccurs="1"
maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>
In questo caso 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 è ricorsiva, cioè contiene la definizione di ciascun elemento che può stare all'interno della struttura stessa.
Per gli elementi vuoti è prevista una definizione basata sul seguente schema:
<xs:element name="NOME_ELEMENTO">
<xs:complexType>
<xs:complexContent>
<xs:extension base="xs:anyType" />
... Definizione degli attributi ...
</xs:complexContent>
</xs:complexType>
</xs:element>
In altri termini, un elemento vuoto è considerato un elemento di tipo complesso il cui contenuto non si basa su nessun tipo predefinito.
La definizione degli attributi è basata sull'uso del tag <xs:attribute>, come nel seguente esempio:
<xs:attribute name="titolo" type="xs:string" use="required" />
L'attributo use consente di specificare alcune caratteristiche come la presenza obbligatoria (required) o un valore predefinito (default) in combinazione con l'attributo value. Ad esempio, la seguente definizione indica un attributo il cui valore di predefinito è test:
<xs:attribute name="titolo" type="xs:string" use="default" value="test" />
Bisogna tener presente che se non si specifica esplicitamente l'obbligatorietà dell'attributo, esso è considerato opzionale. Il seguente codice presenta uno XML Schema relativo al linguaggio di descrizione di articoli tecnici mostrato nei vari esempi.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="articolo">
<xs:complexType>
<xs:sequence>
<xs:element name="paragrafo" maxOccurs="unbounded">
<xs:complexType>
<xs:all maxOccurs="unbounded">
<xs:element name="immagine" minOccurs="0">
<xs:complexType>
<xs:attribute name="file"
use="required">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="testo"/>
<xs:element name="codice" minOccurs="0"/>
</xs:all>
<xs:attribute name="titolo" type="xs:string"
use="optional"/>
<xs:attribute name="tipo" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="abstract"/>
<xs:enumeration
value="bibliografia"/>
<xs:enumeration value="note"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="titolo" type="xs:string"
use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
Questo XML Schema è equivalente al Dtd che abbiamo visto nella lezione n.7 "Dtd: Document Type Definition" .
Open Graph Protocol, Facebook e il Web SemanticoCome sfruttare il Web Semantico "made in Facebook" |
Introduzione a RDFa - 2Arricchire un documento HTML con metadati semantici presi dal... |
Introduzione a RDFaCos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle... |
Usare SVG per creare sfondi flessibili, scalabili e divertentiScopriamo cos'è il formato SVG e come possiamo usarlo in modo... |
Visualizzare i metadati RDF Dublin core con le trasformazioni XSLMettere insieme XSL, XPATH e le definizioni Dublin core per... |
Guida PodcastingUn percorso in 16 lezioni, per entrare nella filosofia del podcast... |
Guida Smil 2.0Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per... |
Guida Web serviceCosa sono, a cosa servono e come si creano servizi Web, i sistemi... |
Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.
Iscriviti alla newsletter