关于rdf:无法使此SPARQL查询正常工作

Can't get this SPARQL query to work

好的,我只是在学习使用SPARQL从dbpedia.org查询数据,并且正在使用dbpedia的http://dbpedia.org/snorql/来运行查询。 MusicalArtists基于在三个字段上搜索相同的字符串,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法的错误吗? :)

谢谢!
杰森


好吧,我很想念无法使用http://dbpedia.org/ontology/MusicalArtist的rdf:type选择" Depeche模式"。这似乎可行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT ?subject
       ?artistName
WHERE {
  {
    ?subject rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
    ?subject rdfs:label ?artistName .
    FILTER ( str(?artistName) ="Depeche Mode" )
  }
  UNION
  {
    ?subject rdf:type <http://dbpedia.org/ontology/Band> .
    ?subject rdfs:label ?artistName .
    FILTER ( str(?artistName) ="Depeche Mode" )
  }
}