¿Alguna herramienta para generar un esquema XSD a partir de un documento de instancia XML? [cerrado]

146

Estoy buscando una herramienta que tome un documento de instancia XML y genere un esquema XSD correspondiente.

Ciertamente reconozco que el esquema XSD generado será limitado en comparación con la creación de un esquema a mano (probablemente no manejará elementos opcionales o repetitivos, o restricciones de datos), pero al menos podría servir como un punto de partida rápido.

Matt Dillard
fuente

Respuestas:

65

la herramienta de inferencia XSD de Microsoft es una buena solución gratuita. Muchas herramientas de edición de XML, como XmlSpy (mencionado por @Garth Gilmour) o OxygenXML Editor también tienen esa característica. Sin embargo, son bastante caros. BizTalk Server también tiene una herramienta de inferir XSD también.

editar: Acabo de descubrir la clase .net XmlSchemaInference , así que si estás usando .net deberías considerar eso

Danimal
fuente
1
¡Guau, meses después me señalaron una excelente solución para hacer una rápida conversión de XDR a XSD! ¡Gracias!
bethlakshmi
66
Me resultó difícil encontrar una descarga para esta herramienta (xsd.exe), pero ya estaba en mi sistema en C: \ Archivos de programa \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin. Solo pensé en compartir en caso de que eso ayude a alguien.
oob
2
En caso de que alguien no tenga instalado Visual Studio, aquí hay un enlace alternativo para descargar xsd: juliankay.com/development/download-xsd-exe
MD
55
El directorio parece xsd.exehaber cambiado en Windows 7. Lo tengo en muchos Microsoft SDKsdirectorios, entre las que este (por lo que no parece depender necesariamente de Visual Studio más?): C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools. Tuve que ejecutarlo en el directorio que contiene el xml, para evitar un error sobre "caracteres ilegales en la ruta", pero eso puede deberse al largo nombre de archivo que tengo.
Yahoo Serious
¿Alguien más tiene problemas para usar la herramienta de inferencia MS XSD, que genera una excepción OutOfMemoryException para un archivo XML de 200 MB con aún más de 8 GB de RAM libre?
Felipe Sabino
54

Puede usar una opción de código abierto y multiplataforma: inst2xsd de Apache's XMLBeans . Lo encuentro muy útil y fácil.

Simplemente descargue, descomprima y reproduzca (requiere Java).

Darío
fuente
gran consejo, que realmente me ayudó mucho, gracias!
IAdapter
2
OMG ¡Esto es mucho mejor que toda esa mierda de Powershell! ¡Especialmente porque no tenía un archivo XSD!
Chloe
3
funcionó como un encanto :: cd <xml_bean_bin_directory>; ./inst2xsd -design ss -simple-content-types smart -enumerations 4 <input_file.xml> -outDir <output_Directory>
diaryfolio
3
Tenga en cuenta que XMLBeans se ha trasladado a attic.apache.org , el hogar de los proyectos retirados de Apache. En otras palabras, no se ha actualizado desde 2012.
Magnilex
51

Trang es la mejor opción aquí. Código abierto y multiplataforma (aunque se requiere Java)

Desde el sitio web de Trang:

Trang convierte entre diferentes lenguajes de esquema para XML. Es compatible con los siguientes idiomas

  • RELAX NG (sintaxis XML)
  • Sintaxis compacta RELAX NG
  • DTD XML 1.0
  • Esquema XML W3C

Un esquema escrito en cualquiera de los lenguajes de esquema admitidos se puede convertir a cualquiera de los otros lenguajes de esquemas admitidos, excepto que W3C XML Schema se admite solo para salida, no para entrada.

Trang también puede inferir un esquema a partir de uno o más documentos XML de ejemplo.

Enlace de descarga

Derferman
fuente
Trang es también la herramienta integrada en OxygenXML para hacer su inferencia XSD desde uno o más documentos XMl. Al primer intento aquí parece funcionar bien.
redcalx
44
Si todo lo que necesita es generar xsd desde un archivo xml, trang es la mejor, más rápida y más fácil en mi humilde opinión.
kriver
2
La documentación de trang es un poco escasa. Para generar un esquema, ejecute $ trang file.xml schema.xsd.
Joe Mornin
en Windows: java -jar trang.jar file.xml schema.xsd
Alexey Obukhov
Tenía subestructuras que aparecen en la misma forma en varios lugares en mi muestra XML, Trang hizo un trabajo perfecto al detectar la repetición y generar un XSD mínimo, que es lo que necesitaba. ¡Muy agradable!
Tomislav Nakic-Alfirevic
17

En VS2010 si carga un archivo XML en el editor, haga clic en el menú XML >> Crear esquema.

Nathan Donnellan
fuente
3
Y en versiones superiores
Jay Jay Jay
12

También XML schema learnerestá disponible en Github .

Puede tomar múltiples archivos xml y extraer un XSD común de todos esos archivos .

edoriano
fuente
1
Tenga en cuenta que esta herramienta está escrita en PHP, por lo que no es trivial de configurar.
79E09796
55
@ 79E09796 Instalar un cli php con sudo apt-get install php5-cliy en ejecución ./learn --help--- Realmente no veo la diferencia entre eso y una herramienta escrita en java, python o ruby ​​:)
edorian
1
Acabo de probar en Windows, funcionó muy bien con PHP 5.4 sin ninguna instalación. Tanto el php como el XML Schema Learner se descomprimieron y ejecutaron usando las rutas completas;)
vak
pequeño comentario sobre el localitycampo: si se usa un nombre de campo en múltiples lugares en el XML que se refiere a diferentes elementos, localityse requiere un valor mayor que 1, por ejemplo, root/itemy se root/something/itemrefiere a diferentes tipos, entonces --locality 2se requiere como mínimo
shadi
10

Si tiene instalado .Net, una herramienta para generar esquemas y clases XSD ya está incluida de forma predeterminada.
Para mí, la herramienta XSD se instala bajo la siguiente estructura. Esto puede variar según el directorio de instalación.

C:\Program Files\Microsoft Visual Studio 8\VC>xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.

xsd.exe -
   Utility to generate schema or class files from given source.

xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]
xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]
xsd.exe <instance>.xml [/outputdir:]
xsd.exe <schema>.xdr [/outputdir:]

Normalmente, las clases y esquemas que genera esta herramienta funcionan bastante bien, especialmente si los va a consumir en un lenguaje .Net

Por lo general, tomo el documento XML que busco, lo empujo a través de la herramienta XSD con la /o:<your path>bandera para generar un esquema (xsd) y luego empujo el archivo xsd a través de la herramienta usando las /classes /L:VB (or CS) /o:<your path>banderas para obtener clases que puedo importar y usar en mis proyectos diarios .Net

Pat Hermens
fuente
6

Si todo lo que quiere es XSD, LiquidXML tiene una versión gratuita que hace XSD, y tiene una GUI para que pueda ajustar el XSD si lo desea. De todos modos, hoy en día escribo mis propios XSD a mano, pero todo gracias a esta aplicación.

http://www.liquid-technologies.com/

Robert Gould
fuente
4

si está trabajando en el mundo de Java, la idea de intelliJ también tiene un amplio soporte xml, que incluye la generación xsd y samle xml de la generación xsd, y con los complementos puede obtener depuradores xslt. - Especialmente bueno si planeas usar herramientas como jaxb después.

Andreas Petersson
fuente
2
Y esto también está disponible en la edición comunitaria gratuita de Idea.
lbalazscs
3

Altova XmlSpy lo hace bien: puede encontrar una descripción general aquí

Garth Gilmour
fuente