Generador de XSD a partir de XML

Genera un esquema XSD inicial a partir de XML de ejemplo, con atributos y tipos de datos simples. Todas las apariciones de un elemento se fusionan en una sola declaración, y los espacios de nombres ajenos o el orden inestable de los hijos se señalan en los avisos; revisa el esquema antes de usarlo.

Se ejecuta localmente en tu navegador
Procesamiento local ·

Cómo generar un borrador XSD a partir de XML de ejemplo

Pega un documento XML representativo, o pulsa Cargar ejemplo para usar un catálogo pequeño, y pulsa Generar XSD. La herramienta fusiona todas las apariciones de un elemento en una sola declaración y devuelve un esquema inicial que puedes copiar o descargar como inferred-schema.xsd.

El documento lo analiza el analizador XML del navegador, así que solo el XML bien formado produce salida, y todo se queda en la página: sin subida, sin servicio de validación y sin peticiones a este sitio.

  1. Pega el XML en el editor Documento XML, o pulsa Cargar ejemplo para partir de una muestra conocida.
  2. Pulsa Generar XSD. Si el XML está mal formado, la ejecución se detiene y la línea de estado y los avisos indican la línea y la columna del primer error de análisis.
  3. Lee las métricas sobre la salida: declaraciones de elemento inferidas, líneas de entrada, tamaño del esquema generado y número de avisos.
  4. Lee los avisos: aparece una nota cuando los elementos hijos se repiten en un orden inestable, cuando la muestra usa más de un espacio de nombres o cuando lleva atributos con espacio de nombres.
  5. Pulsa Copiar o Descargar para llevarte inferred-schema.xsd, y Limpiar para vaciar el editor antes del siguiente documento.

Qué infiere la herramienta y qué deja fuera

Tipos y cardinalidad

Los tipos de valor siguen el texto de la muestra. Los literales true y false pasan a xs:boolean; los enteros con signo como 42, 0, 1, -7 o 007, a xs:integer; 3.5, .5 y 5., a xs:decimal; y 2026-08-29 junto con 2026-08-29T10:00:00Z, a xs:date y xs:dateTime. Todo lo demás — 0x1F, 1e3, TRUE — se queda en xs:string, porque esas grafías no pertenecen al espacio léxico de los tipos XSD anteriores.

La cardinalidad sigue las apariciones. Un hijo que se repite dentro de un elemento recibe maxOccurs="unbounded"; un hijo que falta en al menos una aparición de su padre recibe minOccurs="0". Las apariciones se fusionan en lugar de muestrearse, así que un segundo elemento tool que añade un atributo o un hijo amplía la declaración, y un elemento que aparece vacío en un sitio y con contenido en otro queda opcional.

Dos formas cambian el modelo de contenido. El texto que rodea a elementos hijos produce complexType mixed="true", y los hijos que se repiten en distinto orden — item, note, item — se convierten en un xs:choice maxOccurs="unbounded" en lugar de una secuencia, porque una secuencia rechazaría la propia muestra con la que se generó.

Espacios de nombres y atributos

Cuando el elemento raíz tiene un espacio de nombres, ese espacio pasa a ser el targetNamespace del esquema generado con elementFormDefault="qualified", de modo que el espacio de nombres de la muestra se conserva. Las declaraciones xmlns nunca se convierten en atributos.

Los elementos de otro espacio de nombres no pueden declararse en el mismo documento XSD. Se emiten como un comodín xs:any por espacio de nombres ajeno con processContents="lax", así la muestra sigue validando, y un aviso lo deja constancia. Los atributos con espacio de nombres, como xml:lang o xsi:type, tampoco pueden declararse por nombre; el tipo los acepta mediante xs:anyAttribute.

Los atributos simples se declaran sin espacio de nombres y como opcionales, con las mismas reglas de tipo que el texto de los elementos, y todas las apariciones de un atributo se fusionan igual que los hijos.

Qué no puede hacer el borrador

La página no puede comprobar el esquema generado contra tu XML: los navegadores no incluyen un validador XSD. Compila y prueba el archivo con un procesador XSD 1.0 — por ejemplo xmllint --schema, lxml o Saxon — y guarda la muestra como caso de regresión. Un esquema que acepta un documento puede quedarse corto para el siguiente: un elemento que aquí resultó opcional o un valor que solo parecía una fecha.

Solo se describe la muestra. Las restricciones (xs:key, xs:unique, xs:length, patrones), los comentarios y las importaciones para otros espacios de nombres no se infieren ni se inventan; añádelos a mano donde importen. La cardinalidad es una lectura de este documento, no una especificación: nada aquí afirma que un hijo deba aparecer en el tráfico real.

Herramientas recientes: