我有一个返回重复项的 sparql 查询,我希望它仅在其中一个值(subjectID)上清理它们。与 DISTINCT 不同,它似乎为所选值的组合找到唯一值,而不是只为其中一个参数。我在这里看到有人提出 group by,但这似乎只有在我列出 group by 之后的所有参数时才适用(我的 sparql 端点抱怨,例如 SELECT 中的非组键变量:?职业)。我尝试运行内部选择,但它似乎不适用于这个特定的查询。那么可能是查询本身的问题(liveIn 可选的值似乎导致了重复)?
虽然在使用 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