2010-07-17 25 views
7

我在我的Python程序使用此行的SPARQL查詢:如何在SPARQL regex()中使用邏輯OR?

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

(其中%s是由用戶輸入的搜索文本)

我想這個匹配如果任?name?featurename包含%s,但我似乎無法找到使用正則表達式()的任何文檔或教程。我想,看來是合理的有兩件事情:

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的作品。但我想通了,它也可以,如果你只是重複的正則表達式()的一部分,像這樣:

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

兩種解決方案都顯得有點凌亂,你必須使用一個2元元組相同的字符串的副本填寫%s s。

回答

15

這是怎麼回事?

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