JSON 架构中的'$id'属性用法



我正在使用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"分辨率下。

最新更新