1

我正在尝试使用HermiT 推理器来计算包含一组 OWL 公理和 SWRL 规则的本体的推理:

Ontology(
  ClassAssertion( :Student :Bob )
  ClassAssertion( :Professor :DrBoffin )
  ClassAssertion( :University :UF )
  ObjectPropertyAssertion( :supervises :DrBoffin :Bob )
  ObjectPropertyAssertion( :worksAt :DrBoffin :UF )

  EquivalentClasses( :Student ObjectHasSelf( :r1 ))
  EquivalentClasses(
    ObjectHasSelf( :r2 )
    ObjectSomeValuesFrom( :worksAt :University ))
  SubObjectPropertyOf(
    ObjectPropertyChain( :r2 :supervises :r1 ) :professorOf )

  DLSafeRule(Body(ObjectPropertyAtom( :professorOf Variable( ?x ) Variable( ?y )))
             Head(ObjectPropertyAtom( :instructorOf Variable( ?x ) Variable( ?y ))))
)

基本上,OWL 部分试图表达这样一个规则:

worksAt(x, y), University(y), supervises(x, z), Student(z) -> professorOf(x, z)

使用属性链和转换技术:

规则

SWRL 部分是:

professorOf(x, y) -> instructorOf(x, y)

预期输出应同时包含ObjectPropertyAssertion( :professorOf :DrBoffin :Bob )ObjectPropertyAssertion( :instructorOf :DrBoffin :Bob )。但是,实际输出是(仅显示对象属性)

ObjectPropertyAssertion( :r1 :Bob :Bob )
ObjectPropertyAssertion( :professorOf :DrBoffin :Bob )
ObjectPropertyAssertion( :r2 :DrBoffin :DrBoffin )
ObjectPropertyAssertion( :supervises :DrBoffin :Bob )
ObjectPropertyAssertion( :worksAt :DrBoffin :UF)

为什么没有出现预期的 SWRL 结果?有什么建议么?

4

1 回答 1

1

重新阅读您的问题后,我意识到您试图代表的规则是

worksAt(x, y), University(y), supervises(x, z), Student(z) →professorOf(x, z)

但是你试图代表它,基本上是通过

(在某些大学工作)(x),监督(x,z),学生(z)→教授(x,z)

这实际上是一个有效的 SWRL 规则,即使它有一个复杂的类表达式。(有关更多信息,请参阅Can OWL Class Expressions be used in SWRL Rules?

虽然它可以用 SWRL 表示,但这只会涵盖个人被命名的情况,因此基于 rolation 的解决方案将涵盖更多的情况。所以,这个想法是创建一个角色rWorksAtSomeUniversity( 的角色化worksAt some University)和一个角色rStudent( 的角色化Student,然后断言

rWorksAtSomeUniversity o supervises o rStudent SubPropertyOf professorOf

然后,要关联professorOfand instructorOf,您可以使用 SWRL 规则

教授(x,y) → 教授(x,y)

或子属性公理

professorOf SubPropertyOf instructorOf

与基于 rolification 的规则一样,非 SWRL 规则将涵盖更多情况,并且不需要推理器具有 SWRL 支持。

这是一个包含这些类和公理的本体,采用 OWL 函数式语法。它不是人类可读的,但它是完整的;你应该可以下载它并用你的推理器测试它。

Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)
Prefix(owl:=<http://www.w3.org/2002/07/owl#>)
Prefix(ex:=<http://www.example.com/university#>)
Prefix(xml:=<http://www.w3.org/XML/1998/namespace>)
Prefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
Prefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)

Ontology(<http://www.example.com/university>

Declaration(Class(ex:Professor))
Declaration(Class(ex:Student))
EquivalentClasses(ex:Student ObjectHasSelf(ex:rStudent))
Declaration(Class(ex:University))
Declaration(ObjectProperty(ex:instructorOf))
Declaration(ObjectProperty(ex:professorOf))
SubObjectPropertyOf(ex:professorOf ex:instructorOf)
Declaration(ObjectProperty(ex:rStudent))
Declaration(ObjectProperty(ex:rWorksAtSomeUniversity))
Declaration(ObjectProperty(ex:supervises))
Declaration(ObjectProperty(ex:worksAt))
Declaration(NamedIndividual(ex:Bob))
ClassAssertion(ex:Student ex:Bob)
Declaration(NamedIndividual(ex:DrBoffin))
ClassAssertion(ex:Professor ex:DrBoffin)
ObjectPropertyAssertion(ex:supervises ex:DrBoffin ex:Bob)
ObjectPropertyAssertion(ex:worksAt ex:DrBoffin ex:UF)
Declaration(NamedIndividual(ex:UF))
ClassAssertion(ex:University ex:UF)
EquivalentClasses(ObjectHasSelf(ex:rWorksAtSomeUniversity) ObjectSomeValuesFrom(ex:worksAt ex:University))
SubObjectPropertyOf(ObjectPropertyChain(ex:rWorksAtSomeUniversity ex:supervises ex:rStudent) ex:professorOf)
)

Pellet 和 HermiT 1.3.7 都可以产生推论:

DrBoffin professorOf Bob
DrBoffin instructorOf Bob
于 2013-06-11T03:08:02.267 回答