我是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.
如果您使用的是支持此功能的SPARQL 1.1引擎(您已经标记了您的问题Jena,因此我假设您正在使用其支持此特性的ARQ引擎),则可以使用属性路径。
因此,您可以编写以下类似的查询:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
?x owl:sameAs+ ?y
}
注意谓词后面的+
,它表示应该查找由一个或多个步骤组成的关系。虽然RobV的答案在你的情况下是正确的,但我认为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. }
同时还返回与:b, :c, :d和:e相关的?p
和?o
。