¿Cómo generar documentos XML de muestra desde su DTD o XSD?


Estamos desarrollando una aplicación que implica una cantidad sustancial de transformaciones XML. No tenemos ningún dato de prueba de entrada adecuado per se, solo archivos DTD o XSD. Nos gustaría generar nuestros datos de prueba nosotros mismos a partir de estos archivos. ¿Hay una manera fácil / libre de hacer eso?

Editar

Aparentemente no hay herramientas gratuitas para esto, y estoy de acuerdo en que OxygenXML es una de las mejores herramientas para esto.

Author: lindelof, 2008-08-20

19 answers

Creo que el oxígeno ( http://www.oxygenxml.com / ) también lo hace, pero ese es otro producto comercial. Pero es una bonita... Lo recomiendo encarecidamente a cualquiera que haga mucho trabajo XML. Viene en un plugin Eclipse agradable, también.

Creo que hay una prueba gratuita de 30 días con todas las funciones.

 27
Author: levand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-26 14:05:46

En Visual Studio 2008 SP1 y posteriores, el Explorador de Esquemas XML {[2] } puede crear un documento XML con algunos datos básicos de muestra:

  1. Abra su documento XSD
  2. Cambiar al explorador de esquemas XML
  3. Haga clic derecho en el nodo raíz y elija "Generar Xml de muestra"

Captura de pantalla del Explorador de esquemas XML

 171
Author: Sam Warwick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-21 10:28:41

En las versiones recientes del IDE gratuito y de código abierto Eclipse puede generar documentos XML a partir de archivos DTD y XSD. Haga clic con el botón derecho en un * dado.dtd o *.archivo xsd y seleccione "Generar -> Archivo XML...". Puede elegir qué elemento raíz generar y si se deben generar atributos y elementos opcionales.

Por supuesto, también puede usar Eclipse para crear y editar sus archivos de esquema DTD y XSD. Y no es necesario instalar ningún plugin. Está incluido en el estándar distribución.

 120
Author: Florian Fankhauser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-17 08:58:04

Para los usuarios de Intellij Idea:

Echa un vistazo a Herramientas - > Acciones XML

introduzca la descripción de la imagen aquí

Parece funcionar muy bien (por lo que he probado).

Editar:

Como mencionó @naXa, ahora también puede hacer clic con el botón derecho en el archivo XSD y hacer clic en "Generar documento XML a partir del esquema XSD"..."

 28
Author: yamass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-06 18:08:26

El camprocessor disponible en Sourceforge.net generará casos de prueba xml para cualquier XSD. Hay un tutorial disponible para mostrarle cómo generar sus propios ejemplos de prueba, incluido el uso de sugerencias de contenido para garantizar ejemplos realistas, no solo basura aleatoria.

El tutorial está disponible aquí: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

Y más información sobre la herramienta, que utiliza el Ensamblaje de contenido OASIS Mechanism (CAM) estándar para refactorizar su XSD en una estructura más amigable con XSLT-se puede encontrar en el sitio web de recursos - http://www.jcam.org.uk

Disfruta, DW

 12
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-10 02:08:21

Puede utilizar el generador de instancias XML que forma parte del Validador de múltiples Esquemas de Sun/Oracle.

Es README.txt estados:

Sun XML Generator es una herramienta Java para generar varias instancias XML desde varios tipos de esquemas. Es compatible con DTD, RELAX Namespace, RELAX Core, TREX, y un subconjunto de W3C XML Schema Parte 1. [...]

Esta es una herramienta de línea de comandos que puede generar tanto válido como inválido instancias de esquemas. Se puede utilizar para generación de casos de prueba para XML aplicaciones que necesitan ajustarse a un esquema en particular.

Descargue y descomprima xmlgen.zip desde la página de descarga de msv y ejecute el siguiente comando para obtener instrucciones de uso detalladas:

java -jar xmlgen.jar -help

La herramienta parece ser liberada bajo una licencia BSD; el código fuente es accesible desde aquí

 9
Author: falko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-26 12:52:17

XMLSpy lo hace por usted, aunque no es gratis...

Creo que Liquid Xml Studio lo hace por usted y es gratuito, pero no lo he utilizado personalmente para crear datos de prueba.

 9
Author: SCdF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 08:11:03

Parece que nadie fue capaz de responder a la pregunta hasta ahora:)

Utilizo Moxy de EclipseLink para generar dinámicamente clases de enlace y luego recursivamente ir a través de los tipos de enlace. Es algo pesado, pero permite la inyección de valor XPath una vez que el árbol de objetos es instanciado:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps es un método recursivo bastante simple:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

Convertir todo a XML es bastante fácil:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
 7
Author: Michal Rames,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-02 02:45:18

También puede usar XMLPad (de uso gratuito) que se encuentra aquí http://www.wmhelp.com para generar sus muestras xml. Desde el menú: XSD - > generar archivo XML de muestra.

 6
Author: Pat B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 19:04:51

Microsoft ha publicado una herramienta de "generador de documentos" como ejemplo. Este es un artículo que describe la arquitectura y el funcionamiento de la aplicación de ejemplo con cierto detalle.

Si solo desea ejecutar la herramienta de generación de ejemplo, haga clic aquí e instale el MSI.

Es gratis. La fuente está disponible. Requiere que se ejecute. NET Framework. Solo funciona con XSDs. (no relajar NG o DTD).

 5
Author: Cheeso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-03 15:53:58

XML-XIG: Generador de instancias XML

Http://xml-xig.sourceforge.net/

Este código abierto sería útil.

 5
Author: rolandpeng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-25 07:30:06

Microsoft Office tiene 'InfoPath', que toma un XSD como importación y le permite definir rápida y fácilmente un editor basado en formularios para crear archivos XML. Tiene dos modos - uno donde se define el formulario, y otro modo donde se crea el archivo XML rellenando el formulario. Creo que llegó por primera vez con Office 2003, y la mayoría de la gente nunca lo instala. Me sorprende lo mucho que me gusta.

 4
Author: Kieveli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-21 14:29:33

XMLBlueprint 7.5 puede hacer lo siguiente: - generar xml de muestra de dtd - generar xml de muestra de relax ng esquema - generar xml de muestra a partir de xml schema

 1
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-12 08:55:47

La versión de código abierto de SoapUI puede generar solicitudes SOAP desde WSDL (que contiene definiciones de tipo XSD), por lo que parece que hay una implementación de código abierto de esta funcionalidad. Desafortunadamente, no he averiguado a qué biblioteca está acostumbrada.

 1
Author: otto.poellath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-26 12:06:26

Liquid XML Studio tiene un asistente XML Sample Generator que compilará archivos XML de muestra a partir de un esquema XML. Los datos resultantes parecen cumplir con el esquema (simplemente no puede generar datos para patrones de expresiones regulares).

Generar una muestra XML a partir de un XSD

 1
Author: Sprotty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 07:16:04

La biblioteca OpenXSD menciona que tienen soporte para generar instancias XML basadas en XSD. Mira eso.

 0
Author: Aravind R. Yarram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 05:56:37

Para completar voy a añadir http://code.google.com/p/jlibs/wiki/XSInstance , que se mencionó en una pregunta similar (pero específica de Java): ¿Alguna "API" de Java para generar XML de muestra desde XSD?

 0
Author: Marnix Klooster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:37

XML Blueprint también hace eso; instrucciones aquí

Http://www.xmlblueprint.com/help/html/topic_170.htm

No es gratis, pero hay una prueba gratuita de 10 días; parece rápido y eficiente; desafortunadamente es solo para Windows.

 0
Author: Bambax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-14 15:31:48

También hay http://xsd2xml.com/, un generador de XSD a XML en línea

 0
Author: Sphinxxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-16 13:43:03