BH16.12/LinkDB

提供:TogoWiki

移動: 案内, 検索

目次

PDBjとDDBJをつなぐ

UniProtのidmappingにPDB chain と insd protein_id の対応があるが、少し注意を要する。

いわゆるchain IDには auth_asym_idlabel_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/
個人用ツール