Here is how I would do it:
[RuleMotherMutipleBirths: (?person rdf:Type ex:FemalePerson) (?parent ex:person_Child ?Child1) (?parent ex:person_Child ?Child2) notEqual(?Child1,?Child2) (?Child1 ex:person_Birthday ?ChildBirthday) (?Child2 ex:person_ Birthday? ChildBirthday) -> (?parent ex:person_ChildrenType ex:HasMultipleBirth) (?Child1 ex:sameBirth ?Child2) (?Child2 ex: sameBirth ?Child1)] A couple of things to watch out for here: · This rule will cover any multi berth situation (twins, triplets, etc) · The kids must come from the same birth, not just have the same birthday or age. Therefore the parent must be a female. · The rule will not work if the twins are born on two different days. · Not sure the word Birth is the right one, try to find a better one. Look at https://jena.apache.org/documentation/inference/#builtin-primitives for inspiration. Now you can write a rule that shows that a man has twins. I’ll leave that for you to try. Niels -----Original Message----- From: lookman sanni [mailto:[email protected]] Sent: Wednesday, August 3, 2016 22:55 To: [email protected] Subject: RE: Notation 3 Rule specification Thanks Niels for the reply. [AgeRule: (?person1 ex:person_Age ?age) (?person2 ex:person_Age ?age) -> (?person1 ex:sameAge ?person2)] works fine for the purpose. Now let's assume that person1 has two properties: sonAge and daughterAge and I would like to infer a rule like person1 hasTwins. How would I write it ? Thanks, Lookman Le 4 août 2016 06:42, "Niels Andersen" <[email protected]> a écrit : > A general recommendation, please make sure that the properties that > you choose clearly describes the direction of the relationship. It is > not clear if ?f or ?a is the father. > > There are probably a million opinions about how to do this, my general > recommendation is to create properties that show the class to the left > and the relationship to the right, so ?a ex:person_Father ?b would > mean that ?a's father is ?b. It also makes it clear that the domain of > ex:person_Father is ex:Person and the range of ex:person_Father is > ex:Father. > > Not sure if I understand your question, but you could do the following > to compare ages > [AgeRule: (?person1 ex:person_Age ?age) (?person2 ex:person_Age ?age) > -> > (?person1 ex:sameAge ?person2)] > > This rule would only trigger if both ?person1 and ?person2 are the > same age. > > More specifically you could say: > > [UncleRule: (?person experson_Father ?father) (?father > ex:person_Brother > ?uncle) -> (?person ex:person_Uncle ?uncle)] > [UncleAgeRule: (?person1 ex:person_Uncle ?person2) (?person1 > ex:person_Age > ?age) (?person2 ex:person_Age ?age) -> (?person1 > ex:hasUncleWithSameAge ?person2)] > > Not sure why you would do that, but it is just an example. > > Niels > > > -----Original Message----- > From: lookman sanni [mailto:[email protected]] > Sent: Wednesday, August 3, 2016 20:37 > To: [email protected] > Subject: Notation 3 Rule specification > > Hi all, > > I am beginning with Jena and I struggle with the specification of a > rule that would help infer new statements. > > More concretely, I would like to know how to compare values of > different properties of a same resource in a rule file, following the n3 > syntax. > > E.g. [rule1: (?f pre:father ?a) (?u pre:brother ?f) -> (?u pre:uncle > ?a)] > > If we assume f and u have a property age and I would like to test > whether that property has the same value or not for both, how would I do it ? > > Thanks, Lookman >
