这个话题听起来有点令人困惑,不是吗?
据我所知,“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答案 0 :(得分:3)
让我们稍微打破架构,让事情变得更加清晰。如果我理解正确的话,这就是绊倒你的部分。
{
...
"properties": {
...
"properties": {
"type": "object",
"additionalProperties": { "$ref": "#" },
"default": {}
},
...
},
}
棘手的部分是你必须意识到第二个属性"不是关键字,它是属性名称。这是定义properties
关键字的元架构。因此,这不是将additionalProperties
关键字嵌套在properties
关键字中的情况,因为乍一看似乎是这样。
"#"指的是文档的根。所以,{ "$ref": "#" }
是一个递归引用。换句话说,"#"是指整个元模式。上面的架构部分将properties
关键字定义为一个对象,其值是模式。
最后,我可以向您保证,任何正常运行的验证器都将成功验证任何有效的架构(包括元架构本身)以反对元架构。如果它没有,则它是验证器中的错误,应该报告给您正在使用的验证库的维护者。