SPARQL - исключить одну переменную из результатов для связанной переменной - PullRequest
0 голосов
/ 14 марта 2019

Я опрашиваю Викиданные с целью создания группы выпускников Эдинбургского или Глазго, которые в настоящее время являются членами шотландского парламента.Затем я хотел бы вернуть список тех должностей, которые они занимали, и для каждой должности имена других живых людей, которые занимали этот пост, независимо от того, являются ли они выпускниками.

Я справился с вышеизложенным, но набор результатов для других, занимающих этот пост - переменная - другие - включает в себя исходную тему для переменной «выпускники» в каждом случае.Я хотел бы, чтобы все ДРУГИЕ офисные владельцы, кроме человека, назначающего на карту? Выпускникам.Запрос довольно длинный, поэтому просто включаю соответствующие разделы.

#associate ?alumni with positions of office
?alumni p:P39 ?officeStmnt .
?officeStmnt ps:P39 ?role .
?role rdfs:label ?roleLabel .
 FILTER (langMatches(lang(?roleLabel ), "en")) .
 FILTER NOT EXISTS 
 {
 FILTER(langMatches(lang(?roleLabel ), "en-ca")) 
  }.
FILTER NOT EXISTS 
 {
 FILTER(langMatches(lang(?roleLabel ), "en-gb")) 
 } .

#Filter for member of 5th Scottish Parliament
VALUES (?role)
 {  
  (wd:Q30580546)
 } . 


?alumni p:P39 ?officeStmnts .
?officeStmnts ps:P39/rdfs:label ?rolesLabel .
FILTER (langMatches(lang(?rolesLabel ), "en")) .
FILTER (!regex (?rolesLabel,"Member of")) .
?rolesLabel ^rdfs:label ?roles .
?roles ^ps:P39/^p:P39 ?others .
 ?others rdfs:label ?othersLbl .
FILTER (langMatches(lang(?othersLbl  ), "en")) .
BIND (xsd:string(?othersLbl) AS ?othersStr)
...