Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby SPARQL没有返回正确的响应_Ruby_Sparql_Dbpedia - Fatal编程技术网

Ruby SPARQL没有返回正确的响应

Ruby SPARQL没有返回正确的响应,ruby,sparql,dbpedia,Ruby,Sparql,Dbpedia,我正在尝试使用以下sparql通过dbpedia获取一些记录: SELECT DISTINCT ?thing, ?url, ?genre WHERE { ?thing foaf:name ?name ; foaf:isPrimaryTopicOf ?url . ?name bif:contains "'mega'" . { ?thing dbpedia-owl:genre ?genre ;

我正在尝试使用以下sparql通过dbpedia获取一些记录:

  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
选择不同的东西、url、类型{
?事物foaf:名称?名称;
foaf:isPrimaryTopicOf?url。
?名称bif:包含“mega”。
{
?事物数据库猫头鹰:体裁?体裁;
猫头鹰乐队
}
联合
{
?事物数据库猫头鹰:体裁?体裁;
猫头鹰:音乐艺术家
}
联合
{
一件事
}
}
限制1000
它在大多数情况下都正常工作,除非我尝试搜索“James brown”而不是“mega”,否则我不会得到任何结果,但是当我只搜索James时,我会将James brown作为结果项之一

请尝试使用

请帮助我调试为什么在输入“James brown”作为查询字符串时没有得到正确的结果。

首先,请注意,has作为foaf:name的值“brown,James Joseph,Jr.”,因此“James brown”不匹配。我将使用标准的contains过滤函数编写查询,并分别询问两个名称:

选择不同的东西、url、类型{
值?类型{dbpedia owl:Band dbpedia owl:MusicalArtist}
?事物foaf:名称?名称;
foaf:isPrimaryTopicOf?url;
a型。
可选{?事物dbpedia owl:genre?genre}
过滤器包含(str(?name),“James”)
过滤器包含(str(?name),“Brown”)
}
限制1000
这得到了三个结果,都是关于灵魂教父詹姆斯·布朗的。另一个选项是使用rdfs:label属性,该属性将包含James Brown(它包含Wikipedia文章名):

选择不同的东西、url、类型{
值?类型{dbpedia owl:Band dbpedia owl:MusicalArtist}
?事物rdfs:标签?名称;
foaf:isPrimaryTopicOf?url;
a型。
可选{?事物dbpedia owl:genre?genre}
过滤器包含(str(?name),“James Brown”)
}
限制1000

您是用小写字母b输入“James brown”还是用大写字母b输入“James brown”?您的第二个查询非常有效,有没有办法使其不区分大小写?谢谢你的回答:)要进行不区分大小写的搜索,我会这样做,例如,
过滤器包含(lcase(str(?name)),lcase(“James Brown”)
。也就是说,我只需要将字符串规范化为小写(或大写,使用
ucase
)并使用
contains
。您也可以将
regex
i
标志一起使用,但正则表达式引擎在进行字符串包含时似乎有些过火。