All,

Find in the following link, the documentation that is being built for drools 3.

http://labs.jboss.com/portal/jbossrules/docs

  On a quick explanation, the new syntax would be:

------------
rule "name"
   ATTRIBUTES
   when
       LHS
   then
       RHS
end
------------

ATTRIBUTES: those are rule attributes like salience, duration, etc, in a similar way Drools 2.x uses.

LHS: this is the left hand side of the rule. This is the previous "parameter" + "condition" statements. (see bellow)

RHS: this is the right hand side of the rule. This is the consequence, the same way in drools 2.

  I think the simple way to explain LHS is to make a conversion example:


<rule name="First Rule">

<parameter identifier="objA">
 <class>ClassA</class>
</parameter>

<parameter identifier="objB">
 <class>ClassB</class>
</parameter>

<java:condition> objA.getStringAttr().equals("xyz") </java:condition>
<java:condition> objB.getIntAttr() &gt 50 </java:condition>

<java:consequence>
  // some java code
</java:consequence>

</rule>

  The above rule when converted to Drools 3 would became:

rule "First Rule"
when
   ClassA( stringAttr == "xyz" )
   ClassB( intAttr > 50 )
then
   // do some java code
end

If you need a reference to the actual object matched in each "column" (more or less what Drools 2 call parameter), you can bind it in the following way:

rule "First Rule"
when
   objA : ClassA( stringAttr == "xyz" )
   objB : ClassB( intAttr > 50 )
then
   // do some java code
  System.out.println(objA);
  System.out.println(objB);
end

In the documentation you will find syntax diagrams that can help you understand all possible syntaxes and all the new operators/features drools 3 has.

  []s
  Edson


Ronald van Kuijk wrote:

AINAE, but it could be as simple as 'replacing' condition with when and
consequence with then, but I'll let the experts tell me.

Ronald

2006/4/13, Dmitry Goldenberg <[EMAIL PROTECTED]>:
I don't understand the relationship between the XML-based DRL notation and
this new lingo with "when" / "then".

With the DRL notation, my understanding is that you write an XML structure
like the one I'm including below.  How does this change with the when/then
notation?  Thanks.


<?xml version="1.0"?>

<rule-set name="SamplePolicyRuleSet"

 xmlns="http://drools.org/rules";

 xmlns:java="http://drools.org/semantics/java";

 xmlns:xs="http://www.w3.org/2001/XMLSchema-instance";

 xs:schemaLocation="http://drools.org/rules rules.xsd
http://drools.org/semantics/java java.xsd">



 <!-- Imports -->

 <java:import>java.lang.Object</java:import>

 <java:import>java.lang.String</java:import>

 <!-- Utility functions -->

 <java:functions>

   public boolean f1(com.weblayers.platform.rule.PolicyExecContextcontext)

   {

       return ...;

   }

   public boolean f2(com.weblayers.platform.rule.PolicyExecContextcontext)

   {

       return ...;

   }

 </java:functions>



 <!-First Rule: IF (P1 AND P2) THEN RETURN OK -->

 <rule name="First Rule">

   <!-- Rule parameters -->

   <parameter identifier="context">

     <class>MyContext</class>

   </parameter>



   <!-- Rule Conditions -->

   <java:condition>

     f1() && f2()

   </java:condition>



   <!-- Rule Consequences -->

   <java:consequence>

      context.setReturn(Constants.OK);

   </java:consequence>

 </rule>



 <!-Second Rule: IF (!(P1 AND P2)) THEN RETURN FAILURE -->

 <rule name="Second Rule">

   <!-- Rule parameters -->

   <parameter identifier="context">

     <class>MyContext</class>

   </parameter>



   <!-- Rule Conditions -->

   <java:condition>

     !(f1() && f2())

   </java:condition>



   <!-- Rule Consequences -->

   <java:consequence>

      context.setVerdict(Constants.FAIL);

   </java:consequence>

 </rule>



</rule-set>








--
 ---
 Edson Tirelli
 Auster Solutions do Brasil
 @ www.auster.com.br
 +55 11 5096-2277 / +55 11 9218-4151


Reply via email to