記事を読むことでできること
- SPARQLのクエリの基本文法を理解し、DBpediaのデータを取得できるようになります。
- DBpedia SPARQLエンドポイントの利用方法の触り部分を知ることができます。
- クエリを応用して、自分の興味のあるデータ(例えば歴史的な出来事や地理情報)クエリすることができるようになります。
SPARQLとは
SPARQL(SPARQL Protocol and RDF Query Language)は、RDF(Resource Description Framework)データモデルに対するクエリ言語です。RDFデータモデルでは、データを「主語 - 述語 - 目的語」のトリプル形式で表現します。これにより、Web上の多様な情報を統一的に記述し、機械的な処理を容易にすることが可能です。
例えば、「東京 - 都道府県 - 日本」という情報を表現する場合、主語に「東京」、述語に「都道府県」、目的語に「日本」とするトリプルでデータが構成されます。
DBpediaとは?何ができる?
DBPediaとは
DBpediaは、Wikipediaの構造化データを活用したデータセットで、RDF形式で提供されています。DBpediaは、Wikipediaの膨大なデータを活用して様々なクエリが可能です。例えば、著名な人物の情報や地理情報、歴史的な出来事などを取得できます。
利用例
- 歴史データの研究: 過去の事件や出来事の情報を引き出し、時系列での分析に役立てる。
- 地理情報の検索: 地名や観光地のデータを活用し、旅行の計画に役立てる。
また、DBpediaにはSPARQLエンドポイントが提供されており、インターネット上から直接クエリを実行して必要なデータを取得できます。
DBpedia SPARQLエンドポイントのURL
http://dbpedia.org/sparql
SPARQLクエリの基本構造と解説
まず、SPARQLの基本的なクエリの構造を見てみましょう。
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT ?subject ?predicate ?object
WHERE {
?subject ?predicate ?object.
}
LIMIT 10
SPQRQLクエリの基本文法の説明
PREFIX
SPARQLクエリでは、IRI(Internationalized Resource Identifier)を短縮して記述するためにPREFIXを使用します。PREFIXはRDFデータセットの名前空間のエイリアスであり、クエリの簡潔性と読みやすさを向上させます。
以下は、上記例におけるPREFIXの説明です。
-
dbp: http://dbpedia.org/property/
・用途: DBpediaのプロパティを指します。Wikipediaのインフォボックスなどから抽出された属性情報を表現します。
・例: dbp:birthDate は "生年月日" を表します。 -
dbo: http://dbpedia.org/ontology/
・用途: DBpediaオントロジーを指します。DBpediaが定義する概念(クラス)やプロパティを表現します。
・例: dbo:Person は "人" クラスを表し、dbo:birthPlace は "生誕地" を表します。 -
dbr: http://dbpedia.org/resource/
・用途: DBpediaリソースを指します。Wikipediaの各ページに対応するエンティティ(リソース)を表現します。
・例: dbr:Kamakura は "鎌倉" というWikipediaページに対応するリソースを表します。
SELECT
取得したいデータを指定する部分です。ここでは?subject、?predicate、?objectの3つの変数を指定しています。
WHERE
データの検索条件を指定します。RDFデータは「主語 - 述語 - 目的語」のトリプル構造で成り立つため、?subject ?predicate ?objectの形で条件を記述します。
LIMIT
取得する結果の最大数を制限します。
クエリ例: 鎌倉に関連する情報を取得する
まずは、鎌倉に関する情報を取得する。
(※小話:鎌倉を選択した理由は、筆者が鎌倉付近に住んでいるためです。!(^^)!)
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT ?property ?value
WHERE {
dbr:Kamakura ?property ?value.
}
LIMIT 10
このクエリは、主語として「鎌倉」を指定し、鎌倉に関連する述語(プロパティ)と目的語(値)を抽出します。これにより、「鎌倉がどのような属性を持っているか」や「どのような関連情報があるか」を確認できます。
実行結果↓
SPARQLは、主語、述語、目的語のトリプルでデータを指定・取得しますが、以上の例だとこのように表現できるかと思います。
- 主語(名前空間dbr:Kamakura)は、述語(property)な関係にある。目的語(value)と。
- 今回は、主語は(名前空間dbr:Kamakura)に指定しているので、鎌倉に関係ある述語と目的語全てを抽出しているということです。
応用: 鎌倉のお寺の情報を取得するクエリ
次に、鎌倉にあるお寺を一覧で取得し、その簡単な説明も合わせて取得するクエリを紹介します。
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX gold: <http://purl.org/linguistics/gold/>
SELECT ?temple ?description
WHERE {
?temple dbo:wikiPageWikiLink dbr:Kamakura ;
gold:hypernym dbr:Temple ;
dbo:abstract ?description .
FILTER (lang(?description) = "ja")
}
LIMIT 10
クエリの説明
- お寺のリソースを取得: 変数?templeに、鎌倉に関連し、「寺(Temple)」であるリソースを設定します。
- 関連の指定: dbo:wikiPageWikiLinkでdbr:Kamakura(鎌倉)とリンクさせることで、鎌倉に関連するリソースであることを指定します。
- 言語指定: FILTER (lang(?description) = "ja")により、日本語の説明のみを取得します。
実行結果↓
とれました。このクエリでは、鎌倉にある寺院の情報が日本語の説明とともに表示されます。各お寺の歴史や特徴について知る際に役立つでしょう。