将 drools 与 DMN 结合使用时,输入/输出变量名称冲突是预期的问题吗?如果是,我如何最好地避免它们?

Are input / output variable name collisions an expected problem when using drools with DMN? if yes how do I best avoid them?

我正在使用流口水和使用 DMN 编写的规则进行一些早期实验。

在我的用例中,输入数据可能很大而且多种多样。 还有一些输出可能会在单独调用规则引擎期间作为输入传回。

因此一些输入变量可能与我的一些输出变量同名。 这似乎会导致问题。

特别是如果我有一个决定 table 并且我的输出名称与数据输入中的任何内容匹配(无论 DRD 树是否实际访问它)然后 drools 响应报告错误并且输出值为设置为空。

只需更改输出变量的名称即可解决问题。

然而,对于非常动态的数据,这种冲突不容易预测。

所以想请教一下:

编辑:

我现在可能已经找到了一些描述输出名称和输入名称不能冲突的 DMN 标准。我认为图中的最终决定并不特殊,因此理论上可以存在一个图,这样任何决定都可以用作以后决定的输入,这对于决定输出和相同输入没有意义图具有相同的名称。

来自标准https://www.omg.org/spec/DMN/1.3/PDF

如上所述,DRG 级别的每个决策、输入数据和业务知识模型都与决策逻辑级别使用的变量相关联。决策表达式引用的每个变量都必须与所需的决策、所需的输入数据或所需的知识相关联。此外,与所需决策、所需输入数据和所需知识相关的每个变量都必须在决策表达式中引用。

• 如果一个决策需要另一个决策,则所需决策的值表达式会将值分配给用于评估所需决策的变量。这是 DMN 中用于在决策逻辑级别编写决策的通用机制。

• 如果决策需要输入数据,则在执行时为变量值分配输入数据所附数据源的值。这是 DMN 中用于实例化决策数据要求的通用机制。

决策决策逻辑的输入变量不得在该值表达式或其组件值表达式之外使用:决策元素为其决策逻辑定义输入变量的词法范围。为避免名称冲突和歧义,变量的名称在其范围内必须是唯一的。当 DRG 元素映射到 FEEL 时,变量的名称与其关联的输入数据或决策的(可能合格的)名称相同,这保证了它的唯一性。

如果我正确理解你的问题,你正在尝试对 DMN 模型建模,其中一些 DRGElement(InputDataDecision、...)节点共享相同的名称。

根据 DMN 标准规范,这不符合有效模型,我们已对会报告此问题的 kie-dmn-validation 模块进行检查。甚至在尝试通过 Drools DMN 引擎“编译”DMN 模型之前就会报告该问题。

示范:

因此,当您创建 DMN 模型时,如果您不遵守 DMN 标准规范的基本规定,我们会使用验证器模块检测到它,并尝试根据上面的屏幕截图提供明智的用户消息。

请注意,在使用基于 Kogito 的项目的 CodeGen 期间使用 kie-maven-plugin and/or 使用 Maven 构建 KJAR 时,kie-dmn-validation 也是“嵌入的”(因此所有构建系统和平台都使用相同的验证功能。