0

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

)
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 トリプル)

describeクエリの結果は実装に依存しますが、リソースが主語または目的語であるすべてのトリプルを取得することはかなり一般的です。

于 2015-05-01T17:36:42.107 に答える