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

<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 +:哺乳动物   }

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top