W3C home > Mailing lists > Public > public-rif-wg@w3.org > August 2010

Re: [PRD] Rule instances, refraction and Modify [Was: Re: Fwd: Clips behavior]

From: Gary Hallmark <gary.hallmark@oracle.com>
Date: Wed, 04 Aug 2010 09:49:40 -0700
Message-ID: <4C599A24.2020207@oracle.com>
To: Paul Vincent <pvincent@tibco.com>
CC: Mark Proctor <mproctor@redhat.com>, Christian De Sainte Marie <csma@fr.ibm.com>, Neal Wyse <neal.wyse@oracle.com>, RIF WG <public-rif-wg@w3.org>
rule engines combined with Java objects (or other OOPL) will be 
compatible when
a. there is a specification of the semantics of the combination of 
rules+objects
b. the rule engines conform to the spec

RIF does not specify the semantics of rules+java objects, only of 
rules+frames/relations, rules+rdf/owl, and (in progress) rules+xml.

I think we are in agreement. RIF does not specify the semantics of 
rules+objects, including all the issues with slots,etc. that you mention.

The hope is that rules+frames are a useful approximation to 
rules+objects, and will be a basis for compatibility when "simple" 
(frame-like) objects are combined with rules.

On 8/4/2010 1:07 AM, Paul Vincent wrote:
> Hi Gary: surely dealing with XML rather than Java misses the point over
> rule engine compatibility - all the slot discussions below are relevant
> to any hierarchical data structure including XML and DB data AND any
> "BRE" (PRD engine). And we are interested in runtime semantics, surely?
>
> It may well be that PRDv1 covers all these... but for a "rule standard"
> it would be good to see what (1) current BRE (PRD engine) behaviours are
> in these cases, (2) how they vary, (3) what additional constructs (if
> any) are needed in PRD to cover.
>
> Unless I missed some large part of PRDv1!
>
> Paul Vincent
>
>    
>> -----Original Message-----
>> From: Gary Hallmark [mailto:gary.hallmark@oracle.com]
>> Sent: 03 August 2010 23:31
>> To: Paul Vincent
>> Cc: Mark Proctor; Christian De Sainte Marie; Neal Wyse; RIF WG
>> Subject: Re: [PRD] Rule instances, refraction and Modify [Was: Re:
>>      
> Fwd:
>    
>> Clips behavior]
>>
>> The issue here is that a RIF frame differs quite a bit from a Java
>> Object.
>> RIF semantics are quite clear and not at all vague when it comes to
>> specifying exactly what happens to your frames.
>> The practical problem is that RIF says absolutely nothing about what
>> happens to your Java Objects.
>> The good news is that many users don't care about Java Objects, they
>> care about XML data. And we are working on that.
>>
>> Paul Vincent wrote:
>>      
>>> Surely "slot specific" is itself a simplification from an OO
>>> perspective... the possible events driving rule inferencing can
>>>        
>> include:
>>      
>>> - object change (i.e. some change to any slot associated with an
>>>        
>> object)
>>      
>>> - object change due to a change in a referred object (i.e. an object
>>> referenced in a slot is changed)
>>>
>>> - slot change (i.e. an update operation was carried out on a slot)
>>>
>>> - slot value change (i.e. the value was updated AND the value was
>>> different to what was before)
>>>
>>> - expression result change (i.e. the filter or join expression
>>>        
> result
>    
>>> in some rule condition was changed)
>>>
>>> - overall expression result change (i.e. the overall condition
>>> expression is changed)
>>>
>>> Etc
>>>
>>> Possible rule tests that need to be considered are:
>>>
>>> - existence of a member of a class
>>>
>>> - number of members of a class
>>>
>>> - member of a class with a property value X
>>>
>>> - member of a class with a property value that is a member of
>>>        
> another
>    
>>> class
>>>
>>> Etc
>>>
>>> Unless all these are mapped out, with test cases and results for
>>> participating engines, then we won't know how to best define RIF PRD
>>> default specifications and boundary cases will remain "vague".
>>>
>>> Paul Vincent
>>>
>>> +1 650 206 2493 / mobile +44 781 493 7229
>>>
>>> *From:* public-rif-wg-request@w3.org
>>> [mailto:public-rif-wg-request@w3.org] *On Behalf Of *Mark Proctor
>>> *Sent:* 03 August 2010 10:37
>>> *To:* Christian De Sainte Marie
>>> *Cc:* Gary Hallmark; Neal Wyse; RIF WG
>>> *Subject:* Re: [PRD] Rule instances, refraction and Modify [Was: Re:
>>> Fwd: Clips behavior]
>>>
>>> On 19/01/2010 12:13, Christian De Sainte Marie wrote:
>>>
>>>
>>> All,
>>>
>>> csma wrote on 18/01/2010 15:43:48:
>>>        
>>>> 2. in CLIPS, the Modify is, really, a Retract followed by an
>>>>          
> Assert,
>    
>>>> [..]
>>>>
>>>> That point is not really a problem, as far as regards CR etc,
>>>> because this, is, really, what the spec says it does, already.
>>>>          
>>> I meant that the spec says that the to-be-modified Frames are
>>>        
> removed
>    
>>> from the fact base before the modified one is added.
>>>
>>> Unfortunately, that is not enough: we need the modified frame to be
>>> considered a new fact wrt refraction. That means that we need to
>>>        
> take
>    
>>> into account the transition state after the to-be-modified facts
>>>        
> have
>    
>>> been removed, and before the modified frame is added.
>>>
>>> In other words, Modify cannot an atomic action, from the conflict
>>> resolution viewpoint :-(
>>>
>>> Of course, we can specify around that problem, and make Modify
>>>        
> atomic
>    
>>> from a transactional point of view, but not from a semantical one.
>>> That would be rather kludgy, but that is feasible.
>>>
>>> Another solution is to remove Modify altogether: if it is not atomic
>>> wrt the operational semantics, it does not really serve a purpose
>>> anymore in PRD (it was already kludgy, anyway, because it is hard to
>>> make good sense of Modify for multi-valued slots).
>>>
>>>  From a design point of view, that seems the right solution (a Modify
>>> action can be added back, with the appropriate semantics, if and
>>>        
> when
>    
>>> we specify an object-oriented dialec).
>>>
>>> What shall we do?
>>>
>>> I'm a little confused over what the problem is here. I feel we are
>>> mixing implementation details up with execution behaviour. If we are
>>> talking about the issue of refraction, this isn't related to modify
>>> being atomic. I don't see how modify with a retract+assert or a
>>>        
>> single
>>      
>>> propagation should matter. In either the fact still has the same
>>> timestamp on it when it was first inserted. Or are we discussing
>>> whether whether a modification is a propagation of the field changes
>>> as triples compared to the entire fact object? for the changes as
>>> tripples versus entire object, I think the implementation there
>>>        
> isn't
>    
>>> important what is important is the resulting behaviour; i.e.
>>> slot-specific or not. Slot-specific means a pattern only reacts to
>>> changes to fields it constrains on. With regards to refraction being
>>>        
>> a
>>      
>>> part of the spec or not; having it as mandatory isn't possible as
>>>        
>> some
>>      
>>> engines don't implement it; modify does not need to be atomic for
>>> refraction, it wasn't for OPS5.
>>>
>>> Drools, Clips (not Clips COOL) and Jess (not slot-specific) treat
>>> modify as an update to the entire fact; because it retracts+asserts
>>> the entire fact, not the field+value that was modified. Clips COOL
>>> implements it's Objects as triples, thus a modify is actually a
>>> retract+assert of a set of triples not the entire object; providing
>>> slot-specific type behaviour. Drools 5.1 does a single proapgation
>>>        
>> (of
>>      
>>> the entire fact), instead of retract+assert, this has no behavioural
>>> impact apart from on the TMS and agenda events.
>>>
>>> My suggestions are:
>>> 1) Add refraction as engine behaviour configuration.
>>> Refraction on/off
>>> -Drools, Clips and Jess cannot have refraction on. JRules and OPSJ
>>> (fico) can. JRules can generate rules using refresh after every
>>>        
>> modify
>>      
>>> if refraction is off . Drools will add refraction for it's next
>>> release to bring inline with jrules and opsj.
>>>
>>> 2) Modify should be defined as a single action that includes the
>>> fields being modified. Whether the engine implements this as
>>> retract+assert or as a single propagation should be an engine
>>> implementation detail; likewise whether it's a propagation of
>>>        
> triples
>    
>>> or the entire fact is engine implementation detail.
>>> -Timestamp on the fact does not change for a modify, it is the same
>>>        
>> as
>>      
>>> when the fact was inserted.
>>> -We may however want to keep a recency timestamp that is updated for
>>> the modify. I don't know what other engines do here.
>>> -Later we may need to address the characteristics of TMS, as that is
>>> impacted by the retract+assert. Likewise if we ever decicide to
>>>        
>> define
>>      
>>> event models, i.e activation created, cancelled, modified.
>>> -Later we may want to allow the modification as a propagation of
>>> triples to give slot-specific behaviour. Jess allows both
>>>        
> behaviours,
>    
>>> by supporting an attribute controlloing the behaviour of a field;
>>> Clips does not. For Clips deftemplates work with a modify being for
>>> the entire fact and COOL as modification just for that tripple.
>>>
>>> 3) Add no-loop behaviour as engine configuration. There are three
>>> options here off (no-loop not supported), on such that a rule cannot
>>> add itself to the agenda (rule specific) regardless of the data, on
>>> such that a rule cannot add itself to the agenda for the current set
>>> of firing data but it can add itself for other new sets of data
>>> (data-specific).
>>> -off/rule-specific/data-specific."off" indicates the no-loop is not
>>> supported.
>>> -If refraction is on then only no-loop off or rule-specific is
>>> relevant. data-specific while allowed would be ignored, as it has no
>>> impact as that is already part of the refraction behaviour. That
>>>        
> does
>    
>>> not mean that refraction == no-loop (data-specific), refraction is
>>> that plus a lot more.
>>>
>>> Mark
>>>
>>>
>>> Christian
>>>
>>> IBM
>>> 9 rue de Verdun
>>> 94253 - Gentilly cedex - FRANCE
>>> Tel. +33 1 49 08 35 00
>>> Fax +33 1 49 08 35 10
>>>
>>>        
Received on Wednesday, 4 August 2010 16:50:52 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 4 August 2010 16:50:53 GMT