- From: Paul Vincent <pvincent@tibco.com>
- Date: Tue, 3 Aug 2010 03:07:02 -0700
- To: "Mark Proctor" <mproctor@redhat.com>, "Christian De Sainte Marie" <csma@fr.ibm.com>
- Cc: "Gary Hallmark" <gary.hallmark@oracle.com>, "Neal Wyse" <neal.wyse@oracle.com>, "RIF WG" <public-rif-wg@w3.org>
- Message-ID: <A92210407BA7004199621BE5F0AC5D8B02E5819A@NA-PA-VBE04.na.tibco.com>
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 Tuesday, 3 August 2010 10:07:13 UTC