使用sparql查询获取分组结果

时间:2016-05-29 01:32:07

标签: sparql

我仍然觉得自己是一个SPARQL新手,所以我可能会对SPARQL GROUP BY的作用有所了解,但这是我的问题。

假设我想要请求图表数据库中名为Categories的所有资源,我想获得与这些类别相关的所有项目,以及项目名称和价格。

现在我的SPARQL查询给了我类似下表的内容:

**Categories Item ItemName ItemPrice**
Tools HammerID Hammer $12
Tools SawID Saw $13
Tools WrenchID Wrench $10
Food AppleID Apple $5
Food CornID Corn $1

我想使用GROUP BY将项目分组到一个类别下,这样当我开始处理它时,我可以查看每个唯一类别,然后显示属于该类别的项目。

现在,如果我循环上面的结果,我将迭代5个条目而不是2个。

我能描述我想要的结果的另一种方法是通过成像相应的json数据看起来像什么。我想要这样的东西:

 [
  tools: [
         {id: hammerId
          title: hammer
          price: $12},
         {id: sawId
          title: saw
          price: $13},
         {id: wrenchId
          title: wrench
          price: $10}
      ],
   food: [
         {id: appleId
          title: apple
          price: $5},
         {id: cornId
          title: corn
          price: $1}
         ]
    ]

结果,像这样我可以直接遍历顶级项目,然后显示每个项目的结果。

我可以使用GROUP BY告诉SPARQL给我这样的结果吗?

1 个答案:

答案 0 :(得分:2)

不,你不能。 SPARQL SELECT查询结果被定义为一系列解决方案,每个解决方案都是一组变量值对(其值被定义为IRI,BNode或文字值)。基本上它是一个简单的表格。没有规定“嵌套”#39;像你这样的解决方案需要你的JSON结构。

然而,差异纯粹是语法上的。如果您进行分组,您知道结果会将属于同一组的所有解决方案一个接一个地提供(一个接一个) - 因此在处理结果时,您只需将分组变量视为标记即可。当然,如果你真的想要,你可以自己轻松地将查询结果重写为这种句法结构 - 毕竟,它只是写下完全相同信息的另一种方式。