From: Harold Boley ([email protected])
Date: 07/30/03
Hi Mike, I agree the discussion you brought up on binary vs. n-ary relations is important. To better understand some of the issues I went back to your rule test cases email (http://www.daml.org/listarchive/joint-committee/1389.html). Since you expect the most common uses will be like property chaining and translation I used these for the use case comparison below. Talk to you again, Harold PS: I put the dots of your N3 examples directly after the closing braces, since my vacation mailer apparently truncates emails with a "." in the 'first column'. Basic property chaining (relational product) ============================================ N3 -- :mike :parent :joe. :joe :brother :leon. { ?child :parent ?p. ?p :brother ?u } => { ?child :uncle ?u }. { :mike :uncle :leon } => { <> test:successful "true" }. Prolog-like ----------- :parent(:mike, :joe). :brother(:joe, :leon). :uncle(?child, ?u) :- :parent(?child, ?p), :brother(?p, ?u). true() :- :uncle(:mike, :leon). Notes: The prefix/URI declarations are omitted here and further on. We may also consider a rule with a conjunctive conclusion (all conjuncts sharing the 'subject' ?u) { ?p :brother ?u } => { ?u :gender :male. ?u :sibling ?p }. to derive :gender and :sibling facts. For many purposes this rule could be split into { ?p :brother ?u } => { ?u :gender :male }. and { ?p :brother ?u } => { ?u :sibling ?p }. However, consider the query { :leon :gender :male. :leon :sibling :joe } => { <> test:successful "true" }. In top-down computations, the conjunctive-conclusion rule would prove the common :brother premise once only, while the split rules would prove it separately, twice. (Such redundant proofs will become inefficient when duplicated premises require long subproofs.) Object-oriented modeling provides further examples where an object (or 'subject') description is better kept as one group rather than split into separate binary relations. For 'subject-centered' conjunctive groupings like :leon :gender :male. :leon :sibling :joe. N3 permits the compact shortcut :leon :gender :male; :sibling :joe. For similar purposes F-logic has developed an unordered 'n-ary' notation, which in the presentation syntax (http://www.daml.org/listarchive/joint-committee/1406.html) lets us render the example as the single fact :leon(:gender->:male; :sibling->:joe). This can be derived from the fact joe(:brother->:leon). via the conjunctive-conclusion rule rewritten as ?u(:gender->:male; :sibling->?p) :- ?p(:brother->?u ! ?rest). with variables ?u and ?p occurring in both subject and object positions (the -- possibly anonymous -- variable ?rest being separated from the named roles by a "!"). Ontology translation/rewriting (with arithmetic) ================================================ N3 -- :yard :lengthInFeet "3". { ?x :lengthInFeet ?feet. ( ?feet "12" ) math:product ?inches } => { ?x :lengthInInches ?inches }. { :yard :lengthInInches "36" } => { <> test:successful "true" }. Prolog-like ----------- :lengthInFeet(:yard, "3"). lengthInInches(?x, ?inches) :- :lengthInFeet(?x, ?feet). math:product([?feet,"12"], ?inches). true() :- :lengthInInches(:yard, "36"). Notes: The fact seems to make translation work for one yard only (invertible integer arithmetic would be conceivable). In the rule, instead of a binary-relation arithmetic premise a ternary-relation premise rule could be used as in lengthInInches(?x, ?inches) :- :lengthInFeet(?x, ?feet). math:product(?feet, "12", ?inches). omitting the [...]-list, hence keeping this test case in the Datalog expressive subset of FOL.
This archive was generated by hypermail 2.1.4 : 07/30/03 EST