2010-07-17 24 views
7
benim piton programında bir SPARQL sorguda bu hattı kullanıyorum

:SPARQL regex() içinde mantıksal OR nasıl kullanılır?

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

Bunu eşleştirmek istediğiniz

(%s kullanıcı tarafından girilen arama metni olduğu) ?name veya ?featurename ya eğer %s içeriyor, ancak regex() kullanmak için herhangi bir belge veya öğretici bulamıyorum. Bunu yapmak için doğru yolu nedir ()

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

olmadan

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") 

ve bunların her biri: Ben makul görünüyordu birkaç şey denedik? Teşekkürler

GÜNCELLEME: UNION kullanımı.

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

Her iki çözümleri bu biraz pis bir görünmek aynı dize kopyaları ile 2 öğeli tuple kullanmak zorunda: Ama sadece bu yüzden gibi regex() bölümünü tekrarlamak eğer o da işe yaradığını anladım %s s'yi doldurmak için

cevap

15

Buna ne dersiniz?

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