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

时间:2016-04-16 00:49:19

标签: 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: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>

一样

我期待查询返回:

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

我尝试了这样的查询,但是他们没有工作:

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

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

我可以创建一个查询来获取toast和banana URI,但不能创建芒果URI

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我理解你,听起来你想要的资源有一条以veg开头的路径:一个或蔬菜:两个,并通过跟随veg结束苹果的id:一个或蔬菜:两个向后和向前再次。如果这是正确的,那么它看起来像

export class DeleteKeyMutation extends Relay.Mutation {
  static fragments = {
    viewer: () => Relay.QL`
      fragment on Viewer { id }
    `,
  };
  getMutation() { return Relay.QL`mutation {deleteKey}`; }
  getVariables() {
    return {
      id: this.props.id,
    };
  }
  getFatQuery() {
    return Relay.QL`
      fragment on DeleteKeyPayload {
        viewer { keys }
      }
    `;
  }
  getConfigs() {
    return [
      {
        type: 'FIELDS_CHANGE',
        fieldIDs: {
          viewer: this.props.viewer.id,
        },
      },
    ];
  }
}