我想从DBpedia SPARQL中获得有关一个人的所有信息。第一个问题是,请求花了太长时间。第二,我没有得到任何关于我要找的人的信息。我不知道我做错了什么?
我的守则:
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
(
)
)发布于 2015-05-01 17:36:42
你不会得到这样的结果:
regex(?person,"John Lennon"因为?person的值是URI,而不是字符串,URI不包含空格。相反,您可以查询具有实际名称的个人(不要忘记语言标记),如下所示:
select * where {
?resource foaf:name "John Lennon"@en
}SPARQL结果
我想得到所有的信息
如果要获取有关某个人的所有属性值,可以使用以下内容扩展查询:
select ?subject ?property ?object {
?resource foaf:name "John Lennon"@en ;
?property ?object .
}当然,这只会检索数据,而这个人是三元组的主题,但您也可能关心这个人也是三元组的对象,在这种情况下,您可能会选择:
describe ?person where {
?person foaf:name "John Lennon"@en
}SPARQL结果()
描述查询的结果依赖于实现,但是获取资源为主题或对象的所有三元组是非常常见的。
https://stackoverflow.com/questions/29988928
复制相似问题