Вернуть список, соответствующий поиску текстовой строки во ВСЕХ предметах, предикатах и объектах - в одном запросе?
Я ищу, чтобы вернуть список соответствующих 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;