# XML Schema

XSD (XML Schema Definition) es un lenguaje de esquema utilizado para describir la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa, más allá de las normas sintácticas impuestas por el propio lenguaje XML. Se consigue así una percepción del tipo de documento con un nivel alto de abstracción. Fue desarrollado por el World Wide Web Consortium (W3C) y alcanzó el nivel de recomendación en mayo de 2001.

## Terminología

El término "XML Schema" es utilizado con varios significados dentro del mismo contexto de descripción de documentos, y es importante tener en cuenta las siguientes consideraciones:
* "XML Schema" (Esquema XML) es el nombre oficial otorgado a la recomendación del W3C, que elaboró el primer lenguaje de esquema separado de XML (la definición de tipo de documentos (DTD) forma parte de XML).
* Es habitual referirse a los esquemas como "XML schema" de forma genérica, pero se recomienda utilizar el término “documento esquema” (schema document) o "definición de esquema"(schema definition), y reservar “XML Schema” para la denominación de este lenguaje específico.
* Aunque genéricamente se utilice "XML schemas", XSDL (XML Schema Definition Language) es el nombre técnico de los lenguajes de esquema de XML como:
      * Definición de Tipo de Documento (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) empezó a trabajar en XML Schema en 1998. La primera versión se convirtió en una recomendación oficial en mayo de 2001. Una segunda edición revisada está disponible desde octubre de 2004.
Esta recomendación está desarrollada en tres partes:
* XML Schema Parte 0 Primer: es una introducción no normativa al lenguaje, que proporciona una gran cantidad de ejemplos y explicaciones detalladas para una primera aproximación a XML Schema.
* XML Schema Parte 1 Structures: es una extensa descripción de los componentes del lenguaje.
* XML Schema Parte 2 Datatypes: complementa la Parte 1 con la definición de los tipos de datos incorporados en XML Schema y sus restricciones.
(véase Enlaces externos)

## Componentes

XML Schema es un lenguaje de esquema escrito en XML, basado en la gramática y pensado para proporcionar una mayor potencia expresiva que las DTD, menos capaces al describir los documentos a nivel formal.
Los documentos esquema (usualmente con extensión .xsd de XML Schema Definition (XSD)) se concibieron como una alternativa a las DTD, más complejas, intentando superar sus puntos débiles y buscar nuevas capacidades a la hora de definir estructuras para documentos XML. El principal aporte de XML Schema es el gran número de tipos de datos que incorpora. De esta manera, XML Schema aumenta las posibilidades y funcionalidades de aplicaciones de procesado de datos, incluyendo tipos de datos complejos como fechas, números y strings.

### Tipos de componentes

Los esquemas XML Schema superan muchas de las limitaciones y debilidades de las DTDs. Fue diseñado completamente alrededor de namespaces y soporta tipos de datos típicos de los lenguajes de programación, como también tipos personalizados simples y complejos. Un esquema se define pensando en su uso final.

## Namespaces

La programación en Schema XML se basa en namespaces o espacios de nombres Podemos encontrar una analogía entre estos y los llamados packages en Java. Cada namespace contiene elementos y atributos que están estrechamente relacionados con el namespace. Así, a la hora de definir un elemento o un atributo de un namespace, siempre se creará una conexión entre los diferentes campos de éste. Además, esta forma de trabajar nos permite relacionar elementos que no están en el mismo namespace.
Después de escribir un Schema XML se puede confirmar la correcta realización mediante la validación de esquemas XML: Validación XML.5623

## Ejemplo

Un ejemplo de la estructura de un documento esquema vacío sería el siguiente:
Un ejemplo de definición con XML Schema sería el siguiente:
Podemos ver como en ambos casos se inician las declaraciones indicando la versión de XML que se va a utilizar y la codificación que se usa. Estos dos campos son necesarios para poder interpretar el esquema.
En la siguiente línea de código se declara el elemento schema, raíz del documento de definición de esquema. Además se declara el espacio de nombres en el que viven los nombres de los elementos del documento. Esta definición de esquema dictamina que cualquier documento XML que esté en conformidad con él, deberá tener un elemento raíz que se llame “Libro” el cual tendrá tres hijos (elementos anidados) y un atributo. Los hijos son “Título”, ”Editorial” que deben aparecer una vez y “Autores” que puede aparecer de una a diez veces. El hecho de que estén agrupados en una secuencia indica que los elementos deben aparecer en orden, es decir, primero el “Título”, luego los “Autores” y por último la “Editorial”. Los tres elementos son de tipo string. El atributo de libro se llama “precio” y es de tipo double.