У меня есть запрос sparql, который возвращает дубликаты, и я хочу, чтобы он очищал их только от одного из значений (subjectID ). В отличие от DISTINCT, который находит уникальное значение для комбинации выбранных значений, а не только для одного из параметров. Я видел, как кто-то здесь предлагает группировать по, но это кажется применимым только в том случае, если я перечислю все параметры после группировки по (, на что жалуется моя конечная точка sparql, например. Не -групповая ключевая переменная в SELECT :?occupation ). Я попытался запустить внутренний выбор, но, похоже, он не работает для этого конкретного запроса. Так что может быть проблема с самим запросом (значения, опционально 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