首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DMN中使用drools时,输入/输出变量名称冲突是否是预期的问题?如果是,我如何最好地避免他们?

在DMN中使用drools时,输入/输出变量名称冲突是否是预期的问题?如果是,我如何最好地避免他们?
EN

Stack Overflow用户
提问于 2021-07-20 14:59:23
回答 1查看 268关注 0票数 0

我正在做一些早期的实验,使用drools和用DMN编写的规则。

在我的用例中,输入数据可以是大的和多样的。在单独调用规则引擎作为输入时,还有一些输出可能被传回。

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

特别地,如果我有一个决策表,并且我的输出名称与数据输入中的任何内容匹配(不管DRD树是否真的访问它),则drools响应报告一个错误,输出值被设置为null。

只需更改输出变量的名称就可以解决这个问题。

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

所以我想问:

  • 是我的观察对吗?

  • 是否有一种常见的模式来避免这样的问题(可能是某种可变的名称空间或作用域)?

编辑:

  • Re:我的观察正确吗?

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

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

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 11:00:56

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

这与符合DMN标准规范的有效模型是不兼容的,而且我们已经与kie-dmn-validation模块进行了检查,该模块将报告此问题。在尝试用Drools DMN引擎“编译”DMN模型之前,就会报告这个问题。

示范:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68457132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档