从json引用JSON Schema的方式类似于XML引用XML Schema

问题描述 投票:0回答:1

当我定义了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,我希望它能对应?

json xsd jsonschema
1个回答
2
投票

你是对的,它不是标准的一部分。

对于作为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”

© www.soinside.com 2019 - 2024. All rights reserved.