Sparql在图形中查找所有连接的URI

Sparql在图形中查找所有连接的URI,sparql,Sparql,假设我有以下数据: <http://foo/toast> <veg:two> <http://foo/id_A> . <http://foo/apple> <veg:one> <http://foo/id_A> . <http://foo/banana> <veg:one> <http://foo/id_A> . <http://foo/banana> <veg:t

假设我有以下数据:

<http://foo/toast> <veg:two> <http://foo/id_A>  .
<http://foo/apple> <veg:one> <http://foo/id_A>  .
<http://foo/banana> <veg:one> <http://foo/id_A>  .
<http://foo/banana> <veg:two> <http://foo/id_B> .
<http://foo/mango> <veg:one> <http://foo/id_B>  .
。
.
.
.
.
如何使用URI查询该数据,以获取连接到
连接到的同一对象的任何资源。类似于

我希望查询返回:

 <http://foo/toast> , <http://foo/banana> , <http://foo/mango> 
我尝试过这样的查询,但都不起作用:

SELECT * WHERE{
<http://foo/apple> ?p ?id .
?fr  (<veg:one>)*/(<veg:two>)*  ?otherId .
}
选择*WHERE{
?p?id。
?fr()*/()*?其他ID。
}
我不知道如何将属性路径连接回?id。 我应该将查询与反向路径合并回去吗?这似乎太过分了,可能还有更简单的方法

我可以创建一个查询来获取toast和香蕉URI,但不能获取mango URI


谢谢

如果我理解你的意思,听起来你想要的资源的路径是以veg:one或veg:two开头,然后以apple的id结尾,再次前后跟随veg:one或veg:two。如果这是正确的,那么看起来

#--[[fruit->id]/[id->fruit]]*
:苹果((蔬菜:一个|蔬菜:两个)/^(蔬菜:一个|蔬菜:两个))*?其他。

我认为您需要对属性路径的第二部分使用反向路径操作符
^
。您能否澄清您试图遵循的链接?你说你在寻找与三元组相关的主题,但这没有多大意义;资源与其他资源相关,而不是三元组。你是在问苹果id的路径,该路径在两个方向上都穿过veg:one和veg:two吗?我试图找到与我提供的某个主语和谓语的宾语相关的任何资源。所以,是的,我要的是一条苹果id的路径,该路径在任意方向上穿过veg:one和veg:two。那应该是烤面包、香蕉和芒果。谢天谢地,我使用您的路径选择了just?other,但我在结果集中仅返回?other几乎在那里,它得到:。它唯一没有得到的是