SPARQL для уникального набора значений из всех столбцов и строк - PullRequest
2 голосов
/ 24 мая 2019

У меня есть запрос, который возвращает несколько столбцов, например:

SELECT ?a ?b ?c
WHERE { ... }

Каждая переменная столбца является IRI.Очевидно, это возвращает уникальную строку для каждой комбинации значений столбца (обратите внимание, что значения могут быть не уникальными для столбца):

<urn:id:x:1> <urn:id:a:2> <urn:id:j:3>
<urn:id:x:1> <urn:id:a:2> <urn:id:j:4>
<urn:id:x:1> <urn:id:j:4> <urn:id:k:5>
<urn:id:y:2> <urn:id:j:4> <urn:id:k:6>
...

Однако все, что мне нужно, - это уникальные IRI, охватывающие все строки и столбцы.то есть:

<urn:id:x:1>
<urn:id:a:2>
<urn:id:j:3>
<urn:id:j:4>
<urn:id:k:5>
<urn:id:y:2>
<urn:id:k:6>
...

Возможно ли добиться этого с помощью SPARQL или мне нужно постобработать результаты, чтобы объединить и дедуплицировать значения?Заказ не важен.

1 Ответ

3 голосов
/ 24 мая 2019
SELECT DISTINCT ?d {
    ...
    VALUES ?i { 1 2 3 }
    BIND (if(?i=1, ?a, if(?i=2, ?b, ?c)) AS ?d)
}

Что это делает?

  1. Предложение VALUES создает три копии каждого решения и нумерует их переменной ?i
  2. BINDПредложение создает новую переменную ?d, значение которой ?a, ?b или ?c, в зависимости от того, равен ли ?i 1, 2 или 3 в данном решении
  3. Возвращает SELECT DISTINCT ?dтолько ?d и удаляет дубликаты
...