0

我想从 DBpedia SPARQL API 获取有关人员的所有信息。第一个问题是,请求花费了太长时间。其次,我没有取回有关我所寻找的人的任何信息。我不知道我做错了什么?

我的代码:

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
        (
        )

)
4

1 回答 1

1

你不会得到类似的结果:

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 结果(N-Triples)

describe查询的结果是依赖于实现的,但是获取资源是主题或对象的所有三元组是很常见的。

于 2015-05-01T17:36:42.107 回答