XSD ( XML Schema Definition ), una recomendación del World Wide Web Consortium ( W3C ), especifica cómo describir formalmente los elementos en un documento Extensible Markup Language ( XML ). Los programadores pueden utilizarlo para verificar cada elemento del contenido de un documento, para asegurarse de que se adhiere a la descripción del elemento en el que se coloca. [1]
Extensión de nombre de archivo | .xsd |
---|---|
Tipo de medio de Internet | aplicación / xml, texto / xml |
Desarrollado por | Consorcio Mundial de la red |
Tipo de formato | Lenguaje de esquema XML |
Extendido desde | XML |
Estándar | 1.0, Estructuras de la Parte 1 (Recomendación) , 1.0, tipos de datos de la parte 2 (recomendación) , |
Como todos los lenguajes de esquemas XML , XSD se puede utilizar para expresar un conjunto de reglas a las que un documento XML debe ajustarse para ser considerado "válido" de acuerdo con ese esquema. Sin embargo, a diferencia de la mayoría de los otros 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 adhiera a tipos de datos específicos . Dicho puesto de validación conjunto de informació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 varios lenguajes de esquemas XML . Fue el primer lenguaje de esquema independiente para XML en alcanzar el estado de Recomendación por parte del W3C. Debido a la confusión entre el esquema XML como una especificación W3C específica 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 , una inicialidad del esquema XML de W3C, mientras que otros se refirieron a como XSD , una inicialidad de XML Schema Definition. [3] [4] En la versión 1.1, el W3C ha optado por adoptar XSD como nombre preferido, y ese es el nombre que se utiliza en este artículo.
En su apéndice de referencias, la especificación XSD reconoce la influencia de DTD y otros esfuerzos de esquemas XML tempranos 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 admitiéndose durante un tiempo después de la publicación de XML Schema. Varios productos de Microsoft admitieron XDR hasta el lanzamiento de MSXML 6.0 (que eliminó XDR a 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 se ofrecen en XSD 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 los elementos y atributos para que contengan valores como números enteros y fechas en lugar de texto arbitrario.
La especificación XSD 1.0 se publicó originalmente en 2001, con una segunda edición en 2004 para corregir un gran número 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 del esquema : principalmente declaraciones de elementos y atributos y definiciones de tipos simples y complejas. Estos componentes generalmente se crean procesando una colección de documentos de esquema , que contienen las definiciones del idioma de origen de estos componentes. Sin embargo, en el uso popular, un documento de esquema a menudo se denomina esquema.
Los documentos de esquema están organizados 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 conjunto. 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 un documento de instancia se valida con un esquema (un proceso conocido como evaluación ), el esquema que se utilizará para la validación se puede proporcionar como parámetro al motor de validación o se puede hacer referencia directamente desde el documento de instancia mediante 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 como para saber que se está validando con el esquema correcto. "Xsi" es el prefijo convencional para el espacio de nombres " http://www.w3.org/2001/XMLSchema -instancia ".)
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 único para 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. Estos incluyen el nombre del elemento y el espacio de nombres de destino. Una propiedad importante es el tipo de elemento, que limita qué atributos e hijos puede tener el elemento. En XSD 1.1, el tipo de 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 siempre que 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 valores particulares deben ser únicos dentro del subárbol enraizado en un elemento, y restricciones de referencia 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 utilizar 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. Una vez más, las propiedades incluyen el nombre del atributo y el espacio de nombres de destino. El tipo de atributo restringe los valores que puede tomar el atributo. Una declaración de atributo también puede incluir un valor predeterminado o un valor fijo (que es entonces el único valor que puede tomar el atributo).
- Tipos simples y complejos . Estos se describen en la siguiente sección.
- Definiciones de grupos de modelos y grupos de atributos . Se trata esencialmente 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 usa en ese tipo.
- Una partícula de elemento representa de manera similar la relación de 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 elementos, los modelos de contenido pueden incluir partículas de grupos de modelos , que actúan como 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 esté en un determinado espacio de nombres).
Otros componentes más especializados incluyen anotaciones, aserciones, notaciones y el componente de esquema que contiene información sobre el esquema en su conjunto.
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 importantes en las que el esquema XML se diferencia 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
, duration
, float
, hexBinary
, gDay
, gMonth
, gMonthDay
, gYear
, gYearMonth
, NOTATION
, QName
, string
, y time
). Permite construir nuevos tipos de datos a partir de estas primitivas mediante tres mecanismos:
- restricción (reduciendo el conjunto de valores permitidos),
- lista (que permite una secuencia de valores), y
- union (que permite elegir valores de 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 el número de dígitos en valores decimales. XSD 1.1 nuevamente agrega 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 elementos secundarios de texto y sus atributos. Una definición de tipo compleja consta de un conjunto de usos de atributos y un modelo de contenido. Las variedades de modelos de contenido incluyen:
- contenido de solo elemento, en el que no puede aparecer texto (que no sean espacios en blanco o texto encerrado por un elemento secundario)
- contenido simple, en el que se permite el texto pero los elementos secundarios no
- contenido vacío, en el que no se permiten texto ni elementos secundarios
- contenido mixto, que permite que aparezcan elementos y texto
Un tipo complejo puede derivarse de otro tipo complejo por restricción (no permite algunos elementos, atributos o valores que permite el tipo base) o por extensión (permite que aparezcan atributos y elementos adicionales). En XSD 1.1, un tipo complejo puede estar restringido por aserciones: expresiones XPath 2.0 evaluadas con respecto al 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 el esquema 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 del esquema 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 posterior a la validación del esquema (PSVI). El PSVI da a un documento XML válido su "tipo" y facilita el tratamiento del documento como un objeto, utilizando 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.
Codigo de GENERACION
El esquema se puede utilizar para generar código, denominado 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 es especialmente útil cuando los autores han hecho uso de los elementos de anotación. No existe un estándar formal para la generación de documentación, pero hay varias herramientas disponibles, como la hoja de estilo Xs3p , que producirán material impreso y HTML legible de alta calidad.
Crítica
Aunque XML Schema tiene éxito porque ha sido ampliamente adoptado y logra en gran medida lo que se propuso, ha sido objeto de muchas críticas severas, quizás 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 proporcionan buenos resúmenes de las críticas . [9]
Problemas generales:
- Es demasiado complicado (la especificación es de varios cientos de páginas en un lenguaje muy técnico), por lo que es difícil de usar por los no expertos, pero muchos no expertos necesitan esquemas para describir los formatos de datos. La recomendación del W3C en sí es extremadamente difícil de leer. La mayoría de los usuarios encuentran mucho más fácil de entender el XML Schema Primer del W3C .
- XSD carece de especificación matemática formal. (Esto dificulta razonar 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 desordenado.
- 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).
- Cuando se describe contenido mixto , los datos de los caracteres no se pueden restringir de ninguna manera (ni siquiera se puede especificar un conjunto de caracteres válidos).
- Las declaraciones de contenido y atributo no pueden depender de los atributos o el contexto del elemento (esto también se enumeró como un problema central de DTD).
- No es 100% autodescriptivo (como un ejemplo trivial, ver el punto anterior), a pesar de que era 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 contienen marcado).
Problemas técnicos:
- Aunque técnicamente se ajusta al espacio de nombres, no parece seguir el espíritu del espacio de nombres (por ejemplo, "locales no calificados").
- XSD 1.0 no proporcionó facilidades para indicar que el valor o la presencia de un atributo depende de los valores o la presencia de otros atributos (las llamadas restricciones de co-ocurrencia ). Esto se ha corregido en XSD 1.1.
- El conjunto de tipos de datos XSD que se ofrecen es muy arbitrario. [10]
- Las dos tareas de validación y aumento (agregar información de tipo y valores predeterminados) deben mantenerse separadas.
Versión 1.1
XSD 1.1 se convirtió en una Recomendación W3C en abril de 2012 , lo que significa que es una especificación W3C aprobada.
Las nuevas características importantes de XSD 1.1 son:
- La capacidad de definir afirmaciones contra el contenido del documento mediante expresiones XPath 2.0 (una idea tomada de Schematron ).
- La capacidad de seleccionar el tipo contra el que se validará un elemento en función de los valores de los atributos del elemento ("asignación de tipo condicional").
- Relajar las reglas mediante las cuales los elementos explícitos en un modelo de contenido no deben coincidir con los comodines también permitidos por el modelo.
- La capacidad de especificar comodines (tanto para elementos como para atributos) que se aplican a todos los tipos del esquema, para que todos implementen la misma política de extensibilidad.
Hasta el borrador de la propuesta de recomendación, XSD 1.1 también propuso la adició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 tardía de desarrollo.
Ver también
- Lista 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 usa a menudo con tipos de datos XSD
- Editor 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
Referencias
- ^ " Definición XSD (Definición de esquema XML) " TechTarget, consultado el 10 de junio de 2014
- ^ "Cronología de estándares XML y Web semántica W3C" (PDF) . 2012-02-04.
- ^ Ver esquema - W3C
- ^ Consulte W3C XML Schema Definition Language (XSD) 1.1 Parte 1: Estructuras
- ^ "Eliminación de compatibilidad con esquemas XDR en MSXML 6.0" . Consultado el 19 de septiembre de 2010 .
- ^ Resumen de James Clark de lascríticas al esquema XML y 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
- ^ Libro blanco de comparación e información de David Webber OASIS de agosto de 2008, http://www.oasis-open.org/committees/download.php/29164/White%20Paper%20on%20CAM%20and%20XSD.pdf
- ^ Este punto es ampliado por Uche Ogbuji Más sobre la guerra de clases XML - Blog de O'Reilly ONLamp
Otras lecturas
- 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 W3C XML Schema 1.0
- Imprimación XSD 1.0
- Estructuras XSD 1.0
- Tipos de datos XSD 1.0
- Herramientas
Especificación W3C XML Schema 1.1
- Estructuras XSD 1.1
- Tipos de datos XSD 1.1
Otro
- Esquema XML en Curlie
- SPARQL2XQuery Transforma el esquema XML en OWL. Mapear esquemas XML y ontologías OWL-RDF / S.