SPARQL 查询传递

Posted

技术标签:

【中文标题】SPARQL 查询传递【英文标题】:SPARQL Querying Transitive 【发布时间】:2012-01-24 02:00:39 【问题描述】:

我是 SPARQL 的初学者,想知道是否有一个查询可以帮助我返回传递关系。例如下面的 n3 文件,我想要一个返回“a is the sameas c”或类似内容的查询。谢谢

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

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

【问题讨论】:

【参考方案1】:

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

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

PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE

  ?x owl:sameAs+ ?y

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

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

【讨论】:

再次感谢您的帮助。一定要查看有关 SPARQL 语法的链接 如果您查询的事物支持 OWL 推理,特别是包含传递性的 OWL 配置文件,并且您已将属性定义为 TransitiveProperty,那么您不需要任何特殊的 SPARQL 语法,您可以正常使用属性,推理器会做正确的事情。【参考方案2】:

虽然 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. 

还返回为:b, :c, :d:e 发布的?p?o

【讨论】:

以上是关于SPARQL 查询传递的主要内容,如果未能解决你的问题,请参考以下文章

SPARQL 查询返回空结果集

知识图谱学习与实践——通过例句介绍Sparql的使用

为啥这个 SPARQL 查询超时以及如何优化这个查询?

SPARQL 查询根据语句的顺序返回不同的结果

sparql_01_简介

如何优化我的递归 SPARQL 查询?