Викиданные запрос пропускают страны Европы - PullRequest
1 голос
/ 20 марта 2019

Я использую следующий запрос к wikidata;

SELECT ?country ?countryLabel
      WHERE
      {
        ?country   wdt:P30 wd:Q46;
                   wdt:P31 wd:Q6256.
        SERVICE wikibase:label { bd:serviceParam wikibase:language
        "[AUTO_LANGUAGE],en". }
      }

где P30 - континент; Q46 это Европа; P31 - это экземпляр, а Q6256 - страна;

https://query.wikidata.org/#SELECT%20%3Fcountry%20%3FcountryLabel%0A%20%20%20%20%20%20WHERE%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%3Fcountry%20%20%20wdt%3AP30%20wd%3AQ46%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP31%20wd%3AQ6256.%0A%20%20%20%20%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%0A%20%20%20%20%20%20%20%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%7D%0A%20%20%20%20%20%20%7D

Тем не менее, этот запрос возвращает только 15 стран Европы. Например, Швеция не возвращается, даже если Швеция соответствует запросу на https://www.wikidata.org/wiki/Q34

Так что, несмотря на то, что запрос кажется правильным, он упускает многие страны. Любые идеи о том, как решить эту проблему?

При сравнении двух записей; одна для Германии / Швеции (которая не отображается) и Норвегии, которая действительно появляется, разница, которую я мог найти, заключалась в том, что Германия / Швеция имеет предпочтительный ранг для суверенного государства, в то время как просто нормальный ранг для страны. Это может быть причиной того, что предложение WHERE решает показывать только предпочтительный ранг, если он существует; и пропустить оставшиеся утверждения. Если это так, и я подозреваю, что это так; Интересно, есть ли способ переопределить поведение механизма запросов для поиска по всем операторам с предпочтительным или нормальным рангом.

1 Ответ

0 голосов
/ 20 марта 2019

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

SELECT DISTINCT ?country ?countryLabel
      WHERE
      {
        ?country   wdt:P30 wd:Q46.
        ?country p:P31 ?country_instance_of_statement .
        ?country_instance_of_statement ps:P31 wd:Q6256 .
        SERVICE wikibase:label { bd:serviceParam wikibase:language
        "[AUTO_LANGUAGE],en". 
        }
        filter not exists{?country p:P31/ps:P31 wd:Q3024240 }
      } 
      order by ?countryLabel

У меня все еще есть несколько дополнительных стран;такие как германская империя.Но я думаю, что это другая проблема, которую нужно решить.

https://query.wikidata.org/#SELECT%20distinct%20%3Fcountry%20%3Fcountry_instance_of_statement%20%3FcountryLabel%0A%20%20%20%20%20%20WHERE%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%3Fcountry%20%20%20wdt%3AP30%20wd%3AQ46.%0A%20%20%20%20%20%20%20%20%3Fcountry%20p%3AP31%20%3Fcountry_instance_of_statement%20.%0A%20%20%20%20%20%20%20%20%3Fcountry_instance_of_statement%20ps%3AP31%20wd%3AQ6256%20.%0A%20%20%20%20%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%0A%20%20%20%20%20%20%20%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20filter%20not%20exists%7B%3Fcountry%20p%3AP31%2Fps%3AP31%20wd%3AQ3024240%20%7D%0A%20%20%20%20%20%20%7D%20%0A

Обратите внимание, что country_instance_of_statement фиксирует все операторы независимо от ранга.И как только я получу их, я использую 'ps: P31 wd: Q6256', чтобы вытащить те, у которых в качестве объекта указана страна ("wd: Q6256").

Я добавил предложения из @AKSW выше.

А для тех, кто хочет другой подход, использующий время окончания для страны, это sparql

SELECT distinct ?country ?countryLabel
      WHERE
      {
        ?country   wdt:P30 wd:Q46.
        ?country p:P31 ?country_instance_of_statement .
        ?country_instance_of_statement ps:P31 wd:Q6256 .
        filter not exists {?country_instance_of_statement pq:P582 ?endTime }
        SERVICE wikibase:label { bd:serviceParam wikibase:language
        "[AUTO_LANGUAGE],en". 
        }
      } 
      order by ?countryLabel

https://query.wikidata.org/#SELECT%20distinct%20%3Fcountry%20%3Fcountry_instance_of_statement%20%3FcountryLabel%0A%20%20%20%20%20%20WHERE%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%3Fcountry%20%20%20wdt%3AP30%20wd%3AQ46.%0A%20%20%20%20%20%20%20%20%3Fcountry%20p%3AP31%20%3Fcountry_instance_of_statement%20.%0A%20%20%20%20%20%20%20%20%3Fcountry_instance_of_statement%20ps%3AP31%20wd%3AQ6256%20.%0A%20%20%20%20%20%20%20%20filter%20not%20exists%20%7B%3Fcountry_instance_of_statement%20pq%3AP582%20%3FendTime%20%7D%0A%20%20%20%20%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%0A%20%20%20%20%20%20%20%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20%0A

...