- From: Gary Hallmark <gary.hallmark@oracle.com>
- Date: Wed, 15 Aug 2007 22:48:07 -0700
- To: Paul Vincent <pvincent@tibco.com>
- CC: Chris Welty <cawelty@gmail.com>, Michael Kifer <kifer@cs.sunysb.edu>, RIF WG <public-rif-wg@w3.org>
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