SPARQL group by, group_concat и порядок - PullRequest
1 голос
/ 29 сентября 2019

Consdier У меня есть следующие данные RDF

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

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

Я хочу посчитать автомобили по их наборам цветов, т. Е. Это привело бы к одной группе {: blue,: 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
...