Xsd到rnc(或rng)转换(unix命令行)

时间:2008-09-23 16:24:06

标签: xml unix xsd

简短搜索显示,从xsd(XML Schema)转换为rng(RelaxNG)或rnc(compact RelaxNG)的所有可用(uUnix命令行)工具都存在某种问题。

首先,如果我使用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

它没有办法对元素进行去标准化,所以最终都成为了替代的起始元素(它似乎也有点儿错误)。

Trang是另一种选择,但它不支持输出上的输入上的xsd文件(为什么?)。但它支持DTD。首先想到转换为DTD,但是很难找到稳定的xsd2dtd。下面的那个:

 $ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd

似乎是错误的。

这一切都非常令人惊讶。对于这些XML(ab)使用的这些年来,没有适合这些简单基本任务的命令行工具?人们只使用编辑吗?那些工作吗?我更喜欢命令行,特别是因为我想自动完成这些任务。

对此有何启发性评论?

5 个答案:

答案 0 :(得分:4)

转换XSD是一项非常艰巨的任务; XSD规范有点噩梦,非常复杂。从一些快速research,开始,似乎很容易从RelaxNG转到XSD,但反过来可能不正确甚至可能(这解释了你关于Trang的问题)。

我不明白你关于编辑的问题 - 如果你问大多数人是否最终手动在XSD和RNG之间转换,那么是的,我希望如此。

最好的建议可能是尽可能避免使用XSD,或者至少使用RNG作为权威文档并从中生成XSD。您可能还想查看schematron

答案 1 :(得分:2)

是的,trang不接受输入端的xsd。 Trang 可以但是需要一组符合规范的xml文件,并生成一个rnc或rng模式,这些模式都是有效的。

缺点:

  • 它需要许多兼容的xml文件(我想象的越多越好)
  • 结果架构可能仍然会使用一些调整。

示例案例

如果我的兼容xml文件存储在1.xml 2.xml 3.xml 4.xml 5.xml

以下命令会告诉trang输出一个对所有这些模式都有效的rnc模式:

java -jar trang.jar -I xml -O rnc 1.xml 2.xml 3.xml 4.xml 5.xml foo.rnc

<强>结论

如果你有一套很好的xml文件符合你的架构(或者你可以很容易地创建它们),这可能是最好的选择。

祝你好运。

答案 2 :(得分:2)

http://relaxng.org/#conversion列表中添加了一个在线转换器(XSD -> RNG)。我试图转换maven-v4_0_0.xsd来验证emacs中的pom.xml文件,但没有任何运气。该网站还包含可与xsltproc一起使用的XSL样式表,无法保证结果的质量......

答案 3 :(得分:0)

再次,关于编辑:我发现使用Oxygen无法做到这一点,这似乎是一种流行的工具。

答案 4 :(得分:0)

另一种可能性可能是http://www.brics.dk/schematools/,但我还没有尝试过。