0

我有一个如下jsonschema定义definition-1.json。我有一个名为inputstype的属性,array它指的anyOf definitions

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

然后definitions像下面一样定义的参数jsonschema definition-1.json

"definitions": {
    "stringParameter": {
      "type": "object",
      "required": [
        "name",
        "description",
        "datatype"
      ]
   }
 ...
}

现在我想definitions在我的其他模式中引用这个参数,dummy-1.json如下所示

  {
  "$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接受所有参数。但是想知道如何实现 1:1 的参数定义映射。definition-1.jsonanyOfdefinitionsdummy-1.json

4

1 回答 1

0

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

dummy-1.json

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

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

于 2021-06-10T09:43:16.817 回答