partir - transformar xml xsd
¿Cómo generar documentos XML de muestra desde su DTD o XSD? (18)
Creo que Oxygen ( http://www.oxygenxml.com/ ) también lo hace, pero ese es otro producto comercial. Aunque es agradable, lo recomiendo encarecidamente a cualquiera que trabaje mucho con XML. Viene en un buen plugin de Eclipse, también.
Creo que hay una versión de prueba gratuita de 30 días.
Estamos desarrollando una aplicación que implica una gran cantidad de transformaciones XML. No tenemos datos de prueba de entrada adecuados per se, solo archivos DTD o XSD. Nos gustaría generar nuestros datos de prueba a partir de estos archivos. ¿Hay una manera fácil / gratuita 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.
El camprocessor disponible en Sourceforge.net hará la generación de 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 los basura al azar.
El tutorial está disponible aquí: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf
Y puede encontrar más información sobre la herramienta, que utiliza el estándar OASIS Content Assembly Mechanism (CAM) para refactorizar su XSD en una estructura más compatible con XSLT, en el sitio web de recursos: http://www.jcam.org.uk
Disfruta, DW
En Visual Studio 2008 SP1 y posterior, el Explorador de esquemas XML puede crear un documento XML con algunos datos de muestra básicos:
- Abra su documento XSD
- Cambiar a Explorador de esquemas XML
- Haga clic con el botón derecho en el nodo raíz y elija "Generar Xml de muestra"
En las versiones más recientes de Eclipse IDE de fuente abierta y gratuita, puede generar documentos XML a partir de archivos DTD y XSD. Haga clic derecho en un archivo * .dtd o * .xsd determinado y seleccione "Generar -> Archivo XML ...". Puede elegir qué elemento raíz generar y si se deben generar atributos y elementos opcionales.
Por supuesto, puede usar Eclipse para crear y editar sus archivos de esquema DTD y XSD. Y no necesita instalar ningún complemento. Está incluido en la distribución estándar.
La biblioteca OpenXSD menciona que tienen soporte para generar instancias XML basadas en el XSD. Mira eso.
La versión de código abierto de SoapUI puede generar solicitudes SOAP de 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 descubierto a qué biblioteca está acostumbrado.
Liquid XML Studio tiene un asistente XML Sample Generator que creará 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 regex).
Microsoft Office tiene '' InfoPath '', que toma un XSD como una 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 define el formulario y otro modo donde crea el archivo XML completando el formulario. Creo que primero llegó con Office 2003, y la mayoría de las personas nunca lo instalan. Me sorprende lo mucho que me gusta.
Microsoft ha publicado una herramienta de "generador de documentos" como muestra. Este es un artículo que describe la arquitectura y el funcionamiento de la aplicación de muestra con cierto detalle.
Si solo desea ejecutar la herramienta de generación de muestras, haga clic aquí e instale MSI.
Es gratis. La fuente está disponible. Requiere .NET Framework para ejecutarse. Funciona solo con XSD. (no Relax NG o DTD).
Para completar, agregaré 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?
Para los usuarios de Intellij Idea:
Eche un vistazo a Herramientas -> Acciones XML
Parece que funciona muy bien (por lo que he probado).
Editar:
Como mencionó @naXa, ahora también puede hacer clic derecho en el archivo XSD y hacer clic en "Generar documento XML desde el esquema XSD ..."
Parece que nadie fue capaz de responder la pregunta hasta el momento :)
Utilizo MOXy de EclipseLink para generar dinámicamente clases de enlace y luego recorrer recursivamente los tipos enlazados. Es algo pesado, pero permite la inyección de valor XPath una vez que se crea una instancia del árbol de objetos:
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 en XML es bastante fácil:
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
Puede usar XML Instance Generator, que es parte del validador Sun-Oracle Multi-Schema .
Son los estados README.txt:
Sun XML Generator es una herramienta de Java para generar varias instancias XML a partir de varios tipos de esquemas. Es compatible con DTD, RELAX Namespace, RELAX Core, TREX y un subconjunto de W3C XML Schema Part 1. [...]
Esta es una herramienta de línea de comandos que puede generar instancias válidas y no válidas a partir de esquemas. Se puede usar para generar casos de prueba para aplicaciones XML que necesitan ajustarse a un esquema particular.
Descargue y descomprima xmlgen.zip
de 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 lanzada bajo una licencia BSD; el código fuente es accesible desde here
También puede usar XMLPad (de uso gratuito) que se encuentra aquí http://www.wmhelp.com para generar sus muestras de xml. Desde el menú: XSD -> generar archivo XML de muestra.
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 solo es Windows.
XML-XIG: generador de instancias XML
http://xml-xig.sourceforge.net/
Este código abierto sería útil.
XMLBlueprint 7.5 puede hacer lo siguiente: - generar xml de muestra desde dtd - generar xml de muestra desde el esquema de relax ng - generar xml de muestra desde el esquema xml
XMLSpy hace eso por usted, aunque eso no es gratis ...
Creo que Liquid Xml Studio lo hace por usted y es gratis, pero no lo he usado personalmente para crear datos de prueba.