A brief search shows that all available (uUnix command line) tools that convert from xsd (XML Schema) to rng (RelaxNG) or rnc (compact RelaxNG) have problems of some sort.
First, if I use rngconv:
$ wget https://msv.dev.java.net/files/documents/61/31333/rngconv.20060319.zip
$ unzip rngconv.20060319.zip
$ cd rngconv-20060319/
$ java -jar rngconv.jar my.xsd > my.rng
It does not have a way to de-normalize elements so all end up being alternative start elements (it also seems to be a bit buggy).
Trang is an alternative, but it doesn't support xsd files on the input only on the output (why?). It supports DTD, however. Converting to DTD first comes to mind, but a solid xsd2dtd is hard to find as well. The one below:
$ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd
Seems to be buggy.
All this is very surprising. For all these years of XML (ab)use, there no decent command line tools for these trivial basic tasks? Are people using only editors? Do those work? I much prefer command line, especially because I'd like to automate these tasks.
Any enlightening comments on this?
XSD is always an XML file (XML is format, it does not define anything about what data is). XSD can easily define parent-child relationship and basic type restrictions needed to define tables - so can be used as database schema.
The XML Schema Definition tool (Xsd.exe) usually can be found in the following path: C:\Program Files (x86)\Microsoft SDKs\Windows\{version}\bin\NETFX {version} Tools\
Converting XSD is a very hard task; the XSD specification is a bit of a nightmare and extremely complex. From some quick research, it seems that it is easy to go from RelaxNG to XSD, but that the reverse may not be true or even possible (which explains your question about Trang).
I don't understand your question about editors - if you are asking if most people end up converting between XSD and RNG by hand, then yes, I expect so.
The best advice may be to avoid XSD if possible, or at least use RNG as the definitive document and generate the XSD from that. You might also want to take a look at schematron.
True, trang does not accept xsd on the input side. Trang can however take a set of xml files which should meet the spec and generate a rnc or rng schema which they would all be valid against.
Downsides:
Sample Case:
If my compliant xml files are stashed in 1.xml 2.xml 3.xml 4.xml 5.xml
the following command would tell trang to output a rnc schema that would be valid for all of them:
java -jar trang.jar -I xml -O rnc 1.xml 2.xml 3.xml 4.xml 5.xml foo.rnc
Conclusion
If you have a nice test set of xml files which meet your schema (or you can easily create them) this may be the best option available.
I wish you the best of luck.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With