我是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.
答案 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
。