1

假设我有一个包含三个不同年级学生的图表。

示例图:

<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>

我想为班级Grade的每个实例创建一个名为GradeStrength的属性,以存储该年级的学生人数。

对于上面的例子,它看起来像:

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

目前我使用以下两个单独的查询来执行此操作 -

  1. 在图表上运行 SELECT + GROUP BY 查询以获取每个年级的计数
  2. 遍历 1. 的结果行以创建一串三元组
  3. 在图上运行 INSERT DATA 更​​新查询

如何通过使用 INSERT 和 GROUP BY 构造的单个 SPARQL/Update 查询来实现这一点?我尝试编写这样的查询,但在 Blazegraph 中失败了。

4

1 回答 1

1

利用

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 上进行测试。

于 2020-07-13T04:51:06.760 回答