SPARQL键与DISTINCT值 [英] Sparql Keys vs distinct values
本文介绍了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屋!
查看全文