Generador de XML a XSD
Pega uno o varios documentos XML de ejemplo y obtén un XML Schema (XSD 1.0) que los describe: estructura de elementos, tipos de datos como xs:int, xs:decimal y xs:date, qué elementos son opcionales o repetidos, los atributos y si son obligatorios, y el espacio de nombres de destino. Elige el diseño Russian doll, Salami slice o Venetian blind.
Última actualización:
Varios ejemplos del mismo formato dan un esquema mejor: los elementos que faltan en algunos ejemplos pasan a ser opcionales y los repetidos reciben maxOccurs="unbounded".
Estructura deducida
| Elemento | Tipo / contenido | Ocurrencias | Atributos |
|---|
Todo se genera en tu navegador; tu XML nunca se sube. Revisa el resultado: un esquema deducido de ejemplos solo conoce los valores que ha visto.
Cómo usar Generador de XML a XSD
- Pega un XML de ejemplo en el cuadro de la izquierda, abre uno o varios archivos .xml, o carga los dos ejemplos de catálogo de libros.
- Añade más ejemplos con + Añadir ejemplo: cuantos más documentos reales aportes, más precisos serán los elementos opcionales y repetidos.
- Elige un diseño de esquema y opciones como la detección de tipos, las enumeraciones y las anotaciones.
- Revisa el XSD y la tabla Estructura deducida; ajusta los tipos u ocurrencias que tus ejemplos no hayan podido revelar.
- Copia o descarga el esquema como archivo .xsd.
Cómo se asignan los valores de ejemplo a los tipos integrados de XSD
| Valores vistos | Tipo deducido | Notas |
|---|---|---|
true, false | xs:boolean | XSD también admite 1 y 0, pero se tipan como números para evitar coincidencias falsas. |
42, -7 | xs:int | Dentro de ±2,147,483,647; los valores mayores pasan a xs:long y después a xs:integer. |
44.95, .5 | xs:decimal | Decimal exacto, ideal para precios y cantidades. |
1.5E3, INF | xs:double | Se usa cuando los valores contienen un exponente o valores especiales. |
2024-05-01 | xs:date | Fecha ISO 8601, con zona horaria opcional. |
2024-05-01T09:30:00Z | xs:dateTime | Fecha y hora con fracción y zona horaria opcionales. |
14:30:00 | xs:time | La forma léxica de XSD exige los segundos. |
P3DT4H | xs:duration | Duraciones ISO 8601. |
https://…, mailto:… | xs:anyURI | Solo cuando todos los valores empiezan por un esquema de URI. |
00123, valores mixtos o vacíos | xs:string | Los ceros a la izquierda y las instancias vacías mantienen un tipo permisivo. |
Cómo usar el XSD generado
- Referéncialo desde el XML: declara el prefijo
xmlns:xsipara el espacio de nombres de instancia de XML Schema (http://www.w3.org/2001/XMLSchema-instance) en el elemento raíz y apunta al archivo con el atributoxsi:noNamespaceSchemaLocation(valor:catalog.xsd) cuando no hay espacio de nombres, o conxsi:schemaLocation(valor: el espacio de nombres, un espacio y luegocatalog.xsd) cuando lo hay. - Hazlo más estricto: añade facetas
maxLength,patternominInclusive, y convierte los conjuntos pequeños de valores fijos en enumeraciones (la opción Detectar enumeraciones los sugiere). - Genera código: el diseño Venetian blind produce tipos con nombre que se asignan limpiamente a clases en JAXB (
xjc), .NET (xsd.exe) y herramientas similares. - Valida documentos con el esquema usando xmllint (
xmllint --noout --schema catalog.xsdfile.xml) o tu IDE; ordena antes los archivos de ejemplo con el Formateador XML.
¿Trabajas con JSON? El Generador de JSON Schema hace lo mismo con documentos JSON.
Preguntas frecuentes
¿Cómo decide el generador el tipo de datos de un valor?
Examina todos los valores que tiene un elemento o atributo en todos los ejemplos. Si todos son true/false usa xs:boolean; si todos son números enteros, xs:int (o xs:long/xs:integer para valores grandes); los decimales pasan a xs:decimal; los valores ISO 8601 pasan a xs:date, xs:dateTime o xs:time; las URL pasan a xs:anyURI. Cualquier otra cosa, o una mezcla, es xs:string.
¿Por qué un número como 00123 se tipa como cadena?
Los ceros a la izquierda suelen indicar un identificador (código postal, número de cuenta o de producto) más que una cantidad. Tiparlo como entero haría que un validador aceptara 123 y que muchas herramientas perdieran los ceros, así que esos valores se quedan como xs:string.
¿Cómo se calculan minOccurs y maxOccurs?
Para cada elemento padre, la herramienta cuenta cuántas veces aparece cada hijo en cada instancia. Un hijo que falta en al menos una instancia recibe minOccurs="0"; un hijo que aparece más de una vez en alguna instancia recibe maxOccurs="unbounded". Los valores predeterminados (1) no se escriben.
¿Cuál es la diferencia entre Russian doll, Salami slice y Venetian blind?
Russian doll anida cada declaración dentro de su padre, lo que da un único elemento global compacto. Salami slice declara cada elemento de forma global y los enlaza con ref, lo que hace que los elementos sean reutilizables. Venetian blind declara tipos complejos con nombre (bookType, catalogType) y usa elementos locales, lo que va bien con generadores de código como JAXB y xsd.exe.
¿Puedo usar el esquema generado tal cual?
Tómalo como un primer borrador sólido. Solo conoce lo que contienen los ejemplos: un elemento opcional pero presente en todos tus ejemplos se marcará como obligatorio, y un campo que casualmente solo contenía números se tipará como número. Revisa los tipos y las ocurrencias antes de usar el esquema para validar.
¿Admite espacios de nombres?
Sí. El espacio de nombres del elemento raíz pasa a ser el targetNamespace con elementFormDefault="qualified". Los elementos de otros espacios de nombres se permiten mediante xs:any, y los atributos del estilo de xml:lang se referencian desde el esquema estándar del espacio de nombres XML.
¿Se sube mi XML?
No. El XML se analiza con el DOMParser integrado de tu navegador y el esquema se genera localmente. Tus archivos nunca salen de tu dispositivo.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.
Herramientas relacionadas
Ver todas las de Conversores de datos y formatos de archivo →