我正在尝试编写一个 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 块中的子查询来获取单个计数,但是除了这种查询可能效率低下之外,我没有任何运气获得预期的结果。