我想从DBpedia SPARQL API获取有关Person的所有信息。 第一个问题是,请求花了太长时间。 其次,我没有收到有关我寻找的人的任何信息。 我不知道自己做错了什么?
我的代码:
require_once "EasyRdf.php";
require_once "html_tag_helpers.php";
// Setup some additional prefixes for DBpedia
EasyRdf_Namespace::set('category', 'http://dbpedia.org/resource/Category:');
EasyRdf_Namespace::set('dbpedia', 'http://dbpedia.org/resource/');
EasyRdf_Namespace::set('dbo', 'http://dbpedia.org/ontology/');
EasyRdf_Namespace::set('dbp', 'http://dbpedia.org/property/');
$sparql = new EasyRdf_Sparql_Client('http://dbpedia.org/sparql');
$result = $sparql->query(
'SELECT *
WHERE {
?person foaf:name ?name.
?person foaf:name ?name.
FILTER(regex(?person,"John Lennon"))
}
'
);
echo "<pre>";
print_r($result);
我的结果:
EasyRdf_Sparql_Result Object
(
[type:EasyRdf_Sparql_Result:private] => bindings
[boolean:EasyRdf_Sparql_Result:private] =>
[ordered:EasyRdf_Sparql_Result:private] =>
[distinct:EasyRdf_Sparql_Result:private] =>
[fields:EasyRdf_Sparql_Result:private] => Array
(
[0] => person
[1] => name
)
[storage:ArrayIterator:private] => Array
(
)
)
答案 0 :(得分:1)
你不会得到类似的结果:
regex(?person,"John Lennon"
因为?person 的值是URI,而不是字符串,而URI不包含空格。相反,您可以查询具有实际名称的个人(不要忘记语言标记),如:
select * where {
?resource foaf:name "John Lennon"@en
}
我想获取所有信息
如果要获取有关某人的所有属性值,可以使用以下内容扩展查询:
select ?subject ?property ?object {
?resource foaf:name "John Lennon"@en ;
?property ?object .
}
当然,这只会检索人员是三元组的主题的数据,但您也可能关心此人是对象的人也是三倍,在这种情况下你可能会去:
describe ?person where {
?person foaf:name "John Lennon"@en
}
describe 查询的结果取决于实现,但是获取资源作为主题或对象的所有三元组非常常见。