检索 rdf:Class 的所有祖先
-
12-09-2019 - |
题
想象一下以下分类法(非循环图和有向图):
<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)是否有可能 耶拿猫头鹰 API 检查给定资源(例如HomoSapiens)是“哺乳动物”的子类,无需递归检索所有父节点?
2)同样的问题 SPARQL.
谢谢
解决方案
如果您已经使用耶拿,您可以使用使用球团的的 SPARQL-DL查询引擎,它应该让你在本体感知方式查询个人。
另外,你可以使用耶拿的 InfModel
代替Model
接口,附加一个推理(和本体)给它,然后运行该查询RobV提到。您可以使用颗粒的推理这个,如果你想要的。你并不需要使用OntModel
如果你只是想这样做的理由。
其他提示
1)没怎么用过耶拿,但它 本体工具 类似乎包含最低共同祖先的函数。如果智人与哺乳动物的最不共同祖先是哺乳动物,那么智人就是哺乳动物。但在底层,它使用递归 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
}
laalto是正确的,几乎任何语义网库会通过递归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又是完全正确的,在某些情况下,虽然你也许可以做到像下面这样的简单查询,如果三元组库和相关的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 }
1.1 SPARQL具有任意深度图的遍历。它可以用于此目的。看到相关的问题在映泰
ASK { :智人的rdfs:subClassOf +:哺乳动物 }