Articulo de referencia

Esquema XML (W3C)

\n[https://www.w3.org/TR/xmlschema-2/ 1.0, Part 2 Datatypes (Recommendation)], \n[https://www.w3.org/TR/xmlschema11-1/ 1.1, Part 1 Structures (Recommendation)], \n[https://www.w...

XSD ( XML Schema Definition ), una recomendación del Consorcio World Wide Web ( W3C ), especifica cómo describir formalmente los elementos en un documento de Lenguaje de Marcado Extensible ( XML ). Los programadores pueden usarlo para verificar el contenido de cada elemento en un documento, para asegurar 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 usar para expresar un conjunto de reglas que un documento XML debe cumplir para ser considerado "válido" según dicho 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 un conjunto 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 para el 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 estatus de Recomendación por parte del W3C. Debido a la confusión entre XML Schema como especificación específica del W3C y el uso del mismo término para describir lenguajes de esquema en general, algunas partes de la comunidad de usuarios se referían a este lenguaje como WXS , un acrónimo de W3C XML Schema, mientras que otras se referían a él como XSD , un acrónimo de XML Schema Definition. [ 3 ] [ 4 ] En la versión 1.1, el W3C ha optado por 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 las DTD y otros esfuerzos iniciales de esquemas 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 siendo utilizados y compatibles durante un tiempo después de que se publicara XML Schema. Varios productos de Microsoft fueron compatibles con XDR hasta el lanzamiento de MSXML 6.0 (que abandonó XDR en favor de XML Schema) en diciembre de 2006. [ 5 ] Commerce One , Inc. fue compatible con su lenguaje de esquema SOX hasta que se declaró en bancarrota a finales de 2004.

Las características más evidentes 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 numerosos 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 : principalmente declaraciones de elementos y atributos, y definiciones de tipos complejos y simples. Estos componentes se crean generalmente procesando una colección de documentos de esquema , que contienen las definiciones de dichos componentes en el lenguaje fuente. Sin embargo, en el lenguaje común, un documento de esquema suele denominarse simplemente esquema.

Los documentos de esquema se organizan por espacio de nombres: todos los componentes de esquema con nombre pertenecen a un espacio de nombres de destino, y este 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 del mismo espacio de nombres y puede importar documentos de esquema de 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 proporcionarse como parámetro al motor de validación o puede referenciarse directamente desde el documento de instancia mediante dos atributos especiales: xsi:schemaLocationy xsi:noNamespaceSchemaLocation. (Este ú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 respecto al esquema correcto. "xsi" es el prefijo convencional para el espacio de nombres " https://www.w3.org/2001/XMLSchema-instance ".)

Los documentos de esquema XML suelen tener la extensión de archivo ".xsd". Todavía no se ha registrado un tipo de medio de Internet único para los XSD, por lo que se debe usar "application/xml" o "text/xml", según la RFC 7303.

Componentes del esquema

Los componentes principales de un esquema son:

  • Las declaraciones de elementos definen las propiedades de los mismos. Estas incluyen el nombre del elemento y el espacio de nombres de destino. Una propiedad importante es el tipo de elemento, que restringe los atributos y elementos secundarios que puede tener. En XSD 1.1, el tipo de elemento puede depender de 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 dondequiera 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 ciertos valores 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 usar el mismo nombre para elementos no relacionados en diferentes partes de un documento de instancia.
  • Las declaraciones de atributos definen las propiedades de los atributos. Estas propiedades incluyen el nombre del atributo y el espacio de nombres de destino. El tipo de atributo restringe los valores que puede tomar. Una declaración de atributo también puede incluir un valor predeterminado o un valor fijo (que será 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 esencialmente de macros: grupos con nombre de elementos y atributos que pueden reutilizarse en muchas definiciones de tipos diferentes.
  • El uso de un atributo representa la relación entre 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 forma 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 modelo , 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. Asimismo, se permiten partículas comodín , que autorizan un conjunto de elementos diferentes (posiblemente cualquier elemento siempre que pertenezca a un espacio de nombres determinado).

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) limitan los valores textuales que pueden aparecer en un elemento o atributo. Esta es una de las diferencias más significativas entre XML Schema y DTD. Por ejemplo, un atributo podría estar restringido a contener únicamente 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 estos primitivos mediante tres mecanismos:

  • restricción (reduciendo el conjunto de valores permitidos),
  • lista (que permite una secuencia de valores) y
  • unión (que permite elegir valores de varios tipos).

En la propia especificación se definen veinticinco tipos derivados, y los usuarios pueden definir tipos derivados adicionales en sus propios esquemas.

Los mecanismos disponibles para restringir los tipos de datos incluyen la posibilidad 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 de los valores decimales. XSD 1.1 añade nuevamente las aserciones, la posibilidad de especificar una restricción arbitraria mediante una expresión XPath 2.0 .

Los tipos complejos describen el contenido permitido de un elemento, incluyendo sus elementos secundarios de texto y sus atributos. La definición de un tipo complejo consta de un conjunto de usos de atributos y un modelo de contenido. Entre las variedades de modelos de contenido se incluyen:

  • Contenido exclusivo de elementos, en el que no puede aparecer ningún texto (aparte de espacios en blanco o texto encerrado por un elemento hijo).
  • Contenido simple, en el que se permite texto pero no elementos secundarios.
  • contenido vacío, en el que no se permite ni texto ni elementos secundarios.
  • contenido mixto, que permite que aparezcan tanto elementos como texto.

Un tipo complejo puede derivarse de otro tipo complejo mediante restricción (prohibiendo ciertos elementos, atributos o valores que el tipo base permite) o mediante extensión (permitiendo la aparición de atributos y elementos adicionales). En XSD 1.1, un tipo complejo puede estar restringido por aserciones: expresiones XPath 2.0 que se evalúan con respecto al contenido y que deben ser verdaderas.

Conjunto de información posterior a la validación del esquema

Tras la validación basada en XML Schema, es posible expresar la estructura y el contenido de un documento XML en términos del modelo de datos que estaba implícito durante la validación. El modelo de datos XML Schema incluye:

  • El vocabulario (nombres de elementos y atributos)
  • El modelo de contenido (relaciones y estructura)
  • Los tipos de datos

Este conjunto de información se denomina Infoset de Post-Validación de Esquema (PSVI). El PSVI proporciona 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 (POO).

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 la estructura de archivos XML

El esquema se puede utilizar para generar documentación legible de la estructura de un archivo XML; esto resulta especialmente útil cuando los autores han utilizado 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 producen HTML legible y material impreso de alta calidad.

Crítica

Aunque XML Schema ha tenido éxito al ser ampliamente adoptado y lograr en gran medida sus objetivos, también ha sido objeto de numerosas 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, [ 9 ] ofrecen buenos resúmenes de estas críticas.

Problemas generales:

  • Es demasiado complejo (la especificación consta de varios cientos de páginas en un lenguaje muy técnico), por lo que resulta difícil de usar para quienes no son expertos; sin embargo, 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 encuentran mucho más fácil de entender la Guía básica de esquemas XML del W3C .
  • XSD carece de una 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).
  • El lenguaje presenta muchas sorpresas; por ejemplo, la restricción de elementos funciona de manera diferente a la restricción de atributos.

Limitaciones prácticas de la expresividad:

  • XSD ofrece un soporte muy limitado para contenido no ordenado.
  • XSD no puede requerir un elemento raíz específico (por lo que se necesita información adicional para validar incluso los documentos más sencillos).
  • Al describir contenido mixto , los datos de caracteres no pueden restringirse 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 completamente autoexplicativo (como ejemplo trivial, véase 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 se diferencien en los valores predeterminados); los valores predeterminados de los elementos solo pueden ser datos de caracteres (sin contener marcado).

Problemas técnicos:

  • Aunque técnicamente cumple con el estándar de espacio de nombres, no parece seguir el espíritu de los espacios de nombres (por ejemplo, "variables locales no cualificadas").
  • XSD 1.0 no ofrecía ninguna forma de indicar que el valor o la presencia de un atributo dependía 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 principales novedades de XSD 1.1 son:

  • La capacidad de definir aserciones 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 sus atributos ("asignación de tipo condicional").
  • Se están flexibilizando las reglas que establecen que los elementos explícitos de un modelo de contenido no deben coincidir con los comodines permitidos por el modelo.
  • La posibilidad 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 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 avanzada de su desarrollo.

Véase también

Referencias

  1. " Definición XSD (Definición de esquema XML) Archivada el 19/11/2016 en Wayback Machine " TechTarget, consultado el 10 de junio de 2014
  2. "Cronología de los estándares XML y Web Semántica del W3C" (PDF) . 4 de febrero de 2012. Archivado del original (PDF) el 24 de abril de 2013. Consultado el 4 de febrero de 2012 .
  3. Ver esquema - W3C
  4. Véase W3C XML Schema Definition Language (XSD) 1.1 Parte 1: Estructuras
  5. "Eliminación del soporte para esquemas XDR en MSXML 6.0" . Consultado el 19 de septiembre de 2010 .
  6. Resumen de James Clark sobre las críticas a XML Schema 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
  7. Anders Møller y Michael I. Schwartzbach presentan "Problemas con XML Schema", https://cs.au.dk/~amoeller/XML/schemas/xmlschema-problems.html
  8. 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
  9. David Webber , " Borrador del Libro Blanco sobre CAM v1.1 y Perspectivas del Esquema XSD V1.1 ", 1 de septiembre de 2008.
  10. Este punto es ampliado por Uche Ogbuji - Blog de O'Reilly ONLamp

Lecturas adicionales

  • Walmsley, Priscilla (2001). Esquema XML definitivo . Prentice-Hall. ISBN 0-13-065567-8.
  • van der Vlist, Eric (2001). Esquema XML . O'Reilly. ISBN 0-596-00252-1.
  • Bradley, Neil (2003). The XML Schema Companion . Addison-Wesley. ISBN 0-321-13617-9.
  • Ducket, J.; et  al. (2001). Esquemas XML profesionales . Wrox Press. ISBN 1-86100-547-4.
  • Diques, L.; Tittel, E.; Valentín, C. (2002). Esquemas XML . Síbex. ISBN 0-7821-4045-9.

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
  • XSD 1.1 Tipos de datos

Otro

  • SPARQL2XQuery transforma esquemas XML a OWL. Mapea esquemas XML y ontologías OWL-RDF/S.