XSD到RNC(或者RNG)转换(UNIX命令行)

时间:2020-03-06 14:36:31  来源:igfitidea点击:

简短的搜索显示,所有从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)的使用一直没有像样的命令行工具来完成这些琐碎的基本任务?人们只使吗?这些有用吗?我更喜欢命令行,尤其是因为我想自动执行这些任务。

有什么启发性的评论吗?

解决方案

转换XSD是一项非常艰巨的任务。 XSD规范有点噩梦,而且非常复杂。从一些快速的研究来看,从RelaxNG到XSD似乎很容易,但是相反的说法可能不正确甚至不可能(这解释了我们对Trang的问题)。

如果我们要问大多数人是否最终都需要手工在XSD和RNG之间进行转换,那么我不理解我们对编辑器的问题,那么我希望如此。

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

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

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

是的,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文件测试集(或者我们可以轻松创建它们),那么这可能是最好的选择。

祝你好运。

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