Хорошо, я только учусь использовать SPARQL для запроса данных с dbpedia.org, и я использую dbpedia http://dbpedia.org/snorql/для выполнения своих запросов. Я пытаюсь получить список MusicalArtists на основе поиска одна и та же строка в трех полях, например так:
SELECT ?subject
?artistRdfsLabel
?artistFoafName
?artistDbpedia2Name
WHERE {
?subject rdf:type .
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
Это работает, потому что "Stevie Nicks" имеет все три поля (rdfs:label, foaf:name, dbpedia2:name). Но когда я пытаюсь сделать запрос от другого MusicalArtist, у которого нет всех трех (например, Depeche Mode), я не получаю никаких результатов.
Я пробовал различные вещи, такие как BIND(COALESCE(?field,...,...) AS ?artistName) для фильтрации по ?artistName, и я также пробовал UNION, но ничего не работает. Может ли кто-нибудь указать на ошибку моих способов SPARQL? :)
Спасибо! Джейсон