SPARQL查询传递

Sam*_*Sam 9 rdf inference owl sparql jena

我是SPARQL的初学者,并且想知道是否有一个查询可以帮助我返回传递关系.例如下面的n3文件,我想要一个返回"a is is sameas c"的查询或沿着这些行的东西.谢谢

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

:a owl:sameas :b.
:b owl:sameas :c.
Run Code Online (Sandbox Code Playgroud)

Rob*_*obV 13

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

因此,您可以编写如下查询:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
  ?x owl:sameAs+ ?y
}
Run Code Online (Sandbox Code Playgroud)

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

属性路径的语法可以在这里找到,并且是非常正则的表达式.使用此查询的唯一缺点是您无法获得有关路径有多长或中间节点是什么的任何信息.

  • 如果您要查询的内容支持OWL推理,特别是包含传递性的OWL配置文件,并且您已将该属性定义为TransitiveProperty,那么您不需要任何特殊的SPARQL语法,您只需正常使用该属性即可推理会做正确的事. (3认同)

Jör*_*ees 5

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

让我们通过以下方式扩展您的示例:

:a owl:sameAs :d.
:e owl:sameAs :d.
Run Code Online (Sandbox Code Playgroud)

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

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

DEFINE input:same-as "yes"
select * where { :a ?p ?o. }
Run Code Online (Sandbox Code Playgroud)

还返回?p和 ,并为和?o发行。:b, :c, :d:e