Я использую эту строку в запросе 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" )
Что правильный путь состоит в том, чтобы сделать это?Спасибо
ОБНОВЛЕНИЕ: Используя работы ОБЪЕДИНЕНИЯ. Но я выяснил, что это также работает, если Вы просто повторяете regex () часть как так:
FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))
Оба решения кажутся немного грязными в этом, необходимо использовать кортеж с 2 элементами с копиями той же строки для заполнения обоих %s
s.
Что насчет этого?
SELECT ?thing
WHERE {
{
?thing x:name ?name .
FILTER regex(?name, "%s", "i" )
} UNION {
?thing x:featurename ?name .
FILTER regex(?featurename, "%s", "i" )
}
}