JSON 模式 $id 范围差异

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

给出以下模式定义:

{
  "$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

,它会发出警告
json.net jsonschema
1个回答
0
投票

因为在

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 
那里。

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