2

次のスクリプトを検討してください。

PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dbpedia: <http://dbpedia.org/ontology/>

SELECT DISTINCT *
WHERE {
    ?s dcterms:subject category:Living_people .
    ?s foaf:name ?name
}
LIMIT 10000

実行すると、次のような結果が得られます。

Sir Alexander Chapman Ferguson
Sir Alex Ferguson

それらは異なるエントリですが、間違いなく同じエンティティです。そのため、SPARQL エンドポイントに対処するときに出力を減らしたいと考えています。つまり、出力データの編集が困難になる可能性があるため、出力データの編集を避けたいと考えています。それを手伝ってくれませんか?クエリで何を修正する必要がありますか?

4

1 に答える 1

1

クエリを実行するとわかるように、言及した両方の行が同じリソースを参照しています: <http://dbpedia.org/resource/Alex_Ferguson>. クエリ結果に複数の行が表示されるのは、単純に、この人物に複数の名前があるためです。

したがって、アプリケーションで重複が発生しないようにする必要がある場合は、アプリケーションがクエリ結果の「s」の各一意の値を個別の人物として扱うようにしてください。

一方、問題が 1 人の人物に対して複数の名前を取得するという事実である場合は、おそらく他のプロパティを使用できます。たとえば、dbpedia:fullname には、プロパティ dbpedia:surname および dbpedia:givenName と同様に、1 つのエントリしかありません。

于 2011-12-25T21:35:08.077 に答える