当我定义了XML Schema时,我可以通过这种方式从XML引用它,说XML必须与引用的模式相对应。通过这种方式,我可以强制验证此类XML,并且还可以为将要编辑此文件的人提供有价值的提示,因为支持XML Schema的XML编辑器将使用此类引用生成自动完成,这样可以使编辑更加容易。
但是我在JSON Schema文档中看不到这样的引用。例如:https://json-schema.org/learn/getting-started-step-by-step.html
看起来它不是标准的一部分,或者我找不到它。
以下是XSD Schema的示例,其中包含参考用法:
<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,通过引用它的逻辑名称来使用该Schema: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,我希望它能对应?
你是对的,它不是标准的一部分。
对于作为HTTP响应返回的JSON,您可以注意使用标头,响应JSON由特定JSON模式描述。
https://tools.ietf.org/html/draft-handrews-json-schema-01#section-10.1
建议模式描述的实例使用链接关系“describeby”提供指向可下载JSON模式的链接, 由Linked Data Protocol 1.0第8.1节定义 [W3C.REC-LDP-20150226]。
在HTTP中,可以使用链接头[RFC8288]将此类链接附加到任何响应。这种标题的一个例子是:
链接:http://example.com/my-hyper-schema#;的rel = “describedby”