複数のグラフでオブジェクトの出現回数をカウントする SPARQL クエリを作成しようとしています。サンプル データと予想される出力は次のとおりです。
名前付きグラフ g1:
@prefix g1: <http://example.com/g1#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
g1:ex1 rdfs:label "a" .
g1:ex2 rdfs:label "a" .
g1:ex3 rdfs:label "b" .
g1:ex3 rdfs:label "d" .
名前付きグラフ g2:
@prefix g2: <http://example.com/g2#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
g2:ex1 rdfs:label "a" .
g2:ex2 rdfs:label "b" .
g2:ex3 rdfs:label "c" .
SPARQL クエリの期待される出力:
?label ?g1count ?g2count
a 2 1
b 1 1
c 0 1
d 1 0
rdfs:labels の和集合を実行し、発生回数を数えることで、両方のグラフの合計数を取得できます。
prefix g1: <http://example.com/g1#>
prefix g2: <http://example.com/g2#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?label count(?label) as ?count
{
{
GRAPH g1: {
?s rdfs:label ?label
}
} UNION {
GRAPH g2:
{
?s rdfs:label ?label
}
}
}
ここから、各 UNION ブロック内でサブクエリを使用して個々のカウントを取得できると考えましたが、そのようなクエリはおそらく非効率的であることに加えて、期待される結果を得ることができませんでした。