什么是json模式等效于targetNamespace?

时间:2018-03-21 14:51:43

标签: json jsonschema

在任何xml文件中,我可以说我使用xmlns-attributes描述命名空间的命名空间。这里有很好的描述:What does "xmlns" in XML mean?

然后我可以使用具有目标命名空间的xml架构,以便每个人都知道架构描述了该命名空间。关于这方面的一个问题可以在这里找到:Why do we need targetNamespace?

使用json-schema我们可以为json文档定义模式。我的心智模型是,这大致相当于拥有一个xsd文件。

现在,如何在json对象中引用架构?我可以使用$schema属性引用模式,但是如何声明我自己开发的模式的名称?我不明白targetNamespace

的等价物

1 个答案:

答案 0 :(得分:2)

研究写这个问题我找到了答案。等同于targetNamespace的是$id属性。标准声明......

  

“$ id”关键字定义架构的URI,以及基本URI   解析模式中的其他URI引用。一个   subschema的“$ id”是根据其父级的基URI解析的   架构。如果没有父级使用“$ id”设置显式基,则基URI为   根据RFC 3986第5节确定的整个文档的内容   [RFC3986]。

...这是$schema ...

的主要文字的镜像
  

“$ schema”关键字都用作JSON Schema版本标识符   和资源的位置本身就是一个JSON Schema,它   描述为此特定版本编写的任何模式。价值   这个关键字必须是一个URI [RFC3986](包含一个方案)和这个   URI必须规范化。当前架构必须对有效   由此URI标识的元架构。

经过一些更多的研究后,我得出结论,上述 - 尽管是正确的 - 并没有提供完整的故事。关于在数据中使用$schema属性的一些补充:

a)在模式中使用$schema来定义应该使用哪个模式来定义自己的自定义模式。规范中没有说明任何类型的对象中的$schema都应该表明模式的验证。

b)您可能在您的架构中定义$schema应该指示用于验证的架构。

c)还有其他方法可以指示数据的架构。一个这样的例子是在http头中使用内容类型。另一种方法是使用链接http头。

d)vscode和visual studio都将$schema解释为对用于验证的模式的引用

此问题已在github repo中针对规范进行了讨论。

https://github.com/json-schema/json-schema/issues/235

https://github.com/json-schema/json-schema/issues/220#issuecomment-209452992