- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Mon, 2 Mar 2009 13:07:22 -0500
- To: Christian de Sainte Marie <csma@ilog.fr>
- Cc: RIF WG <public-rif-wg@w3.org>
Christian, these things are called path expressions and they are not necessarily single-valued. For instance, FLORA-2 uses them alongside the frames, and they are simply shortcuts for some forms of conjunctions of frames. Regarding your puzzle ?x[attr->?x.attr], it is a shortcut for ?x[attr->?y] /\ ?x[attr->?y]. If you are treating x.attr procedurally then you might get into trouble. michael On Mon, 02 Mar 2009 18:52:43 +0100 Christian de Sainte Marie <csma@ilog.fr> wrote: > All, > > I completed my ACTION-592, and opened ISSUE-94 on the RIF representation of objects' attributes and methods. > > I also have a proposal to reslove the issue, btw :-) > > My proposal for dealing with object would be to extend PRD terms (BLD basic terms) to include a construct to represent the value of an object member (attribute or method); that is, instead of adding a frame-like atomic formula for single-valued attributes. > > That would add another kind of TERM, in addtion to the Const, Var and External function call (and Expr for uninterpreted functions, in BLD): in the following, I call it a "Getter", but it is probably not very difficult to find a better name. > > The essential idea is that, as a term, it has one single value, and that it is compatible with the frame, too. > > To represent a Getter, one needs to represent the "object" (from which the value is got) and the "member" (that indicates how the value is got from the object). The object is represented by a TERM and the member is represented by a "Const" or "Expr", depending on whether the value to be got is assigned to an attribute of the object, or whether it is returned by a method of the object. The presentation syntax could look like (see also attached diagram): > > TERM ::= IRIMETA? (Const | Var | 'External' '(' Expr ')' | Getter) > Getter ::= TERM '.' (Const | Expr) > > And the XML syntax: > > <Getter> > <object> TERM </object> > <member> [ Const | Expr ] </member> > </Getter> > > Assume, for instance, that a variable ?p is bound to an object of the class person: > > CLASS Person > Integer : age > Person : spouse > Person : childFromSpouse(Person : child) > > where childFromPreviousSpouse is a method that takes a Person as its single argument and that returns the Person with whom ?p had the child bound to ?ps. > > ?p.age is a Getter, with TERM: ?p the object and Const: age the identifier of the field; > ?p.spouse.age is also a well-formed Getter, with Getter: ?p.spouse the object and Const: age, again, the identifier of the field; > and ?p.childsFormPreviousSpouse(?ps) is a Getter as well. > > Such a Getter TERM would allow atomic condition elements such as: ?p.age > 18, etc. > > In PRD, we would need to add a "setter" action: Set(Getter, TERM), that would replace the value of the first argument (the Getter) by the value of the second argument. > > And, btw, we could then restrict the intitialization part, in the declaration of an action variable, to be a TERM, thus avoiding the ambiguity of allowing (multi-valued) frames. That would make "New" a TERM, too, btw, which makes sense... > > Finally, it is compatible with Frames, as far as I can see. At least, there is an easy fallback to Frames in Core (if Core does not add the Getter as well), since a Getter obj.mem in a expression can always be replaced by a variable and the expression wrapped inside an existential quantifier for that variable, and conjoined with a Frame that cpnstrain the bonding of the variable. E.g.: > ?p.age > 18 > would fallback to > Exists ?a (?p[age->?a] AND ?a > 18) > > Of course, we would need multiple existential variables for chained fieds: > ?p.spouse.age > 18 > would give > Exists ?s (?p[spouse->?s AND (Exists ?a (?s[age->?a] AND ?a > 18))) > > Of course, that does not truly address the relationship betweem Frames and single-valued attributes in objects (e.g. whether ?x[attr->?x.attr] etc), but that is probably out of RIF's scope, anyway. > > Notice that the above proposal does not cover the use of boolean methods as condition elements in rule conditions: that would require to add an (external) atom equivalent of the Getter, restricted to the TERM.Expr syntax. > > Discussion? > > Cheers, > > Christian > > >
Received on Monday, 2 March 2009 18:08:00 UTC