问题描述
我正在使用 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 (将#修改为@)