我使用Protege创建了一个本体。
课程 -
m
属性(域/范围)
m.(m+1)/2
现在我在jena fuseki中导入了这个本体。使用OWLMiniFBRuleReasoner配置,然后创建一些实例。
我有以下实例三分之一
N=9, K=3
1 => *2* 3 4 *5* 6 7 *8* 9 => 3
2 => 3 *4* 5 6 *7* 8 9 => 2
3 => 4 5 *6* 7 8 *9* => 2
4 => *5* 6 7 *8* 9 => 2
5 => 6 *7* 8 9 => 1
6 => 7 8 *9* => 1
7 => *8* 9 => 1
8 => 9 => 0
现在,如果我查询
Person
Man
Woman
我得到了结果
Knows(Person / Person)
hasRelationShip(Person / Person)
hasParent(Person / Person)
hasFather(Person / Man)
hasMother(Person / Woman)
hasChild(Person / Person)
hasSon(Person / Man)
hasDaughter(Person / Woman)
如果我查询 -
:Ravi rdf:type :Man .
:Anjani rdf:type :Man .
:Indra rdf:type :Woman .
:Ravi :hasFather :Anjani .
:Ravi :hasMother :Indra .
我得到了结果 -
SELECT DISTINCT ?a ?b WHERE {
?a :hasParent ?b
}
但是如果查询 -
:Ravi - :Anjani
:Ravi - :Indra
我没有明显的理由得到任何结果。
所以问题是,有没有办法告诉推理者 -
SELECT DISTINCT ?a ?b WHERE {
?a :hasChild ?b
}
答案 0 :(得分:0)
是的,有。假设您使用简单的OWL,您可以在Protege中对其进行建模,如下所示:
R_Man
去上课。第EquivalentTo
节添加:
R_Man some Self
转到属性hasSon
。部分SuperPropertyOf (Chain)
,添加:
hasChild o R_Man
不幸的是,这会给你一个Cyclic Dependency错误。我知道这不太理想,但如果您定义hasSon
和hasDaughter
不是hasChild
的子属性,它会为您提供预期的结果。