SPARQL: Исключить двойные ресурсы в COUNT

Я пытаюсь написать запрос SPARQL, который подсчитывает только количество голландских политиков для каждого университета. Однако на каждый dbo:almaMater для некоторых политиков приходится один лишний ресурс (их специальность, например, dbr:Sociology). Это также отражено в COUNT. Например. Я получаю счет 49 для Лейденского университета, где должно быть только 42. Есть идеи, как я могу это решить? Я пробовал ФИЛЬТР НЕ СУЩЕСТВУЕТ и МИНУС, но оба ничего не делают для подсчета. Спасибо.

Мой запрос:

SELECT distinct  ?education (COUNT(?education) AS ?edu_count) 
WHERE { ?name <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbpedia.org/ontology/Person>.
        ?name <http://dbpedia.org/ontology/birthPlace> <http://dbpedia.org/resource/Netherlands>.
        ?name <http://dbpedia.org/ontology/party> ?party.
        ?name <http://dbpedia.org/ontology/almaMater> ?education.
        ?education <http://dbpedia.org/ontology/type> <http://dbpedia.org/resource/Public_university>.

        
} GROUP BY ?education 
ORDER BY DESC(?edu_count)

person Cro-Magnon    schedule 06.10.2020    source источник
comment
Вместо ?name dbo:party ?party попробуйте filter exists { ?name dbo:party ?party }. P.S. Почему sql?   -  person Stanislav Kralin    schedule 06.10.2020
comment
@stanislavKralin большое спасибо, не знал, что мы можем использовать такой фильтр. Что касается sql, то это ошибка, я ее уберу.   -  person Cro-Magnon    schedule 06.10.2020
comment
Правильным способом было бы подсчитать переменную ?name и использовать ее отдельно для каждой группы. Также бессмысленно вызывать отдельные при использовании group by. Должно быть SELECT ?education (COUNT(DISTINCT ?name) AS ?cnt)   -  person UninformedUser    schedule 06.10.2020
comment
Спасибо @UninformedUser   -  person Cro-Magnon    schedule 06.10.2020


Ответы (1)


Пересмотренный запрос, основанный на комментариях, с дополнительными пробелами для ясности. Запрос в форме и результаты --

SELECT                               ?education
       ( COUNT ( DISTINCT ?name ) AS ?cnt )
WHERE { ?name      <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbpedia.org/ontology/Person> .
        ?name      <http://dbpedia.org/ontology/birthPlace>          <http://dbpedia.org/resource/Netherlands> .
        ?name      <http://dbpedia.org/ontology/party>               ?party .
        ?name      <http://dbpedia.org/ontology/almaMater>           ?education .
        ?education <http://dbpedia.org/ontology/type>                <http://dbpedia.org/resource/Public_university> .
      } 
GROUP BY ?education 
ORDER BY DESC ( ?cnt ) 
         ASC ( ?education )
person TallTed    schedule 08.10.2020