【问题标题】:Standard-JsonSchema does not comply to Standard-JsonSchemaStandard-JsonSchema 不符合 Standard-JsonSchema
【发布时间】:2017-07-21 11:29:34
【问题描述】:

这个话题听起来有点混乱,不是吗?

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

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

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

我做错了什么?

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

感谢任何帮助。

诚挚的问候 胡迪安

【问题讨论】:

    标签: jsonschema


    【解决方案1】:

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

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

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


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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多