如何解决在 RDFLIB 上使用 OWL-RL 进行传递推理
我正在尝试在我使用 rdflib
创建的 RDF 图上使用 OWL 推理器,如下所示:
ex = Namespace('http://example.org#')
g = Graph()
g.bind("ex",ex)
g.add((ex.Bob,ex.drives,ex.Car))
g.add((ex.Car,RDF.type,ex.Truck))
g.add((ex.Truck,RDFS.subClassOf,ex.Vehicle))
(汽车并不是真正的卡车,但我只是在尝试推理机)。
运行推理器后,我的目标是能够推断出,如果 Bob 驾驶汽车,并且汽车是一种卡车,而卡车是车辆的一个子类,那么 Bob 会驾驶车辆。
当我问一辆车是否是一种交通工具时,结果是True
:
b = g.query("""
PREFIX ex: <http://example.org#>
ASK {
ex:Car rdf:type ex:Vehicle .
}
""")
print('Car is a type of Vehicle:',bool(b)) # prints True
但是当我问 Bob 是否开车时,我得到一个 False
:
b = g.query("""
PREFIX ex: <http://example.org#>
ASK {
ex:Bob ex:drives ex:Vehicle .
}
""")
print('Bob drives a vehicle:',bool(b)) # prints False
我从 this question 中意识到,我可以编写一些代码来添加我想要的三元组类型 推理完成后。但是,如果 OWL/RDF 语义已经支持我想要的行为,我更愿意纠正我的方法并让推理语义发挥作用。我觉得我可能缺少推理应该如何工作的基本原则,但我是这方面的新手,我不确定我做错了什么。任何帮助将不胜感激。
(我通过运行 DeductiveClosure(OWLRL_Semantics).expand(g)
使用 owlrl
进行推理)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。