TogoWS, TogoDB の開発

提供:TogoWiki

移動: 案内, 検索

目次

TogoWS, TogoDB の開発

TogoWS

DDBJ, PDBj のキーワード検索

http//togows.dbcls.jp/search で ddbj, pdbj に対応できていないのは、 オリジナルサイトでキーワード検索用の API がどれかよくわかっていなかったから。

PDBj のキーワード検索

SQL を POST すると ID が返るサービスがある(金城)ということなので、これを利用する。

たとえば、"alcohol dehydrogenase" というキーワードで検索するには以下のSQLを投げます。

 SELECT pdbid FROM brief_summary where plainto_tsquery('alcohol dehydrogenase') @@ tsv

REST API (SQL Search) はこちらを参照:http://www.pdbj.org/doc/help.cgi?PDBj%20Mine%3aREST%20API

WABIも参照のこと:http://wabi.ddbj.nig.ac.jp/CookBook_jp/index.php/キーワードでPDBを検索する

endpoint = 'http://service.pdbj.org/mine/sql'
data = "SELECT pdbid FROM brief_summary where plainto_tsquery('alcohol dehydrogenase') @@ tsv"

uri = URI.parse(endpoint)
host = uri.host
path = uri.path

post_data = CGI.escape(data)
result = ''

Net::HTTP.version_1_2
Net::HTTP.start(host) {|http|
  response = http.post(path, "q=#{post_data}&format=plain")
  result = response.body
}

hit_ids = result.split(/\s+/)
hit_ids.shift

p hit_ids

これを抽象化して TogoWS テスト環境に組み込んだ。

http://togows2.dbcls.jp/search/pdbj-pdb/alcohol+dehydrogenase

http://togows2.dbcls.jp/search/pdbj-pdb/alcohol%20dehydrogenase

ちゃんと動いているようなので、近日中に本番環境に移行予定。

DDBJ のキーワード検索

該当 API があるかどうか確認する。

テストコードを頂いた。

use LWP::UserAgent;
$ua = new LWP::UserAgent;

my $req = new HTTP::Request POST => "http://xml.ddbj.nig.ac.jp/rest/Invoke";
$req->content_type("application/x-www-form-urlencoded");
$queryPath="/ENTRY/DDBJ//='alcohol dehydrogenase'";
$queryPath=~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$queryPath=~ tr/ /+/;
$returnPath="/ENTRY/DDBJ/primary-accession,/ENTRY/DDBJ/definition";
$returnPath=~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$returnPath=~ tr/ /+/;
$offset="1";
$count="10";

$req->content("service=ARSA&method=searchByXMLPath&queryPath=$queryPath&returnPath=$returnPath&offset=$offset&count=$count");

my $res = $ua->request($req);
print $res->content;

糖鎖対応

本家 KEGG GLYCAN, AIST JCGGDB に頼むことは難しいため、TogoWS 経由で GLYCAN と JCGGDB の糖鎖検索に Informatics: Cross-Database Search (WGGDS) / Protocol に基づいて対応したい。

要求仕様:WGGDSのクエリは、糖鎖構造 (WGGDS GLYDE-II XML)、組成 (WGGDS XML)、重さ (WGDS XML) で、 それぞれ prefix + /substructure, /composition, /listOperation にポストされる。 結果は ID 一覧 (XML) か GLYDE-II XML の構造。

XML をポスト --(*1)--> TogoWS --(*2)--> KEGG --(*3)--> TogoWS --(*4) --> ユーザ

(*1): XML が POST されることはこれまで想定外なので /search にマップして良いかどうか要検討、また (*4) で返されるデータも WDGGS の XML フォーマットなので、TogoWS の /search/db/query.format の .format にそぐわない。

(*2): コンバータが必要。使用するメソッドの仕様も確定。WGGDS と完全対応する?

(*3): コンバータが必要。

(*4): フォーマット指定をどうするか。ID のリストはこれまでの TogoWS では ID だけを羅列した text だったが、WGGDSの要求仕様は XML

GLYDE-II と KCF の変換

GLYDE-II → KCF は木下コンバータ (Perl スクリプト) を利用。

KCF → GLYDE-II は難しいが、BioMoby には変換サービスがある。 BioMoby を bl02 (togows.dbcls.jp) で動かすにはインストールやメンテのオーバーヘッドが大きくなる。 G-language の API でできないか?

BioMoby の調査

G-language は BioMoby を使いやすくはしてくれているが、BioMoby のサービスを REST API にマップしてくれていたりするわけではない?

動かすには BioMoby と G-language の両方をインストールする必要がありそう。 → BioMoby のクライアントライブラリは荒川さんの BH2008 の成果であるモジュール(名前は?)を使うと比較的容易にインストール可能。

KEGG

使用する KEGG API は search_glycans_by_composition, search_glycans_by_mass, search_glycans_by_kcam の3つ (他の関連APIは convert_mol_to_kcf, search_glycans_by_nameなど)。

JCGGDB

検索フォームが FLASH で作られているため、API があるかどうかを鹿内さんに確認。

  • 糖鎖構造検索

説明:糖鎖構造が検索できます。 http://jcggdb.jp/idb/StructureSearch.do?cmd=changeMode&mode=editor&cd=8&seqString=Mana1-6(Mana1-3)Manb1-4GlcNAcb1-4GlcNAc

  • 分子量検索

説明:分子量で糖鎖構造が検索できます。 http://jcggdb.jp/idb/jsp/mzSearch.jsp?PEAK_VALUE=800&TOLERANCE=5

  • 単糖組成検索

説明:組成で糖鎖構造が検索できます。 http://jcggdb.jp/idb/jsp/GlycanCompositionSearch.jsp?Hex=3&HexNAc=2

  • 検索結果詳細ページサンプル

http://jcggdb.jp/idb/jcggdb/JCGG-STR028882

この結果をハンドリングするのも少々大変なので、今後 JCGGDB との連携で改善していくしかなさそう。

TogoWS REST API へのマッピング

http://togows.dbcls.jp/search/DB に POST することで結果が得られるように拡張する?オプションは?

これまでの TogoWS REST API はキーワード検索によるエントリIDのリストと、エントリの取得、パース、 というスタティックなデータベースリソースへのアクセスに特化しており、 計算が絡んでくるウェブサービスは SOAP の方がふさわしいだろうという提案も Tokyo Manifesto でしていた。

この状況で、今後どのように拡張するか微妙なところであるが、KEGG GLYCAN とも JCGGDB とも中立な 第3者機関として統合DBがプロキシーサービスをする意味はあるし、SOAP でしか使えないのは今後を考えると不便。

そこで、糖鎖だけでなく、ジェネリックなインターフェイスを考えてみる。 BLAST+, DAS, PSIQUIC などへの対応が該当しそう。

1. http://togows.dbcls.jp/search/togodb-配列db/ に POST すると BLAST+ がかかるようにする? 2. 実行には時間がかかるので POST されると ジョブID が返る仕様とする 3. ジョブIDのステータスを確認する API を提供する(そのURLはどうなってるのが良い?) 4. 実行結果にもジョブIDでアクセスする(そのURLはどうなってるのが良い?) 5. 実行結果のフォーマット変換 (BLAST+ の場合、標準、XML、タブなど) や部分抽出 (blast結果/definition/1,10 件) とかにも対応したい(そのURLはどうなってるのが良い?) 6. どのようにして e-value, %id, overlap などでの絞り込みもココに盛り込むか?(そのURLはどうなってるのが良い? "-e 1e-5 -p 70" みたいなものをURLパス引数に混ぜる?) 7. 外部の BLAST サーバ (NCBI, KEGG など) とのやりとりも↑に対応できるか?

なかなか大変そうである。とりあえず糖鎖のサービスは

http://togows.dbcls.jp/wggds/DB名/substructure http://togows.dbcls.jp/wggds/DB名/mass

などなど、/search ではなく /wggds ネームスペースに分離して実装していくことにした。

BLAST も

http://togows.dbcls.jp/blast/DB名/ http://togows.dbcls.jp/blast/DB名/jobID http://togows.dbcls.jp/blast/DB名/jobID/status http://togows.dbcls.jp/blast/DB名/jobID/result http://togows.dbcls.jp/blast/DB名/jobID/result.xml http://togows.dbcls.jp/blast/DB名/jobID/result.tab http://togows.dbcls.jp/blast/DB名/jobID/result/definition/1,10 http://togows.dbcls.jp/blast/DB名/jobID/result/definition/"-e 1e-5 -p 70 -c 30"/1,20

みたいなインターフェースになるのだろうか。

糖鎖では、返された2つのジョブIDに対応する検索結果(IDのリスト)から共通する結果、共通しない部分などを論理演算的に計算する機能も定義されているらしい。

http://togows.dbcls.jp/filter/論理演算オペレーション/jobID1,jobID2

みたいな感じになるのだろうか。

blast_formatter

フォーマット変換は BLAST+ から blast_formatter コマンドがバンドルされているので試してみた。

% blastp -query b3702.fa -db e.coli.pep -outfmt 11 > b3702.m11
blastp -query b3702.fa -db e.coli.pep -outfmt 11 > b3702.m11  0.25s user 0.01s system 94% cpu 0.287 total

% time blast_formatter -archive b3702.m11 -outfmt 0
 :
blast_formatter -archive b3702.m11 -outfmt 0  0.30s user 0.13s system 1% cpu 28.412 total

激遅い。。リフォーマットしている間に何度でも再計算できてしまう。。たのむぜ NCBI

NCBI, EBI, DDBJ, PDBj のサービス全対応を確認

エントリ取得

http://togows.dbcls.jp/entry/ の対応データベース

ncbi-nuccore	nuccore
ncbi-nucest	nucest
ncbi-nucgss	nucgss
ncbi-nucleotide	nucleotide
ncbi-protein	protein
ncbi-gene	gene
ncbi-omim	omim
ncbi-homologene	homologene
ncbi-snp	snp
ncbi-mesh	mesh
ncbi-pubmed	pubmed
ebi-embl	embl
ebi-uniprot	uniprot
ebi-uniparc	uniparc
ebi-uniref100	uniref100
ebi-uniref90	uniref90
ebi-uniref50	uniref50
ddbj-ddbj	ddbj
ddbj-dad	dad
pdbj-pdb	pdb
kegg-compound	compound
kegg-drug	drug
kegg-enzyme	enzyme
kegg-genes	genes
kegg-glycan	glycan
kegg-orthology	orthology
kegg-reaction	reaction
kegg-module	module
kegg-pathway	pathway

こらについて、http://togows.dbcls.jp/site/en/rest.html

  • 実例があるかどうか
  • 各データベースでフィールド対応がどれくらいできているか

を調査し、不十分な部分はコーディングし、rest.html に追記する。

また、rest.html が長くなりすぎているのでプロバイダ毎にページを分けて整理する。

調査結果

http://www.ncbi.nlm.nih.gov/gene/338 http://togows.dbcls.jp/entry/ncbi-gene/338? http://togows.dbcls.jp/entry/ncbi-gene/338/additional_links http://togows.dbcls.jp/entry/ncbi-gene/338/annotation http://togows.dbcls.jp/entry/ncbi-gene/338/chromosome http://togows.dbcls.jp/entry/ncbi-gene/338/gene_type http://togows.dbcls.jp/entry/ncbi-gene/338/lineage http://togows.dbcls.jp/entry/ncbi-gene/338/location http://togows.dbcls.jp/entry/ncbi-gene/338/official_full_name http://togows.dbcls.jp/entry/ncbi-gene/338/official_symbol http://togows.dbcls.jp/entry/ncbi-gene/338/organism http://togows.dbcls.jp/entry/ncbi-gene/338/other_aliases http://togows.dbcls.jp/entry/ncbi-gene/338/other_designations http://togows.dbcls.jp/entry/ncbi-gene/338/pathways http://togows.dbcls.jp/entry/ncbi-gene/338/primary_source http://togows.dbcls.jp/entry/ncbi-gene/338/refseq_status http://togows.dbcls.jp/entry/ncbi-gene/338/summary (略) http://togows.dbcls.jp/entry/omim/125851 (略) http://www.nlm.nih.gov/cgi/mesh/2010/MB_cgi http://togows.dbcls.jp/entry/ncbi-mesh/D020790 http://togows.dbcls.jp/entry/ncbi-mesh/D020790/allowable_qualifiers http://togows.dbcls.jp/entry/ncbi-mesh/D020790/annotation http://togows.dbcls.jp/entry/ncbi-mesh/D020790/entry_terms http://togows.dbcls.jp/entry/ncbi-mesh/D020790/heading http://togows.dbcls.jp/entry/ncbi-mesh/D020790/scope_note http://togows.dbcls.jp/entry/ncbi-mesh/D020790/tree_numbers (略) http://www.ncbi.nlm.nih.gov/projects/SNP/snp_ref.cgi?rs=51804507 http://togows.dbcls.jp/entry/snp/rs51804507 http://togows.dbcls.jp/entry/snp/rs51804507/organism http://togows.dbcls.jp/entry/snp/rs51804507/ref_allele (略) http://togows.dbcls.jp/entry/homologene/40795 (略) http://www.ncbi.nlm.nih.gov/nuccore/AK143675.1 http://togows.dbcls.jp/entry/nuccore/AK143675.1 (略) http://www.ncbi.nlm.nih.gov/nucest/BY999645.1 http://togows.dbcls.jp/entry/nucest/BY999645.1 (略) http://www.ncbi.nlm.nih.gov/nucgss/AF416125.1 http://togows.dbcls.jp/entry/nucgss/AF416125.1 (略) http://www.ncbi.nlm.nih.gov/genome/sts/sts.cgi?uid=47999 http://togows.dbcls.jp/entry/unists/47999

  • さーち

http://togows.dbcls.jp/search/ncbi-pubmed/cerebral+infarction+treatment http://togows.dbcls.jp/search/ncbi-books/

エントリ検索

http://togows.dbcls.jp/search/ の対応データベース

ncbi-pubmed	pubmed
ncbi-books
ncbi-cancerchromosomes
ncbi-cdd
ncbi-domains
ncbi-gap
ncbi-gds
ncbi-gene	gene
ncbi-genome
ncbi-genomeprj
ncbi-gensat
ncbi-geo
ncbi-homologene	homologene
ncbi-journals
ncbi-mesh	mesh
ncbi-ncbisearch
ncbi-nlmcatalog
ncbi-nuccore	nuccore
ncbi-nucest	nucest
ncbi-nucgss	nucgss
ncbi-nucleotide	nucleotide
ncbi-omia
ncbi-omim	omim
ncbi-pcassay
ncbi-pccompound
ncbi-pcsubstance
ncbi-pmc
ncbi-popset
ncbi-probe
ncbi-protein	protein
ncbi-proteinclusters
ncbi-snp	snp
ncbi-structure
ncbi-taxonomy
ncbi-toolkit
ncbi-unigene
ncbi-unists
ebi-embl	embl
ebi-uniprot	uniprot
ebi-2can
ebi-arrayexpress-experiments
ebi-arrayexpress-genes
ebi-arrayexpress-repository
ebi-astd
ebi-biomodels
ebi-chebi
ebi-ebiweb_staff
ebi-emblcds
ebi-embldeleted
ebi-emblnew_ann_con
ebi-emblnew_con
ebi-emblnew_standard
ebi-emblnew_wgs
ebi-emblrelease_ann_con
ebi-emblrelease_con
ebi-emblrelease_standard
ebi-emblrelease_wgs
ebi-ensembl
ebi-go
ebi-groups
ebi-intact-experiments
ebi-intact-interactions
ebi-intact-interactors
ebi-integr8
ebi-intenz
ebi-interpro
ebi-mainweb
ebi-medline
ebi-msdchem
ebi-msdpdb
ebi-patentdb
ebi-pride
ebi-reactome
ebi-resid
ebi-sbo
ebi-taxonomy
ebi-uniparc	uniparc
ebi-uniref100	uniref100
ebi-uniref50	uniref50
ebi-uniref90	uniref90
kegg-compound	compound
kegg-drug	drug
kegg-enzyme	enzyme
kegg-genes	genes
kegg-glycan	glycan
kegg-orthology	orthology
kegg-reaction	reaction
kegg-module	module
kegg-pathway	pathway

これらについて、例を http://togows.dbcls.jp/site/en/rest.html に掲載する。

DDBJ, PDBj については search 対応してから例を載せる。

ステータス確認

http://togows.dbcls.jp/status で監視している DDBJ, PDBj, KEGG の SOAP サービスに加え、 上記の entry/search サービスが正常に稼働しているかどうかを確認する仕組みを作る。

たとえば http://togows.dbcls.jp/entry/ncbi-gene/338 は現時点で

1: id: 339 Error occurred: NCBI C++ Exception:
    Error:        HTML(CHTMLException::eTableCellUse)
"/pubmed_gen/rbuild/version/20100915/entrez/c++/src/html/html.cpp", line 1272:
ncbi::CHTML_table_Cache::GetCellNode() --- invalid use of big table cell

のようなエラーが NCBI 側で発生し、そのまま表示されていたが、現状ではこれに気付けない。

JSONの確認

現在 TogoWS では Ruby の to_json で出来たオブジェクトを JSON フォーマットとして返しているが、 クオートやエスケープを含め valid でない場合がある可能性が指摘された(西田 -- 具体例希望)ので確認する。

TogoDB

  • TogoDB では

ユーザは表計算ソフトなどで整形したCSV形式のデータをアップロードする。 サーバは自動的にデータを解析しRDBのスキーマを生成する。 ユーザはスキーマのデータ型を確認し、インポートする。 完了すると、ユーザはそのデータベースを確認し、問題なければ公開することができる。 各カラムのラベルやリンク情報を調整したり、検索用インデックスの作成、 HTMLやCSSを使ったデータベースの表示方法のカスタマイズ、 特定のユーザとの共有などをカスタマイズすることができる。

  • TogoDB のウリを再考し来月をメドにまとめる

インポートされたデータベースはウェブ画面から一覧が表示され、検索しなくてもデータベースの中身をすぐに把握することが出来る。 自分のデータベースはウェブ上から編集することができる。 検索はキーワード検索や複合検索による数値や正規表現などによるフィルタリングが可能。 QuickLook 機能を使うと、エントリをクリックすることなくカーソルキーだけで次々と閲覧することが出来る。 絞り込み検索した結果が数百件あったばあいでも容易にブラウズすることが可能である。 全データもしくは絞り込み検索結果に該当するエントリをダウンロードすることも容易でローカルな表計算ソフトに取り込んで利用することができる。 ダウンロードしたデータを整形したり新しいデータを加え、再びアップロードすることで新しいデータベースを作ることができる。 各セルの値を利用してTogoDBの他のデータベースや外部のデータベースにリンクすることができるため、Linked Data を作り易い。

ウェブ上のスプレッドシートアプリと異なるのは、各行がレコードとしてデータベース化され固有の ID を持つことである。

TogoDB は DBCLS のウェブサイトからフリーで利用出来る。 また、TogoDBのソースコードはRuby on Rails のプラグインとして作られたオープンソースソフトウェアなので、 ユーザが自前のサーバを立てることも可能。

エンベッド機能の完成とリリース

JSONP/Flexigrid による外部サイトへの TogoDB テーブルの提供

デザイン面の見直し

インポート手順、データベース管理、メタデータ、データ表示各部分について HTML/CSS を完全にやりなおす。QuickLook と Show も同一 partial を使う。

リリース機能の提供

CSV, JSON, RDF, FASTA での定期ダンプ機能、動的ダンプとキューイング、などを完成。

メタデータ管理

データベース全体に関わる著作権者やライセンスなどの情報をデータベースのメタデータとして入力することができるようにしたい (受け入れDBで使っているそれ以外のメタデータ管理とは分離したい)。

  • データベース名 - dbname
  • 作成者 / 作成機関 - creator
  • 連絡先(メール、電話、住所、担当者名) - email, phone, address, name
  • 概要 - description
  • ライセンス(選択項目からCCが確定するUIに改善)- license
  • 参考文献 - references
  • カテゴリ(データタイプ)- category
  • エントリ数?

データベースの各カラムには以下のようなメタデータをつけることができるようにしたい。

  • name (schema 上のカラム名)
  • type (schema 上の型名)
  • label (表示上のカラム名)
  • entry_id (ラジオ - このカラムの値をエントリIDとして利用。record name のこと)
  • primary_key (ラジオ - このカラムの値を primary key として利用)
  • search (フラグ - このカラムの値を標準検索で利用)
  • advanced_search (フラグ - このカラムの値を複合検索で利用)
  • xref (他のデータベースへのリンク、他テーブルへのリンク - join機能を移行)
  • sanitize (フラグ - このカラムの値をエスケープしない)
  • prefix (このカラムの値につける prefix <a href=""> など)
  • suffix (このカラムの値につける suffix </a> など)
  • list_order (リスト表示のデフォルト表示順)
  • show_order (show表示のデフォルト表示順)
  • dump_order (ダウンロード用ファイルのデフォルト表示順)