DBpedia和SPARQL:带重音符号的查询不起作用

时间:2011-03-05 00:15:52

标签: sparql dbpedia

所以我尝试了很多不同的东西,并一直在寻找解决方案,但没有运气......

我的SPARQL查询

    PREFIX dbp: <http://dbpedia.org/resource/>
    PREFIX dbpedia2: <http://dbpedia.org/property/>


   SELECT ?currentclub
   WHERE {
      dbp:".$term." dbpedia2:currentclub ?currentclub . 
      FILTER langMatches(lang(?currentclub), 'en')
   }

当$ term等于名称中带有重音符号的东西时,它会被搞砸,并且没有给出结果。我尝试了很多不同的东西,但似乎无法让它们中的任何一个起作用。希望得到一些帮助。

由于

修改

我正在使用PHP和curl。这是我根据自己的需要下载和修改的内容......这里是与dbpedia通信的部分。

$searchUrl = 'http://dbpedia.org/sparql?'
      .'query='.urlencode($query)
      .'&format='.$format;

$ query在上面发布,使用的格式是json。

修改2

这是我正在使用的源代码。 https://gist.github.com/380379或许查看完整的代码可以让您更好地了解错误。

我将包含重音的姓氏的数据库字段更改为“utf8_unicode_ci”,但我仍然卡住了,找不到任何有用的解决方案。

2 个答案:

答案 0 :(得分:2)

2您的查询问题:

  1. 您不能使prefix:"something"形式的QName无效。如果您需要在那里连接某些内容,那么您不应该使用引号
  2. 您确定您的查询,尤其是重音符号是UTF-8吗? 如果它是那么它应该工作。如果没有,那么你可以通过使用\u0000形式的转义来解决这个问题,其中0000是转义字符的UTF-8代码的十六进制表示。这应该在QName
  3. 中允许

    修改

    删除了Point 1,因为已经看到完整的源代码,它只是PHP的连接语法,而不是dud SPARQL语法

    看到完整的源代码后,代码失败的原因并不明显。我可以做的其他建议是尝试更改代码以发送该术语的URI引用而不是QName:

     $query =
       "PREFIX dbp: <http://dbpedia.org/resource/>
    PREFIX dbp2: <http://dbpedia.org/ontology/>
    SELECT ?abstract
    WHERE {
    <http://dbpedia.org/resource/".$term."> dbp2:abstract ?abstract .
    FILTER langMatches(lang(?abstract), 'en')
    }";
    

    实际上,我不希望这会有任何不同,但总是值得一试。

    如果错误仍然存​​在,您可以发布一些查询不起作用的示例术语

答案 1 :(得分:2)

尝试记录编码查询,对于Île-de-France(区域),各种口音应该像这样编码:

select distinct ?p ?o  where {
  <http://dbpedia.org/resource/%C3%8Ele-de-France_(region)> ?p ?o
}

因此'Î'字符以UTF-8编码,如%C3%8E,转换表可在以下位置检索:http://www.utf8-chartable.de/

我不是PHP开发人员,但应该有一个UTF-8编码库可以帮助你。