消除SPARQL中1:n关系中几乎重复的结果

消除SPARQL中1:n关系中几乎重复的结果,sparql,linked-data,Sparql,Linked Data,可以在SPARQL查询中连接等效结果吗?例如,考虑下面的RDF数据和期望的结果: 知识库: 我所看到的唯一方法是使用以下内容: 前缀gr: 选择“产品”颜色 在哪里{ ?产品组:颜色?颜色1。 可选的{ ?产品组:颜色?颜色2。 过滤器(?颜色1!=?颜色2) 绑定(concat(?color1,,,,?color2)作为?颜色) } 但只有在我有两个匹配项的情况下,它才能完美工作。有没有更通用、更有效的方法 消除来自1:n关系的几乎重复的结果将非常有用。修改为包含以下注释: 您可以尝试: P

可以在SPARQL查询中连接等效结果吗?例如,考虑下面的RDF数据和期望的结果:

知识库: 我所看到的唯一方法是使用以下内容:

前缀gr: 选择“产品”颜色 在哪里{ ?产品组:颜色?颜色1。 可选的{ ?产品组:颜色?颜色2。 过滤器(?颜色1!=?颜色2) 绑定(concat(?color1,,,,?color2)作为?颜色) } 但只有在我有两个匹配项的情况下,它才能完美工作。有没有更通用、更有效的方法


消除来自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
前缀gr: 选择?产品(组_CONCAT(不同的?颜色;分隔符=',')作为?颜色) 在哪里{ ?产品组:颜色?颜色。 } 按生产分组
可以找到示例。

我可以问你这个sparql端点基于什么资源吗?它是OpenLink软件托管的Virtuoso服务器之一,用于展示其Virtuoso服务器软件的功能。该端点目前似乎表示它在120秒超时(
select count(*)后托管62415478623个三元组,其中{[][]}
(它可能承载更多,但我不想等待太久))来自LOD云和“海绵”图的多个数据集。这里不需要子查询。您只需执行
select?prod(group_concat(distinct?color;separator=“,”)as?colors){?prod gr:color?color}group by?prod
@ffa请注意,此处的查询并不完全合法;您需要将其修复,以便将其用于除Virtuoso之外的任何内容。1)它需要在
group_concat(…)周围加上括号作为颜色(
)(Virtuoso不检查此项,但规范要求它们。)2)只有在投影中没有非组变量时,才能使用聚合的隐式组。也就是说,除非在最外层有一个
groupby
,否则不能执行
select?prod(groupconcat(…)as?colors)
。(同样,Virtuoso的不合规性使得很容易引入错误,这些错误将被隐藏,直到您尝试另一个端点。)@ffa您可以在中看到一个缩短的合法版本。
| ?prod   | ?color    |
|---------|-----------|
| :prod_A | Red, Blue |
| :prod_B | Green     |
PREFIX gr: <http://purl.org/goodrelations/v1#>

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