如何在 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 编辑器的“素食食品”:

Protege screenshot

我们可以看到“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]
  1. 为什么 SPARQL 不返回所有关系?
  2. 如何查询属于“素食食品”子类或通过某些其他对象属性与之相关的所有类?
  3. 另外,如何查询上述示例中的 'AND''OR' 组件?

我确实接受非 Python 解决方案,只要它可以自动化。 Protege 有一个 DL Query 选项卡,但我认为我无法使用 UI 导出结果...

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...