Generador XSD

Generar esquema XML a partir de ejemplos

code

Documento XML (Entrada)

1
description

Esquema XSD (Salida)

Proporcione una entrada XML y haga clic en "Generar esquema XSD" para ver el resultado aquí.
Entendiendo Esquemas XSD
TL;DR

XSD describe formalmente la estructura, el contenido y las restricciones de un documento XML. Es el plano que define qué elementos, atributos y tipos de datos están permitidos.

¿Qué es XSD?

XSD (XML Schema Definition) es un estándar del W3C para describir la estructura y las restricciones de documentos XML. Piense en él como un contrato: el XSD define qué elementos, atributos y tipos de datos están permitidos, y un validador XML verifica si un documento dado cumple con el contrato.

Antes de XSD, los desarrolladores usaban DTDs (Document Type Definitions) para describir la estructura XML. Los DTDs eran simples pero limitados: no podían expresar tipos de datos (el contenido de un elemento era simplemente “texto”), no podían definir restricciones complejas y usaban una sintaxis no-XML. XSD fue creado para abordar todas estas limitaciones mientras se expresaba en XML mismo.

XSD es fundamental para la integración empresarial. Impulsa los servicios web SOAP (los archivos WSDL hacen referencia a esquemas XSD), los estándares de mensajería financiera como ISO 20022 y SWIFT MX, los estándares de salud como HL7 CDA y los formatos de intercambio de datos gubernamentales en todo el mundo.

Elementos y tipos complejos

Los esquemas XSD se construyen a partir de dos conceptos fundamentales: elementos y tipos.

Una declaración de elemento define un dato con nombre que puede aparecer en un documento XML:

<xs:element name="email" type="xs:string"/>

Un tipo complejo define un elemento que contiene elementos hijos o atributos:

<xs:complexType name="PersonType">
  <xs:sequence>
    <xs:element name="firstName" type="xs:string"/>
    <xs:element name="lastName" type="xs:string"/>
    <xs:element name="email" type="xs:string" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>

Los compositores (xs:sequence, xs:choice, xs:all) controlan cómo aparecen los elementos hijos:

  • xs:sequence — Los hijos deben aparecer en el orden especificado
  • xs:choice — Exactamente uno de los hijos debe aparecer
  • xs:all — Todos los hijos deben aparecer, pero en cualquier orden
XML to XSD Schema Mapping A simple XML document on the left with person, name, and age elements, mapped with arrows to corresponding XSD declarations on the right. XML Document <person> <name> Alice </name> <age> 30 </age> </person> XSD Schema <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element>

Tipos de datos incorporados

XSD proporciona un rico conjunto de tipos de datos incorporados que van mucho más allá del enfoque de DTD de “todo es texto”:

TipoDescripciónValores de ejemplo
xs:stringTexto Unicode"Hello", "Cafe\u0301"
xs:integerNúmero entero (sin límite)42, -7, 0
xs:decimalNúmero decimal exacto3.14, -0.001
xs:booleanVerdadero o falsotrue, false, 1, 0
xs:dateFecha de calendario (ISO 8601)2024-03-15
xs:dateTimeFecha y hora con zona horaria2024-03-15T14:30:00Z
xs:anyURIReferencia URIhttps://example.com

Puede restringir aún más estos tipos usando facetas — restricciones como minInclusive, maxInclusive, pattern, enumeration, minLength y maxLength. Por ejemplo, para definir una edad entre 0 y 150:

<xs:simpleType name="AgeType">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="150"/>
  </xs:restriction>
</xs:simpleType>

XSD vs DTD vs RELAX NG

CaracterísticaDTDXSDRELAX NG
SintaxisNo-XMLXMLXML o compacta
Tipos de datosNinguno44+ incorporadosExtensible
Espacios de nombresLimitadoSoporte completoSoporte completo
RestriccionesBásicasRicas (facetas, claves, identidad)Moderadas
Adopción industrialLegacyDominante (SOAP, ISO 20022)Nicho (DocBook, TEI)
ComplejidadBajaAltaMedia
Estándar W3CSí (XML 1.0)OASIS (ISO/IEC 19757-2)

DTD es el lenguaje de esquema XML original, definido como parte de la propia especificación XML 1.0. Usa una sintaxis no-XML y no tiene concepto de tipos de datos: todo el contenido de los elementos es simplemente texto. Los DTDs aún se usan en sistemas legacy y para declarar entidades, pero son inadecuados para las necesidades de validación modernas.

XSD es la respuesta del W3C a las limitaciones de DTD. Ofrece un sistema de tipos completo, soporte de espacios de nombres y mecanismos de restricción potentes. Sin embargo, su verbosidad y complejidad son críticas frecuentes: incluso esquemas simples pueden ser verbosos.

RELAX NG es una tercera opción que busca un punto intermedio: más potente que DTD, más simple que XSD. Ofrece tanto una sintaxis XML como una sintaxis compacta más legible. Aunque técnicamente superior en muchos aspectos, no ha alcanzado la dominancia de mercado de XSD y se usa principalmente en publicación (DocBook) y humanidades digitales (TEI).

Casos de uso comunes

  • Servicios web SOAP: Los archivos WSDL usan XSD para definir la estructura de los mensajes de solicitud y respuesta intercambiados entre servicios
  • Mensajería financiera (ISO 20022): El estándar global de mensajería financiera usa XSD para definir cada tipo de mensaje, desde la iniciación de pagos (pain.001) hasta los extractos de cuenta (camt.053)
  • Validación de configuración: Los archivos de configuración de aplicaciones en XML pueden validarse contra XSD para detectar errores antes del despliegue
  • Intercambio de datos: Las integraciones B2B usan XSD para formalizar el contrato entre socios comerciales, asegurando que ambas partes produzcan y consuman documentos conformes
  • Generación de código: Herramientas como JAXB (Java), xsd.exe (.NET) y xmlschema (Python) generan clases a partir de XSD, permitiendo el procesamiento XML con seguridad de tipos sin análisis manual

Prueba estos ejemplos

XSD simple que define una persona Válido

Un esquema XSD mínimo que define un elemento 'person' con elementos hijos requeridos 'name' (string) y 'age' (integer) en secuencia. Cualquier documento XML con una raíz <person> que contenga estos dos elementos en orden será válido.

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'><xs:element name='person'><xs:complexType><xs:sequence><xs:element name='name' type='xs:string'/><xs:element name='age' type='xs:integer'/></xs:sequence></xs:complexType></xs:element></xs:schema>
XML que viola el esquema Inválido

Este XML tiene la estructura correcta pero 'not-a-number' no es un xs:integer válido. El validador XSD rechazará este documento con una violación de restricción de tipo en el elemento 'age'.

<person><name>Alice</name><age>not-a-number</age></person>