如何在一个SPARQL查询中对三个不同的SPARQL端点进行三次独立查询?

时间:2017-11-14 21:14:50

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

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

我试过像

这样的模式
SELECT * WHERE {

 SERVICE <url1> {query1} 

 SERVICE <url2> {query2} 

 SERVICE <url3> {query3} 
}

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

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用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) }
}