Вернуть список, соответствующий поиску текстовой строки во ВСЕХ предметах, предикатах и ​​объектах - в одном запросе?

Я ищу, чтобы вернуть список соответствующих URI или текстовых узлов, которые содержат определенную текстовую строку в нем.

Это позволяет мне искать любые объекты, у которых есть совпадающая строка, но я также хочу вернуть любые предикаты или объекты, которые также совпадают - все в том же запросе.

select ?s ?p ?o WHERE {
  ?s ?p ?o .
  FILTER (REGEX(STR(?s), "SEARCHTEXT", "i"))
}

Любая идея, как я мог бы изменить это?

2 ответа

select ?s ?p ?o WHERE {
  ?s ?p ?o .
  FILTER ( REGEX(STR(?s), "SEARCHTEXT", "i") ||
           REGEX(STR(?p), "SEARCHTEXT", "i") ||
           REGEX(STR(?o), "SEARCHTEXT", "i") )
}

Для какого варианта использования вы намереваетесь это сделать? Так как вы хотите найти его, ваше регулярное выражение, кажется, выражает некоторую ценную информацию о токенах, с которыми оно совпадает. Если это так, то было бы разумно пометить ваши данные некоторым отношением, делающим эти знания явными!

Поиск регулярных выражений, как вы и предполагали, представляется целесообразным лишь в очень немногих случаях, например, для интерфейса администрирования СУБД. Если вы просто хотите решить проблему, я бы сделал что-то вроде этого (в коде, а не в виде запроса):

result = data.subjectSet().add(data.predicateSet()).add(data.objectSet())
FOREACH (token ε result) {
    result.remove(token) unless(token ≙ regex)
}
return result;
Другие вопросы по тегам