gpt4 book ai didi

jsonschema - 互斥属性组

转载 作者:行者123 更新时间:2023-12-04 17:34:24 26 4
gpt4 key购买 nike

假设我有一个具有四个可能属性的对象:a、b、c、d。 a 和 b 只能一起出现(即,当且仅当 b 出现时 a 出现)。如果a和b出现,c就不能出现(即a/b和c是互斥的)。如果 a 和 b 没有出现,c 可能会出现(但不是必需的)。 d 可以与 a/b、c 以任意组合出现,也可以单独出现。除了 a、b、c 或 d 之外,任何属性都不能出现。

我如何将其表示为 jsonschema?我怀疑我可以使用 oneOf 的某种组合和 required ,但我想不出正确的咒语。

最佳答案

您可以将约束表述为:

  • 要么:两者 "a""b"存在,并且 "c"不存在
  • 或:都不是 "a"也不是 "b"存在。 ( "c" 可能存在也可能不存在)

  • 在第二点说“都不是”有点冗长。在这里,我们使用 allOf 来表达它。/ not . (注意:这里不能将它们分解为单个 required 子句,因为每个子句都需要单独的 not。)
    {
    "oneOf": [
    {
    "required": ["a", "b"],
    "not": {"required": ["c"]}
    },
    {
    "allOf": [
    {
    "not": {"required": ["a"]}
    },
    {
    "not": {"required": ["b"]}
    }
    ]
    }
    ]
    }

    替代结构

    还有另一种说法“都不是”,实际上是使用 oneOf再次。由于您必须恰好通过 oneOf 之一子句,如果其中一个条目是 {} (通过一切),然后所有其他选项都被禁止。

    虽然它稍微简洁一些,但阅读起来可能不太直观:
    {
    "oneOf": [
    {
    "required": ["a", "b"],
    "not": {"required": ["c"]}
    },
    {
    "oneOf": [
    {},
    {"required": ["a"]},
    {"required": ["b"]}
    ]
    }
    ]
    }

    关于jsonschema - 互斥属性组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162509/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com