リファレンス from
リファレンスの参照を指定する場合に利用します。例えば、あるクラスのフィールドがListをもち、「その」Listの中である条件を満たしていたら、といったルールがあった場合に「その」をfromで実現します。以下の例ではHealthList(健康リスト)というクラスの中にPersonのListを保持することを想定しており、体重が100kg以上の場合、名前を報告する、といったことを示しています。
まずはルールから。
rule "You metabo!!" when $book : HealthList() $patient : Person(weight > 99) from $book.patients then System.out.println( "you metabo, " + $patient.getName() ); end
で実行するJavaは
KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); Person p1 = new Person("内山くん", 130); //名前, 体重 Person p2 = new Person("伊集院くん", 140); Person p3 = new Person("松村くん", 130); Person p4 = new Person("岡田くん", 99); HealthList list = new HealthList(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); ksession.insert(list); ksession.fireAllRules();
で実行すると
you metabo, 松村くん you metabo, 伊集院くん you metabo, 内山くん
と出力されます、Listの中にあるPersonオブジェクトで条件がマッチしたやつ分、thenを実行するようになっています。今更あらためていうことでもないですが、DroolsでもjavaのIF文が消せる、ということで。