2

我想询问场地中的房间数量:这是我得到的:

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 解决方案,但我想不通。

我在 sparql 浏览器中使用的查询

4

1 回答 1

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 子句中的变量,那应该没有区别。

于 2012-11-05T07:22:27.873 回答