我正在尝试使用HermiT reasoner来计算包含一组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)
使用属性链和rolification技术:
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结果?有什么建议吗?
答案 0 :(得分: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?。即使它们有效,Protégé编辑器也不接受该输入,但如果它们已经在本体中,它将正确显示规则。)
尽管可以用SWRL表示,但这仅包括个人被命名的情况,因此基于rolification的解决方案将涵盖更多案例。因此,我们的想法是创建一个角色rWorksAtSomeUniversity
(worksAt some University
的翻译)和一个角色rStudent
(Student
的翻译,然后断言
rWorksAtSomeUniversity o supervises o rStudent SubPropertyOf professorOf
然后,要关联professorOf
和instructorOf
,您可以使用SWRL规则
professorOf(x,y)→instructorOf(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