当我定义了XML模式时,我可以用这种方式从XML引用它,说该XML必须与所引用的模式相对应。这样,我可以强制验证此类XML,也可以为将要编辑此文件的人提供宝贵的提示,因为支持XML Schema的XML编辑器将使用此类引用来生成自动完成功能,从而使编辑变得更加容易。
但是,我在JSON Schema文档中看不到这种引用。 例如:https://json-schema.org/learn/getting-started-step-by-step.html
它似乎不是标准的一部分,或者我只是找不到它。
以下是带有参考用法的XSD架构示例:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.org/definitions/product">
<xsd:element name="product">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:long" maxOccurs="1" minOccurs="1"/>
<xsd:element name="name" type="xsd:string" maxOccurs="1" minOccurs="1"/>
<xsd:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
这是一个XML,它通过引用该逻辑名使用该架构:http://example.org/definitions/product
<product:product xmlns:product="http://example.org/definitions/product">
<id>1</id>
<name>One</name>
<description>The One</description>
</product:product>
因此,现在任何人都可以开始对其进行编辑,并且,如果受支持,他们的编辑器可以根据引用的XSD Schema自动完成此操作。
但是JSON Schema呢?
如果我有这样的JSON模式:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.org/definitions/product",
"title": "product",
"type": "object",
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [ "id", "name" ]
}
实际的JSON是这样的:
{
"id": 1,
"name": "One",
"description": "The one"
}
然后我如何才能将JSON实际链接到我希望它对应的Schema?
答案 0 :(得分:2)
您是正确的,它不是标准的一部分。
对于作为HTTP响应返回的JSON,您可以使用标头指出响应JSON由特定的JSON模式描述。
https://tools.ietf.org/html/draft-handrews-json-schema-01#section-10.1
建议架构描述的实例提供链接 使用链接关系“ describeby”到可下载的JSON模式,
根据链接数据协议1.0第8.1节的定义
[W3C.REC-ldp-20150226]。在HTTP中,可以使用链接将此类链接附加到任何响应 标头[RFC8288]。此类标头的示例为:
链接:http://example.com/my-hyper-schema#; rel =“ describeby”