SPARQL UNION не дает результатов второго запроса - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь загрузить все суверенные государства вместе с некоторыми государствами с частично признанным суверенитетом (Тайвань, Косово) в конечной точке SPARQL Wikidata query.wikidata.org. Это мой SPARQL:

SELECT ?item ?iso2
WHERE {
 {
    ?item wdt:P31 wd:Q3624078.
    ?item p:P31 ?statement.
    ?statement ps:P31 wd:Q3624078.
    FILTER NOT EXISTS { ?statement pq:P582 ?end. }
  }
  UNION {
    FILTER(?item IN (wd:Q865, wd:Q1246))
  }
  OPTIONAL { ?item wdt:P297 ?iso2. }
}

Как вы можете видеть, суверенные государства загружаются операторами SPARQL, но Тайвань и Косово добавляются явно, с использованием предложения FILTER.

Предложение фильтра само по себе работает нормально:

SELECT ?item ?iso2
WHERE {
  FILTER(?item IN (wd:Q865, wd:Q1246))
  OPTIONAL { ?item wdt:P297 ?iso2. }
}

Однако комбинированный оператор не дает двух явных результатов wd:865, wd:1246.

Что я делаю не так?

1 Ответ

0 голосов
/ 22 апреля 2020

Согласно комментарию пользователя @ UninformedUser, ответ таков: FILTER всегда отфильтровывает элементы. Его нельзя использовать для добавления элементов в результирующий набор (что кажется логичным, учитывая терминологию). Так что в моем предложении UNION второй набор результатов всегда был пустым.

Правильный выбор для получения набора результатов, члены которого определены явно, будет VALUES:

SELECT ?item ?iso2
WHERE {
 {
    ?item wdt:P31 wd:Q3624078.
    ?item p:P31 ?statement.
    ?statement ps:P31 wd:Q3624078.
    FILTER NOT EXISTS { ?statement pq:P582 ?end. }
  }
  UNION {
    VALUES ?item { wd:Q865 wd:Q1246 }
  }
  OPTIONAL { ?item wdt:P297 ?iso2. }
}
...