Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xsd to rnc (or rng) conversion (unix command line)

Tags:

unix

xml

xsd

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?

like image 255
kmt Avatar asked Sep 23 '08 16:09

kmt


People also ask

What is XSD file in C#?

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.

What is XSD path?

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\


2 Answers

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.

like image 170
Adrian Mouat Avatar answered Nov 07 '22 06:11

Adrian Mouat


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:

  • It requires many compliant xml files (I'd imagine the more the better)
  • Resulting schema could probably still use some tweaking.

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.

like image 43
neozen Avatar answered Nov 07 '22 07:11

neozen