2010-07-17 7 views
7

मैं अपने अजगर कार्यक्रम में एक SPARQL क्वेरी में इस लाइन का उपयोग कर रहा:तार्किक या SPARQL regex() में कैसे उपयोग करें?

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 एस दोनों भरने के लिए।

उत्तर

15

इसके बारे में क्या?

SELECT ?thing 
WHERE { 
    { 
    ?thing x:name ?name . 
    FILTER regex(?name, "%s", "i") 
    } UNION { 
    ?thing x:featurename ?name . 
    FILTER regex(?featurename, "%s", "i") 
    } 
} 
संबंधित मुद्दे