Comment générer des exemples de documents XML à partir de leur DTD ou de leur XSD?

nous développons une application qui implique une quantité importante de transformations XML. Nous n'avons pas de données de test d'entrée appropriées en soi, seulement des fichiers DTD ou XSD. Nous aimerions générer nous-mêmes nos données de test à partir de ces fichiers. Est-il facile/moyen gratuit pour faire cela?

Modifier

Il n'y a apparemment pas d'outils gratuits pour cela, et je suis d'accord que OxygenXML est l'un des meilleurs outils pour cela.

172
demandé sur lindelof 2008-08-20 02:29:47

19 réponses

je pense oxygène ( http://www.oxygenxml.com / ) le fait aussi, mais c'est un autre produit commercial. C'est une agréable un seul, si... Je le recommande fortement à tous ceux qui font beaucoup de travail XML. Il est livré dans un plugin Eclipse agréable, aussi.

je crois qu'il y a un essai gratuit de 30 jours.

27
répondu levand 2008-08-26 14:05:46

Dans Visual Studio 2008 SP1 et plus tard le "151910920 de Schéma XML" Explorer peut créer un document XML avec certains de l'échantillon de base de données:

  1. ouvrir votre document XSD
  2. Changer de Schéma XML à Explorer
  3. cliquez avec le bouton droit de la souris sur le noeud racine et choisissez "Generate Sample Xml"

Screenshot of the XML Schema Explorer

171
répondu Sam Warwick 2011-09-21 10:28:41

dans les versions récentes de la source libre et ouverte Eclipse IDE vous pouvez générer des documents XML à partir de fichiers DTD et XSD. Droit-cliquez sur un *.dtd ou *.fichier xsd et sélectionnez " Générer - > fichier XML...". Vous pouvez choisir quel élément root générer et si les attributs et les éléments optionnels doivent être générés.

Bien sûr, vous pouvez utiliser Eclipse pour créer et éditer vos fichiers de schéma DTD et XSD, aussi. Et vous n'avez pas besoin d'installer de greffon. Il est inclus dans la distribution standard.

120
répondu Florian Fankhauser 2009-07-17 08:58:04

pour les utilisateurs D'idées Intellij:

consultez les outils -> Actions XML

enter image description here

semble très bien fonctionner (pour autant que j'ai testé).

Edit:

comme mentionné par @naXa, vous pouvez maintenant aussi faire un clic droit sur le fichier XSD et cliquer sur" Générer un document XML à partir du schéma XSD..."

28
répondu yamass 2018-01-06 18:08:26

le camprocesseur disponible sur Sourceforge.net va faire la génération de cas de Test xml pour n'importe quel XSD. Il y a un tutoriel disponible pour vous montrer comment générer vos propres exemples de test - y compris l'utilisation de conseils de contenu pour assurer des exemples réalistes, pas seulement des junk.

Le tutoriel est disponible ici: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

Et plus d'informations sur l'outil-qui utilise la norme OASIS Content Assembly Mechanism (CAM) pour transformer votre XSD en une structure plus conviviale XSLT - peut être trouvé sur le site de la ressource - http://www.jcam.org.uk

Profiter de, DW

12
répondu 2008-11-10 02:08:21

vous pouvez utiliser le Générateur D'instances XML qui fait partie du Sun/Oracle Multi-Schema Validator .

C'est README.txt déclare:

Sun XML Generator est un outil Java pour générer diverses instances XML à partir plusieurs types de schémas. Il supporte DTD, RELAX Namespace, RELAX Core, TREX, et un sous-ensemble de la partie 1 du schéma XML du W3C. [...]

il s'agit d'un outil en ligne de commande qui peut générer à la fois valide et invalide les instances à partir de schémas. Il peut être utilisé pour générer des cas de test pour XML les applications qui doivent se conformer à un schéma.

Télécharger et décompresser xmlgen.zip de la msv page de téléchargement de et exécutez la commande suivante pour obtenir des instructions d'utilisation:

java -jar xmlgen.jar -help

L'outil semble être libérés sous licence BSD; le code source est accessible à partir de ici

9
répondu falko 2012-10-26 12:52:17

XMLSpy fait cela pour vous, bien que ce ne soit pas gratuit...

je crois que le Liquid Xml Studio le fait pour vous et qui est gratuite, mais je n'ai pas personnellement utilisé pour créer des données de test.

9
répondu SCdF 2016-09-09 08:11:03

Semble que personne n'a été en mesure de répondre à la question jusqu'à présent :)

j'utilise Moxy D'EclipseLink pour générer dynamiquement des classes de liaison et ensuite passer récursivement à travers les types liés. Il est un peu lourd, mais il permet l'injection de valeur XPath une fois que l'arbre d'objet est instancié:

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);

Traversesprops est une méthode de récursion assez 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 tout en XML est assez facile:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
7
répondu Michal Rames 2011-06-02 02:45:18

vous pouvez également utiliser XMLPad (libre d'utilisation) trouvé ici http://www.wmhelp.com pour générer vos échantillons xml. À partir du menu : xsd -> générer un fichier XML d'exemple.

6
répondu Pat B 2016-01-04 19:04:51

Microsoft a publié un outil" générateur de document " comme un exemple. il s'agit d'un article qui décrit l'architecture et le fonctionnement de l'application échantillon en détail.

si vous voulez juste exécuter l'outil de génération d'échantillon, Cliquez ici et installez le MSI.

c'est gratuit. La source est disponible. Nécessite l'exécution du Framework .NET. Fonctionne uniquement avec XSDs. (pas de relaxation NG ou DTD).

5
répondu Cheeso 2009-06-03 15:53:58

XML-XIG: générateur D'Instance XML

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

Cette opensource serait utile.

5
répondu rolandpeng 2011-02-25 07:30:06

Microsoft Office has ' InfoPath ", qui prend un XSD comme import et vous permet de définir rapidement et facilement un éditeur de formulaires basé pour la création de fichiers XML. Il a deux modes - un où vous définissez le formulaire, et un autre où vous créez le fichier XML en remplissant le formulaire. Je crois que C'est arrivé avec Office 2003, et la plupart des gens ne l'installent jamais. Ça me choque à quel point j'aime ça.

4
répondu Kieveli 2009-05-21 14:29:33

XMLBlueprint 7.5 peut faire ce qui suit: - générer un exemple de xml à partir de la dtd - générer un exemple de xml à partir du schéma relax ng - générer un exemple de xml à partir du schéma xml

1
répondu Peter 2010-03-12 08:55:47

la Version open source de SoapUI peut générer des requêtes SOAP à partir de WSDL (qui contient des définitions de type XSD), il semble donc qu'il existe une implémentation open source de cette fonctionnalité. Malheureusement, je ne sais pas quelle Bibliothèque est habituée à ça.

1
répondu otto.poellath 2010-11-26 12:06:26

Liquid XML Studio a un générateur D'échantillon XML assistant qui construira des fichiers XML d'échantillon à partir d'un schéma XML. Les données résultantes semblent être conformes au schéma (il ne peut tout simplement pas générer de données pour les modèles regex).

Generate an XML Sample from an XSD

1
répondu Sprotty 2017-03-07 07:16:04

la bibliothèque OpenXSD mentionne qu'elle dispose d'un support pour générer des instances XML basées sur XSD. Vérifier que les.

0
répondu Aravind R. Yarram 2011-12-19 05:56:37

pour être complet, j'ajouterai http://code.google.com/p/jlibs/wiki/XSInstance , qui a été mentionné dans une question similaire (mais spécifique à Java): toute API Java "pour générer un exemple de XML à partir de XSD?

0
répondu Marnix Klooster 2017-05-23 12:34:37

XML Blueprint fait aussi cela; instructions ici

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

ce n'est pas gratuit, mais il ya un essai gratuit de 10 jours; il semble rapide et efficace; malheureusement, il est Windows seulement.

0
répondu Bambax 2012-10-14 15:31:48

il y a aussi http://xsd2xml.com/ , un générateur XSD à XML en ligne

0
répondu Sphinxxx 2018-06-16 13:43:03