SPARQL入門 〜RDFデータセット(DBPedia)から、「鎌倉に属するお寺」を抽出できるクエリを書けるようになろう〜

85
SPARQL入門 〜RDFデータセット(DBPedia)から、「鎌倉に属するお寺」を抽出できるクエリを書けるようになろう〜

記事を読むことでできること

  • 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

このクエリは、主語として「鎌倉」を指定し、鎌倉に関連する述語(プロパティ)と目的語(値)を抽出します。これにより、「鎌倉がどのような属性を持っているか」や「どのような関連情報があるか」を確認できます。

実行結果↓
スクリーンショット 2024-05-23 15.34.21.png
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")により、日本語の説明のみを取得します。

実行結果↓
スクリーンショット 2024-05-23 15.54.55.png

とれました。このクエリでは、鎌倉にある寺院の情報が日本語の説明とともに表示されます。各お寺の歴史や特徴について知る際に役立つでしょう。