これは SPARQL Advent Calendar 2015 9日目の記事です.

以前Wikidata Linked Dataという記事を書いた通り,Wikidata のデータ提供部分はLinked Dataです.これまでもサードパーティがそのRDFで勝手SPARQLエンドポイントを立てていたりしたのですが,今年9月にWikimediaが公式にWikidata Query ServiceというSPARQLエンドポイントをβ公開しました.今回はこれを使ってみようとおもいます.

サンプル例にアメリカ歴代大統領というのがあったので,試しに歴代の内閣総理大臣を開始年でソートするクエリを書いてみました(SPARQL例へのリンク).

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX psv: <http://www.wikidata.org/prop/statement/value/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX pqv: <http://www.wikidata.org/prop/qualifier/value/>

SELECT ?primeMinister ?primeMinisterLabel ?startTime
WHERE {
   ?primeMinister p:P39 ?positionStatement .
   ?positionStatement ps:P39 wd:Q274948 ; 
                      pq:P580 ?startTime .
  
   SERVICE wikibase:label {
      bd:serviceParam wikibase:language "ja,en" .
   }
 }
ORDER BY ?startTime

結果は45件で,データとしてはかなり欠けています.明治・大正時代の人が全然いませんし,近年をみても麻生太郎と鳩山由紀夫が入っていません.皆で日本に関するデータを整備していく必要があります.

Wikidataのデータは多言語化前提になっていて,全てのリソースにIDベースのIRIが振られていて,そのIRIに対して多言語によるラベルを付与するというモデルになっています.そのため,リソースによってラベルがある言語がバラバラになるので,言語指定のフォールバックができる仕組みをSPARQLを拡張して用意しています.上記のクエリのSERVICE wikibase:label { ... }の部分がそれです.bd:serviceParam wikibase:language "言語名"の言語名の部分に複数の言語を指定すると,その順番でラベルを使用します.例えば”ja,en”であれば日本語が主で,日本語がない場合は英語を取得します.指定した言語がない場合はリソースのIRIになります.SELECTで指定する変数として,実際にラベルを取得したい変数の最後に”Label”を付けたものを指定することで,自動的にラベルを取得できます.上記例では,?president 変数のラベルとして?presidentLabelを指定しています.

この自動ラベル変換機能は一々言語毎にFILTERをするといった複雑なことをしなくて済むので便利ですが,いくつか制約があります.まず,OPTIONALで使っている変数は現在エラーになるようです(これはバグかもしれません).また,ラベルの中身に応じてフィルターしたいときのように,クエリ内で変数を参照したいときには使えません.その場合は,SERVICE句の中で直接rdfs:labelでラベル変数を指定すれば良いです.但し,自動変換機能と併用することはできないので,必要なラベルを全て指定する必要があります.

Wikidataまだまだこれからですが,色んなエンティティを結びつけるデータとしてどんどん整理されつつあるので,揃ってくればかなり期待できるサービスだとおもいます.

参考:

有志でSPARQLについての解説本をインプレスR&Dさんより出版しました.すでに電子書籍は本日付で発売となっています (Kindle版, Kobo版, iBooks版, Google Play版).何故かGoogle Playはいきなり1割引しているようです...紙の本は後日Amazon.co.jpのプリント・オン・デマンド発売される予定です.

これはCivic Tech Advent Calendar 2014の19日目の記事です.

最近,Open Parkというプロジェクトを勝手にはじめてみました.直接のきっかけは,公園の禁止事項がどんどん増えているのを見て,そもそも地域の公園情報が全然共有されていないと感じたことでした.単純にボールを使って遊びたいと思っても,できる公園を探すのが大変です.大きい運動公園くらいになると検索サイトがあったりするのですが,住宅街の中の公園は殆ど何もなく,多くの場合は現地の掲示板や看板にのみ許可や禁止が書かれています.内容は法律や条例で禁止されているものからマナーまで様々です.最初は自治体がこの手の情報を全て管理しているのかと想像していたのですが,実はそうではなく愛護会のように地域住民のボランティアで成り立っている部分がかなりあることがわかりました.そこで,地域の公園データを収集・公開・共有できる場所が必要なのではないかと考えました.

公園看板
公園看板

とりあえず試作してみようということで,主に横浜市金沢区のオープンデータを利用して,Open Park Yokohamaというのを作ってみました.横浜市金沢区を最初の例として選んだ理由は,公園関連のデータが既にいくつか公開されていたためです.

現在Open Park Yokohamaでできることは,地図から公園を探すのと遊具の種類で探すことだけです.各公園のページでは,公園の基本データと,公園にある遊具や看板写真等を載せています.写真については手始めに30ヶ所程度の公園を撮影してきましたが,金沢区全域で190の公園があるので1/6程しかカバーしていません.

寺前さざなみ公園
寺前さざなみ公園

技術的な話としては,データは主に共通語彙基盤のコア語彙2.10Schema.orgをベースに設計をしてあります.一応現在のデータ用のSPARQLエンドポイントも出していますが,今後データ設計は変える予定ですのでお試し程度ということで.Linked Data対応等のAPI充実化はする予定です.

今取り組んでいるのは,公園写真を増やすことと,それらの写真から禁止事項や許可事項をデータ化して禁止・許可事項データを作ることです.やってみると結構大変で,公園毎に表現がバラバラだったり曖昧だったりします.顕著な例としては上の看板にある「危険な球技」や「危険なあそび」というのです.公園毎に「危険な球技」として列挙されている球技が異なりますし,そもそも「危険な球技」が何かがわからないので判断に困ります.これが,数を集めるとわかったりするのではないかと期待しています.全国でやってみると地域ごとの傾向があったりするかもしれません.

将来的には市民を巻き込んで発展していく仕組みが必要だと考えています.例えば横浜全体でやろうとすると公園が2000近くあるそうなので,スマートフォンで写真をアップロードしてもらったり,データを入力してもらったりして効率よく収集する仕組みがあるといいでしょう.OpenStreetMapで公園データを充実させて利用するというのもありえます.うまく全国で集められるようになると面白いなとおもっています.

今年は全然ブログ書く気力がなかったので最後に軽くまとめを書いておこうとおもいます.まだ書いていないことも色々ありますが,総じて今年はオープンデータ・オープンガバメントが日本でも花開きそうな一年でした.

LODチャレンジJapan

オープンデータのコンテストとして,昨年度LODチャレンジ Japan 2011を開催しました.一委員として,主にチャレンジデーの運営等を担当していました.震災後から活動のお手伝いをしているsaveMLAKについて,オープンデータとして整備したので応募したところデータセット部門 最優秀賞を頂きました.これは私個人というよりsaveMLAKコミュニティ全体が評価されたということだとおもいます.

LODチャレンジは今年度も絶賛募集中です.応募〆切は2013年1月31日なので興味のある方は是非応募をご検討下さい.

DBpedia Japanese

長年日本のLinked Data業界的に懸念だった”日本語のハブがない”問題を解決するために,DBpediaの日本語版であるDBpedia Japaneseを立ち上げました.DBpediaはWikipediaのダンプデータを変換してLODとして再公開するコミュニティプロジェクトです.それの日本語Wikipedia分を担当しています.

DBpedia Japaneseまだ発展途上で,WikipediaのテンプレートやテーブルをDBpedia の語彙 (DBpedia OntologyやFOAF等)に対応付ける作業を進める必要があります.現時点でのマッピング状況はMapping Statistics for jaで見ることができます.
もしこの作業に興味のある方は http://lod.ac/wiki/DBpedia_Mappings を読んでいただければとおもいます.

特定非営利活動法人リンクト・オープンデータ・イニシアティブ

Linked Data / Open Dataの普及,利活用を推進していくためにNPO法人
今年4月に申請,8月に設立しました.社会的貢献として,主に技術面から日本のオープンデータ,オープンガバメント推進の手助けをしていく予定です.

すでに福井県鯖江市と技術面での共同作業をしていますし,関係者が省庁や地方自治体のオープンデータ・オープンガバメント関連委員会の委員を勤めたりしているなど,様々な活動を開始しています.今まで福井に行ったことなかったのに今年鯖江に4回も行く事になるとは去年の段階では想像していませんでした...

CKAN

GLOCOM主催のオープンデータ活用アイデアソンがきっかけで,CKANの日本語化プロジェクトをスタートしました.CKANはデータポータルサイトのFLOSSで,データカタログやデータストア,API等の機能を持っています.大分本家にフィードバックされているのですがまだまだ足りない作業もありますし,今後は日本語化だけではなくてCKAN自体にコミットして行くことが望まれるかなと.

この手のソフトウェアでは,他にOGPLがFLOSSになりました.SocrataもFLOSSになる予定らしいです.そんな中CKANを個人的に推している理由は,これがいくつかの意味でLinked Dataのプラットフォームでもあるからです.

CKANで入力されたカタログデータは実はLinked Dataとして公開されています.例えばブルガリア政府の支出についてのデータ.また,LOD Cloudに載せてもらうための手続きは,CKANで構築されたサイトthe Data Hub決められた情報を追加することです.

CKANについてはいずれまとまった文章を書くつもりです.

生物学関係

昨年から生物種名のLinked Dataについてあれこれやってきました.LODチャレンジ2011にLODAC BDLSを出し,それをベースにLODAC Speciesという種名のLinked Dataを構築しました.生物種に関するデータのハブになることを目指しています.また,これを利用した検索拡張のデモ (1, 2)とかも作りました.

生物学は分散データの統合プラットフォームとしてLinked DataやSPARQLの採用が進んでいる分野です.私もBiohackathon等様々なイベントに参加させて頂いて大変刺激になりました.

mmmap: Yet Another 学会支援システム

奈良で開催されたACM Multimedia 2012JIST2012用のスケジュール等をLinked Dataのアプリケーションとして作成しました.

Evernote APIの連載

技術評論社で昨年からEvernote APIについての不定期連載を書いていました.しかし,上記のOpen Data/Linked Data関連の仕事が今年一気に来たので執筆時間が取れず,途中で連載終了にさせて頂きました.Evernoteはユーザとしては今後も使い続けていきます.

ニコニコ学会β

深く運営に関わっているわけではないですが,ニコニコ学会βは手伝える範囲でお手伝いしています.今年はマッドネスの投票サイト(第2回,第3回を作ったりニコニコ超会議でスタッフやったりしていました.

EPUB3仕様書翻訳手伝い

とあるきっかけによりEPUB3仕様書の翻訳の手伝い(主に校正)をしています.電子書籍関係は元々興味対象なので,EPUBが広まるきっかけになればと.

先日2012年4月28-29日にニコニコ超会議にてニコニコ学会βが開催されました.ニコニコ学会βの中で野生の研究者に発表してもらう研究マッドネスというセッションがあり,その研究を公募するサイトを担当しました.ただ作るだけでは面白くなかったので,裏でMicrodataとSchema.orgのテストをすることにしました (参考: 当時のGoogle+).

例えば,メカの部で賞を取った電子楽器ウダーのページのソース抜粋は以下のようになっています.

<div class='entry' id='work' itemid='http://nicores.herokuapp.com/entry/10#work' itemscope='itemscope' itemtype='http://schema.org/CreativeWork'>
  (...snip...)
  <h2><span class='hashtag'>#マッドネス10</span>「<span class='title' itemprop='name'>電子楽器ウダー</span>」</h2>
  <h3><span class='author' id='person' itemid='http://nicores.herokuapp.com/entry/10#person' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>発表者:<a href='http://twitter.com/uda807'><span itemprop='name'>宇田道信</span></a></span> (<span itemprop="genre">メカ</span>の部希望)</h3>
  <div class='video'><script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/sm14918619?w=490&h=307" itemprop="url"></script></div>
  <p class='description' itemprop='description'>ウダーは個人で開発している電子楽器です。電子楽器ではありますが、操作は非常にシンプルです。 
  (...snip...)  

これをMicrodata等からRDFを抽出するRDF Distillerに掛けると以下のキャプチャのようになります.result of RDF Distiller

また,Google Rich Snippets Testing Toolに通すとこんな感じ.the result of Rich Snippets Testing Tool

今見なおすと動画のurlが取れていないみたいですが,Microdataの仕様を読むとscript要素は対象外なんですね.当時は取れていたきがするけど.

更に,これらのデータをRDF Distillerを通して,データクラウドサービスであるDydraに取り込みました.公開レポジトリはfumi/nicoresです.色々クエリが書けて便利.

すでにEbookは販売されているのですが,O’reilly MediaからLearning SPARQLという本がでています.紙は7/22からのようです.一通り読みましたが,今のところ唯一のSPARQL解説本ですし,SPARQL1.1の細かい内容まで含んでいるのでお薦めです.セマンティックWeb プログラミングではSPARQLの話は少しでてくるだけでしたが,この本が補完してくれます.

既にWeb上では,SPARQLを使うことで政府データや音楽データ,生物データなどの多種多様なデータにアクセスできるようになっています.単なるWebAPIと異なるのは,SPARQLを一度覚えることで,SPARQLに対応しているサイトであればどこでも同じ仕組みでデータを使えるということです.他には複数のサイトからデータを取得してマージするときなどにメリットがあったりします.

日本でもすでに国立国会図書館典拠データ検索・提供サービス (Web NDL Authorities)DBCLSのAllie: A Search Service for Abbreviation / Long Form,我々のプロジェクトであるLODACなど,SPARQL Endpointを持っているサイトがでてきています.これらのデータを使うためにSPARQLを勉強するには良い本だと思います.

ちなみに今週末開催の第2回LinkedData勉強会のメインテーマはSPARQLです.SPARQLに少しでも興味がありましたら是非ご参加ください.

Twitterを見れば分かるとおり最近RDF Storeの調査をしているのですが、その過程でOntoWikiを使おうとして色々嵌っているので、ログを残しておきます。現在Ubuntu10.04での動作を確認しています。

Virtuosoのインストール

Open Link Virtuosoは複数のデータ形式を統合して扱えるデータベースです。RDF Triple/Quad Storeとしても使え、SPARQLにも対応しています。Open Source版とClosed Source版があり、Closed版ではClusterやSnapshoなどの追加機能があります。ここではOpen Source版を使います。

まずVirtuoso Open Source Editionのインストールです。Ubuntuのrepositoryにあるのが6.1.0で、これだと最新のOntoWikiが不具合起こすので、debian squeezeから最新のソースパッケージ持ってきて再構築しました。


$ wget http://ftp.de.debian.org/debian/pool/main/v/virtuoso-opensource/virtuoso-opensource_6.1.1+dfsg1-1.dsc
$ wget http://ftp.de.debian.org/debian/pool/main/v/virtuoso-opensource/virtuoso-opensource_6.1.1+dfsg1.orig.tar.gz
$ wget http://ftp.de.debian.org/debian/pool/main/v/virtuoso-opensource/virtuoso-opensource_6.1.1+dfsg1-1.diff.gz
$ dpkg-source -x virtuoso-opensource_6.1.1+dfsg1-1.dsc
$ cd virtuoso-opensource-6.1.1

再構築に必要なパッケージをインストールします。

$ aptitude build-dep virtuoso-opensource
$ aptitude install quilt fakeroot

変更点はbuild formatを変えるだけです。changelogとかもそのままでbuildします。

$ echo "3.0 (quilt)" >debian/source/format
$ debuild -us -uc

ライブラリが足りなければ適宜インストールしてください。もし問題がなければ、上のディレクトリに*.debができているのでインストールします。インストール時にデータベースのパスワードを聞かれるので設定します。

$ dpkg -i ../*.deb

次のコマンドで問題なく起動できればインストール完了です。

$ /etc/init.d/virtuoso start

ODBCの設定 (要確認)

NOTE: この設定は必要ないかもしれないので要確認

まずodbcinstをインストールします。

$ aptitude install odbcinst odbcinst1debian1

その後、/etc/odbcinst.ini,odbc.iniを以下のように作成します。

- /etc/odbcinst.ini
[virtuoso-odbc]
Driver  = /usr/lib/odbc/virtodbc.so

- /etc/odbc.ini
[ODBC Data Sources]
VDS  = Virtuoso

[VDS]
Driver  = virtuoso-odbc
Description  = Virtuoso Open-Source Edition
ServerName  = localhost:1111

[VOS]
Driver  = /usr/lib/odbc/virtodbc.so
Description  = Virtuoso OpenSource Edition
Address = localhost:1111

OntoWiki

OntoWIkiはRDF用の閲覧・編集環境です。CMSと言ったほうがいいかもしれません。

とりあえずphp5とapacheの基本的な設定をしておく必要があります。解説を書いている方がたくさんいるので、やり方はググってください。一点追加で必要なのが、php5-odbcのインストールです。

$ sudo aptitude install php5-odbc

php5とapacheをインストールしたら、InstallFromMercurialに書かれている通りに、レポジトリから最新のソースをインストールします。

$ cd /var/www
$ hg clone https://ontowiki.googlecode.com/hg/ owrep
$ cd owrep/ontowiki/src/libraries
$ ln -s ../../../erfurt/src/Erfurt .
$ ln -s ../../../RDFauthor .

$ wget http://framework.zend.com/releases/ZendFramework-1.9.4/ZendFramework-1.9.4-minimal.tar.gz
$ tar xvzf ZendFramework-1.9.4-minimal.tar.gz
$ mv ZendFramework-1.9.4-minimal/library/Zend .
$ rm -rf ZendFramework-1.9.4-minimal.tar.gz ZendFramework-1.9.4-minimal

$ cd /var/www/owrep/ontowiki/src
$ cp htaccess-dist .htaccess
$ cp config.ini-dist config.ini

次にUsingOntoWikiWithVirtuosoを参考にconfig.iniの設定をします。

[private]
store.backend = virtuoso
store.virtuoso.dsn = VOS
store.virtuoso.username = dba
store.virtuoso.password = dba

その後OntoWikiに必要なディレクトリ作成します。


$ mkdir cache log uploads
$ chown www-data:www-data cache log uploads 

Apacheの設定をします。そのままトップに置くのなら/etc/apache2/sites-enabled/000-defaultのDocumentRootと該当Directoryを変更します。

DocumentRoot /var/www/owrep/ontowiki/src
<Directory /var/www/owrep/ontowiki/src>

Apacheを再起動した後、http://localhostにアクセスしてください。問題なければOntoWikiが表示されます。ユーザ名 Admin パスワードなしでログインすると管理画面になります。

Conference Model Demo

FirstStepにConferenceデータのデモの作り方がかかれています。注意する必要があるのは、もしlocalhost以外で動かす場合、Google Maps API Keyの設定が必要です。API Key取得ページで生成した文字列をontowiki/extensions/components/map/component.iniに設定します。

- ontowiki/extensions/components/map/component.ini
apikey.google = "生成した文字列"