グラフを指定する典型的な SPARQL クエリは次のようになります。
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
これにより、「foo」が主語である AliceIRI のすべてのトリプルがわかります。2 つの異なるグラフを調べたい場合、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 に属し、バーがすべて Bob に属している場合、次のように書くことができることに気付きました。
SELECT ?b ?c WHERE {
GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c } .
GRAPH <http://BobIRI> {
<http://local.virt/bar> ?b ?c}}
(これは実際に私のアプリケーションに必要なものでした)-しかし、少なくとも「学術的関心」のために、グラフの結合に対してクエリを実行する構文的に優れた方法があるかどうかという問題(複数のグラフに対して実行してから結合するのではなく)結果)まだ立っています。