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

Sparql to find all connected URIs in a graph

假设我有这个数据:

<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/apple 查询该数据,以获取连接到 <http://foo/apple> <veg:one> 连接到的同一对象的任何资源。喜欢 <http://foo/apple> <veg:one> <http://foo/id_A>

我希望查询 return:

 <http://foo/toast> , <http://foo/banana> , <http://foo/mango> 

我试过这样的查询,但没有成功:

SELECT * WHERE{
<http://foo/apple> ?p ?id .
?fr  (<veg:one>)*/(<veg:two>)*  ?otherId .
}

我不确定如何将 属性 路径连接回 ?id 。 我应该用反向路径 UNION 查询吗?这似乎有点矫枉过正,可能还有更简单的方法

我可以创建一个查询来取回吐司和香蕉 URI,但不能取回芒果 URI

谢谢!

如果我理解你的话,听起来你想要的资源路径以 veg:one 或 veg:two 开头,并按照 veg:one 或 [=14] 以苹果 ID 结尾=] 再次向后和向前。如果这是正确的,那么它看起来像

#--    [[  fruit -> id  ]/[   id -> fruit  ]]*
:apple ((veg:one|veg:two)/^(veg:one|veg:two))* ?other .