Re: fulfilment of my action of today <-- Rumblings on why we need classification terms in RIF (and why RDF's vocab should not be used)

Paul,

I have seen users try to write rules like this

IF c is an instance of Car and c.weight > 6000 or t is an instance of 
Truck and t.weight > 6000
THEN assert TooHeavy(c); assert TooHeavy(t);

Unfortunately the above doesn't work very well because for each rule 
firing, c or t may be unbound.

An obvious "fix" is to split the above into 2 rules.

In some ways (e.g. easier to maintain), a better fix is to set up the 
data model so that Car is a subclass of Vehicle, and Truck is a subclass 
of Vehicle.  Now the rule becomes

IF v is an instance of Vehicle and v.weight > 6000
THEN assert TooHeavy(v);

Oracle Business Rules uses Java semantics for "is an instance of" and 
"is a subclass of".  I would like this in RIF.  Otherwise, I don't see 
how I can translate the above rule very easily and have it fire on a 
Truck weighing in excess of 6000.  I would need some way to restrict the 
very general rif:subClassOf (and presumably rif:instanceOf) to Java 
semantics.  I hope that's possible...

Paul Vincent wrote:
> Out of interest (and apologies for the naïve qu's): 
> 1. what would be an example rule here? 
> eg: C1 is a subclass of C0 
> [and by implication C1 inherits properties, maybe default values for such properties, from C0, and inherits method definitions, all subject to any intermediate subclass definition overrides]?
>
> 2. note that for a PR, as discussed in the call yesterday, the most likely equivalents would be:
> - do a class membership query on some instance in a rule condition [not really a subclass test as class relationships are metamodel constructs]
> - allocate an instance to some new class [not supported in most PR engines due to their Java object model base]
>
> The above might explain why for the PR community the question on whether RIF supports this construct is somewhat irrelevant. I can't think how a PR translator would handle such a construct without recreating/simulating an OO model semantics dynamically or getting into code generation...  
>
> [My 2cents contribution is that RDF vocab should only be used if RDF is the only "rule language / data model" requiring this feature OR RDF vocab is a sufficient abstraction of all "rule language / data model"s requiring this feature].  
>
> Paul Vincent
> TIBCO | ETG/Business Rules 
>  
>   
>> -----Original Message-----
>> From: public-rif-wg-request@w3.org [mailto:public-rif-wg-request@w3.org]
>> On Behalf Of Chris Welty
>> Sent: 15 August 2007 02:26
>> To: Michael Kifer
>> Cc: RIF WG
>> Subject: Re: fulfilment of my action of today
>>
>>
>>
>>
>> Michael Kifer wrote:
>>     
>>> Rumblings on why we need classification terms in RIF
>>> (and why RDF's vocab should not be used)
>>> ===================================================
>>>
>>> Two issues: whether we should define facilities for expressing some data
>>> model stuff and whether we should use rdfs for this.
>>>
>>> Rationale:
>>>    If we do not have such constructs then everybody will be inventing
>>>       
>> their
>>     
>>>    own. People will not be able to specify any part of their data model
>>>       
>> in RIF
>>     
>>>    which will reduce the usefulness of RIF as an exchange language.
>>>
>>> Why it is not good to use RDF's facilities to define class hierarchies.:
>>>    RDF is a foreign language whose semantics is burdened with non-
>>>       
>> standard
>>     
>>>    things. For instance, subclass is reflexive.
>>>
>>>    This is bad because not every language out there uses reflexive
>>>       
>> subclasses.
>>     
>>>    For instance, if we map, say, FLORA-2's subclass relationship to
>>>       
>> RDFS's then
>>     
>>>    in the translation (RIF) the query whether foo is a subclass of foo
>>>       
>> will
>>     
>>>    say "yes" but in FLORA-2 it will say "no".
>>>       
>> </chair>
>> No, no - translating flora2:subclass into rdfs:subclass would be
>> incorrect, because they have different semantics.  For me, this is the
>> stronger point in favor of rif:subclass - since so few systems use the
>> rdfs semantics for subclass, very few systems when translating into
>> RIF would use it in their translations.
>>
>> Same for below.  You shouldn't translate ilog:subclass into
>> rdfs:subclass.  So, in fact, as far as we know, only rdfs based
>> systems would ever use rdfs:subclass when translating through rif, and
>> everyone else would have to invent their own.
>> <chair>
>>
>>     
>>>    Let's look at some other examples, like ILOG. From my limited
>>>       
>> experience
>>     
>>>    with it, I remember that it uses Java as its data model. So, suppose
>>>    there is a class foo in ILOG, which comes from Java. An ILOG set of
>>>    rules must not derive "foo sub foo" because this is not true in the
>>>       
>> data
>>     
>>>    model. However, it we translate Java subclass relationship into
>>>    rdfs:subclassOf then the resulting RIF translation should generate
>>>       
>> "foo
>>     
>>>    sub foo". (In truth, as I recall, ILOG does not have "sub" in the
>>>       
>> heads
>>     
>>>    of the rules, but it is easy to imagine that next year ILOG is
>>>       
>> extended
>>     
>>>    with something like a query facility. Then their stock will plummet
>>>    because their rule sets will not be faithfully exchangeable through
>>>       
>> RIF
>>     
>>>    :-)
>>>       
>>
>> --
>> Dr. Christopher A. Welty                    IBM Watson Research Center
>> +1.914.784.7055                             19 Skyline Dr.
>> cawelty@gmail.com                           Hawthorne, NY 10532
>> http://www.research.ibm.com/people/w/welty
>>     
>
>
>   

Received on Thursday, 16 August 2007 05:48:19 UTC