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

How do I validate JSON against XML Schema (XSD) or RelaxNG?

我正在定义 JSON 文档的结构。我想知道如何根据现有 XSD、RelaxNG 模式或其他 standard 模式语言模式验证 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。我像这样将我的架构转换为 owl:

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

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

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

对于 JSON,参见 JSON Schema, but realize that it has nowhere near the adoption of XSD, and the latest draft of the specification 已于 2013 年 8 月 3 日到期,对这项工作的未来表示怀疑。


更新

How do I validate JSON against XML Schema (XSD) or RelaxNG?

你不知道。

The question is not "Can I?" but "How?" Say I have total control over the JSON document.

当 "Can I?" 的答案是 "No" 如何不适用时。

Clarification: We already have existing XML and XSD. We can always go back to XML for validation, but it would be cool if we could validate the JSON directly, and would give us more confidence when we want to use the JSON and not XML.

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

的模式来满足

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

您可能已经知道我要提供的信息post,仅供参考。

Jsonix Schema Compiler supports generation of JSON Schema based on the XML Schema.

因此,您可以将 XML 架构转换为 JSON 架构,并使用 AJV.[= 根据此 JSON 架构验证您的 JSON。 12=]

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