我对 DBpedia 的 json 响应有疑问。
我使用以下代码生成查询:
$resourceName = ($this->name);
$format = 'json';
$query = "
SELECT ?key ?onto WHERE {
<http://dbpedia.org/resource/".$resourceName."> ?onto ?key .
}";
$searchUrl = 'http://dbpedia.org/sparql?'
.'query='.urlencode($query)
.'&format='.$format;
然后我用 PHP CURL 执行这个
private function curlRequestDbPedia($url, $checkIfExists = 0){
if (!function_exists('curl_init')){die('CURL is not installed!');}
$ch= curl_init();
curl_setopt($ch,
CURLOPT_URL,
$url);
curl_setopt($ch,
CURLOPT_RETURNTRANSFER,
TRUE);
$response = curl_exec($ch);
curl_close($ch);
$responseJSON = json_decode($response,TRUE);
if(json_last_error() != 0){
echo "ERROR: ".json_last_error(); // -.-
}
return $responseJSON;
}
如果我生成“汉堡”查询
查询:
SELECT ?key ?onto WHERE <http://dbpedia.org/resource/Hamburg> ?onto ?key }
CURL 请求
http://dbpedia.org/sparql?query=%0D%0A%09%09SELECT++%3Fkey+%3Fonto+WHERE+%7B%0D%0A%09%09%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FHamburg%3E+%3Fonto+%3Fkey+.%0D%0A%09%09%7D&format=json
工作正常,我没有得到 json_encode 错误!
但是,如果我向 DBpedia 询问“瑞典”,我会得到
SELECT ?key ?onto WHERE {<http://dbpedia.org/resource/Sweden> ?onto ?key }
使用网址:
http://dbpedia.org/sparql?query=%0D%0A%09%09SELECT++%3Fkey+%3Fonto+WHERE+%7B%0D%0A%09%09%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FSweden%3E+%3Fonto+%3Fkey+.%0D%0A%09%09%7D&format=json
当我尝试对来自 DBpedia 的响应进行编码时,我得到一个错误:4(语法错误)。
我将响应 json 数据放在 www.jsonlint.com 上,该网站告诉我,2008 行出现错误。
{
"key": {
"type": "uri",
"value": "http://got.dbpedia.org/resource/\U00010343\U00010345\U00010334\U00010330\U00010342\U00010334\U00010339\U0001033A\U00010339"
}, ...
有人可以解释我的错误吗?或者为什么会发生?
也许我是怎么做到的?
我的猜测是这取决于转义字符 ("\U00010343....")
提前谢谢了