在DBpedia上使用EasyRdf的人的SPARQL查询

时间:2015-05-01 14:37:43

标签: php sparql rdf dbpedia easyrdf

我想从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
        (
        )

)

1 个答案:

答案 0 :(得分:1)

你不会得到类似的结果:

regex(?person,"John Lennon"

因为?person 的值是URI,而不是字符串,而URI不包含空格。相反,您可以查询具有实际名称的个人(不要忘记语言标记),如:

select * where {
  ?resource foaf:name "John Lennon"@en
}

SPARQL results

  

我想获取所有信息

如果要获取有关某人的所有属性值,可以使用以下内容扩展查询:

select ?subject ?property ?object { 
  ?resource foaf:name "John Lennon"@en ;
            ?property ?object .
}

当然,这只会检索人员是三元组的主题的数据,但您也可能关心此人是对象的人也是三倍,在这种情况下你可能会去:

describe ?person where {
  ?person foaf:name "John Lennon"@en
}

SPARQL results (N-Triples)

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