SPARQLで人類の知にアクセスしよう
やりたいこと
DBpediaにアクセスして、人類の英知を我が物にしたい。
どうやって解決するか?
SPARQL
をマスターする。
DBpediaはRDFモデル(正確にはOWL)で記述されているデータである。
データの実体はXMLで記述されるが、データを効率良く取得するには、クエリ言語のSPARQL
を使うのが一番よい。
SPARQLでSELECT
が実行できるとこまで試してみる。
そもそもRDFモデルってどんなんよ?
グラフモデルの一種。
だいたいのコア概念は
- すべてのモノ(実体・概念とわず)は「リソース」で表現される
- リソースはURIで一意に紐付けされている
- 知識はトリプル(リソース, プロパティ, リソース)で表現できる。トリプルの中身は(主語, 述語, 目的語)
- プロパティはリソースを表現するモノである。
RDFのクラス関係図はこのスライドの6ページ目がわかりやすい。
SPARQLってなんなんよ?
SPARQLはRDFモデルのデータを探索するためのクエリ言語
SQLっぽいが、トリプルを表現するために、WHERE句の中が特殊だったり、デリミタが.
だったり、変数宣言が?
がだったりと、演算子が違う。
まずは基本を抑えるために、SELECT
命令だけはできるようにする。
SELECT
命令を実行するためには
SELECT 変数 WHERE { タプル表現のグラフ }
クエリの書き方はこのスライドがとてもわかりやすい。
エンドポイントはここで公開されているので、簡単に試すことができる。
試しにスライドに従って、クエリを記述してみることにする
SELECT ?p ?o WHERE { <http://ja.dbpedia.org/resource/東京都> ?p ?o } LIMIT 10
こんな結果が返ってくる
いろんなサイトを見た補足(私的な)など
- 主語は
s
, 述語はp
, 目的語はo
で表記することが多い - 目的語にはリテラルでデータの内容を指定できる
ex. "東京都"
- 主語と目的語にはリソースを指定できる。述語には、プロパティを指定する
- プロパティはw3で定義されているプロパティと、DBpedia日本語版で独自のプロパティを指定できる
- リソースが存在してるorNotは
DBpedia 単語
とでもGoogle検索すれば、実体が見れる- リソースの存在を調べる
ASK
コマンドがSPARQLで利用可能
- リソースの存在を調べる
と、いうことで、人生初の自分で考えたSPARQLクエリを書いてみる。
表現するグラフは「渡辺麻友のバイトサイズは?p」
グラフをクエリにしてみると、
SELECT DISTINCT ?o WHERE { <http://ja.dbpedia.org/resource/渡辺麻友> <http://ja.dbpedia.org/property/バスト> ?o . }
実行してみる。
71
71! まゆゆのバストサイズは71! (公表値です)
まとめ
71! まゆゆのバストサイズは71!