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" ) } } |