Можно ли выполнить операцию INSERT с предложением GROUP BY в SPARQL / Update? - PullRequest
0 голосов
/ 12 июля 2020

Предположим, у меня есть диаграмма, содержащая учащихся трех разных классов.

Пример диаграммы:

<http://some/graph#John_Doe> rdf:type <http://some/graph/ontology#Student>
<http://some/graph#John_Doe> <http://some/graph#hasGrade> <http://some/graph#Grade_3>
<http://some/graph#Grade_3> rdf:type <http://some/graph/ontology#Grade>

Я хочу создать атрибут для каждого экземпляра класса Оценка называется gradeStrength для хранения количества учеников в этом классе.

В приведенном выше примере это будет выглядеть так:

<http://some/graph#Grade_3> <http://some/graph#gradeStrength> 1^^xsd:integer

В настоящее время я использую два отдельных запроса следующим образом:

  1. Запустите запрос SELECT + GROUP BY на графике, чтобы получить количество оценок за оценку
  2. Перебрать результат строк из 1. для создания строки троек
  3. Запустить запрос обновления INSERT DATA на графике

Как я могу добиться этого, используя один запрос SPARQL / Update с помощью INSERT и конструкции GROUP BY? Я попытался написать такой запрос, но он не работает в Blazegraph.

1 Ответ

1 голос
/ 13 июля 2020

Используйте

INSERT {
  ?grade <http://some/graph#gradeStrength> ?gradeStrength
} 
WHERE 
{ 
  { 
    SELECT ?grade (COUNT(?student) AS ?gradeStrength)  
    { 
      ?student  <http://some/graph#hasGrade> ?grade . 
    } 
    GROUP BY ?grade   
  } 
}

Ответ из комментария @UninformedUser. Протестировано на Blazegraph, загрузив тройки примеров из вопроса.

...