如何在其他文件中使用 anyOf 定义引用 JSON 类型数组的模式定义

How to ref JSON schema definition of type array with anyOf definition in other files

我有一个 jsonschema 定义 definition-1.json,如下所示。我有一个名为 inputsarray 类型的 属性,它指的是 anyOf definitions like

"inputs": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "$ref": "#/definitions/stringParameter"
          },
          {
            "$ref": "#/definitions/numberParameter"
          },
          {
            "$ref": "#/definitions/booleanParameter"
          },
          {
            "$ref": "#/definitions/jsonParameter"
          },
          {
            "$ref": "#/definitions/fileParameter"
          }
        ]
      }
    }

然后参数definitions在同一个jsonschemadefinition-1.json

中定义如下
"definitions": {
    "stringParameter": {
      "type": "object",
      "required": [
        "name",
        "description",
        "datatype"
      ]
   }
 ...
}

现在我想在我的其他架构 dummy-1.json 中引用此参数 definitions,如下所示

  {
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "dummy-1.json",
  "allOf": [
    {
      "type": "object",
      "required": [
        "definition_data"
      ],
      "properties": {
        "definition_data": {
          "type": "object",
          "required": [
            "inputs"
          ],
          "properties": {
            "type": "array",
            "inputs": {
              "items": {
                "allOf": [
                  {
                    "prop1": {
                      "$ref": "#/definitions/stringParameter"
                    }
                  },
                  {
                    "prop2": {
                      "$ref": "#/definitions/numberParameter"
                    }
                  }
                ]
              }
            }
          }
        }
      }
    },
    {
      "type": "object",
      "properties": {
        "definition_data": {
          "$ref": "definition-1.json"
        }
      }
    }
  ]
}

这看起来行不通。 prop1 也将成功验证其他参数定义的任何属性部分,即使在 dummy-1.json 中我明确引用了 #/definitions/stringParameter。 我可以理解 inputs in definition-1.json 接受 anyOf 所有参数 definitions。但是想知道我们如何才能实现 1:1 参数定义映射为 dummy-1.json .

如果我的理解是正确的,您想从 dummy-1.json 引用 definitions-1.json 中定义的子模式。为此,您必须指定 definition-1.json 的 URI 并在其中附加子模式的指针,例如:

dummy-1.json:

{
  "$ref": "uri-of-definitions-1.json#/definitions/stringParameter"
}

请注意,要设置的 URI 非常特定于您正在使用的 json 架构库。通常绝对 https:// URL 有效,但使用起来并不总是很方便。也许相对路径也适合您(例如 ./definition-1.json#/definitions/stringParameter