SPARQL分组依据,group_concat和顺序

时间:2019-09-29 19:07:34

标签: sparql

考虑到我拥有以下RDF数据

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

:car2 :hasColor :blue.
:car2 :hasColor :red.

我想按颜色设置对汽车进行计数,即,这将导致单个组{:blue,:red}和组{:car1,:car2}中的两辆汽车,并且计数将为2。查询看起来像执行要求的直观方式。但是,不能保证总能正常工作,因为GROUP_CONCAT在连接字符串之前会删除所有顺序(请参见another question here)。这意味着:第一辆车我可以得到":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

0 个答案:

没有答案