Fundamentos de XML Schema, JSON y YAML para la Estructuración de Datos

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 10,91 KB

XML Schema (XSD): Estructura y Validación de Documentos XML

El XML Schema o XSD define la estructura de un documento XML y permite validarlo. Surgió para mejorar las faltas de precisión que tenían las DTD. Esta mejora en la precisión hace que escribir XML Schemas sea más difícil, pero permite añadir restricciones más complejas. Siguen la sintaxis XML; para estar bien formados, deben cumplir las mismas reglas de sintaxis XML. Al ser documentos XML, hay que declararlos como tales.

Atributos del Elemento Raíz

  • xmlns:alias: Especifica el namespace (espacio de nombres) de donde provienen los elementos y tipos usados. Valor: http://www.w3.org/2001/XMLSchema-instance.
  • elementFormDefault: Se utiliza para declarar los elementos o atributos e indicar si se añade un espacio de nombres delante (qualified o unqualified).
  • targetNamespace: Especifica el espacio de nombres de los elementos definidos.
  • version: Indica la versión del esquema.
  • xsi:noNamespaceSchemaLocation: (Ejemplo: “hola.xsd”) Permite referenciar a un archivo con la definición de un esquema que no tiene ningún espacio de nombres asociado.

Capacidades del XML Schema

El uso de XSD permite definir:

  • Elementos y atributos que admite el XML.
  • Tipos de datos para los elementos y atributos.
  • Asignación de valores por defecto tanto a elementos como a atributos.
  • Cardinalidades.
  • Determinar las relaciones entre elementos: hijos, número y orden.

Ventajas de XSD

Las principales ventajas son: ofrecen soporte a tipos de datos con comprobación de si el contenido de una etiqueta es de tipo integer, date, etc.; permite añadir restricciones (indicar valores mínimos y máximos o determinar el patrón de una cadena válida) y permite usar espacios de nombres.

Elementos en XSD

Los elementos globales son hijos directos del elemento raíz, mientras que los locales son el resto.

Clasificación de Elementos

  • Elementos simples: Solo contienen texto; no tienen hijos ni atributos.
  • Elementos complejos: Tienen otros elementos y atributos. Su contenido puede ser:
    1. Simple.
    2. Complejo.
    3. Vacío: Sin texto ni hijos, pero con al menos un atributo.
    4. Mixto: Uno o más elementos de diferentes tipos y texto.

Referencias

Se realizan con el atributo ref y su valor es el nombre del elemento situado en la parte inferior, donde se especifica el tipo. Son útiles cuando un elemento tenga más de un atributo y para definir el tipo de un elemento.

Indicadores de Ocurrencias

Los atributos minOccurs y maxOccurs (opcionales) indican el mínimo y máximo número de ocurrencias del elemento. Por defecto, el valor de los atributos es 1. Para un número ilimitado de veces, se usa maxOccurs="unbounded". Se utiliza minOccurs="0" para que sean opcionales.

Restricciones (Facetas)

Se aplican restricciones a los posibles valores en diferentes aspectos:

  • Para un tipo simple: minInclusive, maxInclusive, minExclusive, maxExclusive, totalDigits, fractionDigits, length, minLength, maxLength, enumeration y pattern (estructura aceptada por una cadena).
  • Para tipo complejo: A mayores, se incluyen sequence y choice.

Tipos de Datos

  • xsd:byte: Entero de 8 bits.
  • short: 16 bits.
  • int: 32 bits.
  • long: 64 bits.
  • integer: Sin límite.
  • unsignedByte: Entero de 8 bits sin signo.
  • unsignedShort: 16 bits.
  • unsignedInt: 32 bits.
  • unsignedLong: 64 bits.
  • string: Cadena de texto que respeta espacios en blanco.
  • xsd:normalizedString: Los espacios en blanco se reemplazan por secuencias largas de espacios o fines de línea por un solo espacio.
  • xsd:date: Formato AAAA-MM-DD.
  • xsd:time: Formato HH:MM:SS.C.
  • xsd:datetime: Mezcla la fecha y la hora separando ambos campos con una T.
  • xsd:duration: Se indica con «P» y luego el número de años, meses, días, minutos o segundos (Ejemplo: «P1Y4M21DT8H»).
  • xsd:boolean, xsd:anyURI.
  • xsd:anyType: Es similar a la clase Object en Java. Será el tipo del cual heredaremos cuando no vayamos a usar ningún tipo especial como tipo padre.

Atributos

Todos los atributos pueden tomar por valor tipos simples. En cuanto un elemento tiene atributos, se considera de tipo complejo. Los tipos de declaración incluyen: fixed, default y use (optional, required).

Comentarios y Documentación

El elemento xs:annotation puede ser contenedor de:

  • xs:documentation: Comentarios para humanos (explicaciones, notas, ejemplos, etc.).
  • xs:appinfo: Información para aplicaciones (como validadores o herramientas que procesan el XML).

Usos de la Documentación

  • Permite que otros desarrolladores entiendan mejor qué hace el esquema.
  • Sirve para generar documentación automática desde el XSD.
  • Permite que programas especiales (como validadores o IDEs) lean instrucciones o metadatos.


JSON (JavaScript Object Notation)

JSON es un formato basado en texto estándar que representa datos estructurados en la sintaxis de objetos de JavaScript. Almacena información estructurada para transferir datos entre un servidor y un cliente, compartir información entre distintos sistemas de software y almacenar información en sistemas de persistencia. Es la principal alternativa a XML.

Estructuras de JSON

Se compone de dos estructuras:

  1. Una colección de pares de nombre/valor: Se implementa como un objeto, registro, estructura, diccionario, tabla hash, lista con clave o matriz asociativa.
  2. Una lista ordenada de valores: Se implementa como una matriz, vector, lista o secuencia.

Ventajas de JSON

  • Lectura de código fácil y expresiva para personas y máquinas.
  • Tamaño de archivos ligero.
  • Código basado en JavaScript, ideal para la web.
  • Los lenguajes disponen de funciones para interpretar y convertir datos en cadenas JSON.
  • Ideal para APIs web.
  • Se escribe en archivos de texto plano con codificación UTF-8, compatible con todos los sistemas.

Diferencias con XML

  • Sintaxis: Basada en pares clave-valor frente a etiquetas.
  • Legibilidad: Más limpio y legible en JSON; XML puede ser difícil de leer.
  • Tamaño: JSON es más ligero.
  • Facilidad de uso: JSON es fácil de parsear en diversos lenguajes.
  • Soporte de tipos: En JSON son nativos (string, number, boolean, object, array y null), mientras que en XML todo es texto y requiere conversión manual.
  • Orden: Presente en arrays de JSON y en elementos de XML.
  • Comentarios: JSON no admite comentarios; XML sí.
  • Uso: JSON es preferido para APIs web y configuración; XML para documentos complejos.

Reglas de JSON

Sigue las mismas reglas que JavaScript, pero adicionalmente:

  1. Todos los archivos representan o un objeto o una colección de elementos.
  2. Los archivos que representan objetos empiezan y terminan con { }.
  3. Los archivos que representan listas de valores comienzan y terminan con [ ].
  4. Se deben usar comillas dobles para encerrar cadenas y nombres de atributos.
  5. Cada elemento del objeto JSON se separa con coma, excepto el último.
  6. El archivo transferido debe estar codificado en UTF-8.


YAML (YAML Ain’t Markup Language)

YAML es un lenguaje de serialización de datos diseñado para ser leído y escrito por humanos, no es un lenguaje de marcado. Fue propuesto por Clark Evans a principios de 2001 a través de su página web http://yaml.org/. Se utiliza para la configuración y serialización de datos. Por su sintaxis clara y flexibilidad, es una excelente opción para desarrolladores y administradores de sistemas. Basa su funcionalidad en JSON, con líneas nuevas e indentación inspirada en Python. No permite tabulaciones literales.

Características de YAML

  • Es case sensitive (sensible a mayúsculas y minúsculas).
  • Extensiones .yaml o .yml.
  • No puede haber tabulaciones, solo espacios.
  • La sintaxis de mapeo es clave:valor (key:value).
  • Admite tipos de datos como caracteres, cadenas, números enteros, valores flotantes y colecciones (matrices o listas).
  • Los documentos comienzan con --- y terminan con ... si hay varios en un mismo archivo.

Ventajas

  • Más legible y sencillo de escribir que otros formatos.
  • Menos desorden sintáctico, lo que facilita la comprensión.
  • Formato muy ligero.

Desventajas

  • Espacios y sangrías: La necesidad de una correcta indentación puede ser un desafío si no se está acostumbrado a esta sintaxis.
  • No es el más eficiente en términos de tamaño y velocidad de análisis comparado con formatos binarios o JSON en ciertos contextos.

Entradas relacionadas: