【问题标题】:Is it allowed to combine $ref with other keywords in JSON Schema?是否允许将 $ref 与 JSON Schema 中的其他关键字结合使用?
【发布时间】:2015-04-24 07:23:50
【问题描述】:

我正在为其中一个开源项目学习 JSON Schema。有一个关于将已定义的架构与一些其他关键字组合的问题。

假设我已经定义了一些可通过参考获得的架构,例如#/definitions/positiveInteger

现在我想引用该类型并使用一些其他关键字对其进行扩展。例如,我想添加enumdescription

是否允许这样做:

{
    "$ref" : "#/definitions/positiveInteger",
    "description" : "This is positive integer with enums",
    "enum" : [ 2, 4, 6, 8 ]
}

或者我必须这样做:

{
    "allOf" : [ { "$ref" : "#/definitions/positiveInteger" } ],
    "description" : "This is positive integer with enums",
    "enum" : [ 2, 4, 6, 8 ]
}

我找不到正式的参考资料,也不确定验证工具会如何反应。

基本上我有两个问题:

  • enum 这样的验证关键字应该在第一种情况下工作吗?
  • 如果我像第一种情况一样在$ref 旁边包含像description 这样的元数据关键字,会不会有任何冲突?

我实际上更喜欢内联$refs,而不是将它们包含在allOf 和种类中,但不确定这是否合法。我什至在规范中找不到$ref 的描述(仅举几个例子)。

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    您必须使用allOf 来扩展定义。这是相关文档。

    JSON 引用对象中除“$ref”之外的任何成员都应被忽略。

    【讨论】:

      【解决方案2】:

      从 2019-09 草案开始,$ref 和其他属性可以共存。

      JSON Schema Spec

      虽然规范似乎有点不清楚当引用模式和导入模式声明相同属性时会发生什么

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2023-03-19
        • 2013-01-18
        • 2014-05-25
        相关资源
        最近更新 更多