OWL本体中具有自定义规则的类

时间:2016-01-09 17:26:36

标签: owl ontology fuseki apache-jena

我使用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
            }

1 个答案:

答案 0 :(得分:0)

是的,有。假设您使用简单的OWL,您可以在Protege中对其进行建模,如下所示:

  • 创建对象属性R_Man
  • 去上课。第EquivalentTo节添加:

    R_Man some Self

  • 转到属性hasSon。部分SuperPropertyOf (Chain),添加:

    hasChild o R_Man

不幸的是,这会给你一个Cyclic Dependency错误。我知道这不太理想,但如果您定义hasSonhasDaughter不是hasChild的子属性,它会为您提供预期的结果。