Хорошо, я просто изучаю использование SPARQL для запроса данных с dbpedia.org, и я использую dbpedia's http://dbpedia.org/snorql/ для запуска моих запросов. Я пытаюсь получить список MusicalArtists основанные на поиске той же строке через три поля, как так:Не удается получить этот запрос SPARQL
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
Это работает, потому что «Стиви Никс» имеет все три поля (ИСС: ярлык, FOAF: имя, dbpedia2: имя). Но когда я пытаюсь запросить другой MusicalArtist, который не имеет всех трех (например, Depeche Mode), я не получаю никаких результатов.
Я пробовал различные вещи, такие как BIND (COALESCE (? Field, ..., ...) AS? ArtistName), чтобы фильтровать? ArtistName, и я также пытался UNION, но ничего не работает. Может ли кто-нибудь указать на ошибку моих методов SPARQL? :)
Спасибо! Jason