如何解决如何在 OWL 本体中查询对象属性
我正在使用 FoodOn 本体,需要弄清楚某个类是否与另一个类有某种关联。典型用例:纯素食者可以吃蜂蜜吗?不,因为蜂蜜是“无脊椎动物的动物食品”的一个子类!
我正在使用 python owlready2 库,它允许我像这样运行 SPARQL 查询和查询子类关系:
SELECT ?class
WHERE
{
# honey
<http://purl.obolibrary.org/obo/UBERON_0036016> rdfs:subClassOf* ?class .
# animal food product
?class rdfs:subClassOf* <http://purl.obolibrary.org/obo/FOodoN_00001176>
}
这段代码为我提供了蜂蜜和动物食品之间的完整子类路径 - 很棒。
我的问题是,这种关系并不总是子类的关系。让我们看看使用 Protege 编辑器的“素食食品”:
我们可以看到“vegetarian food product”是“food product by Organic”的一个子类,但同时它也等同于“food product” 和(不是('源自'一些 (“无脊椎动物”或“脊椎动物”)))。
如果我使用 SPARQL 查看所有三元组,我会得到子类关系,但等效类只是一个 bnode:
(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'),rdflib.term.URIRef('http://purl.obolibrary.org/obo/FOodoN_00002381')),(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'),rdflib.term.BNode('5846'))
[stripped some output]
我确实接受非 Python 解决方案,只要它可以自动化。 Protege 有一个 DL Query 选项卡,但我认为我无法使用 UI 导出结果...
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。