JSON Schema中'$ id'属性的用法
问题描述:
我使用JSON Schema验证数据。
我认为我可能在我的模式上使用保留关键字$ id有一个错误。该字段的意图是指定另一个平台上的物业的REMOTE ID。所以这是“起源ID”。
您能否告知我们$ id是什么,如果我犯了严重错误,这个值需要改变。因为在文档中我找到了这个定义:
如果存在,这个关键字的值必须是一个字符串,并且必须表示一个有效的URI参考[RFC3986]。这个值应该被标准化,并且不应该是一个空片段<#>或者一个空字符串<>。
答
$ id是保留关键字。
它可用于:
- 声明的模式或子模式
- 声明基本URL对其中价值参考网址标识都解决
可以识别模式,或部分模式(subschema)通过使用$ id,然后您可以通过使用$ ref关键字在其他位置重用它。看到这个最简单的方法是$ ref将被具有相应id的模式替换。
答
因为$ ID改变您的架构的基础URI,在相同的架构或任何其子模式的任何$参考值将受到不同的解决。
举例来说,如果你的基础URI是 “https://example.com/thing” 和你有这个模式
{
"allOf": [
{"$ref": "foo"},
{
"$id": "stuff/and/nonsense",
"allOf": {"$ref": "bar"}
}
]
}
那么 “$ REF” 到 “富” 解析为 “https://example.com/foo”。但“$ REF”到“栏中的”解析为“https://example.com/stuff/and/bar”
所以你把一切在“$ ID”用于其他目的,很可能导致问题,特别是“$ REF”的决议。