У меня есть список узлов, и я хочу получить тройки, содержащие все отношения между этими узлами.
Вот что я сделал до сих пор:
PREFIX myPrefix: <http://example.org/myPrefix/>
SELECT ?a ?relation ?b
WHERE{
values ?a { myPrefix:id_00083184 myPrefix:id_00083187
myPrefix:id_00083189 myPrefix:id_00083182
myPrefix:id_09463313 myPrefix:id_00000790
myPrefix:id_00073965 myPrefix:id_00073966
myPrefix:id_00016990 myPrefix:id_08380001
myPrefix:id_00019131 myPrefix:id_03739215
myPrefix:id_00019129 myPrefix:id_00034482
myPrefix:id_00098617
}
values ?b { myPrefix:id_00083184 myPrefix:id_00083187
myPrefix:id_00083189 myPrefix:id_00083182
myPrefix:id_09463313 myPrefix:id_00000790
myPrefix:id_00073965 myPrefix:id_00073966
myPrefix:id_00016990 myPrefix:id_08380001
myPrefix:id_00019131 myPrefix:id_03739215
myPrefix:id_00019129 myPrefix:id_00034482
myPrefix:id_00098617
}
?a ?relation ?b .
}
При этом я получаю то, что хочу, то есть все отношения между узлами в моем (внешнем) списке; используя values
и повторяя узлы для ?a
и ?b
. Но проблема в том, что мой список узлов может быть очень большим; иногда он может иметь до 1000 узлов и это только небольшой случай; и этот запрос занимает слишком много времени для выполнения.
Есть ли лучший способ сделать то, что мне нужно? Это единственный подход, который я нашел, но я не очень хорошо разбираюсь в SPARQL, так что есть ли способ сделать это правильно?
PS: я получаю список узлов извне из запроса из другой базы данных и с помощью Java я создаю запрос, добавляя каждый узел в список.
Все это звучит очень по-пещерному, но, как я уже сказал, я начинаю использовать SPARQL.
Большое спасибо.
n
узлов, сложность наивного решения, очевидно,O(n²)
- person UninformedUser   schedule 10.05.2016a r b
, иb r a
, но это действительно будет вашей задачей при построении запроса. - person UninformedUser   schedule 11.05.2016