2016-04-25 68 views
1

是否可以计算多个命名图形中三元组的出现并将结果作为表格中的行返回?如:在结果中查询具有聚合计数和图形的多个图表

?g ?count ?sequence_count 
-------- ------- --------------- 
graph1 54   54 
graph2 120   80 

这是我试过的查询。

SELECT ?g ?count ?sequence_count  
    FROM NAMED <graph1> 
    FROM NAMED <graph2> 
WHERE { 
    { 
     select (COUNT(?identifier) as ?count) (COUNT(?sequence) as ?sequence_count) 
     WHERE { GRAPH ?g { 
      ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
      OPTIONAL { ?identifier <urn:sequence> ?sequence } 
     } } 
    } 
} 

但结果是:

?g ?count ?sequence_count 
-------- ------- --------------- 
      174   134 

我试图避免写出来:

select ?count_graph1 ?sequence_count_graph1 ?count_graph2 ... 

因为可能有数百个图来查询的。

回答

1

首先,查询是非常接近的。只需将SELECT移动到图表语句中 - 基本上对每个图表说明'找到这些汇总值'。其次,如果任何?identifier匹配项具有多个值,则?identifier的计数将具有重复项,因此DISTINCT结果是必需的。请尝试以下操作:

SELECT * 
    FROM NAMED <graph1> 
    FROM NAMED <graph2> 
WHERE { 
    GRAPH ?g { 
     SELECT (COUNT(DISTINCT ?identifier) as ?count) (COUNT(?sequence) as ?sequence_count) 
     WHERE { 
     ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
     OPTIONAL { ?identifier <urn:sequence> ?sequence } 
     } 
    } 
} 
+0

这样就给了我所有图形中标识符的总数。我正在寻找的是每个单独图中的?标识符数。所以graph1会有一个计数(?标识符),graph2会有一个计数(?标识符)。 – rodney757

+0

在这种情况下,我认为您的原始查询非常接近。查看修改后的回复。 – scotthenninger