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

如何在一个SPARQL查询中,在三个不同的SPARQL端点上进行三个独立查询?,sparql,rdf,linked-data,triplestore,federated-queries,Sparql,Rdf,Linked Data,Triplestore,Federated Queries,有没有一种方法可以在一个SPARQL查询中对三个不同的SPARQL端点执行三个独立的查询?例如,我有三个SPARQL端点(即url1、url2和url3)和我想进行的三个独立查询,即url1上的查询1、url2上的查询2和url3上的查询3。我是否可以在一个SPARQL查询中执行一次这三个查询 我试过这样的模式 SELECT * WHERE { SERVICE <url1> {query1} SERVICE <url2> {query2} SERVICE

有没有一种方法可以在一个SPARQL查询中对三个不同的SPARQL端点执行三个独立的查询?例如,我有三个SPARQL端点(即url1、url2和url3)和我想进行的三个独立查询,即url1上的查询1、url2上的查询2和url3上的查询3。我是否可以在一个SPARQL查询中执行一次这三个查询

我试过这样的模式

SELECT * WHERE {

 SERVICE <url1> {query1} 

 SERVICE <url2> {query2} 

 SERVICE <url3> {query3} 
}
选择*WHERE{
服务{query1}
服务{query2}
服务{query3}
}
查询似乎试图连接来自三个查询的结果,因为这三个查询是独立的,所以最终结果是空的。如果我对一个端点逐个查询三次,每个查询都会返回结果


非常感谢你的帮助

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

SELECT * WHERE {
 { SERVICE <url1> {query1} }
 UNION
 { SERVICE <url2> {query2} }
  UNION
 { SERVICE <url3> {query3} }
}
选择*WHERE{
{服务{query1}}
联合
{服务{query2}}
联合
{服务{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) }
}
选择*WHERE{
{SERVICE{query1}BIND(AS?serviceLabel)}
联合
{SERVICE{query2}BIND(AS?serviceLabel)}
联合
{SERVICE{query3}BIND(AS?serviceLabel)}
}