SPARQL连接两个对象的路径是哪条? [英] SPARQL which is the path connecting two objects?

查看:19
本文介绍了SPARQL连接两个对象的路径是哪条?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我只想知道两个节点之间是否存在关系,以及连接它们的谓词是否存在。 假设我的图表如下所示

                    [Uri1]
                 /          
          (pred:a)          (pred:b)    
         /                 /       
    [Uri2]      [Uri3]  [Uri4]      [Uri5]
    /      
(pred:c) (pred:d)  
  /             
[Uri6]         [Uri7]
                  
                  (pred:a)
                     
                     [Uri8]

如果查询查找的是Uri8和Uri1之间的关系,则预期结果应为

[Uri7]=pred:A

[URI2]=pred:d

[URI1]=pred:A

考虑节点之间的谓词(关系)可能不同,长度也可能不同。

以下两项: SPARQL: is there any path between two nodes?Is it possible to return relationships between two objects in SPARQL? 不工作

推荐答案

这些问题中的方法确实有效,不过Is it possible to get the position of an element in an RDF Collection in SPARQL?Finding all steps in property path中的解释可能更有助于理解解决方案。如果我正确理解了您的示例,这里有一些数据可以用来测试:

@prefix : <urn:ex:>

:uri1 :a :uri2, :uri3 ;
      :b :uri4, :uri5 .

:uri2 :c :uri6 ;
      :d :uri7 .

:uri7 :a :uri8 .

以下是查询。我们的想法是从开始(:uri1)到某个点(?x)遵循通配符路径。然后从?x链接到它的对象?o,然后找到从?o?end(:uri8)的通配符路径。(请注意,我使用(:|!:)作为属性通配符;它匹配所有内容,因为每个IRI要么是,要么不是。)

prefix : <urn:ex:>

select ?x ?p where {
  :uri1 (:|!:)* ?x .
  ?x ?p ?o .
  ?o (:|!:)* :uri8 .
}

结果与您要求的一样:

--------------
| x     | p  |
==============
| :uri1 | :a |
| :uri2 | :d |
| :uri7 | :a |
--------------

这篇关于SPARQL连接两个对象的路径是哪条?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆