DBpedia はskos:subject
をリソースに使用するのではなく、 を使用してリソースをウィキペディアのカテゴリに関連付けますdcterms:subject
。リソースページを閲覧することで、利用可能なデータを見つけることができます。たとえば、http://dbpedia.org/resource/Mount_Monadnockをご覧ください。2 つのリソースに共通するカテゴリを見つけたい場合は、同じ変数を使用してください。例えば、
?subject1 dcterms:subject ?category .
?subject2 dcterms:subject ?category .
^property
表記法とオブジェクト リストを使用すると、より簡潔に記述できます。書くo ^p s
ことは書くことと同じs p o
です。オブジェクト リストを使用するs p o1, o2
と、 の代わりに記述できますs p o1. s p o2.
。これらをまとめると、次のように書くことができます。
?category ^dcterms:subject ?subject1, ?subject2 .
たとえば、モナドノック山とスポフォード湖の共通カテゴリを検索するクエリを次に示します。共通のカテゴリが 1 つしかないため、検索結果はニューハンプシャー州チェシャー郡の地形の 1 つだけです。
select * where {
?category ^dcterms:subject dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}
SPARQL の結果
現在、カテゴリは、 http: //dbpedia.org/page/Category:Landforms_of_Cheshire_County,_New_Hampshire でわかるように、DBpedia のスーパーカテゴリに関連付けられてskos:broader
います。ここには、へのリンクがあります。
これは、2 つのものが共通のカテゴリ (またはスーパーカテゴリ) を持っている場合、dcterms:subject
リンクで始まり、0 個以上のskos:broader
リンクが続くパスによって、それぞれがそのカテゴリに関連付けられることを意味します。したがって、次のようなクエリを使用できます
select * where {
?category ^(dcterms:subject/skos:broader*) dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}
残念ながら、DBpedia エンドポイントがそのクエリでメモリ使用量の問題に遭遇することがわかります。そのため、まったく同じように実行することはできません。ただし、DBpedia SPARQL エンドポイントは、実際には標準化されていないプロパティ パス機能をサポートしています。p{n,m}
長さ のチェーンを表すように書くことができn
ますm
。これは、次のようにほとんど同じ結果が得られるいくつかの範囲を設定できることを意味します*
。
select distinct ?category where {
?category ^(dcterms:subject/(skos:broader{0,3})) dbpedia:Mount_Monadnock, dbpedia:Spofford_Lake .
}
SPARQL の結果
これは Tom Cruise と Madonna でも機能しますが、メモリの問題により、パスの長さを少し縮小する必要があります。たとえば、次のクエリは 74 件の結果を返します。
select distinct ?category where {
?category
^(dcterms:subject/(skos:broader{0,2}))
<http://dbpedia.org/resource/Tom_Cruise>,
<http://dbpedia.org/resource/Madonna_(entertainer)> .
}
SPARQL の結果
ただし、ウィキペディアのカテゴリは型ではないことに注意してください。したがって、これらのリソースは両方とも地形であると正しく見なされますが、どちらも地理ではなく、後のクエリでわかるようにニューハンプシャーでもありません。ウィキペディアのカテゴリは、タイプの階層というよりもトピックに関するものです。
関連資料
同様に役立つと思われる関連する (ただし、まったく重複していない) 質問があります。