XSD ( XML Schema Definition ), una recomendación del Consorcio World Wide Web ( W3C ), especifica cómo describir formalmente los elementos de un documento de lenguaje de marcado extensible ( XML ). Los programadores pueden utilizarlo para verificar cada elemento del contenido de un documento, a fin de garantizar que se ajuste a la descripción del elemento en el que se encuentra. [1]
Al igual que todos los lenguajes de esquema XML , XSD se puede utilizar para expresar un conjunto de reglas a las que debe ajustarse un documento XML para que se lo considere "válido" según ese esquema. Sin embargo, a diferencia de la mayoría de los demás lenguajes de esquema, XSD también se diseñó con la intención de que la determinación de la validez de un documento produjera una colección de información que se ajustara a tipos de datos específicos . Este conjunto de información posterior a la validación puede ser útil en el desarrollo de software de procesamiento de documentos XML.
XML Schema , publicado como recomendación del W3C en mayo de 2001, [2] es uno de los varios lenguajes de esquema XML . Fue el primer lenguaje de esquema independiente para XML en alcanzar el estado de Recomendación del W3C. Debido a la confusión entre XML Schema como una especificación específica del W3C y el uso del mismo término para describir los lenguajes de esquema en general, algunas partes de la comunidad de usuarios se refirieron a este lenguaje como WXS , un acrónimo de W3C XML Schema, mientras que otros lo hicieron como XSD , un acrónimo de XML Schema Definition. [3] [4] En la versión 1.1, el W3C ha elegido adoptar XSD como el nombre preferido, y ese es el nombre utilizado en este artículo.
En su apéndice de referencias, la especificación XSD reconoce la influencia de los DTD y otros esfuerzos iniciales de esquema XML como DDML , SOX , XML-Data y XDR . Ha adoptado características de cada una de estas propuestas, pero también es un compromiso entre ellas. De esos lenguajes, XDR y SOX continuaron utilizándose y recibiendo soporte durante un tiempo después de que se publicara XML Schema. Varios productos de Microsoft admitieron XDR hasta el lanzamiento de MSXML 6.0 (que abandonó XDR en favor de XML Schema) en diciembre de 2006. [5] Commerce One , Inc. admitió su lenguaje de esquema SOX hasta que se declaró en quiebra a fines de 2004.
Las características más obvias que ofrece XSD y que no están disponibles en las definiciones de tipo de documento (DTD) nativas de XML son el conocimiento del espacio de nombres y los tipos de datos, es decir, la capacidad de definir el contenido de elementos y atributos como si contuvieran valores como números enteros y fechas en lugar de texto arbitrario.
La especificación XSD 1.0 se publicó originalmente en 2001 y en 2004 se publicó una segunda edición para corregir una gran cantidad de errores. XSD 1.1 se convirtió en una recomendación del W3C en abril de 2012.
Técnicamente, un esquema es una colección abstracta de metadatos, que consta de un conjunto de componentes de esquema : principalmente declaraciones de elementos y atributos y definiciones de tipos complejas y simples. Estos componentes se crean generalmente procesando una colección de documentos de esquema , que contienen las definiciones de lenguaje fuente de estos componentes. Sin embargo, en el uso popular, un documento de esquema se suele denominar esquema.
Los documentos de esquema se organizan por espacio de nombres: todos los componentes de esquema nombrados pertenecen a un espacio de nombres de destino, y el espacio de nombres de destino es una propiedad del documento de esquema en su totalidad. Un documento de esquema puede incluir otros documentos de esquema para el mismo espacio de nombres y puede importar documentos de esquema para un espacio de nombres diferente.
Cuando se valida un documento de instancia con respecto a un esquema (un proceso conocido como evaluación ), el esquema que se utilizará para la validación puede suministrarse como un parámetro al motor de validación o puede hacerse referencia a él directamente desde el documento de instancia utilizando dos atributos especiales, xsi:schemaLocation
y xsi:noNamespaceSchemaLocation
. (El último mecanismo requiere que el cliente que invoca la validación confíe lo suficiente en el documento para saber que se está validando con respecto al esquema correcto. "xsi" es el prefijo convencional para el espacio de nombres "http://www.w3.org/2001/XMLSchema-instance".)
Los documentos de esquema XML suelen tener la extensión de nombre de archivo ".xsd". Aún no se ha registrado un tipo de medio de Internet exclusivo para los XSD, por lo que se debe utilizar "application/xml" o "text/xml", según RFC 3023.
Los componentes principales de un esquema son:
Otros componentes más especializados incluyen anotaciones, afirmaciones, notaciones y el componente de esquema , que contiene información sobre el esquema en su totalidad.
Los tipos simples (también llamados tipos de datos) restringen los valores textuales que pueden aparecer en un elemento o atributo. Esta es una de las formas más significativas en las que el esquema XML difiere de las DTD. Por ejemplo, un atributo puede estar restringido para contener solo una fecha válida o un número decimal.
XSD proporciona un conjunto de 19 tipos de datos primitivos ( anyURI
, base64Binary
, boolean
, date
, dateTime
, decimal
, , , , , , , , , , , double
, y ). Permite construir nuevos tipos de datos a partir de estos primitivos mediante tres mecanismos:duration
float
hexBinary
gDay
gMonth
gMonthDay
gYear
gYearMonth
NOTATION
QName
string
time
Se definen veinticinco tipos derivados dentro de la propia especificación, y los usuarios pueden definir otros tipos derivados en sus propios esquemas.
Los mecanismos disponibles para restringir los tipos de datos incluyen la capacidad de especificar valores mínimos y máximos, expresiones regulares, restricciones en la longitud de las cadenas y restricciones en la cantidad de dígitos en valores decimales. XSD 1.1 agrega nuevamente aserciones, la capacidad de especificar una restricción arbitraria por medio de una expresión XPath 2.0 .
Los tipos complejos describen el contenido permitido de un elemento, incluidos sus elementos y textos secundarios y sus atributos. Una definición de tipo complejo consta de un conjunto de usos de atributos y un modelo de contenido. Las variedades de modelo de contenido incluyen:
Un tipo complejo se puede derivar de otro tipo complejo por restricción (no permitiendo algunos elementos, atributos o valores que el tipo base permite) o por extensión (permitiendo que aparezcan atributos y elementos adicionales). En XSD 1.1, un tipo complejo puede estar restringido por aserciones: expresiones XPath 2.0 evaluadas contra el contenido que debe evaluarse como verdadero.
Después de la validación basada en esquemas XML, es posible expresar la estructura y el contenido de un documento XML en términos del modelo de datos implícito durante la validación. El modelo de datos de esquemas XML incluye:
Esta recopilación de información se denomina conjunto de información de validación posterior al esquema (PSVI, por sus siglas en inglés). El PSVI le otorga a un documento XML válido su "tipo" y facilita el tratamiento del documento como un objeto, mediante paradigmas de programación orientada a objetos (OOP).
La razón principal para definir un esquema XML es describir formalmente un documento XML; sin embargo, el esquema resultante tiene otros usos que van más allá de la simple validación.
El esquema se puede utilizar para generar código, conocido como Enlace de datos XML . Este código permite que el contenido de los documentos XML se trate como objetos dentro del entorno de programación.
El esquema se puede utilizar para generar documentación legible por humanos de una estructura de archivo XML; esto resulta especialmente útil cuando los autores han hecho uso de los elementos de anotación. No existe ningún estándar formal para la generación de documentación, pero hay una serie de herramientas disponibles, como la hoja de estilo Xs3p, que producirá material impreso y HTML legible de alta calidad.
Aunque el esquema XML ha tenido éxito en el sentido de que ha sido ampliamente adoptado y en gran medida logra lo que se propuso, ha sido objeto de una gran cantidad de críticas severas, tal vez más que cualquier otra recomendación del W3C. James Clark, [6] Anders Møller y Michael Schwartzbach, [7] Rick Jelliffe [8] y David Webber [9] ofrecen buenos resúmenes de las críticas.
Problemas generales:
Limitaciones prácticas de expresividad:
Problemas técnicos:
XSD 1.1 se convirtió en una recomendación del W3C en abril de 2012, lo que significa que es una especificación aprobada por el W3C.
Las nuevas características importantes en XSD 1.1 son:
Hasta el borrador de la Recomendación propuesta, XSD 1.1 también proponía la incorporación de un nuevo tipo de datos numéricos, precisionDecimal. Esto resultó controvertido y, por lo tanto, se eliminó de la especificación en una etapa avanzada del desarrollo.
Especificación del esquema XML 1.0 del W3C
Especificación del esquema XML 1.1 del W3C
Otro