[RuleML-all] Re: Need help to define to understand RuleML

Boley, Harold Harold.Boley at nrc-cnrc.gc.ca
Fri Aug 10 15:08:09 ADT 2007


Hi Baher,

Your current application calls for Integrity Constraints.

In RuleML they are represented as <Entails> KB IC </Entails>:

<http://www.ruleml.org/talks/RuleML-Family-PPSWR06-talk-up.ppt>
(slides 33/34)

<http://www.ruleml.org/0.91/glossary/#gloss-Entails>

Your letters W, X, Y, Z are regarded here as global variables,
as also used to deliver answer bindings for queries.

E.g., your Examples 1) and 6) expand to these Entails elements:

<Entails>
  <Rulebase>
    <!--
    Any KB with global variables
    -->
  </Rulebase> 
  <Neg>  <!-- The 'negative' IC of Example 1) -->
    <Or>
      <Equal>
        <Var>X</Var>
        <Ind>a</Ind>
      </Equal>
      <Equal>
        <Var>X</Var>
        <Ind>b</Ind>
      </Equal>
      <Equal>
        <Var>X</Var>
        <Ind>c</Ind>
      </Equal>
    </Or>
  </Neg>
</Entails>

<Entails>
  <Rulebase>
    <!--
    Any KB with global variables
    -->
  </Rulebase> 
  <Implies>  <!-- The 'implicational' IC of Example 6) -->
    <Equal>
      <Var>Y</Var>
      <Ind>10</Ind>
    </Equal>
    <Or>
      <Equal>
        <Var>W</Var>
        <Ind>0</Ind>
      </Equal>
      <Equal>
        <Var>W</Var>
        <Ind>1</Ind>
      </Equal>
    </Or>
  </Implies>
</Entails>

Such Entails elements are not yet implemented in OO jDREW or
in Prova, although some can, e.g., be regarded as query rules:
<http://www.ruleml.org/usecases/nbbizkb/#NBBizKB>
<http://www.prova.ws/forum/viewtopic.php?t=154>

Best,
Harold


________________________________

From: ruleml-all-bounces at ruleml.org [mailto:ruleml-all-bounces at ruleml.org] On Behalf Of Baher Omar
Sent: Wednesday, August 08, 2007 6:45 PM
To: ruleml-all at ruleml.org
Subject: [RuleML-all] Re: Need help to define to understand RuleML


Thanks very much for your attention, your comments clear things much better for me..
 
I think you thought that I'm against Prova.. That's not correct, I just think my current application requires an easy to read/understand rule language, so virtually anyone, with minimum knowledge of the application, can read/understand what's required from it.. 
I need something that is as close to english language as possible, that would give a lot of power to the application and make it easy/cheaper to maintain..
 
Examples of my rules:
1) The value of X cannot be (a, b, or c).
2) Cannot have a repeated name in a list of user names.
3) Cannot have repeated telephone numbers for the same user.
4) The value of Y must be below 100.
5) The value of Z must be between X and Y.
6) The value of W has to be 0 or 1, if Y is set to 10.
 

Thanks,
-b
 
On 8/8/07, Adrian Paschke <paschke at in.tum.de> wrote: 

	Hi Baher,
	
	Here are some additional explanations on the difference between
	declarative programming and procedural programming: 
	
	The main difference between Java procedural programming with if-then
	rules and declarative rule-based programming (as e.g. in Prova or
	Prolog) is that in Java you need to specify the complete control flow
	and object-oriented infrastructure, e.g. several methods need to be
	implemented according to the input arguments and return types. The
	if-then (else) rules always need to be processed from the beginning rule
	to the end, i.e. the rules form a kind of tree which can be entered at
	the root, only. Further more large parts of the if-then decision logic
	often need to be replicated in several methods according to the input
	arguments and expected outputs of the methods. 
	
	In logic programming rules are written declaratively separated from the
	application (simplifies e.g. management and maintenance) and might form
	a large network of rules which can be entered from anywhere by a query. 
	The rule inference engine automatically performs rule chaining and tries
	to infer the answer. Different queries with free variables, bound
	variables or constants can be asked to the same rule.
	
	In a nutshell, the basic idea of declarative rule-programming is that 
	users employ rules to express what they want; the responsibility to
	interpret this and to decide on how to do it is delegated to an
	interpreter (e.g., an inference engine or a just in time rule compiler).
	
	In recent years rule based technologies have experienced a remarkable
	come back namely in two areas: business rule processing, and reasoning
	in the context of the semantic web.
	
	Best,
	
	Adrian
	
	-----Ursprüngliche Nachricht----- 
	Von: ruleml-all-bounces at ruleml.org
	[mailto:ruleml-all-bounces at ruleml.org] Im Auftrag von Boley, Harold
	Gesendet: Dienstag, 7. August 2007 22:14 
	An: Baher Omar; ruleml-all at ruleml.org
	Betreff: RE: [RuleML-all] Re: Need help to define to understand RuleML
	
	Hi Baher,
	
	Some reasons for embedding a (business) rule engine in Java 
	can be extracted from "The Principles of Rule Independence"
	<http://www.businessrulesgroup.org/brmanifesto.htm>.
	
	Prova and OO jDREW allow you to run subsets of RuleML 0.91
	<http://www.ruleml.org/0.91> as part of an enclosing Java
	environment, with the advantage that RuleML rules are kept
	in separate, easier-to-maintain XML rulebases. 
	
	Can you show us some of your (simpler :-) rules in Java, so
	we have a challenge to do them more declaratively in RuleML?
	
	Prova also supports the evolving Reaction RuleML, for which
	OO jDREW may come up with extensions, too. While findall is 
	not yet in RuleML, this and other aggregation operators are
	certainly quite important for future releases. In bottom-up
	mode, OO jDREW does a kind of findall, but this is not yet
	integrated into the top-down mode. 
	
	Your original example could of course also be implemented in
	other ways. If your data table is represented as a list of
	pair lists <http://www.ruleml.org/0.91/glossary/#gloss-Plex <http://www.ruleml.org/0.91/glossary/#gloss-Plex> >
	(which could also be the result of a findall call), then an
	integrity rule could alert users of duplicate pairs in the
	outer list.
	
	Best,
	Harold
	
	
	________________________________
	
	From: ruleml-all-bounces at ruleml.org
	[mailto:ruleml-all-bounces at ruleml.org] On Behalf Of Baher Omar
	Sent: Friday, August 03, 2007 1:01 AM 
	To: ruleml-all at ruleml.org
	Subject: [RuleML-all] Re: Need help to define to understand RuleML
	
	
	Thanks Adrian for your help..
	
	I read more about Prova and it's a very powerful engine. 
	However, I don't know why I should choose Prova over Java language as my
	language to write my rules!! Java could provide most of the capabilities
	that Prova supports (with a little more development for sure). 
	
	In the matter of fact, all my rules today are implemented in Java.. and
	I want to move away from that by selecting a simple xml based rule
	definitions and a supported engine..
	
	jDREW seems to be simple enough for my needs, but does jDREW support 
	Reaction RuleML and maybe generic functions like (findall)?!
	
	Thanks,
	-b
	
	
	
	On 8/1/07, Adrian Paschke <paschke at in.tum.de> wrote:
	
	   Hi Baher,
	
	   A quick answer, since I m currently travelling.
	
	   You may take a look at the Prova documentation:
	
	   http://www.prova.ws/etc/provauserguide_2_0.pdf <http://www.prova.ws/etc/provauserguide_2_0.pdf> 
	
	   Chapter 4 describes several built-ins. Prova is an open-source
	engine
	   capable of executing Reaction RuleML and in particular supports
	   interchange of event messages.
	
	   We will soon release the next version of Reaction RuleML: 
	
	   http://ibis.in.tum.de/research/ReactionRuleML/0.2/
	
	   Reaction RuleML supports messages and messaging reaction rules
	(rules
	   which send and receive messages), e.g.:
	
	
	http://ibis.in.tum.de/research/ReactionRuleML/0.2/examples/message.rrml
	< http://ibis.in.tum.de/research/ReactionRuleML/0.2/examples/message.rrml <http://ibis.in.tum.de/research/ReactionRuleML/0.2/examples/message.rrml> 
	>
	
	http://ibis.in.tum.de/research/ReactionRuleML/0.2/examples/MessagingRule <http://ibis.in.tum.de/research/ReactionRuleML/0.2/examples/MessagingRule> 
	.rrml
	
	   I will send you are more detailed answer when I m back.
	
	   BTW the deadline for demo submissions to RuleML-2007 has been
	extended:
	
	   http://2007.ruleml.org/ 
	
	   This could be interesting for you to submit a demo to the
	Challenge and
	   meet the business rules and rules standardization community
	
	   Best,
	
	   Adrian
	   ________________________________________ 
	   Von: ruleml-all-bounces at ruleml.org
	   [mailto:ruleml-all-bounces at ruleml.org] Im Auftrag von Baher Omar
	   Gesendet: Mittwoch, 1. August 2007 13:44 
	   An: ruleml-all at ruleml.org
	   Betreff: [RuleML-all] Re: Need help to define to understand
	RuleML
	
	   Thanks Adrian,
	
	   Your answers will certainly help to put me on on the right 
	track!
	
	   I don't think my table has a single key, it might be an
	aggregate key..
	   Nevertheless, I like the idea of findall function.. I basically
	need a
	   search mechanism in my data set..
	   Is there a place where I can find more information about
	well-known
	   functions?
	
	   I was reading on the Reaction RuleML, and I thought that was the
	right
	   RuleML variation for my application.. (Hence I need message 
	based actions).
	   However, I had difficulty finding the correct reading materials
	to learn
	   more about Reaction RuleML, so I decided to go back to the basic
	RuleML
	   and exercise more of it..
	   Is there any open-source rule engine for Reaction RuleML?! 
	
	   To answer your last question, I think my system is more of a
	   verification system. It should have business rules and a
	database. I
	   want to use RuleML to verify the business rules aganist a data
	data
	   before committing data to the database.. Therefore, I need to
	use
	   message based actions to report errors to the end-user.
	   Ultimately, I want to share my business rule with other
	applications and 
	   maybe other parties..
	
	   Thanks again,
	   -b
	
	
	
	   On 8/1/07, Adrian Paschke <paschke at in.tum.de> wrote:
	   Hi Baher,
	
	   The solution depends on how the table data is represented. 
	
	   Assume each row (data set) in the table has a unique id (like a
	primary
	   key) then the fact representation could be tableName(ID,X,Y),
	e.g.
	
	   pair(1,x1,y1).
	   pair(2,x2,y2).
	   &
	
	   A backward-reasoning derivation rule to detect the error could
	then be
	   as follows:
	
	   error(X1,Y2) :- pair(ID1, X1,Y1), pair(ID2, X2,Y2), ID1!= ID2,
	X1=X2,
	   Y1=Y2.
	
	   The RuleML serialization is: 
	
	   <Implies>
	   <head>
	   <Atom><Rel>error</Rel></Atom>
	   <Var>X1</Var>
	   <Var>X2</Var>
	   </head>
	   <body>
	   <And> 
	   <Atom>
	   <Rel>pair</Rel>
	   <Var>ID1</Var>
	   <Var>X1</Var>
	   <Var>Y1</Var>
	   </Atom>
	   <Atom>
	   <Rel>pair</Rel> 
	   <Var>ID2</Var>
	   <Var>X2</Var>
	   <Var>Y2</Var>
	   </Atom>
	   <Not>
	   <Equals>
	   <Var>ID1</Var><Var>ID2</Var>
	   </Equals> 
	   </Not>
	   <Equals>
	   <Var>X1</Var>
	   <Var>X2</Var>
	   </Equals>
	   <Equals>
	   <Var>Y1</Var>
	   <Var>Y2</Var>
	   </Equals> 
	   </body>
	   <Implies>
	
	   If you don t have an ID, then you might use a function like
	   findall(pair(X,Y),pair(X,Y),List) which aggregates all pairs in
	a list
	   which you might traverse and look for repeated members. However, 
	your
	   execution environment needs to support findall (many derivation
	rule
	   engines support it, e.g. Prova).
	
	   You might also use assert and retract update primitives (if
	supported)
	   to implement a global solution. Reaction RuleML 
	   ( http://ibis.in.tum.de/research/ReactionRuleML) is supporting
	derivation
	   rules with update primitives.
	
	   Or is your execution environment a production rule system? XML 
	   serialization of production rules are also addressed by Reaction
	RuleML.
	
	   Best,
	
	   Adrian
	
	   ________________________________________
	   Von: ruleml-all-bounces at ruleml.org
	<mailto:ruleml-all-bounces at ruleml.org>
	   [mailto: ruleml-all-bounces at ruleml.org ] Im Auftrag von Baher
	Omar
	   Gesendet: Mittwoch, 1. August 2007 06:30
	   An: ruleml-all at ruleml.org
	   Betreff: [RuleML-all] Need help to define to understand RuleML 
	
	   I'm new to RuleML and I have difficultly coming up with an
	equivalent
	   RuleML for the following rule:
	
	   "if X is repeated in a sequence of variables then that's an
	error"
	
	   Suppose I have the following table data:
	
	   X Y
	   ----------
	   x1 y1
	   x2 y2
	   x3 y2
	   x1 y1
	   x2 y3
	
	
	   x1 occurs twice under y1, that's the violation I'm looking for.. 
	
	   How can I describe this rule in RuleML?!
	
	   Thanks,
	   -b
	
	
	
	
	
	
	
	_______________________________________________
	RuleML-all mailing list
	RuleML-all at ruleml.org
	http://mail.ruleml.org/mailman/listinfo/ruleml-all
	
	
	




More information about the RuleML-all mailing list