使用“ $ ref”键入的属性使用“枚举”限制值

时间:2019-04-05 17:25:01

标签: json jsonschema

我有一个基本模式base.json,它定义了一个名为foobar的类型:

{
  "definitions": {
    "foobar": {
      "type": "string"
    }
  }
}

然后我有另一个基于该类型的模式instance.json,并尝试限制其潜在值:

{
  "type": "object",
  "properties": {
    "raboof": {
      "$ref": "base.json#/definitions/foobar",
      "enum": [
        "this is a foobar!"
      ]
    }
  }
}

如果我尝试验证以下文件wrong_data.json

{
  "raboof": "not really a foobar..."
}

我的验证工具未报告任何错误。

如果在"$ref": "base.json#/definitions/foobar"中将"type": "string"更改为instance.json,我确实会出错。

我错了吗?

1 个答案:

答案 0 :(得分:1)

第7稿的JSON Schema核心规范(当前最新)在关于# 4: I expect this to run in parallel but it does not f = xr_interp_da.interp({'xp':da}) ...的部分中声明了以下内容...

  

具有“ $ ref”属性的对象模式必须解释为
  “ $ ref”参考。 “ $ ref”属性的值必须是URI
  参考。根据当前URI基础进行解析,它标识了
  要使用的架构的URI。 “ $ ref”对象中的所有其他属性必须   被忽略。

https://tools.ietf.org/html/draft-handrews-json-schema-01#section-8.3

请特别注意,您不能将 ..... box.addEventListener('mouseout', disappear); function disappear() { box.innerHTML = ""; } 与同一对象中的其他关键字一起使用,因为该对象中的其他键将被忽略。

您可以通过包装$ref ...

来解决此限制。
$ref

草案8中将允许这样做,因此不再需要变通方法,但尚未发布。