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

Reply via email to