2014-02-10 3 views
0

У меня есть файл правил (.drl) с почти 100 правилами. Однако я хочу предоставить пользователю гибкость в выборе того, какие правила будут эффективными в любой момент. Я думаю, что есть способ импортировать нужные правила в отдельный .drl-файл, чтобы пользователь мог выбирать и выбирать правила.Как импортировать правила из файла основных правил

Можно ли импортировать правила одного .drl-файла в другой .drl-файл? Если нет, как я могу гарантировать, что у пользователя будет возможность выбрать/выбрать правила, которые будут эффективными в любой момент.

Кроме того, 100 правил в одном файле недействительны и ссылаются на них с одной строкой/именем, которые могут быть прочитаны.

Подсказки pl?

+0

Почему вы говорите, что «100 правил в одном файле недействительны»? 100 правил не так много. – laune

+0

Все правила теперь сосредоточены в одном файле, и они не связаны друг с другом. Я хочу разделить эти правила на разные .drl-файлы на основе бизнес-областей. –

ответ

1

Существует нет «импорта» для правил из одного DRL в другой DRL.

Что делать, чтобы решить вашу проблему, зависит от требуемой детализации выбора правил.

Если существует небольшое число N статических комбинаций, вы можете создать базы N правил и позволить пользователям выбрать базу правил. Это чистое, контролируемое и проверяемое.

Если есть количество disjoint комплектов, используйте группы целей. Пользователь выбирает группу повестки дня, и активны только правила в этой группе. (Если наборы не являются дизъюнктными, вы все равно можете использовать группы программ за счет дублирования правил с использованием разных названий для появления в разных группах участников. Ужасно, не рекомендуется.)

Для произвольного динамического выбора у вас будет разработать какой-то механизм. Например:

rule "rule1" 
when 
    Select(name == "rule1") 
    All(...) 
    Original(...) 
    Patterns(...) 
then ... end 

Вставка нового Select ("rule1") выбирает, убирает ретракты. В зависимости от способа выбора должно быть сделано, вы можете также реализовать «особенность»:

rule "rule x" # part of feature f1 and f2 
when 
    Select(featureSet contains Feature.f1 || Feature.f2) 
    All(...) 
    Original(...) 
    Patterns(...) 
then ... end 

Вы можете написать правила для проверки комбинаций функций, например,

rule "feature check" 
when 
    Select(featureSet contains Feature.black && Feature.white) 
then 
    ... cant have black *and* white at the same time ... 
end 
+0

Можете ли вы указать мне какую-нибудь литературу или примеры по выбору/все/оригинал/рисунки. Я использовал, когда/then/end и ничего кроме этого. –

+0

Выберите класс, который вам нужно будет определить. Все/Оригинал/Шаблон - это стенд для того, что вы не разместили, т. Е. Содержимое вашего правила. – laune

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