指定图形的典型 SPARQL 查询可能如下所示:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
这将告诉我 AliceIRI 中“foo”是主题的所有三元组。如果我想查看两个不同的图表,我唯一的选择是执行 UNION:
SELECT ?b ?c WHERE {{ GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
UNION
{ GRAPH <http://BobIRI> {
<http://local.virt/foo> ?b ?c}}}
或者是否有一些速记可以让我更方便地写这个,像这样:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c}
顺便说一句,我在 Virtuoso 6.01.3127 上。
更新 1
为了澄清,我真的很想能够运行:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c .
<http://local.virt/bar> ?b ?c}}
并且有这场比赛?b
和?c
这样<http://local.virt/foo> ?b ?c
的比赛。简单地在(单独)和(单独)中合并匹配项并不能实现这一点。<http://AliceIRI>
<http://local.virt/bar> ?b ?c
<http://BobIRI>
<http://AliceIRI>
<http://BobIRI>
并进一步澄清:我已经意识到,如果 foos 都属于 Alice,而 bar 都属于 Bob,那么我可以写
SELECT ?b ?c WHERE {
GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c } .
GRAPH <http://BobIRI> {
<http://local.virt/bar> ?b ?c}}
(这实际上是我的应用程序所需要的)——但至少对于“学术兴趣”而言,是否有一种语法上不错的方法来对图形联合运行查询(而不是针对多个图形然后联合运行)结果)仍然有效。