【问题标题】:Python Rules Engine: Durable Rules JSON Rule Format to Support NOT operatorPython 规则引擎:支持 NOT 运算符的持久规则 JSON 规则格式
【发布时间】:2019-09-02 20:55:25
【问题描述】:

我正在利用 engine.Host 类创建我自己的规则引擎实例并通过 JSON 文件加载规则并调用 set_rulesets() 方法。这一切都很好。

持久规则:https://pypi.org/project/durable-rules/

但是,对于我的一条规则,我需要进行否定。我不确定语法。否定另一个子句的正确方法是什么?例如,考虑以下规则:

"r_1": {
    "all": [
        {"first": {"condition": "foo"}},
        {"second": {
            "$and": [ 
                {"id": {"first": "id"}}, 
                {"condition": "bar"} 
            ] 
        }},
        {"third": {
            "$and": [ 
                {"id": {"second": "id"}}, 
                {"condition": "cat"} 
            ] 
        }}
    ],
    "run": "rule_fired"
}

我怎样才能接受条件的非(第三个)例如,

第一和第二而不是第三

谢谢 鲍登

【问题讨论】:

  • 不确定我是否理解问题所在。为什么不做1st AND 2nd AND not 3rd,即否定第三条规则?然后你可以简单地再次使用 all 语句,对吧?
  • 就是这样。关于持久规则的文档是有限的。问题在于进行否定的语法,是否有一个 not 运算符可以用来否定第三个表达式?
  • @Caconde,我想试试这个,谁能帮我如何通过 json 文件加载规则?

标签: python rule-engine


【解决方案1】:

durable-rules 不支持一元逻辑运算符。要否定第三个表达式,您可以使用&neq 和$or。

{
  "r_0": {
    "all": [
      { "first": { "condition": "foo" }},
      { "second": {
          "$and": [
            { "id": { "first": "id"}},
            { "condition": "bar"}
          ]
        }
      },
      { "third": {
          "$or": [
            { "$neq": {"id": {"second": "id"}}},
            { "$neq": {"condition": "cat"}}
          ]
        }
      }
    ]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多