为什么这个 JSON 模式有效?

Why is this JSON schema valid?

即使文档的最后一行使用 "none" 作为不在枚举中的值,以下架构和文档也可以正常验证。

{
        "$schema"     : "http://json-schema.org/draft-04/schema#",
        "title"       : "Test schema",

        "definitions" : {
                "xxx_type" : {
                        "enum" : [ "X1", "X2", "X3" ]
                },

                "xxx_info" : {
                        "type" : "object",
                        "properties" : {
                                "date" : { "type" : "string" },
                                "category" : {
                                        "type" : "array",
                                        "items" : { "$ref" : "#/definitions/xxx_type" }
                                }
                        },
                        "required" : [ "date", "category" ]
                }
        },

        "XXX" : {
                "type" : "array",
                "items" : {
                        "$ref" : "#/definitions/xxx_info"
                }
        }
}

{
        "XXX" : [ { "date" : "2015/01/01", "category" : [ "X1" ] },
                  { "date" : "2015/02/01", "category" : [ "X2" ] },
                  { "date" : "2015/03/01", "category" : [ "X3" ] }
                  { "date" : "2015/04/01", "category" : [ "none" ] }
        ]
}

以下表示无效。 ("XXX" 定义之前的两行是唯一真正的区别。)此处 "none" 无效。

{
        "$schema"     : "http://json-schema.org/draft-04/schema#",
        "title"       : "Test schema",

        "definitions" : {
                "xxx_type" : {
                        "enum" : [ "X1", "X2", "X3" ]
                },

                "xxx_info" : {
                        "type" : "object",
                        "properties" : {
                                "date" : { "type" : "string" },
                                "category" : {
                                        "type" : "array",
                                        "items" : { "$ref" : "#/definitions/xxx_type" }
                                }
                        },
                        "required" : [ "date", "category" ]
                }
        },

        "type" : "object",
        "properties" : {
                "XXX" : {
                        "type" : "array",
                        "items" : {
                                "$ref" : "#/definitions/xxx_info"
                        }
                }
        }
}

{
        "XXX" : [ { "date" : "2015/01/01", "category" : [ "X1" ] },
                  { "date" : "2015/02/01", "category" : [ "X2" ] },
                  { "date" : "2015/03/01", "category" : [ "X3" ] }
                  { "date" : "2015/04/01", "category" : [ "none" ] }
        ]
}

第一个说它是有效的,因为它没有验证 xxx 属性。 但是在第二个上,您更改了 jsonSchema 以满足 JSON 文档,这次它使用 jsonSchema 验证 xxx 属性 并且 属性 无效,因为它包含无效节点类别为 "none"

的那个