[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