Как использовать логическое ИЛИ в SPARQL regex ()? - PullRequest
7 голосов
/ 17 июля 2010

Я использую эту строку в запросе SPARQL в моей программе на python:

FILTER regex(?name, "%s", "i" )

(где %s - текст поиска, введенный пользователем)

Я хочу эточтобы соответствовать, если ?name или ?featurename содержит %s, но я не могу найти какую-либо документацию или учебник для использования regex ().Я попробовал пару вещей, которые показались бы разумными:

FILTER regex((?name | ?featurename), "%s", "i" )
FILTER regex((?name || ?featurename), "%s", "i" )
FILTER regex((?name OR ?featurename), "%s", "i" )
FILTER regex((?name, ?featurename), "%s", "i" )

и каждый из них без ()

FILTER regex(?name, "%s", "i" ) || regex(?featurename, "%s", "i" )

Какой правильный способ сделать это?Спасибо

ОБНОВЛЕНИЕ: Использование UNION работает.Но я понял, что это также работает, если вы просто повторяете часть regex () следующим образом:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))

Оба решения кажутся немного грязными, так как вы должны использовать кортеж из 2 элементов с копиямиодна и та же строка для заполнения обоих %s s.

1 Ответ

14 голосов
/ 18 июля 2010

Как насчет этого?

SELECT ?thing
WHERE {
  { 
    ?thing x:name ?name .
    FILTER regex(?name, "%s", "i" )
  } UNION {
    ?thing x:featurename ?name .
    FILTER regex(?featurename, "%s", "i" )
  }
}
...