2012-06-17 9 views
7

En ANSI SQL, puede escribir algo como:Coincidencia de cadenas en SPARQL?

Select * From DBTable Where DBTable.Description LIKE "MEET" 

o

Select * From DBTable Where DBTable.Description LIKE "%MEET%" 

Lo que quisiera ayuda con la escritura es el equivalente SPARQL de las consideraciones anteriores.

Respuesta

9

Use regex filter. Se puede encontrar un breve tutorial here

Esto es lo que parece:

PREFIX ns: <http://example.com/namespace> 

SELECT ?x 
WHERE 
{ ?x ns:SomePredicate ?y . 
    FILTER regex(?y, "YOUR_REGEX", "i") } 

YOUR_REGEX debe ser una expresión de la XQuery regular expression language

i es un opcional flag. Significa que el partido no distingue entre mayúsculas y minúsculas.

+1

Jena se ha mudado a Apache, por favor, enlace al nuevo sitio web aquí: http://jena.apache.org/tutorials/sparql_filters.html – castagna

+0

@castagna gracias. Ni siquiera me di cuenta de que era foroforma. – toniedzwiedz

4

Si tiene una cadena fija que coincida, puede usarla directamente en su patrón de gráfico, p.

PREFIX ns: <http://example.com/namespace> 

SELECT ?x 
WHERE 
{ ?x ns:SomePredicate "YourString" } 

Nota esto no siempre funciona debido a la coincidencia de patrones se basa en la igualdad RDF término que significa "YourString" no se considera el mismo plazo que dicen "YourString"@en así que si eso puede ser un problema utilice el REGEX enfoque Tom sugiere

También algunos motores SPARQL proporcionan una extensión de búsqueda de texto completo que le permite integrar consultas de estilo Lucene en sus consultas SPARQL que pueden ajustarse mejor a su caso de uso y casi con seguridad ser más eficientes para la búsqueda genérica que requeriría REGEX

Cuestiones relacionadas