SPARQL FILTER () не работает должным образом - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь загрузить список африканских стран из Викиданных вместе с их валютой.Это мой текущий запрос:

SELECT DISTINCT ?item $itemLabel ?currency ?currencyLabel ?currencyEndDate
  WHERE {
    ?item wdt:P31 wd:Q3624078.                                # select only sovereign states
    ?item wdt:P706/wdt:P361*|wdt:P361*|wdt:P30 wd:Q15.        # select items which are geographically in Africa

    ?item p:P31 ?statement.
    ?statement ps:P31 wd:Q3624078.
    FILTER NOT EXISTS { ?statement pq:P582 ?end. }            # filter out items which are not sovereign states anymore
    FILTER NOT EXISTS { ?item wdt:P31 wd:Q3024240. }          # filter out historical countries

    OPTIONAL {
      ?item p:P38 ?currencyStatement.
      ?currencyStatement ps:P38 ?currency.
      OPTIONAL {
        ?currencyStatement pq:P582 ?currencyEndDate.
      }
      #FILTER (?currencyEndDate = "")
    }

    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  }
  ORDER BY ASC($itemLabel)

Вы можете попробовать его здесь .

Как видите, в некоторых странах есть несколько валют, но в основном этоиз-за прошлой валюты, которая в конечном итоге была заменена.Прошлые валюты имеют спецификатор даты окончания (P: 582), который загружается в переменную ?currencyEndDate.

Теперь я хотел бы использовать ?currencyEndDate в предложении FILTER в строке 17.Но как только я активирую эту строку, валюты исчезнут из всех результатов.

Если я переместу строку FILTER на две строки ниже (за пределы OPTIONAL), то я не получу никаких результатов ввсе.

Буду благодарен за объяснение

  • , как это сделать
  • и почему мои запросы не работают должным образом.
...