5

想象一下以下分类法(无环和有向图):

<my:Eukaryota> <rdfs:subClassOf> <my:Organism>.
<my:Mammal> <rdfs:subClassOf> <my:Eukaryota>.
<my:Primate> <rdfs:subClassOf> <my:Mammal>.
<my:HomoSapiens> <rdfs:subClassOf> <my:Primate>.
<my:Bacteria> <rdfs:subClassOf> <my:Organism>.
<my:Escherichia> <rdfs:subClassOf> <my:Bacteria>.

1) 是否可以使用Jena OWL API检查给定资源(例如 HomoSapiens)是否是“哺乳动物”的子类,而无需递归检索所有父节点?

2)与SPARQL相同的问题。

谢谢

4

4 回答 4

4

如果您已经在使用 Jena,则可以使用 Pellet 的SPARQL-DL 查询引擎,它可以让您以本体感知的方式查询个人。

或者,您可以使用 JenaInfModel代替Model接口,将推理器(和本体)附加到它,然后运行 ​​RobV 提到的查询。如果你愿意,你可以使用Pellet 的推理器。OntModel如果您只想进行推理,则无需使用。

于 2009-09-22T16:33:53.037 回答
3

1)没有太多使用耶拿,但它的OntTools类似乎包含最低共同祖先的功能。如果智人与哺乳动物的最不共同祖先是哺乳动物,那么智人就是哺乳动物。虽然它在后台使用递归 subClassOf 检索。

2)在一般情况下,不,SPARQL 不支持任意深度树遍历。但是如果你知道 subClassOf 树的最大深度,那么你可以构造一个查询,如

ASK {
  OPTIONAL {
    :HomoSapiens rdfs:subClassOf :Mammal
  }
  OPTIONAL {
    :HomoSapiens rdfs:subClassOf ?c .
    ?c rdfs:subClassOf :Mammal
  }
  OPTIONAL {
    :HomoSapiens rdfs:subClassOf ?c1 .
    ?c1 rdfs:subClassOf ?c2 .
    ?c2 rdfs:subClassOf :Mammal
  }

  # ... add
}
于 2009-09-22T08:40:56.870 回答
2

laalto 是对的,几乎所有语义 Web 库都将通过递归 subClassOf 检索来实现。解决这个问题的唯一方法是拥有一些推理/推理引擎,当原始图形被解析时,它会向图形添加额外的三元组

例如,它会自动添加以下内容:

<my:Eukaryota> <rdf:type> <my:Organism>.
<my:Mammal> <rdf:type> <my:Organism>.
<my:Mammal> <rdf:type> <my:Eukaryota>.
<my:Primate> <rdfs:type> <my:Organism>.
<my:Primate> <rdfs:type> <my:Eukaryota>.
<my:Primate> <rdfs:type> <my:Mammal>.
# etc...

你如何在耶拿做到这一点我不确定,知道耶拿的其他人必须回答这个问题。

至于 SPARQL laalto 又是完全正确的,但在某些情况下,如果您查询的 Triple Store 和关联的 SPARQL 端点具有一些推理能力,您可能能够执行如下所示的简单查询

PREFIX my: <http://yournamespace.com>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
ASK { my:HomoSapiens rdf:type my:Mammal }
于 2009-09-22T09:48:57.660 回答
1

SPARQL 1.1 具有任意深度图遍历。可以用于此。请参阅BioStar上的相关问题

问 { :HomoSapiens rdfs:subClassOf+ :Mammal }

于 2012-11-22T12:25:27.517 回答