2017-05-10 2 views
0

2つのエンティティタイプの間で可能なすべての述語を取得しようとしています。以下はPersonタイプの2つのエンティティの例です。Sparqlを使用してDBpediaのエンティティタイプ間のすべての述語を取得する

SELECT distinct ?p 
WHERE { ?url1 rdf:type <http://dbpedia.org/ontology/Person> . 
     ?url2 rdf:type <http://dbpedia.org/ontology/Person> . 
     ?url1 ?p ?url2 . 
     FILTER(STRSTARTS(STR(?p), "http://dbpedia.org/ontology")). 
     } 

しかしながら、結果として得られる出力は間違い2つのPersonタイプの間にすることができないbirthPlacedeathPlace等述語から成ります。

もっと論理出力を得るための制約がありませんか?

答えて

1

それが答えとして、それを提供する価値がないのかどうかわからない...あなたが一点だけ欠けている

:それは自動的に抽出していますので、DBpediaの中

データは完璧やノイズのないではありませんウィキペディアから。

これはあなたが他の人の中で

SELECT * WHERE { 
    ?url1 rdf:type <http://dbpedia.org/ontology/Person> . 
    ?url2 rdf:type <http://dbpedia.org/ontology/Person> . 
    ?url1 <http://dbpedia.org/ontology/birthPlace> ?url2 . 
} 
limit 10 

を使用する場合、あなたはのはhttp://dbpedia.org/resource/Analía_Núñezを見てみましょう

+-------------------------------------------+------------------------------------------------------------------------+ 
|     url1     |         url2         | 
+-------------------------------------------+------------------------------------------------------------------------+ 
| http://dbpedia.org/resource/Analía_Núñez | http://dbpedia.org/resource/David          | 
| http://dbpedia.org/resource/Jorvan_Vieira | http://dbpedia.org/resource/Luís_Alves_de_Lima_e_Silva,_Duke_of_Caxias | 
| http://dbpedia.org/resource/Adebayo_Lawal | http://dbpedia.org/resource/Offa_of_Mercia+       | 
| ...          | ...                 | 
+-------------------------------------------+------------------------------------------------------------------------+ 

を取得なぜ起こるかあなたがチェックできます。中でも

DESCRIBE <http://dbpedia.org/resource/Analía_Núñez> 

、それをトリプルを返す

dbr:Analía_Núñez dbo:birthPlace dbr:Panama , 
            dbr:David , 
        <http://dbpedia.org/resource/David,_Chiriqu\u00ED> . 

3つの出産場所があります。 http://dbpedia.org/resource/David,_Chiriqu%C3%ADである必要がありますが、 ののinfoboxから抽出中に問題が発生したことがわかります。

関連する問題