0

我正在使用带有使用 DMN 编写的规则的 drools 进行一些早期实验。

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

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

具体来说,如果我有一个决策表,并且我的输出名称与数据输入中的任何内容匹配(无论 DRD 树是否实际访问它),则 drools 响应会报告错误并且输出值设置为 null。

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

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

所以我想问:

  • 我的观察正确吗?

  • 是否有避免此类问题的通用模式(可能是某种变量命名空间或范围)?

编辑:

  • 回复:我的观察正确吗?

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

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

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

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

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

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

4

1 回答 1

1

如果我正确理解了您的问题,那么您正在尝试对一些 DRGElement ( InputData, Decision, ...) 节点共享相同名称的 DMN 模型进行建模。

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

示范:

重复的节点名称导致错误截图

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

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

于 2021-07-21T11:00:56.417 回答