Не удается заставить этот SPARQL-запрос работать

Хорошо, я только учусь использовать 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? :)

Спасибо! Джейсон

6
задан programmer 3 June 2012 в 09:06
поделиться