# XML Schema

Lo XML Schema o Schema XML è un linguaggio di descrizione del contenuto di un file XML, l'unico che finora abbia raggiunto la validazione ufficiale del W3C (la 1.1).
Come tutti i linguaggi di descrizione del contenuto XML, il suo scopo è delineare quali elementi sono permessi, quali tipi di dati sono ad essi associati e quale relazione gerarchica hanno fra loro gli elementi contenuti in un file XML.
Ciò permette principalmente la convalida del file XML, ovvero la verifica che i suoi elementi siano in accordo con la descrizione in linguaggio XML Schema.
Lo XML Schema permette inoltre l'estrazione da un file XML, o meglio una visione da un file XML, di un insieme di oggetti con determinati attributi e una struttura. Questo approccio è stato fortemente spinto da Microsoft; alcuni critici lo contestano in quanto potrebbe introdurre dei punti di "legame" al sistema proprietario di Microsoft per l'accesso ai dati di un file XML.

## XSD

Una "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto in linguaggio XML Schema. Una XSD definisce il tipo di un documento XML in termini di vincoli: quali elementi e attributi possono apparire, in quale relazione reciproca, quale tipo di dati può contenere, e altro. Può essere usata anche con un programma di validazione al fine di accertare a quale tipo appartiene un determinato documento XML.
La differenza principale fra XSD e altri linguaggi di descrizione del contenuto XML sta nel fatto che XSD è stato sviluppato con l'intento che la determinazione della validità di un documento possa produrre una collezione di informazioni aderenti a specifici tipi di dati.

## Storia

Le specifiche XSD riconoscono l'influenza delle DTD e di altri schemi XML, come DDML, SOX, XML-Data e XDR.
Lo XML Schema ha adottato caratteristiche da tutte queste proposte, ma rappresenta un compromesso fra esse. Di questi precursori, XDR e SOX hanno continuato a essere supportati per un certo tempo anche dopo che le specifiche di XML Schema sono state pubblicate. Alcuni prodotti Microsoft hanno supportato XDR fino al rilascio di MSXML 6.0 (che ha abbandonato XDR in favore di XML Schema) nel dicembre 2006. Commerce One ha supportato il proprio schema SOX, fino alla bancarotta avvenuta nel 2004.

## Caratteristiche

Tecnicamente, uno schema è una collezione astratta di metadati, consistenti in un set di schema components: principalmente dichiarazioni di attributo e di elemento, e definizioni di tipo semplice e complesso. Questi schema components sono usualmente creati dal processamento di una collezione di schema documents, che contengono definizioni di tali components.
Gli schema documents sono organizzati per namespace: tutti gli schema components ivi descritti appartengono ad un namespace target, e quest'ultimo è una proprietà dello schema document nel suo insieme. Uno schema document può includere altri schema documents per lo stesso namespace e può importare schema documents per un differente namespace.
Quando un documento istanza è validato rispetto a uno schema (un processo detto assessment), lo schema può o essere passato come parametro per il motore di validazione o può essere referenziato direttamente dal documento istanza usando due speciali attributi, xsi:schemaLocation e xsi:noNamespaceSchemaLocation. Quest'ultimo meccanismo richiede che il client che invoca la validazione sia certo che questa avverrà rispetto allo schema corretto.
Gli XML Schema Documents hanno usualmente estensione .xsd. Non è stato ancora registrato uno specifico MIME type per i documenti XSD, sicché i tipi MIME solitamente utilizzati per questi documenti sono "application/xml" o "text/xml".

### Tipi di dato

A differenza delle DTD, gli XML Schema permettono la validazione del contenuto di un elemento o di un attributo rispetto a un determinato tipo di dato. Per esempio, un attributo potrebbe essere vincolato alla memorizzazione esclusiva di una data valida o di un numero decimale.
XSD fornisce un insieme di 19 tipi di dati primitivi (boolean, string, decimal, double, float, anyURI, QName, hexBinary, base64Binary, duration, date, time, dateTime, gYear, gYearMonth, gMonth, gMonthDay, gDay, e NOTATION). XSD consente la costruzione di nuovi tipi di dato partendo da questi tipi primitivi attraverso tre possibili meccanismi: restrizione (riduzione dell'insieme dei valori permessi), lista (estensione ad una sequenza di valori) ed unione (possibilità di scelta di un valore da differenti tipi). Le specifiche stesse del linguaggio indicano venticinque tipi derivati, ed ulteriori derivazioni di tipi possono essere definite dagli utenti all'interno dei propri schemi.

### Esempio

Di seguito un esempio di uno schema document piuttosto semplice, che ha lo scopo di descrivere un indirizzo.
Un esempio di documento XML conforme allo schema XSD che ha lo scopo di descrivere un indirizzo:
Esistono svariati strumenti di sviluppo che possono creare rappresentazioni grafiche di uno schema.

## Altri usi di XML Schema

La principale ragione per definire uno schema XSD è la descrizione formale di un documento XML. Tuttavia, gli schemi XML hanno vari usi oltre la semplice validazione.

### Generazione di documenti

Gli schemi XML possono essere utilizzati per generare documentazione consultabile dalle persone; questa funzionalità è particolarmente utile quando gli autori hanno corredato il codice con elementi di annotazione. Non esistono standard formali per la generazione di documentazione, ma sono disponibili molteplici tool dotati di questa funzionalità, come i fogli di stile Xs3p, che producono documenti HTML di alta qualità e materiali stampabili.

### Generazione di codice

Gli schemi XML possono altresì essere utilizzati per generare codice sorgente, che viene referenziato con XML data binding. Il codice permette che i contenuti esposti dai documenti XML siano trattati come oggetti entro l'ambiente di programmazione.