5

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

我的 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”,但我仍然卡住了,找不到任何可行的解决方案。

4

2 回答 2

2

2 您的查询存在问题:

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

编辑

删除了第 1 点,因为已经看到了完整的源代码,很明显这只是 PHP 连接语法而不是愚蠢的 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')
}";

实际上,我不希望这会产生任何影响,但总是值得一试。

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

于 2011-03-05T09:13:19.607 回答
2

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

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

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

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

于 2011-03-16T12:31:05.203 回答