2016-08-10 4 views
-1

Итак, я хотел попробовать попробовать создать таблицу решений из правила, которое я уже сделал в файле .drl. Затем я хотел преобразовать его обратно в .drl. Не видел никаких отличных конверсий из drl в xls/csv, и документация jboss не была достаточно полной. Это может быть слишком сложным для простой таблицы решений, но я надеялся, что это сообщество поможет мне.Создание таблицы решений Drool

Вот 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. Я попытался в основном взять то, что у меня есть, и поместить его в формат таблицы решений, но с небольшим успехом. Ничто действительно не анализирует (я просто использую droolsSpreadSheet.compile и распечатываю то, что получаю, что является целым пустым правилом). Любая помощь будет оценена!

Update: 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 

Update # 2: Я думаю, что я понял, мои вопросы синтаксического анализа. Here is my new and improved spreadsheet., В принципе выяснилось, что я не могу вычислить BMI: данные пустые, должно быть что-то там, чтобы иметь синтаксический анализ правил (что не совсем ясно в документах, которые я читал, хотя это может быть связано с тем, что мой опыт с таблицы решений - это новичок, который легко ее поместил).

Так что теперь компиляции больше похожи на то, что я хочу:

// 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 

Может кто-то подтвердить, что я должен иметь реальные, конкретные данные в правилах для того, чтобы их разобрать? Могу ли я использовать инъекцию в другом месте? Возможно, я должен задать новый вопрос.

+0

Правильно ли это правило, когда вы компилируете из DRL и выполняете? – laune

+0

Да! Таким образом, есть объект с кучей разных методов, один из которых - hashmap, чтобы поместить правильный ключ, пара значений внутри. – Kevin

+0

ОК, поэтому вы, вероятно, ошиблись, пытаясь вместить эти ограничения в формат таблицы решений. Вы можете экспортировать xls как csv и отредактировать его в свой вопрос. - Но я не понимаю, как вы можете извлечь выгоду из таблицы решений, так как вы не можете изменять любые значения, чтобы создавать разные правила. – laune

ответ

0

Итак, ответ «да», вам нужны параметры, но я не знал, что данные не должны быть жестко закодированы, как каждый пример, с которым я столкнулся. Благодаря спотыканию на this answer. Итак, теперь таблица выглядит как this. Надеюсь, это поможет другим, которые столкнулись с этой проблемой. Также моя рекомендация - просто сделать ваши drools в .drl, а не проходить через электронную таблицу, если у вас нет кучу правил, которые в значительной степени копируют и вставляют реплики. Это все мои два цента.

+0

Исследование «таблиц решений». Они не являются средством редактирования правил. – laune

+0

Я не пытаюсь редактировать правила, я просто пытаюсь их создать. Однако, похоже, что создание одного правила проще записывать в .drl-файл, а не в таблицу решений. Это имеет большой смысл. – Kevin

Смежные вопросы