【问题标题】:How to make, in one SPARQL query, three independent queries on three different SPARQL endpoints?如何在一个 SPARQL 查询中对三个不同的 SPARQL 端点进行三个独立的查询?
【发布时间】:2017-11-14 21:14:50
【问题描述】:

有没有一种方法可以在一个 SPARQL 查询中对三个不同的 SPARQL 端点执行三个独立的查询?例如,我有三个 SPARQL 端点(即 url1、url2 和 url3)和三个独立的查询,即 url1 上的 query1、url2 上的 query2 和 url3 上的 query3。我可以在一个 SPARQL 查询中执行三个查询吗?

我试过这样的模式

SELECT * WHERE {

 SERVICE <url1> {query1} 

 SERVICE <url2> {query2} 

 SERVICE <url3> {query3} 
}

似乎查询尝试连接三个查询的结果,因为三个查询是独立的,最终结果为空。如果我对一个端点进行 3 次查询,则每个查询都会返回结果。

非常感谢您的帮助!

【问题讨论】:

    标签: sparql rdf linked-data triplestore federated-queries


    【解决方案1】:

    您可以使用 UNION 进行 3 次单独的调用:这与进行 3 次查询大致相同。

    SELECT * WHERE {
     { SERVICE <url1> {query1} }
     UNION
     { SERVICE <url2> {query2} }
      UNION
     { SERVICE <url3> {query3} }
    }
    

    应用可能需要知道哪些行来自哪个调用,因此标记结果可能很有用:

    SELECT * WHERE {
     { SERVICE <url1> { query1 } BIND (<url1> AS ?serviceLabel) }
     UNION
     { SERVICE <url2> { query2 } BIND (<url2> AS ?serviceLabel) }
      UNION
     { SERVICE <url3> { query3 } BIND (<url2> AS ?serviceLabel) }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多