Graph 对两个图运行sparql查询?

Graph 对两个图运行sparql查询?,graph,union,sparql,Graph,Union,Sparql,指定图形的典型SPARQL查询可能如下所示: SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> { <http://local.virt/foo> ?b ?c}} SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> { <http://local.virt/foo> ?b ?c} 这正是我的应用程序所需要的——但至少出于

指定图形的典型SPARQL查询可能如下所示:

SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c}
这正是我的应用程序所需要的——但至少出于学术兴趣,问题在于是否有一种语法上很好的方法可以对一组图执行查询,而不是对多个图执行查询,然后将结果合并仍然有效。

是的

SELECT ?b ?c
FROM NAMED <http://AliceIRI>
FROM NAMED <http://BobIri>
WHERE
{
  GRAPH ?g { <http://local.virt/foo> ?b ?c }
}
这涵盖了您希望允许匹配三元组模式不同部分的三元组来自您命名的任何图形的情况


请注意,某些三元组存储可能允许您对其进行设置,以便将默认图自动视为所有命名图的合并。

如果您必须在正在使用的图的子集中运行查询,还可以在图的iri上设置过滤器

例如:


如果这只是将结果合并到各个图中,而不是允许从各个图中的三元组中绘制三元组模式,那么这是一个有点钝的工具。您能否澄清这是否是唯一可用的工具?请参见上面的更新1。@JoeCorneli我已更新了我的答案,是的,您可以使用稍微不同的查询来完成此操作
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c .
<http://local.virt/bar> ?b ?c}}
SELECT ?b ?c WHERE { 
GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c } .
GRAPH <http://BobIRI> {
<http://local.virt/bar> ?b ?c}}
SELECT ?b ?c
FROM NAMED <http://AliceIRI>
FROM NAMED <http://BobIri>
WHERE
{
  GRAPH ?g { <http://local.virt/foo> ?b ?c }
}
SELECT ?b ?c
FROM <http://AliceIRI>
FROM <http://BobIri>
WHERE
{
  <http://local.virt/foo> ?b ?c
}
SELECT ?b ?c
FROM NAMED <http://AliceIRI>
FROM NAMED <http://BobIri>
FROM NAMED <http://CarlIri>
WHERE {
GRAPH ?g {
    <http://local.virt/foo> ?b ?c 
    FILTER( ?g=<http://AliceIRI> || ?g=<http://BobIri> )
}
}