SPARQL没有返回正确的响应

时间:2014-10-25 23:26:39

标签: ruby sparql dbpedia

我正在尝试通过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;时,请帮我调试为什么我得不到正确的结果?作为查询字符串。

1 个答案:

答案 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