SPARQL group by、group_concat和order

SPARQL group by、group_concat和order,sparql,Sparql,Consdier我有以下RDF数据 :car1 :hasColor :red. :car1 :hasColor :blue. :car2 :hasColor :blue. :car2 :hasColor :red. 我想通过颜色集来计算汽车的数量,也就是说,这将导致单个组{:蓝色,:红色}和组{:car1,:car2}中的两辆汽车,计数将为2。下面的查询看起来是执行所需操作的直观方式。但是,它不能保证总是工作,因为GROUP_CONCAT会在连接字符串之前删除任何顺序(请参阅)。这意味着:对

Consdier我有以下RDF数据

:car1 :hasColor :red.
:car1 :hasColor :blue.

:car2 :hasColor :blue.
:car2 :hasColor :red.
我想通过颜色集来计算汽车的数量,也就是说,这将导致单个组{:蓝色,:红色}和组{:car1,:car2}中的两辆汽车,计数将为2。下面的查询看起来是执行所需操作的直观方式。但是,它不能保证总是工作,因为GROUP_CONCAT会在连接字符串之前删除任何顺序(请参阅)。这意味着:对于第一辆车,我可能会得到
“:red:blue”
,对于第二辆车,我可能会得到:
“:blue:red”
,这样它们就不会被考虑在同一组中

有什么方法可以实现我想要的吗

SELECT  (COUNT(?car) AS ?count) ?colorGroup
WHERE
  { { SELECT  ?car (GROUP_CONCAT(?color) AS ?colorGroup)
      WHERE
        { { SELECT  ?car ?color
            WHERE
              { ?car  :hasColor  ?color }
            ORDER BY ?color
          }
        }
      GROUP BY ?car
    }
  }
GROUP BY ?colorGroup

在内部子查询中使用
orderbycar?color
,而不仅仅是
orderbycar?color
@DamyanOgnyanov这有什么帮助<代码>组_CONCAT使用多集语义-不保证顺序,所有内容都特定于实现。一个三重存储可以做到,另一个三重存储不能做到这一点。在内部子查询中使用
orderby?car?color
,而不仅仅是
orderby?color
@DamyanOgnyanov这有什么帮助<代码>组_CONCAT使用多集语义-不保证顺序,所有内容都特定于实现。一家三联店可以做到,另一家三联店不行。这被视为该计划的一部分。