我正在尝试通过dbpedia使用以下sparql获取一些记录:
SELECT DISTINCT ?thing, ?url, ?genre WHERE {
?thing foaf:name ?name ;
foaf:isPrimaryTopicOf ?url .
?name bif:contains "'mega'" .
{
?thing dbpedia-owl:genre ?genre ;
a dbpedia-owl:Band
}
UNION
{
?thing dbpedia-owl:genre ?genre ;
a dbpedia-owl:MusicalArtist
}
UNION
{
?thing a <http://umbel.org/umbel/rc/MusicalPerformer>
}
}
LIMIT 1000
除非我尝试搜索&#34; James brown&#34;否则它大部分时间都能正常工作。而不是&#34; mega&#34;然后我没有得到任何结果,但是当我只是搜索詹姆斯时,我将詹姆斯布朗作为结果项之一。
尝试使用DBpedia's SPARQL Query Editor尝试此查询。
当我进入&#34;詹姆斯布朗&#34;时,请帮我调试为什么我得不到正确的结果?作为查询字符串。
答案 0 :(得分:1)
首先,请注意http://dbpedia.org/resource/James_Brown的值为foaf:name&#34; Brown,James Joseph,Jr。&#34;,so&#34; James Brown&#34;不会比赛。我使用标准的包含过滤器功能编写查询,并单独询问这两个名称:
SELECT DISTINCT ?thing, ?url, ?genre WHERE {
values ?type { dbpedia-owl:Band dbpedia-owl:MusicalArtist <http://umbel.org/umbel/rc/MusicalPerformer> }
?thing foaf:name ?name ;
foaf:isPrimaryTopicOf ?url ;
a ?type .
optional { ?thing dbpedia-owl:genre ?genre }
filter contains( str(?name), "James" )
filter contains( str(?name), "Brown" )
}
LIMIT 1000
这得到了三个结果,都指的是灵魂教父詹姆斯布朗。另一个选择是使用rdfs:label属性,将包含James Brown(它包含Wikipedia文章名称):
SELECT DISTINCT ?thing, ?url, ?genre WHERE {
values ?type { dbpedia-owl:Band dbpedia-owl:MusicalArtist <http://umbel.org/umbel/rc/MusicalPerformer> }
?thing rdfs:label?name ;
foaf:isPrimaryTopicOf ?url ;
a ?type .
optional { ?thing dbpedia-owl:genre ?genre }
filter contains( str(?name), "James Brown" )
}
LIMIT 1000