Okay, ich lerne nur SPARQL, um Daten von dbpedia.org abzufragen, und ich benutze dbpedia http://dbpedia.org/snorql/, um meine Abfragen zu starten. Ich versuche, eine Liste zu bekommen MusicalArtists basierend auf wie so für die gleiche Zeichenfolge über drei Felder suchen:Kann diese SPARQL-Abfrage nicht funktionieren
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
das funktioniert, weil "Stevie Nicks" alle drei Felder (rdfs: label, foaf: name, dbpedia2: name) hat. Aber wenn ich versuche, einen anderen MusicalArtist abzufragen, der nicht alle drei hat ("Depeche Mode" zum Beispiel), bekomme ich keine Ergebnisse.
Ich habe versucht verschiedene Dinge wie BIND (COALESCE (? Feld, ..., ...) AS? ArtistName) nach? ArtistName zu filtern und ich habe auch UNION versucht, aber nichts scheint zu funktionieren. Kann jemand auf den Fehler meiner SPARQL-Wege hinweisen? :)
Danke! Jason