给出以下模式定义:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://fobar.json",
"type": "object",
"$defs": {
"one": {
"$id": "/one",
"type": "string"
},
"two": {
"$id": "a/sub/schema.json",
"properties": {
"one": {
"$id": "/one",
"type": "integer"
}
}
}
},
"properties": {
"a": {
"$ref": "one"
}
}
}
当我使用 ajv 编译它时,我收到一个错误
"http://foobar.json/one" resolves to more than one schema
我认为这是正确的错误。 https://www.jsonschemavalidator.net/
但是,没有给出错误。如果我在 "b": {"$ref": "a/sub/schema.json"}
属性之后添加
a
,它会发出警告
因为在
http://fobar.json
中,fobar.json
是域。路径在域上解析。
此外,
/one
上的斜线表示“从域的根开始。”
/one
是 fobar.json
域上的路径,为您提供 http://fobar.json/one
(对于这两种情况,都会导致错误)a/sub/schema.json
给出 http://fobar.json/a/sub/schema.json
如果您希望嵌套在
/one
属性下的 two
解析为 http://fobar.json/a/sub/one
(这听起来像是您想要的),则需要丢失斜杠,只需使用 one
来表示 $id
那里。