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に対応付けして利用したい。
- Affymetrix http://identifiers.org/affy.probeset/