Standard-JsonSchema不符合Standard-JsonSchema

时间:2017-03-01 22:45:26

标签: jsonschema

这个话题听起来有点令人困惑,不是吗?

据我所知,“JsonSchema-Validation”在“json-schema.org/schema#”下有一个标准的JsonSchema,它应该定义其他JsonSchemas的允许结构。 “json-schema.org/schema#”中的这个标准JsonSchema本身就是一个JsonFile(与任何其他JsonSchema一样),也是一个JsonSchema。

现在到了我自己的困惑: 当我针对自身验证这个特定的标准JsonSchema时,我在JsonNodes / JsonObject-PropertyKeys“additionalProperties”周围出现错误。

如“json-schema.org/example2.html”所述,PropertyKeys“additionalProperties”应与PropertyKeys“properties”处于同一级别。 但是在标准的JsonSchema中他们不是。它们位于Propertykey“properties”中包含的JsonObject中。

我出错了什么?

第二期: 参考条目是什么 “$ ref”:“#” 意思? 它指的是什么定义条目? 正常的引用条目看起来应该更像: “$ ref”:“#/ definitions / positiveInteger”

感谢任何帮助。

亲切的问候 HuDeanY

1 个答案:

答案 0 :(得分:3)

让我们稍微打破架构,让事情变得更加清晰。如果我理解正确的话,这就是绊倒你的部分。

{
  ...
  "properties": {
    ...
    "properties": {
      "type": "object",
      "additionalProperties": { "$ref": "#" },
      "default": {}
    },
    ...
  },
}

棘手的部分是你必须意识到第二个属性"不是关键字,它是属性名称。这是定义properties关键字的元架构。因此,这不是将additionalProperties关键字嵌套在properties关键字中的情况,因为乍一看似乎是这样。

"#"指的是文档的根。所以,{ "$ref": "#" }是一个递归引用。换句话说,"#"是指整个元模式。上面的架构部分将properties关键字定义为一个对象,其值是模式。

最后,我可以向您保证,任何正常运行的验证器都将成功验证任何有效的架构(包括元架构本身)以反对元架构。如果它没有,则它是验证器中的错误,应该报告给您正在使用的验证库的维护者。