检索rdf:Class的所有祖先

时间:2009-09-22 07:47:55

标签: tree rdf semantic-web sparql jena

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

<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)是否是'Mammal'的子类而不递归检索所有父节点?

2)与SPARQL相同的问题。

由于

4 个答案:

答案 0 :(得分:4)

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

或者,您可以使用Jena的InfModel代替Model界面,附加推理器(和本体),然后运行RobV提及的查询。如果您愿意,可以使用Pellet's reasoner。如果您只想进行推理,则无需使用OntModel

答案 1 :(得分:3)

1)没有多少使用Jena,但它的OntTools类似乎包含最低共同祖先的函数。如果HomoSapiens和Mammal的最不常见的祖先是哺乳动物,那么HomoSapiens就是哺乳动物。在引擎盖下,它使用递归的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
}

答案 2 :(得分: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 }

答案 3 :(得分:1)

SPARQL 1.1具有任意深度图遍历。哪个可用于此。请参阅BioStar

上的相关问题

ASK {     :HomoSapiens rdfs:subClassOf +:哺乳动物   }