DBpedia について初めて知ったことをすべて忘れてしまい、SPARQL
Google で検索しても、すべての例が複雑すぎて理解しにくいことがわかりました。
私がやりたいことは、2 つまたは 3 つのウィキペディア ページを渡し、すべてのページがメンバーであるウィキペディア カテゴリのセットを取得することです。
これは非常に単純であるように思われるSPARQL
ので、私が始めるための非常に最小限の例をいただければ幸いです。
これは実際には、 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
つまり、両方のリソースがメンバーであるカテゴリを正確に取得します。
秘訣は、グラフ、つまり接続された主語と目的語のトリプルの観点から考えることです。これはちょっとした精神的な変化ですが、一度それを理解すると、クエリの作成がずっと簡単になります。
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")
}