2016-12-01 9 views
0

Sparqlを使用してDBPediaを照会するのが初めてです。私はDBPediaを使って人Xに関係する人を見つけたいと思っています。SparqlとDBpediaを使用してPerson Xにリンクされている人を探します。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpr: <http://dbpedia.org/resource/> 
PREFIX dbpo: <http://dbpedia.org/ontology/> 
PREFIX dbpprop: <http://dbpedia.org/property/> 
SELECT ?P 
WHERE {dbpr:Chuck_Norris} 
+1

RDFおよびSPARQLのチュートリアルを参照して、データがトリプルで作成され、クエリがトリプルパターンで行われることを確認してください。つまり、あなたのクエリはいくつかの '?P'を選択しますが、WHERE部分では使用されません。 – AKSW

答えて

1

人々を直接人に関連させたい場合は、その人物を被写体として、もう1つをオブジェクトとして持つ2つのトリプルパターンが必要です。ここでは、このようなクエリを構築するための1つの方法は次のとおりです。

SELECT DISTINCT ?has ?of ?person 
WHERE { 

{?person a foaf:Person; 
?of dbr:Chuck_Norris} 

UNION 

{?person a foaf:Person. 
dbr:Chuck_Norris ?has ?person} 

} 

これはDBpediaの中にあらかじめ定義された接頭辞であると私はdbr:を使用しています。あなたは今http://live.dbpedia.org/sparql

に照会する場合

いくつかのケースでは、あなたは異なる結果を得るでしょう、このクエリは制限があります。それはあなたに他のDBpediaリソースとの関係しか持たないでしょう。非常に頻繁にリテラルとして主張される関係者がいるかもしれません。私はそれを得るためのエレガントな方法を知らないが、人間関係に使用されることが知られているプロパティのリストを求める方法があります。ここdbp:spouseに1つの値を持つリストと例です。

SELECT DISTINCT ?has ?of ?person 
WHERE { 

{?person a foaf:Person; 
?of dbr:Chuck_Norris} 

UNION 

{?person a foaf:Person. 
dbr:Chuck_Norris ?has ?person} 

UNION 

{values ?has {dbp:spouse} 
dbr:Chuck_Norris ?has ?person .} 

} 

http://live.dbpedia.org/sparqlから、これはさらにあなたをもたらすでしょう。一般的には

has        | person 
--------------------------------------------------------- 
http://dbpedia.org/property/spouse | "Dianne Holechek"@en 
http://dbpedia.org/property/spouse | "Gena O'Kelley"@en 
--------------------------------------------------------- 

をそのようなリテラルを求めるあなたにごみ結果の多くをもたらすでしょうこれは文字列フィルタを使用して減らすことができます。

関連する問題