Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
父/子层次结构&;jsonschema_Json_Schema_Parent Child_Hierarchy_Jsonschema - Fatal编程技术网

父/子层次结构&;jsonschema

父/子层次结构&;jsonschema,json,schema,parent-child,hierarchy,jsonschema,Json,Schema,Parent Child,Hierarchy,Jsonschema,我试图提出一个json模式来验证此类文档: { "rootData": { "parent1": [ { "parent1": [ { "leaf1": { "attr": "value" } } ] }, { "parent2": [ {

我试图提出一个json模式来验证此类文档:

 {
  "rootData": {
    "parent1": [
      {
        "parent1": [
          {
            "leaf1": {
              "attr": "value"
            }
          }
        ]
      },
      {
        "parent2": [
          {
            "leaf1": {
              "attr": "value"
            }
          }
        ]
      },
      {
        "leaf1": {
          "attr": "value"
        }
      }
    ]
  },
  "rootInfo": {
    "i1": 1
  }
 }
一些信息:

  • “rootData”只能包含一个父项,即parent1或parent2
  • parent1/parent2可以在层次结构中的任何位置切换为parent2/parent1
  • 没有深度限制:只要一个父级包含另一个父级,我们就可以走得越来越深
  • 我想我能够理解如何表示嵌入式父/子部分的层次结构。 但我不知道如何定义“rootData”顶层,更确切地说是“parent1”或“parent2”之间的选择,因为我不能使用其中一个(我想…)

    欢迎任何帮助

    Thx

    “必需”:[“parent1”]
    “必需”:[“parent2”]
    约束添加到您的parent1和parent2定义中,并使用
    其中一个定义:

    {
        "$schema": "http://json-schema.org/draft-06/schema#",
        "definitions": {
            "parent1": {
                "$id": "#parent1",
                "type": "object",
                "required": ["parent1"],
                "properties": {
                    "parent1": {"$ref": "#node"}
                }
            },
            // ...
        },
        "type": "object",
        "properties": {
            "rootData": {
                "oneOf": [
                    {"$ref": "#parent1"},
                    {"$ref": "#parent2"}
                ]
            }
        }
    }
    
    如果您尝试使用
    anyOf
    并成功,那是因为您的
    parent1
    parent2
    定义相互验证:
    parent1
    针对
    parent2
    对象进行验证,因为它忽略了“parent2”属性,并且在没有“parent1”属性的情况下有效;对于“parent1”,反之亦然。

    添加
    “必需”:[“parent1”]
    “必需”:[“parent2”]
    约束到您的parent1和parent2定义中,并使用
    其中一个:

    {
        "$schema": "http://json-schema.org/draft-06/schema#",
        "definitions": {
            "parent1": {
                "$id": "#parent1",
                "type": "object",
                "required": ["parent1"],
                "properties": {
                    "parent1": {"$ref": "#node"}
                }
            },
            // ...
        },
        "type": "object",
        "properties": {
            "rootData": {
                "oneOf": [
                    {"$ref": "#parent1"},
                    {"$ref": "#parent2"}
                ]
            }
        }
    }
    

    如果您尝试使用
    anyOf
    并成功,那是因为您的
    parent1
    parent2
    定义相互验证:
    parent1
    针对
    parent2
    对象进行验证,因为它忽略了“parent2”属性,并且在没有“parent1”属性的情况下有效;“parent1”也是如此。

    谢谢您的帮助!但是更新后的映射仍然失败。返回“refVal1未定义”@user12824955我不确定这个错误是什么意思,但听起来像是另一个问题。当你在你的程序中实际尝试它时会发生什么?谢谢你的帮助!但是更新后的映射仍然失败。返回“refVal1未定义”@user12824955我不确定这个错误是什么意思,但听起来像是另一个问题。当你在你的程序中实际尝试它时会发生什么?