【发布时间】:2013-01-21 16:30:40
【问题描述】:
我正在尝试编写一个 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 块中的子查询来获取单独的计数,但除了这种查询可能效率低下之外,我还没有获得预期结果的运气。
【问题讨论】: