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 recopilació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.
Historia
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.
Esquemas y documentos de esquema
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:schemaLocationy 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.
Componentes del esquema
Los componentes principales de un esquema son:
- Declaraciones de elementos , que definen las propiedades de los elementos. Estas incluyen el nombre del elemento y el espacio de nombres de destino. Una propiedad importante es el tipo del elemento, que restringe los atributos y los hijos que puede tener el elemento. En XSD 1.1, el tipo del elemento puede estar condicionado a los valores de sus atributos. Un elemento puede pertenecer a un grupo de sustitución; si el elemento E está en el grupo de sustitución del elemento H, entonces donde el esquema permita que aparezca H, E puede aparecer en su lugar. Los elementos pueden tener restricciones de integridad: restricciones de unicidad que determinan que los valores particulares deben ser únicos dentro del subárbol con raíz en un elemento y restricciones referenciales que determinan que los valores deben coincidir con el identificador de algún otro elemento. Las declaraciones de elementos pueden ser globales o locales, lo que permite que se use el mismo nombre para elementos no relacionados en diferentes partes de un documento de instancia.
- Declaraciones de atributos , que definen las propiedades de los atributos. Nuevamente, las propiedades incluyen el nombre del atributo y el espacio de nombres de destino. El tipo de atributo restringe los valores que el atributo puede tomar. Una declaración de atributo también puede incluir un valor predeterminado o un valor fijo (que es entonces el único valor que el atributo puede tomar).
- Tipos simples y complejos . Estos se describen en la siguiente sección.
- Definiciones de grupos de modelos y grupos de atributos . Se trata, en esencia, de macros: grupos de elementos y atributos con nombre que se pueden reutilizar en muchas definiciones de tipos diferentes.
- Un uso de atributo representa la relación de un tipo complejo y una declaración de atributo, e indica si el atributo es obligatorio u opcional cuando se utiliza en ese tipo.
- Una partícula de elemento representa de manera similar la relación entre un tipo complejo y una declaración de elemento, e indica el número mínimo y máximo de veces que el elemento puede aparecer en el contenido. Además de las partículas de elemento, los modelos de contenido pueden incluir partículas de grupo de modelos , que actúan como elementos no terminales en una gramática: definen las unidades de elección y repetición dentro de la secuencia de elementos permitidos. Además, se permiten partículas comodín , que permiten un conjunto de elementos diferentes (quizás cualquier elemento siempre que se encuentre en un espacio de nombres determinado).
Otros componentes más especializados incluyen anotaciones, afirmaciones, notaciones y el componente de esquema , que contiene información sobre el esquema en su totalidad.
Tipos
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:
durationfloathexBinarygDaygMonthgMonthDaygYeargYearMonthNOTATIONQNamestringtime
- restricción (reducción del conjunto de valores permitidos),
- lista (que permite una secuencia de valores), y
- unión (permitiendo la elección de valores entre varios tipos).
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:
- contenido que solo contiene elementos, en el que no puede aparecer texto (excepto espacios en blanco o texto encerrado por un elemento secundario)
- Contenido simple, en el que se permite texto pero no elementos secundarios.
- Contenido vacío, en el que no se permiten ni texto ni elementos secundarios.
- Contenido mixto, que permite que aparezcan tanto elementos como texto.
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.
Conjunto de información posterior a la validación del esquema
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:
- El vocabulario (nombres de elementos y atributos)
- El modelo de contenido (relaciones y estructura)
- Los tipos de datos
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).
Usos secundarios de los esquemas XML
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.
Generación de código
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.
Generación de documentación de estructura de archivos XML
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.
Crítica
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:
- Es demasiado complicado (la especificación consta de varios cientos de páginas en un lenguaje muy técnico), por lo que resulta difícil de utilizar para quienes no son expertos, pero muchos de ellos necesitan esquemas para describir los formatos de datos. La propia Recomendación del W3C es extremadamente difícil de leer. La mayoría de los usuarios consideran que el XML Schema Primer del W3C es mucho más fácil de entender.
- XSD carece de cualquier especificación matemática formal (esto dificulta el razonamiento sobre esquemas, por ejemplo para demostrar que una modificación de un esquema es compatible con versiones anteriores).
- Hay muchas sorpresas en el lenguaje, por ejemplo, que la restricción de elementos funciona de manera diferente a la restricción de atributos.
Limitaciones prácticas de expresividad:
- XSD ofrece un soporte muy débil para contenido no ordenado.
- XSD no puede requerir un elemento raíz específico (por lo que se requiere información adicional para validar incluso los documentos más simples).
- Al describir contenido mixto , los datos de caracteres no se pueden restringir de ninguna manera (ni siquiera se puede especificar un conjunto de caracteres válidos).
- Las declaraciones de contenido y atributos no pueden depender de los atributos o del contexto del elemento (esto también se mencionó como un problema central de DTD).
- No es 100% autodescriptivo (como ejemplo trivial, ver el punto anterior), aunque ese fue un requisito de diseño inicial.
- Los valores predeterminados no se pueden especificar por separado de las declaraciones (esto dificulta la creación de familias de esquemas que solo difieran en los valores predeterminados); los valores predeterminados de los elementos solo pueden ser datos de caracteres (que no contengan marcado).
Problemas técnicos:
- Aunque técnicamente es compatible con el espacio de nombres, no parece seguir el espíritu del espacio de nombres (por ejemplo, "locales no calificados").
- XSD 1.0 no ofrecía ninguna función para indicar que el valor o la presencia de un atributo dependían de los valores o la presencia de otros atributos (las llamadas restricciones de coocurrencia ). Esto se ha corregido en XSD 1.1.
- El conjunto de tipos de datos XSD que se ofrecen es altamente arbitrario. [10]
- Las dos tareas de validación y ampliación (agregar información de tipo y valores predeterminados) deben mantenerse separadas.
Versión 1.1
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:
- La capacidad de definir afirmaciones sobre el contenido del documento mediante expresiones XPath 2.0 (una idea tomada de Schematron ).
- La capacidad de seleccionar el tipo con el que se validará un elemento en función de los valores de los atributos del elemento ("asignación de tipo condicional").
- Flexibilizar las reglas según las cuales los elementos explícitos de un modelo de contenido no deben coincidir con caracteres comodín también permitidos por el modelo.
- La capacidad de especificar caracteres comodín (tanto para elementos como para atributos) que se apliquen a todos los tipos del esquema, de modo que todos implementen la misma política de extensibilidad.
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.
Véase también
- Lista de tipos de esquemas XML : lista de esquemas XML en uso en Internet ordenados por propósito
- RELAX NG : otro lenguaje de esquema XML (un estándar internacional ISO) que se utiliza a menudo con tipos de datos XSD
- Editores de esquemas XML : información sobre herramientas XSD
- Lenguajes de esquema XML : compara XSD con otros lenguajes de esquema XML
- Atribución de partículas únicas
- Modelo canónico
- Esquema JSON
Referencias
- ^ "Definición XSD (XML Schema Definition)" TechTarget, consultado el 10 de junio de 2014
- ^ "Cronología de los estándares XML y Web semántica del W3C" (PDF) . 2012-02-04.
- ^ Ver esquema - W3C
- ^ Véase Lenguaje de definición de esquema XML (XSD) 1.1 del W3C, Parte 1: Estructuras
- ^ "Eliminación de la compatibilidad con esquemas XDR en MSXML 6.0" . Consultado el 19 de septiembre de 2010 .
- ^ Resumen de James Clark sobre las críticas al esquema XML y la promoción de RELAX NG como alternativa, https://web.archive.org/web/20150316212413/http://www.imc.org/ietf-xml-use/mail-archive/msg00217.html
- ^ Anders Møller y Michael I. Schwartzbach presentan "Problemas con el esquema XML", http://cs.au.dk/~amoeller/XML/schemas/xmlschema-problems.html
- ^ Crítica de Rick Jelliffe en mayo de 2009, https://web.archive.org/web/20090516232816/http://broadcast.oreilly.com/2009/05/w3c-please-put-xsd-11-on-hold.html
- ^ David Webber , "Borrador de libro blanco sobre CAM v1.1 y XSD Schema V1.1 Insights", 1 de septiembre de 2008.
- ^ Este punto es ampliado por Uche Ogbuji Más sobre la guerra de clases en XML - Blog ONLamp de O'Reilly
Lectura adicional
- Esquema XML definitivo , Priscilla Walmsley, Prentice-Hall, 2001, ISBN 0-13-065567-8
- Esquema XML , Eric van der Vlist, O'Reilly, 2001, ISBN 0-596-00252-1
- El compañero de esquema XML , Neil Bradley, Addison-Wesley, 2003, ISBN 0-321-13617-9
- Esquemas XML profesionales , Jon Ducket et al., Wrox Press, 2001, ISBN 1-86100-547-4
- Esquemas XML , Lucinda Dykes et al., Sybex, ISBN 0-7821-4045-9
Enlaces externos
Especificación del esquema XML 1.0 del W3C
- Introducción a XSD 1.0
- Estructuras XSD 1.0
- Tipos de datos XSD 1.0
- Herramientas
Especificación del esquema XML 1.1 del W3C
- Estructuras XSD 1.1
- Tipos de datos XSD 1.1
Otro
- SPARQL2XQuery Transforma esquemas XML a OWL. Asigna esquemas XML y ontologías OWL-RDF/S.