2

DBpedia について初めて知ったことをすべて忘れてしまい、SPARQLGoogle で検索しても、すべての例が複雑すぎて理解しにくいことがわかりました。

私がやりたいことは、2 つまたは 3 つのウィキペディア ページを渡し、すべてのページがメンバーであるウィキペディア カテゴリのセットを取得することです。

これは非常に単純であるように思われるSPARQLので、私が始めるための非常に最小限の例をいただければ幸いです。

4

2 に答える 2

4

これは実際には、 2 つのカテゴリに属する​​すべてのページを取得するという以前の質問のバリエーションです。唯一の違いは、今回は object ではなく 2 つまたは 3 つの subject必要であるため、コンマ区切りの値の列挙を使用できず、代わりに一致させたいトリプル パターンを書き出す必要があることです。

たとえば、スペインとポルトガルの両方が属するすべてのカテゴリを取得するには、次のようなクエリを実行するだけです。

SELECT ?cat   
WHERE { 
 <http://dbpedia.org/resource/Spain> dcterms:subject ?cat .
 <http://dbpedia.org/resource/Portugal> dcterms:subject ?cat .
} 

このクエリが行うことは、サブジェクト「スペイン」と「ポルトガル」の関係で?cat同じ値を持つすべてのトリプル パターンを選択することです。dcterms:subjectつまり、両方のリソースがメンバーであるカテゴリを正確に取得します。

秘訣は、グラフ、つまり接続された主語と目的語のトリプルの観点から考えることです。これはちょっとした精神的な変化ですが、一度それを理解すると、クエリの作成がずっと簡単になります。

于 2012-07-03T21:43:10.830 に答える
1

wikipedia と dbpedia の URI 間のマッピングは次のとおりです。

為に

http://en.wikipedia.org/wiki/スペイン

DBPedia uri は次のとおりです。

http://dbpedia.org/resource/Spain

したがって、上記のカテゴリを見つけるには

PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?categoryUri ?categoryName
WHERE {
  <http://dbpedia.org/resource/Spain> dcterms:subject ?categoryUri.
  ?categoryUri rdfs:label ?categoryName.
  FILTER (lang(?categoryName) = "en")
}
于 2012-07-03T11:25:47.683 に答える