【问题标题】:Xsd to rnc (or rng) conversion (unix command line)Xsd 到 rnc(或 rng)的转换(unix 命令行)
【发布时间】:2008-09-23 16:24:05
【问题描述】:

简单的搜索表明,所有从 xsd(XML 模式)转换为 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) 的使用,没有像样的命令行工具来完成这些琐碎的基本任务吗?人们只使用编辑器吗?这些有用吗?我更喜欢命令行,尤其是因为我想自动化这些任务。

对此有什么启发性的cmets?

【问题讨论】:

    标签: xml unix xsd


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,反向(rng/rnc2xsd)很好。 trang 非常适合。
    • WRT 编辑,是的,这就是我的意思。我假设 XML 世界中的人们主要使用编辑器,否则我无法解释缺少命令行工具的原因。我觉得有趣的是,XML 世界与 unix 的简单工具做好一件事的哲学相去甚远。
    • WRT 避免 XSD,我很乐意。这就是为什么我对更容易阅读的 RNC 格式感兴趣的原因。但是,我别无选择。
    • 不确定我是否了解 schematron 是什么以及它如何提供帮助。
    • Schematron 可能对您的情况无能为力。它基本上允许您对文档进行断言;例如元素 a 有一个 b 子元素。见zvon.org/xxl/SchematronTutorial/General/contents.html
    【解决方案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 文件测试集(或者您可以轻松创建它们),这可能是最好的选择。

    祝你好运。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢您提及您的用例,我正要在 Emacs 中使用 pom.xml 验证进入同一个兔子洞。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-07-08
          • 1970-01-01
          • 2014-03-28
          • 2014-11-07
          • 1970-01-01
          • 2013-09-08
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          相关资源
          最近更新 更多