创建流口水决定 Table

Creating Drool Decision Table

所以我想尝试根据我已经在 .drl 文件中制定的规则做出决定 table。然后我想将它转换回 .drl。没有看到从 drl 到 xls/csv 的任何巧妙转换,jboss 文档也不够全面。可能规则对于一个简单的决定来说太复杂了table,但我希望这个社区能帮助我。

这是 drl:

    rule "Patient: Compute BMI"
  when        
    $basic : BasicInfoModel(
      notPresent('bmi'),
      isPresent('height'),
      isPresent('weight'),
      $height : value('height', 0.0),
      $weight : value('weight', 0.0))
  then
    modify($basic){
      put('bmi', $weight / Math.pow($height,2))
    };
end

所以这条规则基本上是查看对象的体重和身高字段,然后计算 bmi。我基本上尝试过将我拥有的东西放入决定 table 格式中,但收效甚微。没有真正解析(我只是使用 droolsSpreadSheet.compile 并打印出我得到的内容,这是一整套空规则)。任何帮助,将不胜感激!

更新: This is what my excel sheet looks like 这就是我的规则解析出来的内容:

package DROOLS;
//generated from Decision Table
import basic.BasicInfoModel;
// rule values at A11, header at A6
rule "Computing BMI"
    when
        $patient:BasicInfoModel(notPresent('bmi'), isPresent('height'),isPresent('weight'), $height:value('height', 0.0), $weight:value('weight',0.0) == "20,4")
    then
end

更新#2:我想我解决了我的解析问题。 Here is my new and improved spreadsheet.,基本上发现我不能让 Computing BMI: data 空白,其中必须有一些东西才能解析规则(这在我阅读的文档中并不完全清楚,尽管这可能是因为我对决定 tables 的经验是新手,轻描淡写)。

所以现在编译看起来更像我想要的:

 // rule values at A11, header at A6
rule "Computing BMI"
    when
        $patient:BasicInfoModel(notPresent('bmi'), isPresent('height'), isPresent('weight') == "TRUE")
        $weight:value('weight',0.0), $height:value('height', 0.0)
    then
        modify($patient){put('bmi', $weight / Math.pow($height,2))};
end

有人可以确认我必须在规则中包含真实的、特定的数据才能让他们解析吗?我可以在其他地方使用注射吗?也许我应该就此提出一个新问题。

所以答案是肯定的,您确实需要参数,但我不知道的是数据不必像我遇到的每个示例那样进行硬编码。感谢绊倒 this answer. So now the table looks like this。我希望这可以帮助遇到此问题的其他人。此外,我的建议是只在 .drl 文件中流口水,而不是浏览电子表格,除非你有一堆规则,这些规则几乎都是复制和粘贴副本。无论如何,那是我的两分钱。