Articulo de referencia

Esquema XML

Un esquema XML es una descripción de un tipo de documento XML , generalmente expresada en términos de restricciones sobre la estructura y el contenido de los documentos de ese t...

Un esquema XML es una descripción de un tipo de documento XML , generalmente expresada en términos de restricciones sobre la estructura y el contenido de los documentos de ese tipo, más allá de las restricciones sintácticas básicas impuestas por el propio XML. Estas restricciones se expresan generalmente mediante una combinación de reglas gramaticales que rigen el orden de los elementos, predicados booleanos que el contenido debe satisfacer, tipos de datos que rigen el contenido de los elementos y atributos, y reglas más especializadas como las restricciones de unicidad e integridad referencial . [ 1 ]

Existen lenguajes desarrollados específicamente para expresar esquemas XML. El lenguaje de definición de tipo de documento (DTD), que es nativo de la especificación XML, es un lenguaje de esquema con capacidades relativamente limitadas, pero que también tiene otros usos en XML además de la expresión de esquemas. Dos lenguajes de esquema XML más expresivos y de uso generalizado son XML Schema (con S mayúscula ) y RELAX NG .

El mecanismo para asociar un documento XML con un esquema varía según el lenguaje del esquema. La asociación puede realizarse mediante marcado dentro del propio documento XML o mediante algún medio externo.

La definición de esquema XML se conoce comúnmente como XSD.

Validación

El proceso de comprobar si un documento XML se ajusta a un esquema se denomina validación , que es independiente del concepto central de XML de buena formación sintáctica. Todos los documentos XML deben estar bien formados, pero no es necesario que un documento sea válido a menos que el analizador XML esté "validándolo", en cuyo caso también se comprueba que el documento se ajuste a su esquema asociado. Los analizadores que validan DTD son los más comunes, pero algunos también admiten XML Schema o RELAX NG.

La validación de un documento de instancia con respecto a un esquema puede considerarse una operación conceptualmente independiente del análisis XML. Sin embargo, en la práctica, muchos validadores de esquemas están integrados con un analizador XML.

Idiomas

Existen varios lenguajes diferentes para especificar un esquema XML. Cada lenguaje tiene sus ventajas y desventajas.

El objetivo principal de un lenguaje de esquema es especificar la estructura de un documento XML. Esto implica determinar qué elementos pueden estar anidados dentro de otros, qué atributos son válidos y cuáles no para un elemento en particular, etc. Un esquema es similar a la gramática de un idioma; define el vocabulario del idioma y qué constituye una "oración" válida.

Existen lenguajes de esquema XML históricos y actuales:

Las principales (véase también la lista de idiomas reconocidos por la norma ISO 19757 ) se describen a continuación.

Aunque existen varios lenguajes de esquema disponibles, los tres principales son las Definiciones de Tipo de Documento (DTP) , el Esquema XML del W3C y RELAX NG . Cada lenguaje tiene sus propias ventajas y desventajas.

Definiciones de tipos de documentos

Soporte de herramientas

Las DTD son quizás el lenguaje de esquema más ampliamente compatible con XML. Debido a que son uno de los primeros lenguajes de esquema para XML, definidos incluso antes de que XML tuviera soporte para espacios de nombres, cuentan con un amplio soporte. Las DTD internas suelen ser compatibles con los procesadores XML; las DTD externas lo son con menos frecuencia, aunque solo ligeramente. La mayoría de los analizadores XML de gran tamaño, aquellos que admiten múltiples tecnologías XML, también ofrecen soporte para DTD.

Esquema XML del W3C

Ventajas sobre los DTD

Entre las características disponibles en XSD que faltan en DTD se incluyen:

  • Los nombres de los elementos y atributos tienen en cuenta el espacio de nombres.
  • Se pueden definir restricciones ("tipos simples") para el contenido textual de elementos y atributos, por ejemplo, para especificar que sean numéricos o contengan fechas. Se proporciona un amplio repertorio de tipos simples de forma estándar, y a partir de estos se pueden derivar tipos adicionales definidos por el usuario, por ejemplo, especificando rangos de valores, expresiones regulares o enumerando los valores permitidos.
  • Las herramientas para definir restricciones de unicidad e integridad referencial son más potentes: a diferencia de las restricciones ID e IDREF en las DTD, pueden tener un alcance de cualquier parte de un documento, pueden ser de cualquier tipo de datos , pueden aplicarse tanto al contenido de elementos como de atributos y pueden ser de varias partes (por ejemplo, la combinación de nombre y apellido debe ser única).
  • Muchos requisitos que tradicionalmente se gestionan mediante entidades de parámetros en DTD cuentan con soporte explícito en XSD: por ejemplo, los grupos de sustitución permiten que un único nombre (como "block" o "inline") haga referencia a toda una clase de elementos; los tipos complejos permiten que varios elementos compartan (o adapten mediante restricción o extensión) el mismo modelo de contenido; y los grupos de modelos y los grupos de atributos permiten definir y reutilizar partes comunes de los modelos de componentes en un solo lugar.
  • XSD 1.1 añade la capacidad de definir aserciones arbitrarias (mediante expresiones XPath ) como restricciones sobre el contenido de los elementos.

Los esquemas XSD se escriben convencionalmente como documentos XML, por lo que se pueden utilizar herramientas de edición y transformación habituales.

Además de la validación, XSD permite anotar las instancias XML con información de tipo (el conjunto de información posterior a la validación del esquema (PSVI) ), diseñada para facilitar la manipulación de la instancia XML en los programas de aplicación. Esto puede lograrse mediante la asignación de los tipos definidos en XSD a tipos en un lenguaje de programación como Java (" enlace de datos ") o enriqueciendo el sistema de tipos de lenguajes de procesamiento XML como XSLT y XQuery (conocido como "conciencia del esquema").

Similitudes con RELAX NG

RELAX NG y el esquema XML del W3C permiten mecanismos de especificidad similares. Ambos admiten cierto grado de modularidad en sus lenguajes, incluyendo, por ejemplo, la posibilidad de dividir el esquema en varios archivos. Además, ambos se definen, o pueden definirse, en un lenguaje XML.

Ventajas sobre RELAX NG

RELAX NG no tiene ningún equivalente a PSVI . A diferencia del esquema XML del W3C, RELAX NG se diseñó de manera que la validación y la ampliación (agregar información de tipo y valores predeterminados) estén separadas.

El esquema XML del W3C dispone de un mecanismo formal para adjuntar un esquema a un documento XML, mientras que RELAX NG evita intencionadamente dichos mecanismos por motivos de seguridad e interoperabilidad.

RELAX NG no tiene la capacidad de aplicar datos de atributos predeterminados a la lista de atributos de un elemento (es decir, cambiar el conjunto de información XML), mientras que el esquema XML de W3C sí la tiene. Nuevamente, este diseño es intencional y tiene como objetivo separar la validación y la ampliación. [ 9 ]

El esquema XML del W3C cuenta con un sistema de tipos simples integrado (xs:number, xs:date, etc., además de la derivación de tipos personalizados), mientras que RELAX NG tiene uno extremadamente simple, ya que está diseñado para usar bibliotecas de tipos desarrolladas independientemente de RELAX NG, en lugar de crear las suyas propias. Algunos consideran esto una desventaja. En la práctica, es común que un esquema RELAX NG utilice los tipos simples y las restricciones predefinidas (patrón, longitud máxima, etc.) del esquema XML del W3C.

En el esquema XML del W3C se puede expresar un número o rango específico de repeticiones de patrones, mientras que en RELAX NG (<oneOrMore> o <zeroOrMore>) prácticamente no es posible especificar nada.

Desventajas

El esquema XML del W3C es complejo y difícil de aprender, aunque eso se debe en parte a que intenta hacer algo más que una simple validación (véase PSVI ).

Si bien estar escrito en XML es una ventaja, también presenta algunas desventajas. El lenguaje de esquema XML del W3C, en particular, puede ser bastante extenso, mientras que un DTD puede ser conciso y relativamente fácil de editar.

Asimismo, el mecanismo formal de WXS para asociar un documento con un esquema puede plantear un problema de seguridad potencial. Para los validadores de WXS que siguen una URI a una ubicación en línea arbitraria, existe la posibilidad de leer algo malicioso desde el otro extremo del flujo. [ 10 ]

El esquema XML del W3C no implementa la mayor parte de la funcionalidad de DTD para proporcionar elementos de datos a un documento.

Si bien la capacidad del esquema XML del W3C para agregar atributos predeterminados a los elementos es una ventaja, también presenta algunas desventajas. Esto significa que un archivo XML podría no ser utilizable sin su esquema, incluso si el documento se validara según dicho esquema. En efecto, todos los usuarios de un documento XML de este tipo deben implementar la especificación del esquema XML del W3C, lo que excluye a los analizadores XML minimalistas o más antiguos. Además, puede ralentizar el procesamiento del documento, ya que el procesador podría tener que descargar y procesar un segundo archivo XML (el esquema); sin embargo, un esquema normalmente se almacena en caché, por lo que el costo solo se produce en el primer uso.

Soporte de herramientas

Varios paquetes de análisis XML de gran tamaño ofrecen compatibilidad con WXS. Tanto Xerces como la biblioteca de clases base de .NET Framework brindan soporte para la validación WXS.

RELAX NG

RELAX NG ofrece la mayoría de las ventajas que el esquema XML del W3C ofrece sobre los DTD.

Ventajas sobre el esquema XML del W3C

Si bien el lenguaje RELAX NG se puede escribir en XML, también cuenta con una sintaxis equivalente que se asemeja mucho más a un DTD, pero con mayor capacidad de especificación. Esta sintaxis se conoce como sintaxis compacta. Las herramientas permiten convertir fácilmente entre ambas sin pérdida de funcionalidades ni necesidad de comentarios. Incluso los elementos arbitrarios especificados entre elementos XML de RELAX NG pueden convertirse a la sintaxis compacta.

RELAX NG ofrece un soporte muy sólido para contenido no ordenado. Es decir, permite que el esquema indique que una secuencia de patrones puede aparecer en cualquier orden.

RELAX NG también permite modelos de contenido no deterministas. Esto significa que RELAX NG permite especificar una secuencia como la siguiente:

<zeroOrMore> <ref name= "odd" /> <ref name= "even" /> </zeroOrMore> <optional> <ref name= "odd" /> </optional>

Cuando el validador encuentra algo que coincide con el patrón "odd", se desconoce si se trata de la última referencia "odd" opcional o simplemente de una en la secuencia zeroOrMore sin examinar los datos con antelación. RELAX NG permite este tipo de especificación. El esquema XML del W3C requiere que todas sus secuencias sean completamente deterministas, por lo que mecanismos como el anterior deben especificarse de otra manera o bien omitirse por completo.

RELAX NG permite que los atributos se traten como elementos en los modelos de contenido. En particular, esto significa que se puede proporcionar lo siguiente:

<element name= "some_element" > <choice> <attribute name= "has_name" > <value> false </value> </attribute> <group> <attribute name= "has_name" > <value> true </value> </attribute> <element name= "name" ><text /></element> </group> </choice> </element>

Este bloque indica que el elemento "some_element" debe tener un atributo llamado "has_name". Este atributo solo puede tomar los valores verdadero o falso, y si es verdadero, el primer elemento hijo debe ser "name", que almacena texto. Si "name" no necesitara ser el primer elemento, la opción podría incluirse dentro de un elemento "interleave" junto con otros elementos. El orden de especificación de los atributos en RELAX NG no tiene importancia, por lo que este bloque no tiene por qué ser el primero en la definición del elemento.

El esquema XML del W3C no puede especificar tal dependencia entre el contenido de un atributo y los elementos secundarios.

La especificación de RELAX NG solo enumera dos tipos integrados (cadena y token), pero permite definir muchos más. En teoría, la falta de una lista específica permite que un procesador admita tipos de datos muy específicos del dominio del problema.

La mayoría de los esquemas RELAX NG se pueden convertir algorítmicamente a esquemas XML del W3C e incluso a DTD (excepto cuando se utilizan características de RELAX NG no compatibles con esos lenguajes, como se mencionó anteriormente). Lo contrario no es posible. Por lo tanto, RELAX NG puede utilizarse como una versión normativa del esquema, y ​​el usuario puede convertirlo a otros formatos para herramientas que no lo admiten.

Desventajas

La mayoría de las desventajas de RELAX NG se tratan en la sección sobre las ventajas del esquema XML del W3C frente a RELAX NG.

Si bien la capacidad de RELAX NG para admitir tipos de datos definidos por el usuario es útil, tiene la desventaja de contar únicamente con dos tipos de datos en los que el usuario puede confiar. En teoría, esto significa que usar un esquema RELAX NG en varios validadores requiere proporcionar esos tipos de datos definidos por el usuario a dicho validador o usar solo los dos tipos básicos. Sin embargo, en la práctica, la mayoría de los procesadores RELAX NG admiten el conjunto de tipos de datos del esquema XML del W3C.

Esquema

Schematron es un lenguaje de esquema bastante inusual. A diferencia de los tres principales, define la sintaxis de un archivo XML como una lista de reglas basadas en XPath . Si el documento cumple estas reglas, entonces es válido.

Ventajas

Debido a su naturaleza basada en reglas, Schematron ofrece una especificidad muy marcada. Puede requerir que el contenido de un elemento esté controlado por uno de sus elementos hermanos. También puede solicitar o exigir que el elemento raíz, independientemente de cuál sea, tenga atributos específicos. Incluso puede especificar relaciones obligatorias entre varios archivos XML.

Desventajas

Si bien Schematron maneja bien las estructuras relacionales, su capacidad para especificar la estructura básica de un documento, es decir, qué elementos pueden ir dónde, da como resultado un esquema muy extenso.

La solución habitual consiste en combinar Schematron con RELAX NG o W3C XML Schema. Existen varios procesadores de esquemas disponibles para ambos lenguajes que admiten esta combinación. Esto permite que las reglas de Schematron especifiquen restricciones adicionales a la estructura definida por W3C XML Schema o RELAX NG.

Soporte de herramientas

La implementación de referencia de Schematron es, en realidad, una transformación XSLT que convierte el documento Schematron en una cadena XSLT que valida el archivo XML. Por lo tanto, Schematron puede utilizar cualquier procesador XSLT, aunque libxml2 ofrece una implementación que no requiere XSLT. El validador de esquemas múltiples para Java de Sun Microsystems incluye un complemento que permite validar esquemas RELAX NG con reglas Schematron integradas.

Lenguaje de enrutamiento de espacios de nombres (NRL)

Técnicamente, esto no es un lenguaje de esquema. Su único propósito es dirigir partes de documentos a esquemas individuales según el espacio de nombres de los elementos encontrados. Un NRL es simplemente una lista de espacios de nombres XML y la ruta al esquema correspondiente. Esto permite que cada esquema se ocupe únicamente de su propia definición de lenguaje, y el archivo NRL dirige al validador de esquemas al archivo de esquema correcto según el espacio de nombres de dicho elemento.

Este formato XML es independiente del lenguaje de esquema y funciona con prácticamente cualquier lenguaje de esquema.

Terminología

Uso de mayúsculas en la palabra "esquema" : existe cierta confusión sobre cuándo usar la palabra "Esquema" con mayúscula inicial y cuándo con minúscula. La forma en minúscula es un término genérico que puede referirse a cualquier tipo de esquema, incluyendo DTD, XML Schema (también conocido como XSD), RELAX NG u otros, y siempre debe escribirse con minúscula, excepto cuando aparece al principio de una oración. La forma "Esquema" (con mayúscula inicial) de uso común en la comunidad XML siempre se refiere a W3C XML Schema .

Opciones de creación de esquemas

La definición del esquema se centra en la estructura y la semántica de los documentos. Sin embargo, el diseño de esquemas, al igual que el diseño de bases de datos, programas informáticos y otras construcciones formales, también implica numerosas consideraciones de estilo, convención y legibilidad. Se pueden encontrar análisis exhaustivos sobre cuestiones de diseño de esquemas en (por ejemplo) Maler (1995) [ 11 ] y DeRose (1997) [ 12 ] .

Consistencia
Una consideración obvia es que las etiquetas y los nombres de los atributos deben usar convenciones consistentes. Por ejemplo, sería inusual crear un esquema donde algunos nombres de elementos estén en formato camelCase , pero otros usen guiones bajos para separar partes de los nombres, u otras convenciones.
Nombres claros y mnemotécnicos
Como en otros lenguajes formales, una buena elección de nombres puede facilitar la comprensión, aunque los nombres en sí mismos no tengan un significado formal. Nombrar la etiqueta apropiada como "capítulo" en lugar de "tag37" ayuda al lector. Sin embargo, esto plantea cuestiones relativas a la elección del lenguaje natural. Un esquema que se utilice para documentos en gaélico irlandés probablemente empleará el mismo idioma para los nombres de elementos y atributos, ya que será el idioma común a editores y lectores.
Elección de etiquetas frente a elección de atributos
Cierta información puede encajar fácilmente tanto en un elemento como en un atributo. Dado que los atributos no pueden contener elementos en XML, esta cuestión solo surge para componentes que no poseen una subestructura que XML deba tener en cuenta (los atributos admiten múltiples tokens, como varios valores IDREF, lo que puede considerarse una excepción). Los atributos suelen representar información asociada a la totalidad del elemento al que pertenecen, mientras que los subelementos introducen un nuevo ámbito propio.
Contenido de texto
Algunos esquemas XML, en particular los que representan distintos tipos de documentos , garantizan que todo el "contenido de texto" (aproximadamente, cualquier parte que se leería en voz alta) aparezca como texto y nunca como atributo. Sin embargo, existen muchos casos excepcionales en los que esto no se cumple: primero, hay documentos XML que no utilizan "lenguaje natural" en absoluto, o solo mínimamente, como en el caso de la telemetría, la creación de gráficos vectoriales o fórmulas matemáticas, etc. Segundo, información como las acotaciones escénicas en obras de teatro, la numeración de los versos en obras clásicas y bíblicas, y la corrección o normalización de la ortografía en obras transcritas, plantean problemas de interpretación que los diseñadores de esquemas para estos géneros deben tener en cuenta.
Reutilización de esquemas
Se puede desarrollar un nuevo esquema XML desde cero o reutilizar fragmentos de otros esquemas XML . Todos los lenguajes de esquemas ofrecen herramientas (por ejemplo, includecontrol de modularización sobre los espacios de nombres) y recomiendan la reutilización cuando sea práctico. Diversas partes de los esquemas de la extensa y sofisticada Iniciativa de Codificación de Texto (TEXCI) también se reutilizan en una extraordinaria variedad de otros esquemas.
Semántico vs. sintáctico
A excepción de uno relacionado con RDF, ningún lenguaje de esquema expresa formalmente la semántica, sino únicamente la estructura y los tipos de datos. Si bien sería lo ideal, la inclusión de supuestos de RDF es muy deficiente y no se recomienda en los marcos de desarrollo de esquemas .

Véase también

Idiomas:

Referencias

  1. "Esquema XML Parte 1: Estructuras Segunda Edición" . www.w3.org . Consultado el 13 de noviembre de 2025 .
  2. Marconi, Michael; Nentwich, Christian, eds. (31 de enero de 2004). "Especificación del lenguaje CLiX Versión 1.0" . Archivado del original el 9 de enero de 2015. Recuperado el 28 de marzo de 2015 .
  3. Bray, Tim; Frankston, Charles; Malhotra, Ashok, eds. (31 de julio de 1998). "Descripción del contenido del documento para XML: Envío al Consorcio World Wide Web" . Consorcio World Wide Web.
  4. 1 2 3 "Normas y proyectos bajo la responsabilidad directa de la Secretaría del Comité Técnico Conjunto ISO/IEC 1/SC 34" . Catálogo de normas ISO .
  5. Clark, James (13 de junio de 2003). "Lenguaje de enrutamiento de espacios de nombres (NRL)" . Centro de software de código abierto tailandés, Ltd.
  6. 1 2 "Normas de libre acceso" . ISO.
  7. Clark, James; Makoto, MURATA, eds. (3 de diciembre de 2001). "Especificación RELAX NG" . OASIS .
  8. Clark, James, ed. (21 de noviembre de 2002). "RELAX NG Compact Syntax" . OASIS .
  9. Si bien las anotaciones en RELAX NG pueden admitir valores de atributos predeterminados, la especificación RELAX NG no exige que un validador proporcione esta capacidad para modificar un conjunto de información XML como parte de la validación. La especificación WXS sí exige este comportamiento. Una especificación adicional asociada con RELAX NG proporciona esta capacidad. Consulte Compatibilidad de DTD de Relax NG (valor predeterminado) .
  10. James Clark (cocreador de RELAX NG). RELAX NG y el esquema XML del W3C. Archivado el 27 de septiembre de 2007 en Wayback Machine .
  11. Eve Maler y Jeanne El Andaloussi (1995). Developing SGML DTDs: From Text to Model to Markup . Prentice Hall PTR. ISBN 978-0133098815.
  12. DeRose, Steven. (1997). The SGML FAQ Book: Understanding the Foundation of HTML and XML . Kluwer Academic Publishers. ISBN 978-0792399438.
  • Análisis comparativo de seis lenguajes de esquema XML por Dongwon Lee, Wesley W. Chu, en ACM SIGMOD Record, vol. 29, n.° 3, págs. 76-87, septiembre de 2000.
  • Taxonomía de lenguajes de esquema XML utilizando la teoría del lenguaje formal por Makoto Murata, Dongwon Lee, Murali Mani, Kohsuke Kawaguchi, en ACM Trans. on Internet Technology (TOIT), Vol. 5, No. 4, páginas 1-45, noviembre de 2005.
  • Comparación de lenguajes de esquema XML por Eric van der Vlist (2001)
  • Aplicación del esquema XML en la seguridad de los servicios web, por Sridhar Guthula, Informe de experiencia sobre esquemas del W3C, mayo de 2005.
  • Artículo de DEVX de marzo de 2009 titulado "Llevando la validación XML al siguiente nivel: Presentación de CAM" por Michael Sorens. Archivado el 16 de marzo de 2012 en Wayback Machine.