使用sparql查询获取分组结果

使用sparql查询获取分组结果,sparql,Sparql,我仍然觉得自己是一个SPARQL新手,所以我可能对SPARQL GROUP BY的工作有点不了解,但这里是我的问题 假设我想请求名为Categories的图形数据库中的所有资源,我想获取与这些类别相关联的所有项目,以及项目的名称和价格 现在,我的SPARQL查询返回的结果如下表所示: **Categories Item ItemName ItemPrice** Tools HammerID Hammer $12 Tools SawID Saw $13 Tools WrenchID Wrench

我仍然觉得自己是一个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}
         ]
    ]
有了这些结果,我可以像这样直接循环顶层项目,然后显示每个项目的结果


我可以使用GROUPBY告诉SPARQL给我这样的结果吗

不,你不能。SPARQL SELECT查询结果定义为一系列解决方案,每个解决方案都是一组变量值对(其中一个值定义为IRI、BNode或文字值)。基本上这是一张简单的桌子。没有提供类似JSON结构所需的“嵌套”解决方案

然而,这种区别纯粹是句法上的。如果您分组,您知道结果将一起交付属于同一组的所有解决方案(一个接一个),因此在处理结果时,您可以简单地将分组的变量视为标记。当然,如果你真的愿意,你可以自己轻松地将查询结果重写成这种语法结构——毕竟,这只是一种写下完全相同信息的不同方式