Предположим, у нас есть огромный RDF-граф, и мы хотим сделать следующее: (Я попробовал, и это не работает - хотел знать, неправильно ли я строю запрос или какая-то проблема с дампом rdf).
select ?n ?o
where {
?n <name_of_a_node> <name_of_this_node>.
?n ?p ?o.
?o <type_of_a_node> ?t.
FILTER(REGEX(STR(?t), "president")).
}
Приведенный выше запрос говорит, что я знаю имя узла n. Итак, я получаю URI узла n. Затем я извлекаю все предикаты узла n и других узлов, связанных с этим предикатом. Для каждого из этих узлов, которые подключены к узлу а, я хочу посмотреть на их свойство (свойство типа) и получить только те узлы, у которых есть подстрока в их свойстве типа.
Возможно ли это в SPARQL? По сути, стоя на узле и просматривая все другие узлы, к которым подключен этот узел, а затем извлекая только те узлы, которые соответствуют другому условию их свойств.
В противном случае, должен ли я просто получить все узлы, к которым подключен узел n, и для каждого из них запустить еще один запрос SPARQL, чтобы выполнить эту проверку?
Я использую JENA для хранения данных.
name_of_a_node
и т. д.? По сути, да, структура вашего запроса в порядке, но чтобы помочь вам заставить его работать, нам нужны подробности. - person Ian Dickinson   schedule 31.01.2013contains
, который, вероятно, будет более эффективным, чемregex
. - person Joshua Taylor   schedule 06.03.2014