Итак, я хотел попробовать попробовать создать таблицу решений из правила, которое я уже сделал в файле .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
Может кто-то подтвердить, что я должен иметь реальные, конкретные данные в правилах для того, чтобы их разобрать? Могу ли я использовать инъекцию в другом месте? Возможно, я должен задать новый вопрос.
Правильно ли это правило, когда вы компилируете из DRL и выполняете? – laune
Да! Таким образом, есть объект с кучей разных методов, один из которых - hashmap, чтобы поместить правильный ключ, пара значений внутри. – Kevin
ОК, поэтому вы, вероятно, ошиблись, пытаясь вместить эти ограничения в формат таблицы решений. Вы можете экспортировать xls как csv и отредактировать его в свой вопрос. - Но я не понимаю, как вы можете извлечь выгоду из таблицы решений, так как вы не можете изменять любые значения, чтобы создавать разные правила. – laune