1

我有一个有点奇怪的查询,它一直困扰着我。我有一个应用程序,我需要动态生成子概念(owl:subClassOf)并将它们存储在数据集中,以便可以动态地实例化个体。下面的代码片段生成了一个名为“Arduino”的新概念,它是另一个本体概念的 subClassOf。

datafeed:Arduino rdfs:subClassOf ssn:System.

我尝试使用 JENA 将其插入到我的 TDB 数据存储中。我没有收到任何错误,但我不确定这是否正确。我们可以将子类插入数据存储中,还是数据存储只能包含个人(即类的实例)?关于这个问题,我似乎在脑子里转来转去。我尝试了各种 SPARQL 查询,但我似乎无法确定上述三元组是否存储在数据集中。我尝试了以下查询以查看该概念是否存储在数据集中,但未返回任何结果:

SELECT ?concept
WHERE {
    ?concept a owl:Class.
}

这让我相信结果只返回给个人,而不是类定义......?

这一切都在我的脑海里有点混乱。如果有人能纠正我的理解,那就太好了。

此致

4

1 回答 1

3

Jena(或实际上我知道的任何三元组)存储您添加到其中的所有三元组。您的三元组是否涉及rdfs:subClassOf关系都没有区别。

它是否对您存储的数据执行任何类型的推理是另一回事。这取决于您使用的工具和您选择的配置。您所做的查询假定已经发生了某种形式的推理:如果您启用了推理,datafeed:Arduino它将仅owl:Class作为插入rdfs:subClassOf三元组的结果(即使这样,默认情况下它只会推断它是 的实例rdfs:Class,而不是必然的owl:Class)。

测试您的三元组是否已插入的可靠方法,而不依赖于推理,是实际查询特定的三元组,而不是其隐含的后果,如下所示:

SELECT ?concept
WHERE { ?concept rdfs:subClassOf ssn:System . }

这将返回作为子类的所有概念ssn:System- 如果您的三元组被正确插入,datafeed:Arduino将在结果中。

或者,也许更简单:

ASK WHERE { datafeed:Arduino rdfs:subClassOf ssn:System . } 

true如果商店中存在三元组,则返回,false否则返回。

于 2013-10-22T12:10:20.367 回答