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 (ダウンロード用ファイルのデフォルト表示順)