【问题标题】:Retrieving all the ancestors of a rdf:Class检索 rdf:Class 的所有祖先
【发布时间】:2009-09-22 07:47:55
【问题描述】:
想象以下分类法(无环图和有向图):
<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 相同的问题。
谢谢
【问题讨论】:
标签:
tree
rdf
semantic-web
sparql
jena
【解决方案2】:
1) 没有太多使用 Jena,但它的 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
}
【解决方案3】:
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 }
【解决方案4】:
SPARQL 1.1 具有任意深度图遍历。可以用于此。在BioStar查看相关问题
问{
:HomoSapiens rdfs:subClassOf+ :哺乳动物
}