【问题标题】:Is it possible to perform an INSERT operation with the GROUP BY clause in SPARQL/Update?是否可以在 SPARQL/Update 中使用 GROUP BY 子句执行 INSERT 操作?
【发布时间】:2020-07-12 18:06:10
【问题描述】:

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

示例图:

<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 中失败。

【问题讨论】:

  • 是的,这是可能的。使用INSERT {?grade &lt;http://some/graph#gradeStrength&gt; ?gradeStrength} WHERE { { SELECT ?grade (COUNT(?student) AS ?gradeStrength) { ?student &lt;http://some/graph#hasGrade&gt; ?grade} GROUP BY ?grade } } - (确实未经测试)
  • @UninformedUser 我用上面的示例数据和你在 blazegraph 上建议的更新查询对其进行了测试,它奏效了!谢谢你。关于 stackoverflow 的第一个问题 - 不知道如何接受这个作为答案并关闭问题。
  • 您可以简单地将工作查询添加为答案,然后单击接受以获取您自己的答案。这基本上会将问题标记为已解决,没有适当的“关闭”

标签: sparql rdf blazegraph knowledge-graph


【解决方案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 上进行测试。

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2011-09-21
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多