Bien, estoy aprendiendo a usar SPARQL para consultar datos de dbpedia.org y estoy usando http://dbpedia.org/snorql/ de dbpedia para ejecutar mis consultas. Estoy tratando de obtener una lista de MusicalArtists basado en la búsqueda de la misma cadena en tres campos de este modo:No se puede hacer que esta consulta SPARQL funcione
SELECT ?subject
?artistRdfsLabel
?artistFoafName
?artistDbpedia2Name
WHERE {
?subject rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
OPTIONAL { ?subject rdfs:label ?artistRdfsLabel . }
OPTIONAL { ?subject foaf:name ?artistFoafName . }
OPTIONAL { ?subject dbpedia2:name ?artistDbpedia2Name . }
FILTER (str(?artistRdfsLabel) = "Stevie Nicks" ||
str(?artistFoafName) = "Stevie Nicks" ||
str(?artistDbpedia2Name) = "Stevie Nicks")
}
LIMIT 10
Esto funciona porque "Stevie Nicks" tiene los tres campos (rdfs: Label, foaf: nombre, dbpedia2: nombre). Pero cuando trato de consultar por otro MusicalArtist que no tiene los tres ("Depeche Mode" por ejemplo) no obtengo ningún resultado.
He intentado varias cosas como BIND (COALESCE (? Campo, ..., ...) AS? ArtistName) para filtrar por? ArtistName y también probé UNION pero nada parece funcionar. ¿Alguien puede señalar el error de mis formas SPARQL? :)
Gracias! Jason