SPARQL查询传递

时间:2011-12-20 01:36:39

标签: rdf sparql jena owl inference

我是SPARQL的初学者,并且想知道是否有一个查询可以帮助我返回传递关系。例如,下面的n3文件我想要一个返回" a的查询与c"或类似的规定。谢谢

@prefix : <http://websitename.com/links/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .

:a owl:sameas :b.
:b owl:sameas :c.

2 个答案:

答案 0 :(得分:13)

如果您使用的是适当启用的SPARQL 1.1引擎,则可以使用属性路径,您已经标记了Jena的问题,因此我假设您正在使用支持此功能的ARQ引擎。

所以你可以编写如下的查询:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
  ?x owl:sameAs+ ?y
}

注意谓词后的+,用于表示它应该查找由一个/多个步骤组成的关系。

可以找到属性路径的语法here,这是非常正则的表达式。使用此查询的唯一缺点是,您无法获得有关路径的长度或中间节点的信息。

答案 1 :(得分:4)

虽然RobV's answer在你的情况下是正确的,但我认为owl:sameAs的双向性质值得一提。

让我们通过这个扩展你的例子:

:a owl:sameAs :d.
:e owl:sameAs :d.

在这种情况下,简单的owl:sameAs+不足以找到:e,因此可以使用类似(owl:sameAs|^owl:sameAs)+的内容来查找整个等价树。请注意,根据端点,这可能会导致循环。

也可能有特定于实现的扩展来处理owl:sameAs推理,例如在Virtuoso中:

DEFINE input:same-as "yes"
select * where { :a ?p ?o. }

同时返回为?p?o颁发的:b, :c, :d:e