JSON Schema 规范是这么说的[1]:
The "$schema" keyword SHOULD be used in the document root schema object, and MAY be used in the root schema objects of embedded schema resources. It MUST NOT appear in non-resource root schema objects.
我不清楚这是什么意思。什么是“非资源根架构对象”?
子模式可以包含$schema
关键字,例如
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"maxItems": 3,
"unevaluatedItems": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer"
}
}
我将该模式粘贴到在线 Hyperjump 验证器中,并且验证器没有标记错误,因此我假设可以(尽管不推荐)放入$schema
子模式。是的?
2020-12 规范实际上禁止
$schema
在不是架构资源(由 标识)的子架构中使用。$id
如果子模式包含
$id
为子模式提供新基本 URI 的 URI,则该子模式将成为资源根。对于您的情况,Hyperjump 可能会忽略关键字,因为父架构中
$id
缺少关键字或值未更改。$schema
为了完整起见,我的验证器https://json-everything.net/json-schema也没有标记它。我将与团队讨论,看看这是否应该被视为一个错误。