How to generate sample XML documents from their DTD or XSD?
Asked Answered
W

19

205

We are developing an application that involves a substantial amount of XML transformations. We do not have any proper input test data per se, only DTD or XSD files. We'd like to generate our test data ourselves from these files. Is there an easy/free way to do that?

Edit

There are apparently no free tools for this, and I agree that OxygenXML is one of the best tools for this.

Wire answered 19/8, 2008 at 22:29 Comment(2)
I fail to see answers for this questions which do not fit the Q&A format, or solicit debate, arguments, polling, or extended discussionUnitarian
Eclipse is a free solution to this problemBurnard
L
31

I think Oxygen (http://www.oxygenxml.com/) does it as well, but that's another commerical product. It's a nice one, though... I'd strongly recommend it for anyone doing a lot of XML work. It comes in a nice Eclipse plugin, too.

I do believe there is a free, fully-featured 30 day trial.

Llamas answered 26/8, 2008 at 14:5 Comment(3)
I have an bunch of XSDs which in turn inherits schema's from different XSD's and I need to generate an XML file for testing purpose from this XSD, am using oxygenXML to do this but when I try to do it, it is not working for me and it says please define root node but than it does not allow me to do so. So if anyone had worked with oxygenXML do suggest of what could be way around for this ?Trio
Thanks leveland. This answered my question as well! If you would like to come answer my question: #7041888, I would be more than happy to mark yours as the answer.Suture
I have tried many options for this and have found Oxygen to be the best. It is commercial but does offer a free trial. I have used this to generate XMLs from the most bloated schema ever: DDEX ERN and it worked great. The others couldn't do it.Centner
T
186

In Visual Studio 2008 SP1 and later the XML Schema Explorer can create an XML document with some basic sample data:

  1. Open your XSD document
  2. Switch to XML Schema Explorer
  3. Right click the root node and choose "Generate Sample Xml"

Screenshot of the XML Schema Explorer

Tidewater answered 3/9, 2008 at 14:41 Comment(11)
yes, this is the easiest way. Open XSD, switch to XML Schema Explorer, select the root node, right click and choose "Generate Sample Xml".Prohibitive
I used this with VS2008, but I can't find this in VS2010. Can anybody confirm that this still exists?Gates
Same as Simon: I can’t find this in VS2010 either. According to MSDN, it should still be there, but it just won't show up anywhere in the UI... :-(Isothermal
@Simon: you only get the "Generate Sample XML" when you right click one of the elements in the schema explorer. Elements are depicted graphically via the green left/right angle brackets: "<>". You are probably right clicking a type, and the generate message will only generate it for elements (which makes sense).Darling
XML Schema Explorer is not present in Visual Studio 2013 for Web neither. VS2013 Community does have it.Tichon
Note that you do need VS 2008 SP1 for this to work. I was running on a vanilla VS 2008, and XML Schema Overview did not appear on my View menu. After applying SP1 I was able to open a .xsd and have the Schema view appear automatically.Iodate
Not available in Visual Studio Code (as of early 2016), but there in Visual Studio 2015 Community on Windows.Sexpot
Unfortunately where there's an xsd:choice in the xsd it only picks one, so it's a pretty anaemic example.Collaborative
@TimAbell , if it's xsd:choice then an example xml file can only contain one of that choice. msdn.microsoft.com/en-us/library/ms256109(v=vs.110).aspxManos
Visual Studio Community 2017 still has this feature.Chelsea
@RokT. it does, but it's not able to generate a valid XML for me. The generated file immediately has a warning. The value -99 is obviously not valid for a NonNegativeInteger...Champollion
L
134

In recent versions of the free and open source Eclipse IDE you can generate XML documents from DTD and XSD files. Right-click on a given *.dtd or *.xsd file and select "Generate -> XML File...". You can choose which root element to generate and whether optional attributes and elements should be generated.

Of course you can use Eclipse to create and edit your DTD and XSD schema files, too. And you don't need to install any plugins. It is included in the standard distribution.

Latency answered 17/7, 2009 at 8:33 Comment(11)
Thanks! Eclipse is free, and this was the perfect solution.Overcash
Do you guys happen to know what Eclipse feature provides this functionality? My "Generate" submenu has "JAXB Classes" as the only item.Stonework
You need to install the Web Tools Project (look under Help->Install New Software) to get these options.Schnur
Eclipse seems like a good option, but I could not get the generation to follow imported XSDs. For example, if I had an XSD describing 3 elements, and one of those was a complexType that was defined in a referenced/imported XSD, it would not generate for that element. Any ideas?Holmes
@DavidHergert A simple workaround would be generating a stub type.Liechtenstein
Florian - Thanks. This just saved me 4 hours of xmlbeans guess-compile-fix iterations.Liechtenstein
I prefer this to the higher rated Visual Studio method as it has more options. (Visual Studio generated me a very scant XML file with anything nillable set to nil, whereas Eclipse gave me the option to populate these elements.) One minor q - does the XSD file have to be plonked somewhere in the workspace? I was hoping to be able to do it via Open File... for any file on my computer or network without copying it into the workspace but couldn't find a way.Thea
I think Eclipse is the best!Plait
@Stonework just install "Eclipse XML Editors and Tools" through the Eclipse MarketplaceBurnard
Here is a detailed tutorial on How to Generate XML from XSD in EclipseBurnard
@DavidHergert imported XSD seem to be recognized fine if you provide a location hint in the namespace configurationBurnard
A
45

For Intellij Idea users:

Have a look at Tools -> XML Actions

enter image description here

Seems to work very well (as far as I have tested).

Edit:

As mentioned by @naXa, you can now also right-click on the XSD file and click "Generate XML Document from XSD Schema..."

Assize answered 23/8, 2012 at 7:33 Comment(7)
is there a way to specify # of elements to generate (for sequences)?Dispend
I tested every solution of this thread and this worked the bestEparchy
Does not work for me in latest RubyMine (v. 7.0, Intellij Idea based) with XSD with many imports. I've got nothing but error message.Gwenni
"Schema Compilation Error"?Ayers
In newer versions, right-click on XSD and select "Generate XML Document from XSD Schema..."Aestivate
Constantly says "Root element name is invalid" and doesn't do anything, "Ok" button inactive.Abbate
"Generate XML Document from XSD Schema..." does not create really full xml actually. At least for 2021.3Filberto
L
31

I think Oxygen (http://www.oxygenxml.com/) does it as well, but that's another commerical product. It's a nice one, though... I'd strongly recommend it for anyone doing a lot of XML work. It comes in a nice Eclipse plugin, too.

I do believe there is a free, fully-featured 30 day trial.

Llamas answered 26/8, 2008 at 14:5 Comment(3)
I have an bunch of XSDs which in turn inherits schema's from different XSD's and I need to generate an XML file for testing purpose from this XSD, am using oxygenXML to do this but when I try to do it, it is not working for me and it says please define root node but than it does not allow me to do so. So if anyone had worked with oxygenXML do suggest of what could be way around for this ?Trio
Thanks leveland. This answered my question as well! If you would like to come answer my question: #7041888, I would be more than happy to mark yours as the answer.Suture
I have tried many options for this and have found Oxygen to be the best. It is commercial but does offer a free trial. I have used this to generate XMLs from the most bloated schema ever: DDEX ERN and it worked great. The others couldn't do it.Centner
H
12

The camprocessor available on Sourceforge.net will do xml test case generation for any XSD. There is a tutorial available to show you how to generate your own test examples - including using content hints to ensure realistic examples, not just random junk ones.

The tutorial is available here: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

And more information on the tool - which is using the OASIS Content Assembly Mechanism (CAM) standard to refactor your XSD into a more XSLT friendly structure - can be found from the resource website - http://www.jcam.org.uk

Enjoy, DW

Hintze answered 10/11, 2008 at 2:8 Comment(2)
Direct link to Sourceforge.net download is: sourceforge.net/projects/camprocessorChrysanthemum
@Pyderman - that's your settings - look up how to change them.Tourist
N
10

XMLSpy does that for you, although that's not free...

I believe that Liquid Xml Studio does it for you and is free, but I have not personally used it to create test data.

Nubilous answered 19/8, 2008 at 22:34 Comment(2)
It generates something, but you don't have much control over it: you can choose the toplevel element and some general options, but you cannot use XMLSpy to generate set of testcases with many variants etc.Frenchman
XMLSpy looked good but generated xml that then failed to validate against the xsd that was used to generate it. Fail. It also barfed on a postiveinteger field - putting *ERROR* in insteadCollaborative
S
10

You can use the XML Instance Generator which is part of the Sun/Oracle Multi-Schema Validator.

It's README.txt states:

Sun XML Generator is a Java tool to generate various XML instances from several kinds of schemas. It supports DTD, RELAX Namespace, RELAX Core, TREX, and a subset of W3C XML Schema Part 1. [...]

This is a command-line tool that can generate both valid and invalid instances from schemas. It can be used for generating test cases for XML applications that need to conform to a particular schema.

Download and unpack xmlgen.zip from the msv download page and run the following command to get detailed usage instructions:

java -jar xmlgen.jar -help

The tool appears to be released under a BSD license; the source code is accessible from here

Schellens answered 17/12, 2008 at 11:19 Comment(4)
Very nice! A little bit limited though. I tried it on an XSD that imports other XSD and it failed. But on a DTD it works very well. Thanks!Wire
Current links: homepage, downloads. xmlgen.zip only in nigthly directory. I confirm inability to generate a sample from my xsd.Fregoso
In my case, needed to use the --example file to contain tokens that can be used to generate a new sample file. It takes a sample to make a sample! Not easy...Ayers
java.net links are basically dead.Stepdame
T
7

Seems like nobody was able to answer the question so far :)

I use EclipseLink's MOXy to dynamically generate binding classes and then recursively go through the bound types. It is somewhat heavy, but it allows XPath value injection once the object tree is instantiated:

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 is pretty simple recursive method:

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

Converting everything to XML is pretty easy:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
Twin answered 2/6, 2011 at 2:45 Comment(0)
L
7

You can also use XMLPad (free to use) found here http://www.wmhelp.com to generate your xml samples. From the menu : XSD -> generate sample XML file.

Latakia answered 6/6, 2012 at 12:58 Comment(1)
I get a stack overflow or "WMHelp XmlPad has stopped working" when I choose "Generate Sample Data"Ayers
B
5

Microsoft has published a "document generator" tool as a sample. This is an article that describes the architecture and operation of the sample app in some detail.

If you just want to run the sample generation tool, click here and install the MSI.

It's free. The source is available. Requires the .NET Framework to run. Works only with XSDs. (not Relax NG or DTD).

Birdiebirdlike answered 8/4, 2009 at 14:12 Comment(3)
Above link is to an article on MSDN called 'Generating XML Documents from XML Schemas'Tidewater
The installer drops a bunch of C# code onto your machine. Just dump those into LinqPad and you have your free XML instance generator. Ta dah!Orgell
9 years later, this is still working great for XSDs.Cords
C
5

XML-XIG: XML Instance Generator

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

This opensource would be helpful.

Clough answered 25/2, 2011 at 7:30 Comment(1)
Not very user friendly. Throws a lot of exceptions, can't make it working after getting unexplained NullPointerException.Fregoso
H
4

Microsoft Office has 'InfoPath', which takes an XSD as an import and lets you quickly and easily define a form-based editor for creating XML files. It has two modes - one where you define the form, and another mode where you create the XML file by filling out the form. I believe it first came with Office 2003, and most people never install it. It shocks me at how much I like it.

Heavenward answered 21/5, 2009 at 14:29 Comment(0)
A
1

XMLBlueprint 7.5 can do the following: - generate sample xml from dtd - generate sample xml from relax ng schema - generate sample xml from xml schema

Agree answered 12/3, 2010 at 8:55 Comment(0)
L
1

Liquid XML Studio has an XML Sample Generator wizard which will build sample XML files from an XML Schema. The resulting data seems to comply with the schema (it just can't generate data for regex patterns).

Generate an XML Sample from an XSD

Lina answered 6/8, 2010 at 11:43 Comment(0)
S
1

The open source Version of SoapUI can generate SOAP requests from WSDL (which contains XSD type definitions), so it looks like there IS an open source implementation of this functionality. Unfortunately, I haven't figured out which library is used to to this.

Stonework answered 26/11, 2010 at 12:6 Comment(0)
C
0

The OpenXSD library mentions that they have support for generating XML instances based on the XSD. Check that out.

Caught answered 19/12, 2011 at 5:56 Comment(1)
can you please post a usage example?Aestivate
S
0

For completeness I'll add http://code.google.com/p/jlibs/wiki/XSInstance, which was mentioned in a similar (but Java-specific) question: Any Java "API" to generate Sample XML from XSD?

Smallpox answered 15/5, 2012 at 12:33 Comment(1)
I tried this and ran it as suggested: xsd-instance.sh purchase-order.xsd {http://jlibs.org}PurchaseOrder Got an error: Error: Unable to initialize main class jlibs.xml.xsd.XSInstance Caused by: java.lang.NoClassDefFoundError: org/apache/xerces/xs/XSObjectAdelric
T
0

XML Blueprint also does that; instructions here

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

It's not free, but there's a 10-day free trial; it seems fast and efficient; unfortunately it's Windows only.

Titled answered 14/10, 2012 at 15:31 Comment(0)
M
0

There's also http://xsd2xml.com/, an online XSD to XML generator

Marcionism answered 16/6, 2018 at 13:43 Comment(1)
It didn't generate a valid XML from an XSD unfortunately. However the other tools failed at this task - Eclipse, Intellij IDEA and even XMLSpy. The best I've found so far is liquid-technologies.com/online-xsd-to-xml-converter But even this one fails to generate a valid XML if there are patterns in XSD.Adelric

© 2022 - 2024 — McMap. All rights reserved.