【问题标题】:How do I validate JSON against XML Schema (XSD) or RelaxNG?如何根据 XML Schema (XSD) 或 RelaxNG 验证 JSON?
【发布时间】:2015-10-31 19:11:11
【问题描述】:

我正在定义 JSON 文档的结构。我想知道如何根据现有的 XSD、RelaxNG 模式或其他 标准 模式语言模式验证 JSON 文档。我知道 Jsonix,但我没有看到它使用来自 XSD 或 RelaxNG 的正则表达式来验证 JSON 模式(而且我不认为 JSON 模式是标准化的)。

澄清:我们已经有现有的 XML 和 XSD。我们总是可以返回到 XML 进行验证,但是如果我们可以直接验证 JSON 会很酷,并且当我们想要使用 JSON 而不是 XML 时会给我们更多的信心。

更新:这里是有问题的规范:http://www.web3d.org/specifications/x3d-3.4.xsd 注意它在 XML 文档中没有文本节点。

初步答案(仍在进行中,但您可以贡献): 如果您想将 XML 模式转换为 JSON 模式,请尝试下载:XSD2OWL stylesheet,它将 XML 模式转换为 OWL。我像这样将我的模式转换为猫头鹰:

    $ xmlsh
    $ xslt -f xsd2owl.xsl -cf file.xsd > file.owl
    $ exit

然后下载owl2jsonschema.js ** NO LICENSE ** 并修改它,直到它可以运行演示。输出将在 demo/OUTPUT/schema 文件夹/*.json 中作为单独的 JSON 文件。

【问题讨论】:

  • 而且我认为我不应该先将 JSON 转换为 XML。
  • 如果你想将 XML 模式转换为 JSON 模式,这在这一点上非常粗糙,如果不进行更改将无法工作,请尝试下载:link,它将 XML 模式转换为 OWL。我将我的模式转换为 owl,如下所示:` $ xmlsh $ xslt -f xsd2owl.xsl -cf x3d-3.4.xsd > x3d-3.4.owl $ exit ` 然后下载 link 并修改它,直到演示工作为止。输出将在 demo/OUTPUT 中。

标签: json xml xsd relaxng


【解决方案1】:

XSD 和 RelaxNG 是针对 XML 而不是 JSON 定义的。

对于 JSON,请参阅 JSON Schema,但要意识到它与采用 XSD 相去甚远,而且 latest draft of the specification 已于 2013 年 8 月 3 日到期,让人对这项工作的未来产生怀疑。


更新

如何根据 XML Schema (XSD) 或 RelaxNG 验证 JSON?

你没有。

问题不是“我可以吗?”但是“如何?”说我可以完全控制 JSON 文档。

当回答“我可以吗?”是“否”的问题怎么不适用。

澄清:我们已经有现有的 XML 和 XSD。我们总是可以去 回到 XML 进行验证,但如果我们能验证就好了 直接使用 JSON,并且在我们想要的时候会给我们更多的信心 使用 JSON 而不是 XML。

您可以直接针对 JSON 架构验证 JSON,但不能针对 XSD。没有工具可以做到这一点;标准大不相同。定义由 XSD 和针对 XML 的 RelaxNG 提供的标准词汇表和语法的需求旨在通过针对 JSON 的 JSON Schema 来满足。

您在错误的地方寻找“当我们想要使用 JSON 而不是 XML 时的信心”。请参阅reasons for choosing XML vs JSON

【讨论】:

  • 问题不是“我可以吗?”但是“如何?”假设我可以完全控制 JSON 文档。
  • 请查看更新后的答案以获取对您的澄清/跟进的回复。谢谢。
  • 如果我可以从 XSD 创建 JSON 模式,并且我可以从遵循 XSD 的 XML 创建 JSON,我可以使用 JSON 模式验证 JSON,那将是有意义的,您可以验证带有 XSD 的 JSON。参见 Jsonix。我知道这是可能的。不要说我不能,因为我会证明你错了。基本上,我试图找出是否有人尝试过以及结果如何。
  • 在最简单的情况下,我可以将 JSON 转换为 XML 并以这种方式针对 XSD 进行验证。我只想跳过转换为 XML 的步骤。
  • 回复:“请参阅选择 XML 与 JSON 的原因。”我们正在为 VRML 定义 JSON 标准。已经有一个 XML 标准。我们也想使用 JSON。
【解决方案2】:

由于您可能已经知道我即将发布的信息,因此仅供参考。

Jsonix Schema Compiler 支持generation of JSON Schema based on the XML Schema

因此,您可以将 XML Schema 转换为 JSON Schema,并使用 AJV 对照此 JSON Schema 验证您的 JSON。

这仍然是一个实验性功能,但这是方向。

【讨论】:

  • 是的,见上面的 cmets。这就是整个事情在这一点上的意义所在。我正在使用 Jsonix,但到目前为止,它不支持正则表达式。我在 github 上有一个关于这个特定请求的问题。经过更多研究,我了解了 JSR-303。关于 Jsonix,我不喜欢的另一件事是每次模式编译后都会对代码进行修改。我的映射和 JSON 模式几乎总是在变化。我计划做的是生成模式,然后将其用作手动编辑未来修改的基础。 Jsonix 会越来越好,只需要稍后再检查。
  • 我们目前正在将 XML 转换为 JSON,作为 JSON 标准的基础。我们有一个 XSLT 解决方案、一个 Java SAX 解决方案和一个 Jsonix 解决方案。 Jsonix 看起来有点弱,因为生成的 XML 似乎从模式中获取了看似随机的字符串,并将它们粘贴到 JSON 中。 XSD 架构是 web3d.org/specifications/x3d-3.4.xsd,如果您想查看的话。
猜你喜欢
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2016-02-03
  • 2013-06-15
相关资源
最近更新 更多