2011-12-20 107 views
9

我是SPARQL的初学者,想知道是否有可以帮助我返回传递关系的查询。例如,下面的n3文件我想要一个将返回“a是相同的c”或沿着这些线的东西的查询。由于SPARQL查询传递

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

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

回答

13

你可以,如果你使用的是能够适当SPARQL 1.1引擎使用属性路径,您标记您的问题耶拿所以我假设你正在使用一个支持此功能的ARQ引擎。

所以你可以编写类似下面的查询:

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

注意+谓语之后,用来指示它应该寻找的一个/多个步骤组成的关系。

属性路径的语法可以找到here和非常正则表达式。使用它的查询唯一的缺点是你没有得到任何有关路径或中间节点的信息。

+0

再次感谢您的帮助。一定要查看SPARQL语法的链接 – Sam 2011-12-20 09:37:24

+3

如果您查询的内容支持OWL推理,特别是包含传递性的OWL配置文件,并且您已将该属性定义为TransitiveProperty,则不需要任何特殊的SPARQL语法,你可以正常使用这个属性,推理者会做正确的事情。 – Michael 2012-05-29 15:39:06

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和针对:b, :c, :d:e发出?o