从 jsonschema 中另一个枚举值键的值派生 属性 个名称

Deriving property names from values of another enum valued key in jsonschema

问题:

只允许对象中的那些 属性 名称是架构中另一个 属性 的数组值的一部分的要求(另一个 属性 的值取决于 属性 个名字)。

详细解释:

我有以下 JSON:

{
  "validResources":["ip","domain","url"],
   "resources":
   {
      "ip" : "192.168.1.1",
      "domain" : "www.example.com",
   }
    
}

我想编写一个 JSON 模式,它只允许 "resources" 中的那些键,这些键是 "validResources".

的数组列表值的一部分

上面的 JSON 是有效的 JSON 因为 "ip""domain" 键实际上是数组项的一部分,它是 [=60 的值=] "validResources"。 但是,下面的 JSON 应该 return 一个错误,因为“文件”不是有效资源,因为它不是 "validResorces" 数组的一部分。

{
  "validResources":["ip","domain","url"],
   "resources":
   {
      "ip" : "192.168.1.1",
      "file" : "file://etc/passwd" <= No such resource in "validResources"
   }

}

我试过什么?

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type" : "object",
    "properties" : {
              "validResources" : { "type" : "array",
                         "minItems" : 1,
                         "uniqueItems" : true
                       },
              "resources":{
                "type":"object",
              ===Unable to proceed beyond this ===
              }
               
       
    },
}

其他搜索:

我检查了 propertyNames,但是,它只能从另一个模式派生或将正则表达式模式定义为其模式的一部分。但在这种情况下,“资源”中的 propertyNames / 键取决于 "validResources" 属性 的值,这些值是事先不知道的,“资源”应该只允许那些 strings/names 作为其属性,它们是 "validResources".

数组列表中值的一部分

有一个与这个问题有点相似的悬而未决的问题here

这样的问题目前无法解决 json 架构,其中草稿 7 是撰写本文时的最新草稿 post。

这个问题还涉及 json-schema 规范的 github 问题中已经提到的多个问题。显然,正在积极跟踪与解决此类问题相关的提案 here

因为这涉及从 json 模式的实例值查找,而不是单独的结构验证(这是迄今为止 json 模式标准存在的主要动机),在下一个草案到来或提到的问题得到解决之前,从现在开始可能必须以不同的方式处理。