- From: Adrian Giurca <giurca@tu-cottbus.de>
- Date: Tue, 20 May 2008 13:00:17 +0200
- To: "'Public-Rif-Wg (E-mail)'" <public-rif-wg@w3.org>
May I suggest a more "object-oriented" encoding for rules in UC 2.1? In many cases (Drools, JRules, F-Logic, Jess) people uses object oriented rule languages to encode their rules. Assuming John has rules in F-Logic (here is the basic syntax of F-Logic) the rule "If an item is perishable and it is delivered more than 10 days after the scheduled delivery date then the item will be rejected" looks like: RULE R1 I:item[status -> "rejected"] <- I:item[isPerishable -> true] AND I[actualDeliveryDate -> A] AND I[scheduledDeliveryDate -> S] AND R is (A - S) AND R > 10. Then a RIF encoding (abridged syntax) is: Rule ("http://john.com/R1" ?i#<j:Item>[(<j:isRejected>->"true"^^xs:boolean) :- And( ?i#Item[(<j:isPerishable>->"true"^^xs:boolean) (<j:actualDeliveryDate>->?actualDeliveryDate ) (<j:scheduledDeliveryDate> ->?scheduledDeliveryDate) ] External(<fn:subtract-dateTimes-yielding-dayTimeDuration>(?actualDeliveryDate ?scheduledDeliveryDate ?diffduration)) External(<fn:get-days-from-dayTimeDuration>(?diffduration ?diffdays)) External(<op:numeric-greater-than>(?diffdays "10"^^xs:int)) ) ) which can be easily translated to Drools such as: rule "R1" when i : Item(isPerishable==true, actualDeliveryDate : actualDeliveryDate, scheduledDeliveryDate : scheduledDeliveryDate ) eval( actualDeliveryDate.getDay() - scheduledDeliveryDate.getDay() > 10) then i.isRejected(true); modify(i); end I maintain a number of documents on rule interchange our wiki: http://hydrogen.informatik.tu-cottbus.de/wiki/index.php/Category:Rule_Interchange -Adrian G
Received on Tuesday, 20 May 2008 11:01:15 UTC