Standard-JsonSchema 不符合 Standard-JsonSchema

Standard-JsonSchema does not comply to Standard-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": "#/definitions/positiveInteger"

感谢任何帮助。

谨致问候 胡德安

让我们稍微分解一下架构以使事情更清楚一些。如果我对你的理解正确,这就是让你绊倒的部分。

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

棘手的部分是您必须意识到第二个 "properties" 不是关键字,而是 属性 名称。这是定义 properties 关键字的元模式。因此,这并不是将 additionalProperties 关键字嵌套在 properties 关键字中的情况,乍一看似乎如此。


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


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