Tree 检索rdf:Class的所有祖先

Tree 检索rdf:Class的所有祖先,tree,rdf,semantic-web,sparql,jena,Tree,Rdf,Semantic Web,Sparql,Jena,设想以下分类法(非循环有向图): 。 . . . . . 1) 是否可以使用来检查给定资源(例如智人)是否是“哺乳动物”的子类,而无需递归检索所有父节点 2) 我也有同样的问题 谢天谢地,Jena并没有太多使用,但它的类似乎包含了最低共同祖先的函数。如果智人和哺乳动物最不常见的祖先是哺乳动物,那么智人就是哺乳动物。在引擎盖下,它使用递归子类进行检索 2) 在一般情况下,SPARQL不支持任意深度树遍历。但是如果您知道子类树的最大深度,那么您可以构造如下查询 ASK { OPTIONAL {

设想以下分类法(非循环有向图):

。
.
.
.
.
.
1) 是否可以使用来检查给定资源(例如智人)是否是“哺乳动物”的子类,而无需递归检索所有父节点

2) 我也有同样的问题

谢天谢地,Jena并没有太多使用,但它的类似乎包含了最低共同祖先的函数。如果智人和哺乳动物最不常见的祖先是哺乳动物,那么智人就是哺乳动物。在引擎盖下,它使用递归子类进行检索

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

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
}

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

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

<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同样是完全正确的,但在某些情况下,如果您查询的三元组存储和相关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 }
前缀my:
前缀rdf:
询问{my:HomoSapiens rdf:type my:哺乳类动物}

如果您已经在使用Jena,您可以使用Pellet's,它应该允许您以本体感知的方式查询个人


或者,您可以使用Jena的而不是
模型
接口,将推理器(和本体)附加到该接口上,然后运行RobV提到的查询。如果你愿意,你可以用这个。如果只想进行推理,不需要使用
OntModel

SPARQL 1.1具有任意深度图遍历。可以用来做这个。有关问题,请参阅

问{ :智人rdfs:亚纲+:哺乳动物 }

PREFIX my: <http://yournamespace.com>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
ASK { my:HomoSapiens rdf:type my:Mammal }