2010-07-17 5 views
7

J'utilise cette ligne dans une requête SPARQL dans mon programme python:Comment utiliser OR logique dans SPARQL regex()?

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

(où %s est le texte de recherche saisi par l'utilisateur)

Je veux que cela correspond si l'?name ou ?featurename contient %s, mais je n'arrive pas à trouver de documentation ou de tutoriel pour utiliser regex(). J'ai essayé une ou deux choses qui semblaient raisonnables:

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

et chacun de ceux sans ()

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

Quelle est la bonne façon de le faire? Merci

MISE À JOUR: Utilisation de UNION fonctionne. Mais je me suis dit que cela fonctionne aussi si vous répéter la partie regex() comme ceci:

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

Les deux solutions semblent un peu en désordre dans ce que vous devez utiliser un tuple 2 éléments avec des copies de la même chaîne remplir les deux %s s.

Répondre

15

Que pensez-vous de cela?

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