このままでいいか

アニメとか,プログラミングとか,研究とか,思ったことをだらだらと書く感じで

LOD(Linked Open Data)ホスティングサービスDydraを使ってセマンティックウェブに参入するには!

以前,「アニメオントロジー製作開始!」の記事で,オントロジーとはどんなものか,を非常にざっくり説明しました.

dbym4820.hatenablog.com

ですが,じゃあ,それをどんなふうに公開して,セマンティックウェブ(計算機による意味処理可能な次世代Webシステム)に参入すれば良いのか,ということは調べてもなかなかわからないのではないでしょうか.

関連する情報には,抽象的な概念を述べた論文がほとんどなので,カジュアルに実践するには,なかなか距離が遠いでしょう.

本エントリでは,作成したオントロジーデータ(RDF/XML,OWL形式のデータ)の作成から,SPARQLでの検索までをざっくり示します.専門性を一旦置いて,簡単に始めることを目的としているので,正確性や哲学的議論,概念定義の詳細などは置いておきます.

目次

適当なオントロジーの構築

法造を用いたオントロジー作成

以前の記事でも紹介した法造を用いて作成したアニメオントロジーRDF形式でエクスポートします.

とりあえず雑に作成しました.

f:id:dbym4820:20190509134109p:plain

余談ですが,萌えって何なんでしょうね,よく考えると謎です.誰か議論してみません?笑

このオントロジーは法造の専用形式なので,外部で用いるときは,Well-Knownなデータ形式でエクスポートして使います.

法造では,「メニューバー」⇛「ファイル」⇛「エクスポート」からいくつかのデータ形式が選択できます.ここではRDF形式でエクスポートしましょう.

f:id:dbym4820:20190509134942p:plain

このような小さいウィンドウでエクスポート後のデータが表示されますので,「ファイル保存」から任意のディレクトリに保存します.今回は「anime-ontology.rdf」という名前で保存しました.

f:id:dbym4820:20190509135221p:plain

Protegeを用いたオントロジー作成

もちろん,同様のRDF形式のオントロジーは他のオントロジーエディタでも作成できます.

おそらく世界で最も著名なオントロジーエディタは,スタンフォード大学謹製のProtege(プロテジェ)でしょう.こちらであれば,Javaスタンドアローンソフトだけでなく,Webアプリケーションも提供されているので,かなりカジュアルに始められるでしょう.

f:id:dbym4820:20190509140319p:plain

起動後,「Entities」タブに移ると,このような画面が表示されます.このインタフェースが,法造での概念定義ペインとほとんど同じ働きをすると思えば構いません(実際には違いますが).

Protegeでは,OWLの仕様に従って,owl:Thingをルート概念としています. 概念はここにぶら下げていくように定義していくわけです.

例えば,この下に「アニメ」概念を追加するには,「owl:Thing」を選択し,下図の矢印で示したボタンを押下すると,このようなクラス定義画面が表れます.

f:id:dbym4820:20190509140752p:plain

ひとまず,「Name」のスロットに「アニメ」と入力し,OKを押します.すると,このように,アニメ概念がThingの下位概念となるというわけです.

インストール法や細かい概念定義方法は,Protegeのドキュメントを見ていただくことにして,ここではRDFへのExport方法だけ示します.

ほぼ法造のときと同じで,メニューバーから,「File」⇛「Save as...」を押下すると,

f:id:dbym4820:20190509141537p:plain

下図のようなデータ形式が選べるので,RDF/XML Syntaxを選択し,データとして保存します.

f:id:dbym4820:20190509141633p:plain

オントロジーデータの準備は完了です.

法造形式のオントロジーは,一応Githubで法造データとしてこちらで公開してます.

オントロジーの利用

オントロジーデータの公開

Dydra(LODホスティングサービス)の利用

Dydraアカウントの作成

DydraでLODリポジトリを作成するために,まずはアカウントを作成します.

Signinページにてアカウントを作成します.ただ,Dydraでは,アカウント作成の前に,招待願いを出して,Invite Codeを含んだメールを受け取る必要があります.

下図の矢印のところに自分のメールアドレスを入力し,招待コードが送信されるまで待ってください.

f:id:dbym4820:20190509155458p:plain

自分の経験では,メールが返ってくるまでにおよそ1日要しました.

メール内にあるInvite Codeとその他の必要情報を入力すれば,即座にアカウントが作成されます.

Dydraリポジトリの作成

ログインすると,このような画面が現れるので,新しいリポジトリ(プロジェクト的なものだと思ってください)を作成してください. f:id:dbym4820:20190509160305p:plain

入力すべき項目は

  • Name(必須):リポジトリ
  • Homepage:そのLODに関するホームページ
  • Summury:LODの概要
  • Description:LODの詳細.マークダウンでかけるとのこと
  • Repository License(必須):リポジトリのライセンス.誰でも利用可能ならPublic Domain・Creative Commonsにしとくのが無難
  • Permission(必須):LODへのアクセス許可.アカウントの主だけとかDydraアカウントがある人だけとか,IPアドレスフィルタとか結構細かく設定できる

の最大6点です.

f:id:dbym4820:20190509173108p:plain

最悪,リポジトリ名だけ入力してしまえば次に進めます.今回は,anime-ontologyという名前で行きましょう.

DydraリポジトリにLODデータをアップロード

次に進むと,下図のような画面が開きます.

f:id:dbym4820:20190509174104p:plain

リポジトリにLODデータをインポート,つまりアップロードします!

インポート元としては,

  1. Web上のRDFリソース
  2. ローカル環境のRDFファイル

を選択できます.

今回はローカル環境にあるオントロジーファイルをインポートするので,2つ目のタブ(Upload a local file)を押下し,以下の画面にしてください.

f:id:dbym4820:20190509174740p:plain

このRDFインポート時に必要な情報は,

PDFデータの識別子であるURIですね.

もし,どこかのサーバーに別のLODデータとして規定したものがあるのであれば,それを指定してもいいですが,今回はそれがないことを前提としています.

このURIは,注意書きに書いている通り,ダミーのもので構いません.

入力後,Importボタンを押して,データをアップロードします.

これでアップロード完了ですね.

オントロジーのSPARQLによる利用

さて,アップロードしたデータをもとに検索・推論しましょう.

W3Cは,RDF形式のデータを操作するためのSQLに似たクエリ言語SPARQLを規定しています.

先程データをアップロードしたリポジトリを開き,Queryタブから,SPARQLと書かれたものを選択すると

f:id:dbym4820:20190512145714p:plain

SPARQLクエリの入力画面になります.

f:id:dbym4820:20190512150044p:plain

Dydraでは,デフォルトで,

select * where { { graph ?g {?s ?p ?o} } union {?s ?p ?o} } limit 10

というクエリが用意されています.

ひとまずこの状態で実行してみます.

f:id:dbym4820:20190512150307p:plain

クエリの大意としては,「このリポジトリで公開されているすべてのデータを表示する」と思えばいいでしょう.

DydraのSPARQLインタフェースでの実行

SPARQLの仕様は,W3Cの仕様書もしくは,朝日ネットさんの日本語訳を参考にしてください.

例えば,公開したアニメオントロジーを参照し,「日常アニメってなにか?」ということを捉える(推論する)ことを考えるとしましょう.

まずは,オントロジーエディタにて「日常アニメ」と名付けた概念が,どのようなURIが与えられているオブジェクトなのかを見つける必要があります.

オントロジーでは,「日常アニメ」という名前(ラベル)と,それをラベルとして保有する,様々な意味を有するオブジェクトは別物として扱われるためです.

例えば,以下のようなクエリを発行します.

select * where { ?s ?p "日常アニメ" }

SPARQLでは,主語ー述語ー目的語の関係で構成されるもので,上記クエリは,「主語(変数:?s)と述語(変数:?p)の関係にあるのは目的語(日常アニメ,という文字列)である」ということを示し,変数部分に当てはまるものをすべて取得するというわけです.

実行するとこのような結果が得られます.

f:id:dbym4820:20190512151625p:plain

この結果から,

という結果が得られました.

この結果に基づいて,「日常アニメとはどんな概念として規定されているか」を調べます.

クエリは,

select * where { <http://www.hozo.jp/rdf/anime-ontology.xml#日常アニメ> ?p ?o }

としてみましょう.

結果は,下図のようになりました.

f:id:dbym4820:20190512152954p:plain

日常アニメに関連する情報が3つあることがわかります.定義が多ければ多いほど,ここに示される定義も増えます.

データのアップロードまでのエコシステムは以上です.

次回の記事では,アップロードしたデータをCommon Lispから利用してみましょう.

まとめ

Dydraを使わなくても,自前でSPARQLサーバー(Apache Gena fusekiAllegro GRAPHなど)を立てて,運用するのでももちろんOKですが,今回のやり方であれば,従来Webでブログやソースコードを公開するように無料で,かつ簡単にセマンティックウェブの潮流に乗れますね!

Dydra,すごいサービスだと思います.

コメントや間違い訂正等,歓迎です!