我正在使用JSON模式来验证数据。
我认为我使用保留关键字 $id 可能对我的架构有误。此字段的目的是指定另一个平台上属性的远程 ID 是什么。所以它是"原点ID"。
您能否告知$id是什么,以及我是否犯了一个严重的错误并且此值需要更改。因为在文档中我找到了这个定义:
如果存在,则此关键字的值必须是字符串,并且必须表示有效的 URI 引用 [RFC3986]。此值应规范化,并且不应是空片段 <#> 或空字符串<>。
$id是一个保留关键字。
它用于:
- 声明架构或子架构的标识符
- 声明用于解析$ref URL 的基本 URL
可以使用 $id 标识架构或架构的一部分(子架构),然后可以使用 $ref 关键字在其他位置重用它。最简单的查看方法是,$ref将被具有相应 id 的架构替换。
- https://datatracker.ietf.org/doc/html/draft-wright-json-schema-01#section-9.2
由于$id更改了架构的基本 URI,因此同一架构或其任何子架构中的任何$ref值都将以不同的方式解析。
例如,如果基本 URI 为"https://example.com/thing"你有这个架构
{
"allOf": [
{"$ref": "foo"},
{
"$id": "stuff/and/nonsense",
"allOf": {"$ref": "bar"}
}
]
}
然后,"$ref"到"foo"解析为"https://example.com/foo"。 但是"$ref"到"bar"解析为"https://example.com/stuff/and/bar"
因此,无论您出于其他目的在"$id"中放入什么,都可能导致问题,尤其是在"$ref"分辨率下。