BH16.12/LinkDB
提供:TogoWiki
目次 |
PDBjとDDBJをつなぐ
UniProtのidmappingにPDB chain と insd protein_id の対応があるが、少し注意を要する。
いわゆるchain IDには auth_asym_id と label_asym_id の2種類がある。
- auth_asym_id -> 伝統的なchain IDで、登録者が勝手に決める。必ずしも A から始まらない。例: 2HKH (抗体) の L (light chain), H (heavy chain)
- label_asym_id -> PDB側で統一的に定めたchain ID で必ず A, B, C ... の順で割り振られる。2HKHでは auth_asym_id = L -> label_asym_id = A; auth_asym_id H -> label_asym_id = B になる。
auth_asym_id は分子をuniqueに定めない
例えば、ヘモグロビン 1HBB (ヘモグロビン)の場合、アルファ鎖のひとつは auth_asym_id = Aだが、それに結合しているヘム及び水分子もauth_asym_id = Aになる。label_asym_id は A (蛋白質)、E(ヘム)、I(水)となる。
したがって、auth_asym_id ではPDBエントリーの蛋白質分子に固有のURLが定まらない。(これが便利な場合もある:タンパク質とそのリガンドを同時に指定したい場合など。)
化合物固有のID entity_id
なおPDBには分子の化合物のIDとしてentity_id がある。上記 1HBBの場合、ヘモグロビンのα鎖は2分子含まれており、 label_asym_id = AとCが割り当てられているが、それらのentity_idは共に"1"にである。
- - http://rdf.wwpdb.org/pdb/1HBB/struct_asym/A
- - http://rdf.wwpdb.org/pdb/1HBB/struct_asym/C
- - http://rdf.wwpdb.org/pdb/1HBB/entity/1
chain IDによる指定はある意味"redundant"になる。これが良いか悪いかは目的次第だが、今回はredandancyを除いて entity_id を用いることにする。
伝統的chain IDと化合物IDの対応
[PDBj Mine SQL]サービスを使うと対応が取れる。
SELECT UPPER(e.pdbid), e.entity_id, UNNEST(string_to_array(e.pdbx_strand_id,',')) AS auth_asym_id FROM entity_poly e
[結果] (TSVでダウンロードできます。[REST API]もあります。)
label_asym_idとの対応も含めたい場合、
SELECT UPPER(e.pdbid), e.entity_id, a.id AS label_asym_id, UNNEST(string_to_array(e.pdbx_strand_id,',')) AS auth_asym_id FROM entity_poly e JOIN struct_asym a ON a.pdbid = e.pdbid AND a.entity_id = e.entity_id
[結果]
まとめ
このBHでは、PDBの化合物IDとINSDのprotein IDの対応をUniProt の提供する idmapping_selected.tab.gz から生成した。
SPARQL queries
RDF Portal のDDBJグラフにリンク情報を入れてもらった。
準備運動
- PDB関連のリンクを取り出す。
SELECT ?s ?o WHERE {?s <https://www.w3.org/2000/01/rdf-schema#seeAlso> ?o FILTER(regex(?s,'^http://rdf.wwpdb.org/pdb')) } LIMIT 100
(rdfs:seeAlso はURLベタ書きの必要あり。このポータルでは、rdfs:はhttpsではなくてhttpで定義されているため。)
- ヒトのBioSample を取り出す。
#DEFINE sql:select-option "order" PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT DISTINCT ?biosample WHERE { ?nucleotide a insdc:Entry. ?nucleotide insdc:dblink ?biosample. ?biosample a <http://ddbj.nig.ac.jp/ontologies/nucleotide/BioSample>. ?nucleotide insdc:sequence ?seq. ?source obo:so_part_of ?seq . ?source rdfs:seeAlso <http://identifiers.org/taxonomy/9606> . } limit 100 offset 1
- ヒトのBioSampleとprotein IDの対応
#DEFINE sql:select-option "order" PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?biosample ?nucleotide ?protein WHERE { ?nucleotide a insdc:Entry. ?nucleotide insdc:dblink ?biosample. ?biosample a <http://ddbj.nig.ac.jp/ontologies/nucleotide/BioSample>. ?nucleotide insdc:sequence ?seq. ?source obo:so_part_of ?seq . ?source rdfs:seeAlso <http://identifiers.org/taxonomy/9606> . ?feature obo:so_part_of+ ?seq. ?feature rdfs:seeAlso ?protein. ?protein a insdc:Protein. } limit 100 offset 1
- ヒトのBioSampleのタンパク質数
#DEFINE sql:select-option "order" PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?biosample count(distinct ?protein) WHERE { ?nucleotide a insdc:Entry. ?nucleotide insdc:dblink ?biosample. ?biosample a <http://ddbj.nig.ac.jp/ontologies/nucleotide/BioSample>. ?nucleotide insdc:sequence ?seq. ?source obo:so_part_of ?seq . ?source rdfs:seeAlso <http://identifiers.org/taxonomy/9606> . ?feature obo:so_part_of+ ?seq. ?feature rdfs:seeAlso ?protein. ?protein a insdc:Protein. } group by ?biosample having (count(distinct ?protein) > 1)
- - http://identifiers.org/biosample/SAMN02981219 は64479個のたんぱく質を含む。
- - http://identifiers.org/biosample/SAMN02981216 は709個
本番?
- BioSample - Nucleotide - INSDC Protein - PDBのリンクを取り出す
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT distinct ?biosample ?s as ?sequence ?protein ?pdb WHERE { ?pdb <https://www.w3.org/2000/01/rdf-schema#seeAlso> ?protein. filter(regex(?pdb,'^http://rdf.wwpdb.org/pdb')) #filter(?feature != ?pdb) ?s a insdc:Entry. #filter(?s = <http://identifiers.org/insdc/CP002459.1>) ?s insdc:dblink ?biosample. ?biosample a <http://ddbj.nig.ac.jp/ontologies/nucleotide/BioSample>. ?s insdc:sequence ?seq. ?feature obo:so_part_of+ ?seq. ?feature rdfs:seeAlso ?protein. ?protein a insdc:Protein. } limit 100 offset 1
- ヒトデータ(tax_id=9606)を絞り込む
#DEFINE sql:select-option "order" PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT DISTINCT ?biosample #distinct ?biosample ?nucleotide ?protein ?pdb WHERE { ?pdb <https://www.w3.org/2000/01/rdf-schema#seeAlso> ?protein. filter(regex(?pdb,'^http://rdf.wwpdb.org/pdb')) ?protein a insdc:Protein. ?feature rdfs:seeAlso ?protein. ?feature obo:so_part_of+ ?seq. ?seq obo:RO_0002162 ?taxonomy. ?nucleotide insdc:sequence ?seq. ?nucleotide a insdc:Entry. #values ?biosample {<http://identifiers.org/biosample/SAMN02981219>} values ?taxonomy {<http://identifiers.org/taxonomy/9606>} ?nucleotide insdc:dblink ?biosample. ?biosample a <http://ddbj.nig.ac.jp/ontologies/nucleotide/BioSample>. } limit 100
これで拾えるBioSampleは http://identifiers.org/biosample/SAMN02981216 のみ。なんで??? →RO:in_taxonを使うようにSPARQL修正した結果、2件ヒットになりました。
→ SPARQL再修正しました。BioSample件数:2件
- PDB chain IDから塩基配列の座標を取得する
#DEFINE sql:select-option "order" PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> PREFIX faldo: <http://biohackathon.org/resource/faldo#> SELECT distinct ?pdb ?organism ?nucleotide ?begin_position ?end_position IF(?direction_type = <http://biohackathon.org/resource/faldo#ReverseStrandPosition>, '-','+') as ?direction WHERE { values ?direction_type {faldo:ForwardStrandPosition faldo:ReverseStrandPosition } #values ?taxonomy {<http://identifiers.org/taxonomy/9606>} ?pdb <https://www.w3.org/2000/01/rdf-schema#seeAlso> ?protein. ?protein a insdc:Protein. filter(regex(?pdb,'^http://rdf.wwpdb.org/pdb')) ?feature rdfs:seeAlso ?protein. ?feature faldo:location ?location. ?location faldo:begin ?begin. ?location faldo:end ?end. ?begin faldo:position ?begin_position. ?end faldo:position ?end_position. ?begin a ?direction_type. ?begin faldo:reference ?reference. ?feature obo:so_part_of+ ?seq. ?nucleotide insdc:sequence ?seq. ?nucleotide a insdc:Entry. ?source obo:so_part_of ?seq . ?source rdfs:seeAlso ?taxonomy. ?source insdc:organism ?organism. #OPTIONAL {?source insdc:chromosome ?chromosome_name.} #?source insdc:chromosome ?chromosome_name. ?taxonomy rdf:type insdc:Taxonomy. } limit 100
TODO
- IPI http://identifiers.org/ipi/
- IPIは2011年に開発が終了しUniProtに引き継がれているが、IPIの配列が使われることが今でもあるので、配列相同性などでUniProtに対応付けして利用したい。
- NextProt
- ヒトのタンパク(断片含む)を網羅的に集めているので拾いたい(UniProt の RDF には NextProt へのリンクは含まれている → 逆はどうか?)
- Affymetrix http://identifiers.org/affy.probeset/