杀死来自 SPARQL 中 1:n 关系的几乎重复的结果

kill the nearly duplicate results that came from the 1:n relations in SPARQL

是否可以在 SPARQL 查询中串联等效结果?例如,考虑以下 RDF 数据和期望的结果:

知识库:

@prefix gr:<http://purl.org/goodrelations/v1#>.

:prod_A gr:color "Red";
        gr:color "Blue".
:prod_B gr:color "Green".

理想结果:

| ?prod   | ?color    |
|---------|-----------|
| :prod_A | Red, Blue |
| :prod_B | Green     |

我看到的唯一方法是使用这样的东西:

PREFIX gr:<http://purl.org/goodrelations/v1#>

SELECT ?prod ?color
WHERE {
   ?prod gr:color ?color1.
   OPTIONAL {
       ?prod gr:color ?color2.
       FILTER ( ?color1 != ?color2 )
       bind(concat(?color1,",",?color2) as ?color)
   }

但只有当我恰好有 2 个匹配项时它才能完美运行。有没有更通用和有效的方法来做到这一点?

消除来自 1:n 关系的几乎重复的结果将非常有用。

修改为包括以下评论:

你可以试试:

PREFIX gr: <http://purl.org/goodrelations/v1#>

SELECT ?prod (GROUP_CONCAT(DISTINCT ?color; separator=',') as ?colors)
WHERE {
    ?prod gr:color ?color.
}
GROUP BY ?prod

可以找到示例 here