Фильтрация результатов SPARQL - PullRequest
0 голосов
/ 04 августа 2009

У меня есть следующие примеры троек

r1 -> property -> resourceA
r1 -> property -> resourceB
r1 -> property -> resourceC
resourceA -> name -> word1
resourceB -> name -> word2
resourceC -> name -> word4

r2 -> property -> resourceD
r2 -> property -> resourceE
r2 -> property -> resourceF
resourceD -> name -> word1
resourceE -> name -> word2
resourceF -> name -> word3

r3 -> property -> resourceG
r3 -> property -> resourceH
r3 -> property -> resourceI
resourceG -> name -> word5
resourceH -> name -> word6
resourceI -> name -> word7

В качестве параметра я использую word1 и word2. Я хочу, чтобы все слова вкл. слово1 и слово2, которые встречаются вместе со словами1 и словом2.

Результат из этого примера должен быть:

word1
word2
word3
word4

Понятия не имею, как это сделать: (

1 Ответ

2 голосов
/ 04 августа 2009

Предполагая, что предикат name одинаков для всех word с, и нет других троек с предикатом name:

SELECT DISTINCT ?w {
  ?s <name> ?w
}
ORDER BY ?w

Отредактировано после того, как вопрос отредактирован:

SELECT DISTINCT ?w {  # select each word only once

  # match three properties under the same resource
  ?r <property> ?p1, ?p2, ?p3.

  # two of the properties must have names "word1" and "word2"
  ?p1 <name> "word1" .
  ?p2 <name> "word2" .

  # third property name may be anything, including "word1" and "word2"
  ?p3 <name> ?w .
}
ORDER BY ?w  # return words in sorted order
...