SPARQL键与DISTINCT值 [英] Sparql Keys vs distinct values

查看:13
本文介绍了SPARQL键与DISTINCT值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个返回重复项的SPARQL查询,我希望它只对其中一个值(SubjectID)进行清理。与DISTINCT不同,它似乎为所选值的组合找到唯一的值,而不是只为其中一个参数找到唯一的值。 我在这里看到有人建议GROUP BY,但这似乎只有在我在GROUP BY之后列出所有参数的情况下才适用(我的SPARQL端点抱怨,例如SELECT:?LOCATION中的非组键变量)。 我尝试运行内部SELECT,但似乎不适用于这个特定的查询。这可能是查询本身的问题(livedIn可选函数的值似乎导致了重复)?

虽然在SPARQL的早期学习阶段就已经对关系数据库很满意,所以请随意为不熟悉的人解释一些显而易见的事情!:)

select distinct  
  ?subjectID ?englishName ?sex ?locatedIn15Name 
  ?dob ?dod ?dom ?bornLocationName ?occupation 
  where { 
      ?person a hc:Person ;
      hc:englishName ?englishName ;
      hc:sex ?sex; 
      hc:subjectID ?subjectID; 
       optional { ?person hc:livedIn11 ?livedIn11 .
           ?livedIn11 hc:englishName ?lived11LocationName . 
           ?livedIn11 hc:locatedIn11 ?locatedIn11 .
           ?locatedIn11 hc:englishName ?locatedIn11Name .
           ?locatedIn11 hc:locatedIn15 ?locatedIn15 .
 ?locatedIn15 hc:englishName ?locatedIn15Name .
 } . 
       optional {?person hc:born ?dob } .
       optional {?person hc:dateOfDeath ?dod } .
       optional {?person hc:dateOfMarriage ?dom } .
       optional { ?person hc:bornIn ?bornIn . 
       ?bornIn hc:englishName ?bornLocationName . 
             ?bornIn hc:easting ?easting . 
             ?bornIn hc:northing ?northing } .
       optional {  ?person hc:occupation ?occupation } 
       FILTER regex(?englishName, "^FirstName LastName")
      } 
  GROUP BY 
  ?subjectID ?englishName  ?sex 
   ?locatedIn15Name ?dob ?dod ?dom 
  ?bornLocationName ?occupation 

推荐答案

返回错误消息:

SELECT中的非集团关键字变量:?职业

您可以使用SAMPLE()聚合来避免这种情况-这将允许您只对?subjectID进行分组,但仍然可以选择其余变量的值,前提是您只关心为其他变量获取一个值。

这里有一个简单的例子:

SELECT ?subjectID (SAMPLE(?dob) AS ?dateOfBirth)
WHERE
{
  ?person a hc:Person ;
          hc:subjectID ?subjectID .
  OPTIONAL { ?person hc:born ?dob }
}
GROUP BY ?subjectID

这篇关于SPARQL键与DISTINCT值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆