Esquema XML (W3C) - XML Schema (W3C)

Esquema XML (W3C)
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) ,
1.1, estructuras de la parte 1 (recomendación) ,

1.1, Parte 2 Tipos de datos (recomendación)

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 el contenido de cada elemento en un documento, para asegurarse de que se adhiere a la descripción del elemento en el que se coloca.

Como todos los lenguajes de esquemas XML , XSD puede usarse 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, 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 inicialización del esquema XML de W3C, mientras que otros se refirieron a como XSD , una inicialización de XML Schema Definition. 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 los 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 que se publicó XML Schema. Varios productos de Microsoft admitían XDR hasta el lanzamiento de MSXML 6.0 (que eliminó XDR a favor de XML Schema) en diciembre de 2006. 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 . (Este ú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 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 principales componentes 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 arraigado 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 propiedades de atributos. Nuevamente, 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 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 con nombre de elementos y atributos 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, afirmaciones, 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 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 (aparte de 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 tanto elementos como 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 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 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 una gran cantidad de críticas severas, quizás más que cualquier otra recomendación del W3C. James Clark, Anders Møller y Michael Schwartzbach, Rick Jelliffe y David Webber proporcionan buenos resúmenes de las críticas.

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 que el XML Schema Primer del W3C es mucho más fácil de entender.
  • XSD carece de especificación matemática formal. (Esto hace que sea difícil razonar sobre los 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 expresibilidad:

  • 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), aunque ese 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 solucionado en XSD 1.1.
  • El conjunto de tipos de datos XSD que se ofrecen es muy arbitrario.
  • 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 del 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 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

Referencias

Otras lecturas

enlaces externos

Especificación W3C XML Schema 1.0

Especificación W3C XML Schema 1.1

Otro