2010-06-22
DDBJやPDBjやMEDLINEやUniProtのRDFのトリプル数
RDF, LinkedData | |
![]()
最近扱っているデータのスケールを調べました。
規模感
トリプル数の計算は、rapper -c を利用した。
| データベース名 | ファイル数 | ファイルサイズ | トリプル数 |
|---|---|---|---|
| DDBJ | 299 | ~300GB | 6.6G |
| PDBj | 65378 | ~133G | 1.4G |
| MEDLINE | 617 | ~12G | 0.7G |
| uniprot-rdf | 12 | 133G | 2.4G |
まとめ
- メジャーな公共データベースではギガオーダーのトリプルが存在している。
- ファイルサイズは100G越えもあたりまえ。
- rapper -c の計算だけでも数時間かかる。(並列化で短縮は可能)
- 参考として、Bio2rdf にあるデータのトリプル数は http://sourceforge.net/apps/mediawiki/bio2rdf/index.php?title=Namespace にある。
2010-05-30
HCLS の最近の活動から箇条書き
SematnicWeb, LinkedData, SPARQL | |
![]()
5月14日のエントリ HCLS trends and NCBO's SPARQL endpoint! から箇条書きで抜粋してみます。
- Electronic Health Records (EHRs) のデモを作ろうとしている。そのために、Semantic Web デモに利用可能な臨床データをさがしている。
- 2月のC-SHALS 以降、由来(provenance)がキーテーマになりつつある。
- BioRDFタスクフォースは、マイクロアレイデータ(遺伝子リスト、実験条件など)のモデル化のよい方法を模索している。
- Scientific Discourse タスクフォースは、myExperiment.org にストアされているような計算機実験やグループでの議論をかたちづくる文をどのようにモデル化するかを調べている。
- Translational Medicine Ontology タスクフォースも由来問題を調べはじめた。
- NCBO が実験的にSPARQLエンドポイントから直接つながった Linked Data のプロジェクトをはじめた。
- ブラウザ用UI http://sparql.bioontology.org/webui/ とアプリ用エンドポイント http://sparql.bioontology.org/sparql/
- これによって、OBO のすべてをふくむリソースに直接アクセスしたアプリケーションを作る事が出来る。
とのこと。
補足
- NCBI の SPARQL エンドポイントのチュートリアルはこちら:http://sparql.bioontology.org/tutorial/
- RDFストアは Mulgara を使用。
2010-05-26
Trackstar を試してみた
Galaxy, Trackstar, JSON, HTML5 | |
![]()
Galaxy の最近の新機能のひとつ、UCSC ゲノムブラウザライクにゲノム座標データの可視化 Trackstar を試してみた。自分のデータを手軽に可視化できるのがポイント。
Trackstar はゲノム座標系データの可視化機能
ゲノム座標系データをそのゲノム配列のうえに表示する。表示する形は UCSC ゲノムブラウザのフィーチャーと似ている。表示範囲のスケールにあわせてうまく描画の粒度をかえている。
WIG 形式の数値データも表示できる。折れ線グラフ、ヒストグラム、密度表示の三種類の可視化の形をもっている。色の指定が可能。
ゲノム上の表示は、マウスでの左右上下ドラッグによるスクロール、ホイールによるスクロール、ダブルクリックによる拡大が可能。表示するデータは、ゲノム配列(dbkey)が一致すれば自動的に選択リストにはいるようになっている。このへんのデータのメタデータによるマッチングは Galaxy の得意なところ。
座標系データは、その特性にあわせたインデクス化がおこなわれているので、比較的高速に動作する。さらに、表示に必要なデータだけをとりだすように非同期通信を利用している。
表示は、HTML5 Canvas エレメントと Javascript を利用したブラウザサイドレンダリングで実装。データはJSONで交換されている。
インストール
Trackstar の設定は galaxy / galaxy-central / wiki / Visualization — Bitbucket をなぞる。Galaxy のインストールは galaxy / galaxy-central / wiki / GetGalaxy — Bitbucket を参照。
ソースの取得。
hg clone http://bitbucket.org/galaxy/galaxy-central
python 2.5 を使うように設定。ここでは Mac OS X 10.6 での場合。
ln -s /usr/bin/python2.5 python export PATH=./:$PATH
セットアップ。
sh setup.sh
universe_wsgi.ini を編集。最低限必要なのは enable_tracks = True を有効にすること。
$ diff universe_wsgi.ini universe_wsgi.ini.sample 28c28 < enable_tracks = True --- > # enable_tracks = True
トラック用のデータをUCSCから取得。hg18 などの buildの名前(dbkey)や長さが含まれる。
mkdir ./tool-data/shared/ucsc/chrom/ python ./cron/build_chrom_db.py ./tool-data/shared/ucsc/chrom/
起動確認。
sh run.sh
ブラウザで http://localhost:8080/ を開いて、ヘッダに Visualization メニューが追加されていることを確認。
つかってみる
ブラウザの動作確認。
- ヘッダの Visualization → New Track Browser を選択。
- 出て来たダイアログの「Reference genome build (dbkey):」メニューで「Human Mar. 2006 (NCBI36/hg18) (hg18)」を選択。
- Continue ボタンをクリック。
- ゲノムブラウザが表示される。
- 下の染色体選択メニューで「chr1」を選択。
- データセットをたしてみる。Add Tracks ボタンをクリック。でもいまは選択できるデータがない。
- とりあえず、ここまでの状態を保存するために、右のConfigurationペインの Save ボタンをクリック。
データをとってくる。
- ヘッダの Analyze Data を選択。
- 左ペインの Tools → Get Data → UCSC Main を選択。
- NCBI36/hg18 アッセンブリのデータをなにか取得。たとえば group: Genes ... で table: knownGene
- output format: の Galaxy チェックボックスを有効にする。
- get output ボタンをクリック。つぎの画面で Send query to Galaxy ボタンをクリック。しばし待つ。
- 「UCSC Main on Human: knownGene (genome)」のようなタイトルのヒストリが追加される。
ブラウザにもどる。
- ヘッダの Visualization → Saved Visualizations を選択。
- さっき作ったもの(おそらく Unnamed)を選択。
- ゲノムブラウザが表示される。
- 下の染色体選択メニューで「chr1」を選択。
- データセットをたしてみる。Add Tracks ボタンをクリック。
- データセットを選択して、insert ボタンをクリック。
- インデクスがはじまる。しばし待つ。
- スクロールや縮小拡大をためしてみる。
- 最後にここまでの状態を保存するために、右のConfigurationペインの Save ボタンをクリック。
うごかないときには
- galaxy / galaxy-central / wiki / Visualization — Bitbucket を読み直す。
- ソースは正しくて、手順がまちがっていると信じてもう一度ソースから入れ直してみる。
まとめ
2010-01-30
TogoWS REST API JSON 形式の利用例
TogoWS REST API は JSON 形式の出力形式に対応しています。これを利用するとかんたんにウェブページにデータを追加表示できます。この利用例では、HTML書類にレンダリング時にAjaxで取得したPubMedアブストラクトのデータを表示します。
REST API の JSON 形式
PubMed アブストラクトのタイトルの取得 URI は次のようになります。ti フィールドがタイトルです。
その返り値
["From genomics to chemical genomics: new developments in KEGG."]
この返り値JSONをJavaScriptで値としてつかうには eval を使用します。TogoWS REST API の JSON 形式を利用する際に配列の一個目の要素を取り出す必要があります。
var data = eval(ti_in_json)[0]
図はイメージ
次のようなウェブページを、TogoWS からデータ取得し作成できます。JavaScript による Ajax でデータは JSON 形式としてクロスドメインに取得されて、そのまま DOM 操作で表示しています。表示しているデータは、タイトル(ti)、著者(au)、書誌情報(so)、アブストラクト(ab)、MeSHターム(mh)です。
HTML ソース
Ajax に prototype.js をつかいます。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html><head> <title></title> <script src="http://genome.kazusa.or.jp/javascripts/prototype.js" type="text/javascript"></script> </head> <body> <div id='ti'></div> <div id='au'></div> <div id='so'></div> <hr/> <div id='ab'></div> <hr/> <div id='mh'></div> <hr/> <script type="text/javascript"> var ti = function(transport) { if (transport.responseText !== undefined) { $('ti').innerHTML = "<h1>" + eval(transport.responseText)[0] + '</h1>' } } var so = function(transport) { if (transport.responseText !== undefined) { $('so').innerHTML = eval(transport.responseText)[0] } } var au = function(transport) { if (transport.responseText !== undefined) { $('au').innerHTML = eval(transport.responseText)[0].replace(/\n/g, ', ') } } var ab = function(transport) { if (transport.responseText !== undefined) { $('ab').innerHTML = eval(transport.responseText)[0]; } } var mh = function(transport) { if (transport.responseText !== undefined) { var data = eval(transport.responseText)[0] data.each(function(e, i) { $('mh').innerHTML = $('mh').innerHTML + '<li>' + e + '</li>' }) } } function failure(transport) { alert(transport.responseText); } new Ajax.Request("http://togows.dbcls.jp/entry/ncbi-pubmed/16381885/ti.json", { onSuccess: ti, onFailure: failure}) new Ajax.Request("http://togows.dbcls.jp/entry/ncbi-pubmed/16381885/so.json", { onSuccess: so, onFailure: failure}) new Ajax.Request("http://togows.dbcls.jp/entry/ncbi-pubmed/16381885/ab.json", { onSuccess: ab, onFailure: failure}) new Ajax.Request("http://togows.dbcls.jp/entry/ncbi-pubmed/16381885/au.json", { onSuccess: au, onFailure: failure}) new Ajax.Request("http://togows.dbcls.jp/entry/ncbi-pubmed/16381885/mh.json", { onSuccess: mh, onFailure: failure}) </script> </body> </html>
まとめ
2010-01-06
インストールした 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
- http://4store.org/trac/wiki/ImportDataデータはRDFファイル単位。
ソース配布物の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
$ 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 にウェブブラウザでアクセス。
ステータスページ。
バックエンドサイズ情報。
テストクエリ。
クエリ結果
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、ruby、Javaクライアントがある。Perlさん。。。
$ 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 で高速化出来るかな?











