Hatena::Grouplifesciencedb

ゲノム周辺 このページをアンテナに追加 RSSフィード

2010-06-22

DDBJやPDBjやMEDLINEやUniProtのRDFのトリプル数

| 16:07 |  DDBJやPDBjやMEDLINEやUniProtのRDFのトリプル数 - ゲノム周辺 を含むブックマーク はてなブックマーク -  DDBJやPDBjやMEDLINEやUniProtのRDFのトリプル数 - ゲノム周辺  DDBJやPDBjやMEDLINEやUniProtのRDFのトリプル数 - ゲノム周辺 のブックマークコメント

最近扱っているデータのスケールを調べました。

規模感

トリプル数の計算は、rapper -c を利用した。

データベースファイル数ファイルサイズトリプル数
DDBJ 299 ~300GB 6.6G
PDBj 65378 ~133G 1.4G
MEDLINE 617 ~12G 0.7G
uniprot-rdf 12 133G 2.4G

まとめ

  1. メジャーな公共データベースではギガオーダーのトリプルが存在している。
  2. ファイルサイズは100G越えもあたりまえ。
  3. rapper -c の計算だけでも数時間かかる。(並列化で短縮は可能)
  4. 参考として、Bio2rdf にあるデータのトリプル数は http://sourceforge.net/apps/mediawiki/bio2rdf/index.php?title=Namespace にある。
トラックバック - http://lifesciencedb.g.hatena.ne.jp/nakao_mitsuteru/20100622

2010-01-06

インストールした 4store の動作確認をした。

| 00:30 |  インストールした 4store の動作確認をした。 - ゲノム周辺 を含むブックマーク はてなブックマーク -  インストールした 4store の動作確認をした。 - ゲノム周辺  インストールした 4store の動作確認をした。 - ゲノム周辺 のブックマークコメント

SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 - lifesciencedbグループインストールした 4store の動作確認をなぞった。

はじめに http://4store.org/trac/wiki/GettingStarted でざっと全体の動作をみておく。4s-backend-setup、4s-backend、4s-httpd などコマンド名にオプション込なかんじ。http://4store.org/trac/wiki/Documentation の Usage の各項目をなぞる。

/Application/4store.app を起動すると、適切に環境設定された Terminal.app のウィンドウが一つでてくる。4store コマンド群は /Applications/4store.app/Contents/MacOS/bin/4s-backend にある。

コマンド群は 4s-からはじまっている

$ ls /Applications/4store.app/Contents/MacOS/bin/
4s-backend*          4s-cluster-create*               4s-httpd*
4s-backend-copy*     4s-cluster-destroy*              4s-import*
4s-backend-destroy*  4s-cluster-file-backup*          4s-info*
4s-backend-info*     4s-cluster-info*                 4s-query*
4s-backend-passwd*   4s-cluster-replication-disable*  4s-resolve*
4s-backend-setup*    4s-cluster-start*                4s-restore*
4s-bind*             4s-cluster-stop*                 4s-reverse-bind*
4s-cluster-cache*    4s-delete-model*                 4s-size*
4s-cluster-copy*     4s-dump*                         4s-update*

データベースのセットアップは 4s-backend-setup

データベース名(Knowledge Base名; KB名)demo として作成。

$ 4s-backend-setup demo
4store[39388]: backend-setup.c:176 erased files for KB demo
4store[39388]: backend-setup.c:301 created RDF metadata for KB demo

データベースの実体は /var/lib/4store/demo に作成される。

$ ls /var/lib/4store/demo
0000/  0001/  metadata.nt

クラスタの設定はこんなかんじ。

$ 4s-backend-setup --node 0 --cluster 1 --segments 4 demo
4store[39394]: backend-setup.c:176 erased files for KB demo
4store[39394]: backend-setup.c:301 created RDF metadata for KB demo

node 引数cluster 引数、segments 引数は後ほどしらべる。


起動は 4s-backend

4s-backend demo

デーモンとして起動する。


データインポートは 4s-import

ソース配布物のdataの中から一つインポートしてみる。

$ 4s-import -v demo data/tiger/tiger_features.rdf
removing old data
Reading <file:///Users/nakao/Applications/4store/4store/data/tiger/tiger_features.rdf>;
Pass 1, processed 748 triples (748)
Pass 2, processed 748 triples, 90250 triples/s
Updating index
Index update took 1.469478 seconds
Imported 748 triples, average 505 triples/s

コマンドラインクエリインターフェイスは 4s-query

対話的に起動。

$ 4s-query demo4store> SELECT * WHERE {?s ?p ?o}
#EOQ
?s     ?p     ?o
<http://www.census.gov/tiger/2002/CFCC/D85>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/D8>;
<http://www.census.gov/tiger/2002/CFCC/F40>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/F4>;
<http://www.census.gov/tiger/2002/CFCC/E0>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/E>;

実行区切り文字列は #EOQ\n

SPARQLクエリコマンドラインでも実行可。

$ 4s-query demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">;
  <head>
    <variable name="s"/>
    <variable name="p"/>
    <variable name="o"/>
  </head>
  <results>
    <result>
      <binding name="s"><uri>http://www.census.gov/tiger/2002/CFCC/D85</uri></binding>;
      <binding name="p"><uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri></binding>;
      <binding name="o"><uri>http://www.census.gov/tiger/2002/CFCC/D8</uri></binding>;
    </result>
  </results>
</sparql>

選べる出力形式。

JSON形式

$ 4s-query -f json demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
{"head":{"vars":["s","p","o"]},
 "results": {
  "bindings":[
   {"s":{"type":"uri","value":"http://www.census.gov/tiger/2002/CFCC/D85";},
    "p":{"type":"uri","value":"http://www.w3.org/2000/01/rdf-schema#subClassOf";},
    "o":{"type":"uri","value":"http://www.census.gov/tiger/2002/CFCC/D8";}}
  ]
 }}

SPARQL-RESULTS 形式

$ 4s-query -f sparql demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">;
  <head>
    <variable name="s"/>
    <variable name="p"/>
    <variable name="o"/>
  </head>
  <results>
    <result>
      <binding name="s"><uri>http://www.census.gov/tiger/2002/CFCC/D85</uri></binding>;
      <binding name="p"><uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri></binding>;
      <binding name="o"><uri>http://www.census.gov/tiger/2002/CFCC/D8</uri></binding>;
    </result>
  </results>
</sparql>

テキスト形式。

$ 4s-query -f text demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
?s     ?p     ?o
<http://www.census.gov/tiger/2002/CFCC/D85>;     <http://www.w3.org/2000/01/rdf-schema#subClassOf>;     <http://www.census.gov/tiger/2002/CFCC/D8>;

テストケース(Turtle)形式。

$ 4s-query -f testcase demo 'SELECT * WHERE { ?s ?p ?o } LIMIT 1'
@prefix rs: <http://www.w3.org/2001/sw/DataAccess/tests/result-set#>; .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>; .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>; .

[] rdf:type rs:ResultSet ;
   rs:resultVariable "s", "p", "o" ;
   rs:solution [
      rs:binding [ rs:variable "s" ;
                   rs:value <http://www.census.gov/tiger/2002/CFCC/D85> ] ;
      rs:binding [ rs:variable "p" ;
                   rs:value <http://www.w3.org/2000/01/rdf-schema#subClassOf> ] ;
      rs:binding [ rs:variable "o" ;
                   rs:value <http://www.census.gov/tiger/2002/CFCC/D8> ]
   ] .

SPARQL HTTPインターフェイスは 4s-httpd

8000ポートで起動

$ 4s-httpd -p 8000 demo

SPARQLエンドポイントは http://localhost:8000/sparql/ になる。

http://localhost:8000 にウェブブラウザアクセス

http://img.skitch.com/20100106-ey6gcjsu42qsege2gimq316ia6.jpg

ステータスページ。

http://img.skitch.com/20100106-nsq5ir2j1c6ynbkmif43t5a9p8.jpg

バックエンドサイズ情報。

http://img.skitch.com/20100106-cb9dq16jare8b33q82exaq12c.jpg

テストクエリ

http://img.skitch.com/20100106-x8hfwfdjt3xkexyn9nwcg346nh.jpg

クエリ結果

http://img.skitch.com/20100106-8g2w2r4tsycy8sdwrnxa6966hp.jpg


RESTful インターフェイス

PUT

$ curl -T file.rdf http://localhost:8000/sparql/file.rdf

DELETE

$ curl -X DELETE http://localhost:8000/sparql/file.rdf

注意する点として、グラフ単位(ファイル単位)でしか追加/削除できない。http://4store.org/trac/wiki/TODO

クライアントからの接続

php、phtyon、rubyJavaクライアントがある。Perlさん。。。

ruby クライアントの場合。インストールしてみる。

$ gem build 4store-ruby.gemspec
WARNING:  no rubyforge_project specified
  Successfully built RubyGem
  Name: 4store-ruby
  Version: 0.0.3
  File: 4store-ruby-0.0.3.gem
$ sudo gem install 4store-ruby-0.0.3.gem

使ってみる。

>> require 'rubygems'
=> true
>> gem '4store-ruby'   
=> true
>> FourStore
=> FourStore
>> FourStore::Store
=> FourStore::Store
>> FourStore::Store.new("http://localhost:8000/sparql/";)
=> #<FourStore::Store:0x10176a000 @endpoint=#<URI::HTTP:0x101769c90 URL:http://localhost:8000/sparql/>>;
>> ep = FourStore::Store.new("http://localhost:8000/sparql/";)
=> #<FourStore::Store:0x101763890 @endpoint=#<URI::HTTP:0x101763548 URL:http://localhost:8000/sparql/>>;
>> res = ep.select("SELECT * WHERE { ?s ?p ?o } LIMIT 10");
?> "
"
=> "\n"
>> require 'pp'
=> true
>> pp res
[{"o"=>"http://www.census.gov/tiger/2002/CFCC/D8";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D85";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/F4";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/F40";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/E";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/E0";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/B";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/B4";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/D2";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D27";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/A";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/A5";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/A2";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/A21";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/H7";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/H70";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/B5";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/B52";},
 {"o"=>"http://www.census.gov/tiger/2002/CFCC/D4";,
  "p"=>"http://www.w3.org/2000/01/rdf-schema#subClassOf";,
  "s"=>"http://www.census.gov/tiger/2002/CFCC/D43";}]
=> nil

メソッド一覧。

>> FourStore::Store.instance_methods - Object.methods
=> ["delete", "add", "set", "select", "load"]

ドキュメントが無いので、ソース読め、とのこと。

rubyクライアントはREXMLをつかっているのが気になるところ。大規模用途に備えて nokogiri で高速化出来るかな?


まとめ

  1. Mac OS X 10.6で動作確認した。
  2. セットアップ、バックエンド起動、データインポートクエリインターフェイスhttpインターフェイスクライアントの利用をなぞった。
  3. RDFのストア、クエリが簡単にできた。
  4. HTTP SPARQL endpoint がある。
  5. RESTful APIがある。
  6. phppythonrubyJava クライアントがある。

DavSnusaDavSnusa2017/05/11 18:13Cytotec 200pg Pharmacie En Ligne <a href=http://byuvaigranonile.com>viagra</a> Priligy En Valencia Finasteride 10mg Skin Health Lowest Price Flagyl Low Price

トラックバック - http://lifesciencedb.g.hatena.ne.jp/nakao_mitsuteru/20100106

2010-01-054store

SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。

| 02:47 |  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 を含むブックマーク はてなブックマーク -  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺  SPARQLのつかえるスケーラブルRDFストア 4store をSnow LeopardのMacにインストールしてみた。 - ゲノム周辺 のブックマークコメント

4store とは、RDFクエリエンジンとデータベースストレージ。高パフォーマンス、スケール性、安定性が強みとのこと。ライセンスはGPLv3、ANSI C99でコードされているので、多くのUNIXライクプラットフォームで実行可能。Linux用につくられているがMac OS Xでもうごく。クラスタリングによって、インポート速度は秒速120kトリプル を達成し、比較的単純なクエリはミリセカンドで応答する。これはHTTP経由SPARQLプロトコルでも達成できる。セキュリティにも十分配慮がなされている。

スケール性について。たとえば、8GBメモリのマシン9台でクラスタリングすると15ギガトリプルを扱うことができる。ハッシュ値の衝突からの上限はおよそ50-70ギガトリプルと見積もられている。

これを Mac OS X 10.6 の MacPro にインストールしてみたい。

バイナリ配布はエラーになった。

インストールして実行してみる。

nmp:~ nakao$ 4s-backend-setup test
dyld: Library not loaded: /usr/lib/libxml2.2.dylib
  Referenced from: /usr/lib/libxslt.1.dylib
  Reason: Incompatible library version: libxslt.1.dylib requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0
Trace/BPT trap

ライブラリのバージョンがあっていない。配布物は10.4当時を想定しているようだった。

ソースからビルドすることにした。

git からコンパイルする。

git clone git://github.com/garlik/4store.git
cd 4store
./configure

いろいろ依存パッケージやライブラリがはいっていなかった。

依存パッケージなどは次の通り。

  • pkg-config
  • raptor
  • rasqal
  • glib2
    • lib is a library which includes support routines for C, such as lists, trees, hashes, memory allocation, and many other things.
    • http://www.gtk.org/
  • libxml2
    • Libxml is the XML C library developed for the Gnome project. XML itself is a metalanguage to design markup languages. Though the library is written in C, a variety of language bindings make it available in other environments.
    • http://xmlsoft.org/
  • pcre
    • The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API.
    • http://www.pcre.org/
  • ncurses
  • readline
    • The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.
    • http://cnswww.cns.cwru.edu/~chet/readline/rltop.html
  • zlib
    • zlib is designed to be a free, general-purpose, legally unencumbered, lossless data-compression library for use on virtually any computer hardware and operating system.
    • http://www.zlib.net/
  • avahi
    • Avahi is a system which facilitates service discovery on a local network. This means that you can plug your laptop or computer into a network and instantly be able to view other people who you can chat with, find printers to print to or find files being shared. This kind of technology is already found in Mac OS X (branded Rendezvous, Bonjour and sometimes Zeroconf) and is very convenient. Avahi is mainly based on Lennart Poettering's flexmdns mDNS implementation for Linux which has been discontinued in favour of Avahi. (ランデブーのフリー版のようなもの)
    • http://avahi.org/
  • mDNS

Avahi と mDNS はどちらかがあればよい。

依存パッケージをMacPortsインストールする。

raptor をインストールする。

mnmp:4store nakao$ sudo port install raptor
--->  Computing dependencies for curl
--->  Fetching curl
--->  Attempting to fetch curl-7.19.7.tar.bz2 from http://www.execve.net/curl/
--->  Verifying checksum(s) for curl
--->  Extracting curl
--->  Configuring curl
--->  Building curl
--->  Staging curl into destroot
--->  Deactivating curl @7.19.4_0
--->  Computing dependencies for curl
--->  Installing curl @7.19.7_0
--->  Activating curl @7.19.7_0
--->  Cleaning curl
--->  Computing dependencies for libxslt
--->  Fetching libxslt
--->  Attempting to fetch libxslt-1.1.26.tar.gz from http://distfiles.macports.org/libxslt
--->  Verifying checksum(s) for libxslt
--->  Extracting libxslt
--->  Configuring libxslt
--->  Building libxslt
--->  Staging libxslt into destroot
--->  Deactivating libxslt @1.1.24_2
--->  Computing dependencies for libxslt
--->  Installing libxslt @1.1.26_0
--->  Activating libxslt @1.1.26_0
--->  Cleaning libxslt
--->  Computing dependencies for raptor
--->  Fetching raptor
--->  Attempting to fetch raptor-1.4.19.tar.gz from http://download.librdf.org/source/
--->  Verifying checksum(s) for raptor
--->  Extracting raptor
--->  Configuring raptor
--->  Building raptor
--->  Staging raptor into destroot
--->  Installing raptor @1.4.19_0
--->  Activating raptor @1.4.19_0
--->  Cleaning raptor
mnmp:4store nakao$ ./configure
[OK  ] pkg-config installed
[OK  ] raptor installed
[FAIL] no rasqal library

rasqal をインストールする。

mnmp:4store nakao$ sudo port install rasqal
--->  Computing dependencies for rasqal
--->  Fetching rasqal
--->  Attempting to fetch rasqal-0.9.16.tar.gz from http://download.librdf.org/source/
--->  Verifying checksum(s) for rasqal
--->  Extracting rasqal
--->  Configuring rasqal
--->  Building rasqal
--->  Staging rasqal into destroot
--->  Installing rasqal @0.9.16_0
--->  Activating rasqal @0.9.16_0
--->  Cleaning rasqal
mnmp:4store nakao$ ./configure
[OK  ] pkg-config installed
[OK  ] raptor installed
[OK  ] rasqal installed
[FAIL] no glib2 devel system

glib2をインストールする。

この間、とても書き切れないくらい操作して +universal でなみなみ更新

python25 をインストールする。

mnmp:4store nakao$ sudo port install python25
--->  Computing dependencies for python25
--->  Fetching python25
--->  Verifying checksum(s) for python25
--->  Extracting python25
--->  Applying patches to python25
--->  Configuring python25
--->  Building python25
--->  Staging python25 into destroot
--->  Installing python25 @2.5.4_9+darwin+darwin_10+macosx
--->  Activating python25 @2.5.4_9+darwin+darwin_10+macosx

To fully complete your installation and make python 2.5 the default, please run

     sudo port install python_select 
     sudo python_select python25

--->  Cleaning python25

4store のビルドインストール

./configure
make
make test

make test でテスト成功にみえるが、エラーとして終了する。

sudo make install

動作確認

http://4store.org/trac/wiki/CreateDatabase を参照。

mnmp:benchmark nakao$ 4s-backend-setup demo
4store[39388]: backend-setup.c:176 erased files for KB demo
4store[39388]: backend-setup.c:301 created RDF metadata for KB demo

どうやら動くらしい。


パッケージ化した

make macdmg で 4store.app とその dmg パッケージを作成できる。

アプリビルドしている app-aux/build-app.sh では /sw (Fink)を前提としているので、それを /opt/local (MacPorts)におきかえる。こうして作成したパッケージが別のMacでの動作を確認。

app-aux/build-app.sh の変更分は git でフォークした:http://github.com/nakao/4store


まとめ

  1. バイナリ配布物がSnow Leopardではうごかなかった。
  2. Snow Leopard, MacPorts 環境でビルドできた。
  3. パッケージを作成した。
  4. githubMacPortsでパッケージ化するソースをフォークした。
トラックバック - http://lifesciencedb.g.hatena.ne.jp/nakao_mitsuteru/20100105

2009-04-24

セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ

|  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺 を含むブックマーク はてなブックマーク -  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺 のブックマークコメント

Briefings in Bioinformatics Special Issue: Semantic Web for Helth Care and Lifesciences: A Review of the State of the Art を題材にセマンティックウェブの勉強会をおこないました。担当した論文が Named Graph をつかって複数のデータソースをまたいだバージョンや更新に関する由来情報の保持、管理をあつかうものでしたので、RDF、Named Graph、SPARQL について調べてみました。

screenshot screenshot


由来情報を扱うシナリオ

Linked data and provenance in biological data webs | Briefings in Bioinformatics | Oxford Academic では、FlyBase が更新されたときに、ある遺伝子が二個の遺伝子に定義されなおされたということを例として、その影響として、FlyBase のその遺伝子と関連づけられていた外部データベースレコードが、更新後にFlyBaseと関連が失われることをあげていました。

遺伝子は、実験手法や研究の進展にしたがって定義しなおされるものなので、このようなことはつねにおこりえます。アセンブリが更新された、クローンが更新された、cDNA がとれたなどなど。また、ゲノムデータベースがあり、独立して表現系の画像を収集するプロジェクトがあったり、さらに別にラージスケールなデータ収集プロジェクト(相互作用や発現など)があるのがいまどきです。このように、独立してゲノムスケールのデータを収集管理するプロジェクトがある状況では、それぞれが遺伝子 ID をりようするので、データソース間で、遺伝子IDとデータの更新と対応関係の保持はだれがおこなうのかというと、実行するところもあれば、おこなわないところもあります。そこで、第三者的にそれを実現するには、RDF 技術をつかえばいいよ、というシナリオです。

第三者的に維持するといのは、遺伝子アノテーションの分野でもおこなわれているアプローチです。遺伝子アノテーションでは、GenBank レコードが著作者しか更新できないという制限から、遺伝子アノテーションといったどんどん更新されるべきデータは第三者がおこなうというのがよいとされています。


RDF

RDF(Resource Description Framework)は、リソースを記述する枠組みです。非常に簡便にいうと、リソースとして IRI やリテラルを使用し、リソース間の関係はOWLなどのオントロジーをつかっています。リソースの記述には、トリプル(主語、述語、目的語)という形などがあります。たとえば、ORF名 slr1311 と遺伝子名 psbA2 の関係は、slr1311 hasGeneName psbA2 のように記述します。slr1311 が主語、hasGeneName が述語、psbA2 が目的語です。英語教育でいうところの SVO型。

以下は、gene1 と gene2、gene3 が owl:sameAs という関係であることを記述している RDF です。

 1: @prefix owl: <http://w3.org/2002/07/owl#> .
 2:
 3: gene1 owl:sameAs gene2 .
 4: gene1 owl:sameAs gene3 .

1行目では、以後に現れる owl: が http://w3.org/2002/07/owl# であることを宣言しています。w3.org/2002/07/owl は OWL を定義している XML 書類です。sameAs の定義はつぎのようになっていました。

71: <rdf:Property rdf:ID="sameAs"> 
72:   <rdfs:label>sameAs</rdfs:label>
73:   <rdfs:domain rdf:resource="#Thing"/>
74:   <rdfs:range rdf:resource="#Thing"/>
75: </rdf:Property>

3行目で主語 gene1 は目的語 gene2 と述語 owl:sameAs であると記述しています。行末にはピリオドが必要です。

主語や述語は IRI(International Resource Identifier)です。IRI は URIUnicode/ISO 10646 に拡張したものです。URIURL + URN です。

述語にはオントロジーを用います。OWL(Web Ontology Language)やDCMI(Dublin Core Metadata Initiative)などが利用されています。owl:sameAs や dcterms:created、dcterms:isPartOf、dc:creator、dcterms:hasPart などがあります。

さらに、型情報としては、XMLSchema などを利用することができます。たとえば、"2009-01-01" を xsd:date として扱うのには:

"2009-01-01"^^xsd:date

のように表現します。


Named Graph

Named Graph は複数の RDF graph を単一の書類のように保持や名付けをするものです。ここでの目的では、個々のリソースにあるRDFを単一の書類のように扱うのに使用していますようです。

論文での Named RDF Graph の例

 1: @prefix openflydata: <http://openflydata.example.com/genenames/> .
 2: @prefix myfly: <http://myfly.example.com/genenames/> .
 3: @prefix owl: <http://www.w3.org/2002/07/owl#> .
 4: @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 5: @prefix dw: <http://purl.org/net/datawebs/provenance/> .
 6: @prefix dcterms: <http://purl.org/dc/terms/> .
 7: @prefix : <http://flylink.example.com/genenamemapping/> .
 8:
 9: :GeneNameMappingGraph-Version-1 {
10:   openflydata:gene1 owl:sameAs myfly:gene1 .
11:   openflydata:gene2 owl:sameAs myfly:gene2 .
12:
13:   openflydata:gene1 owl:differentFrom myfly:gene2 .
14:   openflydata:gene2 owl:differentFrom myfly:gene1 .
15:
16:   :GeneNameMappingGraph-Version-1
17:     dcterms:created "2008-01-01"^^xsd:date ;
18:     dw:versionNumber "1" ;
19:     dw:derivedFrom <http://openflydata.example.com/version1> ;
20:     dw:derivedFrom <http://myflydata.example.com/version1> .
21: }

8行目の :GeneNameMappingGraph-Version-1 がグラフ名。15-19行目はセミコロンをつかったトリプルの主語の省略表記。主語 :GeneNameMappingGraph-Version-1 に対して4個の述語と目的語があります。


SPARQL

SPARQL(SPARQL Protocol and RDF Query Language)は、RDF への問い合わせ言語です。Apache Jena - にそってみました。SQL に似た文法です。

SPARQLの例:

 1: SELECT * 
 2: WHERE { ?subject owl:sameAs ?object . }

?subject と ?object変数、出力される変数は * なのですべて、マッチ条件は、述語が owl:sameAs 。これを上記の named RDF graph に対して問い合わせた仮想的な出力:

 1: -----------------------------------
 2: | subject           | object      |
 3: ===================================
 4: | openflydata:gene1 | myfly:gene1 |
 5: | openflydata:gene2 | myfly:gene2 |
 6: -----------------------------------

述語が owl:sameAs であるトリプルの主語が ?subject に、目的語が ?object に付置されています。

出力を主語だけにするのは、つぎのようになります。

 1: SELECT ?subject WHERE { ?subject owl:sameAs ?object . }

論文で扱っていた問い合わせ例:バージョン番号が "2" であるグラフの二つのリソース遺伝子gene1の述語(=マッピング)を問い合わせる:

 1: SELECT ?p
 2: WHERE {
 3:   GRAPH ?g {
 4:     openflydata:gene1 ?p myfly:gene1 .
 5:     ?g dw:versionNumber ''2'' .
 6:   }
 7: }

出力は、マッピング(?p)となります。

例その2:openflydata:gene2 遺伝子と myfly:gene2 のマッピングのバージョン番号(dw:versionNumber)とその作成日(dcterms:created)を問い合わせる:

 1: SELECT ?g ?p ?n ?date
 2: WHERE {
 3:   GRAPH ?g {
 4:     openflydata:gene2 ?p myfly:gene2 .
 5:     ?g dw:versionNumber ?n ;
 6:          dcterms:created ?date .
 7:   }
 8: }

出力は、グラフ名(?g)、マッピング(?p)、バージョン番号(?n)、作成日(?date)となります。


まとめ

  1. RDF技術をつかうと由来情報を保持、管理、検索することができる
  2. 導入コストは、検索の粒度(バージョンだけ必要か、更新理由や更新者が必要か)をコントロールしておこなうことができる
  3. はてなスーパーpre記法には rdf や sparql がない
  4. 個人的には、RDFをつかうとできること、あることをするのにRDFが適切なことがあるのはわかるけど、導入にはもやもやとした感情をもってしまう

つづいて、SPARQLの実装やバイオ系での RDF の利用について調査したいです。