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”的决议。