如何在一个 SPARQL 查询中对三个不同的 SPARQL 端点进行三个独立查询?
How to make, in one SPARQL query, three independent queries on three different SPARQL endpoints?
有没有一种方法可以在一个 SPARQL 查询中对三个不同的 SPARQL 端点执行三个独立的查询?例如,我有三个 SPARQL 端点(即 url1、url2 和 url3)和三个我想进行的独立查询,即 url1 上的 query1、url2 上的 query2 和 url3 上的 query3。我是否可以在一个 SPARQL 查询中执行一次这三个查询?
我尝试了
这样的模式
SELECT * WHERE {
SERVICE <url1> {query1}
SERVICE <url2> {query2}
SERVICE <url3> {query3}
}
好像查询是想连接三个查询的结果,因为三个查询是独立的,所以最后的结果是空的。如果我从一个端点一个端点查询三次,每次查询都有返回结果。
非常感谢您的帮助!
您可以使用 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) }
}
有没有一种方法可以在一个 SPARQL 查询中对三个不同的 SPARQL 端点执行三个独立的查询?例如,我有三个 SPARQL 端点(即 url1、url2 和 url3)和三个我想进行的独立查询,即 url1 上的 query1、url2 上的 query2 和 url3 上的 query3。我是否可以在一个 SPARQL 查询中执行一次这三个查询?
我尝试了
这样的模式SELECT * WHERE {
SERVICE <url1> {query1}
SERVICE <url2> {query2}
SERVICE <url3> {query3}
}
好像查询是想连接三个查询的结果,因为三个查询是独立的,所以最后的结果是空的。如果我从一个端点一个端点查询三次,每次查询都有返回结果。
非常感谢您的帮助!
您可以使用 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) }
}