使用 sparql 查询获取分组结果

get grouped results with sparql query

我仍然觉得自己是 SPARQL 的新手,所以我可能对 SPARQL GROUP BY 的功能有很大的了解,但这是我的问题。

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

现在我的 SPARQL 查询返回如下内容 table:

**Categories Item ItemName ItemPrice**
Tools HammerID Hammer 
Tools SawID Saw 
Tools WrenchID Wrench 
Food AppleID Apple 
Food CornID Corn 

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

现在,如果我遍历上述结果,我将迭代 5 个条目而不是 2 个。

我可以描述我想要的结果的另一种方式是通过成像相应的 json 数据的样子。我想要这样的东西:

 [
  tools: [
         {id: hammerId
          title: hammer
          price: },
         {id: sawId
          title: saw
          price: },
         {id: wrenchId
          title: wrench
          price: }
      ],
   food: [
         {id: appleId
          title: apple
          price: },
         {id: cornId
          title: corn
          price: }
         ]
    ]

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

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

不,你不能。 SPARQL SELECT 查询结果被定义为一系列解决方案,每个解决方案都是一组变量值对(值被定义为 IRI、BNode 或文字值)。基本上就是一个简单的table。没有像 JSON 类结构所需的 'nested' 解决方案。

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