# XML Schema

XML Schema és un llenguatge d'esquema utilitzat per descriure l'estructura i les restriccions dels continguts dels documents XML d'una forma molt precisa, més enllà de les normes sintàctiques imposades pel mateix llenguatge XML. S'aconsegueix així, una percepció del tipus de document amb un alt nivell d'abstracció.
Va ser desenvolupat pel World Wide Web Consortium (W3C) i va arribar al nivell de recomanació al maig de 2001.

## Terminologia

El terme "XML Schema" és utilitzat amb diferents significats dins del mateix context de descripció de documents, i és important tenir presents les següents consideracions:
* "XML Schema" (Esquema XML) és el nom oficial atorgat a la recomanació del W3C, que va elaborar el primer llenguatge d'esquema separat d'XML (la definició de tipus de document (DTD) forma part d'XML).
* És habitual referir-se als esquemes com "XML schema" de forma genèrica, però es recomana utilitzar el terme "document esquema" (schema document) o "definició d'esquema"(schema definition), i reservar "XML Schema" per la denominació d'aquest llenguatge específic.
* Encara que genèricament s'utilitzi "XML schemas", XSDL (XML Schema Definition Language) és el nom tècnic dels llenguatges d'esquema d'XML com:
      * Definició de Tipus de Document (DTD)
      * XML Schema
      * RELAX NG
      * Schematron
      * Namespace Routing Language (NRL)
      * Document Schema Definition Languages (DSDL)
      * Document Definition Markup Language (DDML)
      * Document Structure Description (DSD)
      * SGML
      * Schema for Object-Oriented XML (SOX)

## W3C Schema XML

El World Wide Web Consortium (W3C) va començar a treballar en l'XML Schema el 1998. La primera versió es va convertir en recomanació oficial al maig de 2001. Una segona edició revisada està disponible des d'octubre de 2004.
Aquesta recomanació está desenvolupada en tres parts:
   * XML Schema Part 0 Primer: és una introducció no normativa al llenguatge, que proporciona una gran quantitat d'exemples i explicacions detallades per a una primera aproximació a l'XML Schema.
   * XML Schema Part 1 Structures: és una extensa descripció dels components del llenguatge.
   * XML Schema Part 2 Datatypes: complementa la Part 1 amb la definició dels tipus de dades incorporats en l'XML Schema i les seves restriccions.
(vegi Enllaços externs)

## Components

XML Schema és un llenguatge d'esquema escrit en XML, basat en la gramàtica i pensat per proporcionar una major potència expressiva que la DTD, més limitada en la descripció dels documents a nivell formal. Disposa d'eines per caracteritzar detalls concrets com a color, forma o textures i poder relacionar-los amb característiques més generals. Així aconseguim accedir a contingut caracteritzat mitjançant informació de petits detalls.
Els documents esquema (normalment amb extensió .xsd d'XML Schema Definition (XSD)) es van concebre com una alternativa a la DTD, més complexa, intentant superar els seus punts febles i buscar noves capacitats a l'hora de definir estructures per a documents XML. La principal aportació d'XML Schema és el gran nombre dels tipus de dades que incorpora. D'aquesta manera, XML Schema augmenta les possibilitats i funcionalitats d'aplicacions de processament de dades, incloent tipus de dades complexes com dates, nombres i strings.

### Tipus de components

Els esquemes es construeixen a partir de diferents tipus de components:
   * Element (element)
   * Atribut (attribute)
   * Tipus simple (simple type)
   * Tipus complex (complex type)
   * Notació (notation)
   * Grup model anomenat (named model group)
   * Grup d'atributs (attribute group)
   * Restricció identitat (identity constraint)
Aquests components ofereixen la possibilitat de combinar característiques d'alt o baix nivell:
   * Alt nivell: S'encarreguen de donar un significat semàntic del contingut del document. Analitzen el contingut i extreuen d'ell un significat. Aquest pot estar predefinit en la declaració de l'esquema o es pot extreure de la mateixa estructura.
   * Baix nivell: Són característiques més concretes del document que estan incloses en els diferents camps de l'esquema i s'hi accedeix de manera directa. Són les que es comparen directament amb el criteri de recerca definit i troba paraules concretes en la definició dels esquemes.
XML Schema supera moltes de les limitacions i febleses de les DTDs. Va ser dissenyat completament al voltant de namespaces i suporta tipus de dades típiques dels llenguatges de programació, a més de tipus personalitzats simples i complexos. Un esquema es defineix pensant en el seu ús final.

## Aplicacions

XML Schema és el llenguatge probablement més utilitzat actualment en els sistemes de classificació de dades de qualsevol tipus en un suport electrònic (material digital i audiovisual). A més, està inclòs en l'estàndard més conegut i general en aquest camp, el MPEG-7. Els esquemes XML permeten definir les restriccions i condicions dels arxius XML als que s'associa, facilitant l'accés a la informació que contenen, tant des del punt de vista estructural com a semàntic.
Com tots els llenguatges d'esquema de l'XML, l'XML Schema defineix un conjunt de regles que ha de complir un document de l'XML per ser considerat " válid " segons l'esquema associat. Tanmateix, a diferència de la major part dels altres llenguatges d'esquema, l'XML Schema aporta la possibilitat de recopilar informació d'estructura i contingut per obtenir el model de dades utilitzat en l'esquema.
Aquesta funcionalitat denominada Post-Schema-Validation Infoset (PSVI), es realitza després de la validació del document, i incrementa els usos del llenguatge en combinació amb altres aplicacions o llenguatges. Per exemple, es pot utilitzar per transformar el document en una jerarquia d'objectes, als quals es pot accedir a través d'un llenguatge de programació orientada a objectes (OOP).

## Namespaces

La programació a l'XML Schema es basa en Namespaces. En podem trobar una analogia entre aquests i els anomenats packages en Java. Cada Namespace en conté uns elements i atributs que estan estretament relacionats amb el Namespace. Així, alhora, en cas de definir un element o un atribut d'un Namespace, sempre es crearà una connexió entre els diferents camps d'aquest. A més, aquesta forma de treballar, ens permet relacionar elements que no són en la mateixa Namespace però sí que mantenen una relació.
Després d'escriure un document XML es pot confirmar la correcta realització mitjançant la validació d'esquemes XML: Validació XML.

## Exemple

Un exemple de l'estructura d'un document esquema buit seria el següent:
Un exemple de definició amb XML Schema seria el següent:
Podem veure com en ambdós casos s'inicien les declaracions indicant la versió de XML que s'utilitzarà i la codificació que s'usa. Aquests dos camps són necessaris per a poder interpretar l'esquema. A més, a la següent línia de codi podem veure com es redirecciona a l'usuari a la pàgina que ofereix les pautes de creació d'XML Schema en les que es basarà la descripció de l'esquema.
L'element arrel s'anomena "Llibre" i té tres fills (elements niats) i un atribut. Els fills són "Títol", "Editorial" que han d'aparèixer una vegada i "Autors" que pot aparèixer d'una a deu vegades. El fet que estiguin agrupats en una seqüència indica que els elements han d'aparèixer en ordre, és a dir, primer el "Títol", després els "Autors" i finalment l'"Editorial". Els tres elements són de tipus string. L'atribut de llibre s'anomena "preu" i és de tipus double.

## Vegeu també

* XML
* W3C
* DTD
* Validació XML

## Tutorials

* Tutorial online amb exemples
* Explicació i ús de Namespaces
* Validació de XML Schema

## Enllaços externs

* Esquemes al World Wide Web Consortium (anglès)
* XML Shema Part 0 Primer
* XML Shema Part 1 Structures
* XML Shema Part 2 Datatypes