SPARQL - 获取可选数据量并组合行

时间:2012-11-04 16:27:26

标签: sparql

我想要求一个场地的房间数量: 这就是我得到的:

ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/3>     -
ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/ajax-foyer>    -
ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/ajaxbalkon>    -
ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/bovenzaal>     -
ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/foyer>     -
ah:room     <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/room/grote-repetitielokaal> 

接下来我想要获得多行返回。

ah:attachment   <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/attachment/1>   -
ah:attachment   <http://data.artsholland.com/venue/04df157e-fc47-4448-83ed-d0a8c577d7dd/attachment/2> 

我已经搜索过了。找到了group_concat解决方案,但我无法弄明白。

my used query in the sparql browser

1 个答案:

答案 0 :(得分:3)

要获得房间数量,请使用COUNT运算符。您应该将此与GROUP BY子句结合使用,这会告诉操作员将哪些结果聚合在一起。例如:

SELECT ?venue (COUNT(?room) as ?nrOfRooms)
WHERE { 
        ?venue a ah:Venue ;
               ah:room ?room . 
}
GROUP BY ?venue

GROUP_CONCAT实际上非常相似。我没有详细查看您的查询,因此这可能与实际数据的内容不完全一致,但粗略地说,您所做的是以下内容:

SELECT ?venue (GROUP_CONCAT(?attach) as ?attachments)
WHERE { 
        ?venue a ah:Venue ;
               ah:room ?room ;
               ah:attachment ?attach . 
}
GROUP BY ?venue

对于在OPTIONAL子句中的变量进行聚合,这应该没有区别。