好的,我只是在学习使用 SPARQL 从 dbpedia.org 查询数据,我正在使用 dbpedia 的http://dbpedia.org/snorql/来运行我的查询。我正在尝试获取一个基于音乐艺术家的列表在三个字段中搜索相同的字符串,如下所示:
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
这是因为“Stevie Nicks”具有所有三个字段(rdfs:label、foaf:name、dbpedia2:name)。但是,当我尝试由另一位不具备全部三个的 MusicalArtist(例如“Depeche Mode”)进行查询时,我没有得到任何结果。
我尝试了各种方法,例如 BIND(COALESCE(?field,...,...) AS ?artistName) 来按 ?artistName 过滤,我也尝试了 UNION 但似乎没有任何效果。有人可以指出我的 SPARQL 方式的错误吗?:)
谢谢!杰森