2012-07-06 21 views
5

Estoy tratando de hacer coincidir una palabra en SPARQL utilizando el filtro de expresiones regulares, pero sin éxito ...:/ Estoy enviando la consulta al punto final ubicado en "http://dbtune.org/ musicbrainz/sparql ". Bueno, la siguiente consulta funciona:SPARQL regex filter

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name "Switchfoot" 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

Pero, si quito la línea 7 (artista foaf:.? Nombre de "Switchfoot"), la siguiente consulta no coincide:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX mo: <http://purl.org/ontology/mo/> 
SELECT ?artist ?name 
WHERE { 
    ?artist a mo:MusicArtist 
    . ?artist foaf:name ?name 
    . FILTER(regex(str(?name), "switchfoot", "i")) 
} 

I no sé si estoy haciendo algo mal o es un error del punto final ...

¿Alguien me puede ayudar?

+0

Eso huele ya sea a un error (como dices) o a algún tipo de aceleración de consultas. Me pregunto qué punto final usan? – user205512

+0

El punto final es "http://dbtune.org/musicbrainz/sparql" ... He realizado una prueba y me di cuenta de que ese punto final limita los resultados a 1000. Envié la siguiente consulta: SELECT count (? artista) DONDE {? artist a mo: MusicArtist} Y devolvió 1000, que es muy poco ... Creo que tal vez es realmente un error ... =/ –

Respuesta

7

En su segunda consulta, no hay un patrón de gráfico para indexar. La única forma en que el procesador de consultas puede satisfacer esa consulta es recuperar el nombre de en cada artista en la tienda triple, y luego aplicar una expresión regular que coincida con cada uno. No es de extrañar que esté alcanzando algún tipo de límite de recursos, ya sea tiempo de CPU o tiempo transcurrido.

Si desea hacer búsquedas de texto libre como esa, le sugiero que descargue el conjunto de datos a un punto final local y use un índice de texto libre como LARQ. ¡Sus consultas serán más rápidas y sus usuarios se lo agradecerán!

+0

¡Gracias, Ian! –

+0

Creo que haré un servidor para almacenar solo los datos que necesito para combinar con la expresión regular, como "nombre", "etiqueta" y posiblemente otros, para que pueda obtener el URI de recursos de mi propio servidor y Úselo para obtener otras propiedades! –