[rules-users] Logic behind the Rule

Edson Tirelli tirelli at post.com
Thu May 31 18:05:44 EDT 2007


   Rajesh,

    See my previous e-mail, but just to complement, note that the equivalent
translation of your SQL query:

select * from Students s where exists (
    select * from Modules m where m.student_name = s.name and m.score < 40
)

   To a rule is:

rule XXX
when
    $s : Student( $name : name )
    exists Modules( studentName == $name, score < 40 )
then
   // do something
end

    Hope it helps,

   []s
   Edson

2007/5/31, Rajesh.Sachin10 <rajesh_sachin10 at yahoo.co.in>:
>
>
> Following is the Example taken form the following URL:
>
>
> http://labs.jboss.com/file-access/default/members/jbossrules/freezone/docs/3.0.1/html_single/index.html#d0e2144
>
> But this rule is not working for me. If anyone know the logic behind the
> rule, please explain me.
>
> Example:
>
> Imagine we have two classes - Student and Module. Module represents each
> of
> the courses the Student attended for that semester, referenced by the List
> collection. At the end of the semester each Module has a score. If the
> Student has a Module score below 40 then they will fail that semester -
> the
> existential quantifier can be used used with the "less than 40" open
> proposition to check for the existence of a Module that is true for the
> specified criteria.
>
> public class Student {
>     private String name;
>     private List modules;
>
>     ...
> }
> public Class Module {
>     private String name;
>     private String studentName;
>     private int score;
> Java is Turing complete in that you can write code, among other things, to
> iterate data structures to check for existence. The following should
> return
> a List of students who have failed the semester.
>
> List failedStudents = new ArrayList();
>
> for ( Iterator studentIter = students.iterator(); studentIter.hasNext() {
>     Student student = ( Student ) studentIter.next();
>     for ( Iterator it = student.getModules.iterator(); it.hasNext(); ) {
>         Module module = ( Module ) it.next();
>         if ( module.getScore() < 40  ) {
>             failedStudents.add( student ) ;
>             break;
>         }
>     }
> }
> Early SQL implementations where not Turing complete as they did not
> provide
> quantifiers to asses the structure of data. However modern SQL engines
> allow
> nesting of SQL which can be combined with keywords like 'exists' and 'in':
> The following query would return a set of Students who have failed the
> semester.
>
> select
>     *
> from
>     Students s
> where exists (
>     select
>         *
>     from
>         Modules m
>     where
>         m.student_name = s.name and
>         m.score < 40
> )
>
> rule
>     when
>         exists( $student : Student() && Module( student == $student, score
> <
> 40 ) )
>
> --
> View this message in context:
> http://www.nabble.com/Logic-behind-the-Rule-tf3848998.html#a10902431
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070531/6bfc4672/attachment.html 


More information about the rules-users mailing list