我正在尝试使用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 结果?有什么建议么?