JSON 架构 v4 中的 ID 属性
The id property in JSON schema v4
我正在尝试正确解析具有引用的更复杂的 JSON 模式。然而,id 属性 给我带来了很多麻烦,而且我不清楚它是如何从文档中工作的。以下是我仍然没有得到的东西:
- ID 属性 是否仅限于 URI (
"id": "http://some.site/my/schema.json"
) 或一段模式是否可以具有任意 ID ("id": "foo"
)?
- id 属性 是分层的吗?如果父模式具有 id
foo
(我假设 id 不限于 URis)并且子模式具有 bar
,那么引用子模式的正确方法是 foo/bar
?或者id是完全独立的?
- 有没有办法清楚地判断
$ref
是否引用了 id
的架构?
"id"
是一个 URI。它可以是相对或绝对 URI。如果它是相对的,那么它是根据父解析范围解析的。如果它是绝对的,那么它不受父作用域的影响。
所以考虑到这些,记住
a) 它可以是一个 "arbitary id" 但它会被解释为一个相对 URI
b) 是 - 相对 URI 的解析发生在父范围
c) 一个空的 "$ref"
就可以了
规范没有告诉您的一件事是,如果顶级 URI 是相对 URI,该怎么做——它将根据什么进行解析。它可以依赖于实现。
作为最佳实践,我建议您在顶层仅使用一个 "id"
,并使所有 $refs 都与此相关(除非您有充分的理由进入另一个方式)。
我正在尝试正确解析具有引用的更复杂的 JSON 模式。然而,id 属性 给我带来了很多麻烦,而且我不清楚它是如何从文档中工作的。以下是我仍然没有得到的东西:
- ID 属性 是否仅限于 URI (
"id": "http://some.site/my/schema.json"
) 或一段模式是否可以具有任意 ID ("id": "foo"
)? - id 属性 是分层的吗?如果父模式具有 id
foo
(我假设 id 不限于 URis)并且子模式具有bar
,那么引用子模式的正确方法是foo/bar
?或者id是完全独立的? - 有没有办法清楚地判断
$ref
是否引用了id
的架构?
"id"
是一个 URI。它可以是相对或绝对 URI。如果它是相对的,那么它是根据父解析范围解析的。如果它是绝对的,那么它不受父作用域的影响。
所以考虑到这些,记住
a) 它可以是一个 "arbitary id" 但它会被解释为一个相对 URI
b) 是 - 相对 URI 的解析发生在父范围
c) 一个空的 "$ref"
就可以了
规范没有告诉您的一件事是,如果顶级 URI 是相对 URI,该怎么做——它将根据什么进行解析。它可以依赖于实现。
作为最佳实践,我建议您在顶层仅使用一个 "id"
,并使所有 $refs 都与此相关(除非您有充分的理由进入另一个方式)。