使用$ ref进行JSONSchema验证失败(草案v3)

时间:2017-11-10 09:05:30

标签: jsonschema json-schema-validator

我已根据草案v3规范创建了一个JSON模式。架构看起来像这样:

{
"$schema": "http://json-schema.org/draft-03/schema#",
"additionalProperties": false,
"type": "object",
"properties": {
    "ExecutionPlanList": {
        "type": "array",
        "items": [{
            "type": "object",
            "properties": {
                "model": {
                    "required": true,
                    "properties": {
                        "featureList": {
                            "required": true,
                            "items": {
                                "properties": {
                                    "featureName": {
                                        "type": ["string", "null"]
                                    },
                                    "featureType": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "type": "array"
                        },
                        "modelId": {
                            "required": true,
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "cascadeSteps": {
                    "required": false,
                    "items": {
                        "properties": {
                            "binaryModel": {
                                "$ref": "#/properties/ExecutionPlanList/items/properties/model",
                                "required": true
                            },
                            "threshold": {
                                "required": true,
                                "default": "0.0",
                                "maximum": 100.0,
                                "type": "number"
                            },
                            "backupModel": {
                                "$ref": "#/properties/ExecutionPlanList/items/properties/model",
                                "required": true
                            }
                        }
                    },
                    "type": "array"
                },
                "marketplaceId": {
                    "required": true,
                    "type": "integer"
                }
            }
        }]
    }
},
"required": true
}

本质上,executionPlanList包含model和cascadeStep的列表,每个cascadeStep包含两个带数字的模型。因此,我尝试在cascadeStep中重新使用模型架构,但验证(https://www.jsonschemavalidator.net/)与Could not resolve schema reference '#/properties/ExecutionPlanList/items/properties/model'失败。

不胜感激任何有关此架构错误的指示。

2 个答案:

答案 0 :(得分:4)

它应该是'#/ properties / ExecutionPlanList / items / 0 / properties / model'

顺便说一下,架构仅验证第一个项目。

答案 1 :(得分:4)

如何添加'定义'并且像这样说:

{
"$schema": "http://json-schema.org/draft-03/schema#",
"additionalProperties": false,
"type": "object",
"definitions": {
      "model": {
          "required": true,
          "properties": {
              "featureList": {
                  "required": true,
                  "items": {
                      "properties": {
                          "featureName": {
                              "type": ["string", "null"]
                          },
                          "featureType": {
                              "type": "string"
                          }
                      },
                      "type": "object"
                  },
                  "type": "array"
              },
              "modelId": {
                  "required": true,
                  "type": "string"
              }
          },
          "type": "object"
      }
},
"properties": {
    "ExecutionPlanList": {
        "type": "array",
        "items": [{
            "type": "object",
            "properties": {
                "model": {
                  "$ref" : "#/definitions/model"
                },
                "cascadeSteps": {
                    "required": false,
                    "items": {
                        "properties": {
                            "binaryModel": {
                                "$ref" : "#/definitions/model",
                                "required": true
                            },
                            "threshold": {
                                "required": true,
                                "default": "0.0",
                                "maximum": 100.0,
                                "type": "number"
                            },
                            "backupModel": {
                                "$ref" : "#/definitions/model",
                                "required": true
                            }
                        }
                    },
                    "type": "array"
                },
                "marketplaceId": {
                    "required": true,
                    "type": "integer"
                }
            }
        }]
    }
},
"required": true
}