SPARQLthon28/TogoGenome
提供:TogoWiki
目次 |
ゲノム RDF 真核対応
課題
真核生物のgeneにlocus_tagがない場合がある
原生生物だけの場合geneにlocus_tagがあり、TogoGenomeではorganism + locus_tagでgeneを識別しgeneレポートページのURIとしていた。
Uniprotとrefseqを繋ぐtgupグラフもこのURIを使用している。
http://togogenome.org/gene/103690:all1455
真核生物の場合はlocus_tagがないgeneも多く、URIの見直しをする必要がある。
- 提案
RefSeqID(バージョンなし) + geneのrdfs:labelの組み合わせをURIとする。
http://togogenome.org/gene/NC_000001:LOC102723747
URLを見て生物種が分かりやすいようにTaxonomyIDを入れてもよい
http://togogenome.org/gene/9606:NC_000001:LOC102723747
- 理由:
- geneのリソースにはinsdc:locus_tagまたはinsdc:geneが必ずついており、その値はgeneリソースのrdfs:labelとして記載されている。
同一RefSeqIDの範囲内ではrdfs:labelの値は一意である(現状のデータはこうなっているが、この規則があるかは不明。データ生成時チェックをする)
- URIの永続性を保つために、RefSeqIDのバージョンは省略する。NC_000001.11 => NC_000001
- geneのリソースにはinsdc:locus_tagまたはinsdc:geneが必ずついており、その値はgeneリソースのrdfs:labelとして記載されている。
以下検証用SPARQL
- geneの件数(12,605,375件)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 . }
- locus_tagプレディケートを持たないgeneの件数(1,492,118)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 . MINUS {?gene insdc:locus_tag ?locus_tag } }
- geneプレディケートを持たないgeneの件数(9,228,036)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 . MINUS {?gene insdc:gene ?gene_label } }
- locus_tagとgeneのどちらのプレディケートも持たないgeneの件数(0) = どちらかは必ずある
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 . MINUS {?gene insdc:locus_tag ?locus_tag } MINUS {?gene insdc:gene ?gene_label } }
- insdc2ttlでは、geneのrdfs:labelにlocus_tagかgeneかfeatureを使用するので、rdf:labelは必ずある。
(insdc2ttl.rb) puts triple(feature_id, "rdfs:label", quote(locus_tag || gene || feature))
- taxid + geneのrdfs:labelではgeneは一意に特定できない
このクエリはエンドポイントではタイムアウトするためisqlから実行する
・クエリ SPARQL PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?tax ?label (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 ; obo:RO_0002162 ?tax ; rdfs:label ?label . } GROUP BY ?tax ?label HAVING COUNT(DISTINCT ?gene) > 1 ORDER BY DESC(?cnt) ; ・実行方法 /data/store/[virtuoso_home]/bin/isql [port] [user] [pass] VERBOSE=OFF BANNER=OFF PROMPT=OFF ECHO=OFF BLOBS=ON ERRORS=stdout < uniq_gene_label.rq > uniq_gene_label.txt ・結果(106,880件、以下抜粋) http://identifiers.org/taxonomy/9913 TRNAC-GCA 60 http://identifiers.org/taxonomy/9913 TRNAG-CCC 60 http://identifiers.org/taxonomy/9913 TRNAE-UUC 58 http://identifiers.org/taxonomy/9913 TRNAC-ACA 57 http://identifiers.org/taxonomy/9913 TRNAW-CCA 54 http://identifiers.org/taxonomy/9913 TRNAG-UCC 46 http://identifiers.org/taxonomy/9913 TRNAE-CUC 42 http://identifiers.org/taxonomy/9913 TRNAK-UUU 42
refseq_id + geneのrdfs:labelでgeneが一意に特定できる=> その後、insdc2ttlの修正により一意に特定できないケースが出てきた RefSeq+geneラベルでgeneを一意に特定できない
・クエリ SPARQL PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?seq ?label (COUNT(DISTINCT ?gene) AS ?cnt) FROM <http://togogenome.org/graph/refseq> { ?gene rdfs:subClassOf obo:SO_0000704 ; obo:so_part_of ?seq ; rdfs:label ?label . } GROUP BY ?seq ?label HAVING COUNT(DISTINCT ?gene) > 1 ORDER BY DESC(?cnt) ; ・実行方法 /data/store/[virtuoso_home]/bin/isql [port] [user] [pass] VERBOSE=OFF BANNER=OFF PROMPT=OFF ECHO=OFF BLOBS=ON ERRORS=stdout < uniq_gene_label.rq > uniq_gene_label.txt ・結果(0件)= 同じrefseq_idの中ではgeneのrdfs:labelは重複しない
RefSeq+geneラベルでgeneを一意に特定できない
insdc2ttlの改修に伴い、TogoGenomeで使用する予定であったgeneの識別子”RefSeqID+geneラベル”では一意に識別することができなくなった。
同じRefSeqID+geneラベルを持つgeneでも複数のlocationに分かれているケースがあり、refseqグラフでは別のURIとして登録されている。
この二つのURIは同じNCBIのgeneIDを持ち、NCBIのページgene:100126533ではlocationA,locationBと表記されている。
location表記: NC_000001.11 (121016845..121016915, complement) , (16678271..16678341, complement)
- NC_000001.11.ttl のgeneラベル重複例 (抜粋)
<http://identifiers.org/refseq/NC_000001.11#feature:16678271-16678341:-1:gene.395> rdfs:label "TRNAG-CCC" . <http://identifiers.org/refseq/NC_000001.11#feature:121016845-121016915:-1:gene.1962> rdfs:label "TRNAG-CCC" .
スタンザでの課題と対応策
スタンザでは引数で一つのgeneURIが指定される事を前提に実装されているため、複数個のgeneURIの情報表示には対応できないものもある。
引数が複数のgeneURIに紐づく場合には、以下のいずれかの対応が必要になる。
- Stanza内で複数まとめて表示できるようにする
- Stanza内で表示するlocationをユーザに選択させる(個々のスタンザで選択操作が必要)
- TogeGenome側でユーザに選ばせる。
- Turtle生成時に同じラベルのgeneに連番を振って識別する(永続性のないURIになってしまう)
重複件数の調査
geneの識別子を"RefSeqID+gene"にした場合と、"TaxID+gene"にした場合に重複するURIがどの程度あるか調べた。
refseqグラフにある全gene数は 12,856,828 個
- 同じRefSeqID+geneラベルを持つgeneのリスト
geneID(RefSeqID+geneラベル)が重複するケースは7,722件、geneは32,431個 全件リスト
最大で一つのgeneIDに291個のURIが紐づくケースがある。NC_007115.6:trnag-gcc
TaxID RefSeqID:geneラベル 重複個数 //TaxID7955:ゼブラフィッシュ 7955 NC_007115.6:trnag-gcc 291 7955 NC_007115.6:trnak-uuu 274 7955 NC_007115.6:trnal-cag 272 7955 NC_007115.6:trnan-guu 262 7955 NC_007115.6:trnas-aga 256 (略)
- 同じRefSeqID+geneラベルを持つgeneのリスト(tRNA除外)
重複するgeneは、"trna"から始まるものが多く、アノテーションに”tRNAscan-SE”の文字が入っている
"trna"で始まるものを除外すると重複するケースは2,005件、geneは4,163個 全件リスト
9544 NC_007870.1:IGKC 8 9601 NC_012603.1:VWF 6 9823 NC_010461.4:DMD 5 9544 NC_007878.1:HNRPA1 5 9544 NC_007876.1:ZNF208 5 9544 NC_007860.1:TRB@ 5 7955 NC_007135.6:ptprma 5
いくつかピックアップして調べたが、NCBIのgeneIDが同一の場合も、異なる場合もあった。複数locationが同一geneとして管理されている理由は不明。
10116 NC_005101:Lphn2 (2) 171447
9601 NC_012613:PLXNB2 (2) 100172633
9544 NC_007870:IGKC (8) 701615 703375 708048 708861 709066 709162 709793 709986
9601 NC_012603:VWF (6) 100434817
9823 NC_010461:DMD (5) 497636
9544 NC_007860:TRB@ (5) 696752 697234 697466 700224 701745
7955 NC_007135:ptprma (5) 386769
- 同じTaxID+geneラベルを持つgeneのリスト
真核対応以前に使用していた"TaxID+geneラベル"をgeneの識別子として使用した場合、GenIDが重複するケースは111,092件、geneは253,943個 全件ファイル
最大で一つのgeneIDに526個のURIが紐づくケースがある。
TaxID geneラベル 重複個数 //TaxID7955:ゼブラフィッシュ、9913:牛、9940:羊 9913:TRNAC-GCA 526 9913:TRNAG-CCC 376 9940:TRNAC-GCA 317 7955:trnag-gcc 307 9925:TRNAC-GCA 301 (略)
- 同じTaxID+geneラベルを持つgeneのリスト(tRNA除外)
"trna"で始まるものを除外すると重複するケースは108,818件、geneは219,101個 全件リスト
9544:HNRPA1 29 9544:KRT18 24 9544:GAPDH 12 9544:SET 9 9544:LDHB 9
- [参考]重複個数カウント用SPARQL(数分掛かるためisqlで実行)
RefSeqID+Geneの一覧を求める
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?tax_no ?gene_id FROM <http://togogenome.org/graph/refseq> WHERE { ?gene rdf:type insdc:Gene . ?gene obo:so_part_of ?seq . ?refseq insdc:sequence ?seq . ?refseq insdc:sequence_version ?refseq_id. ?gene obo:RO_0002162 ?tax_id . ?gene rdfs:label ?gene_label . BIND (REPLACE(STR(?tax_id), "http://identifiers.org/taxonomy/", "") AS ?tax_no) BIND (CONCAT(STR(?refseq_id), ":", ?gene_label) AS ?gene_id) } # $ 71.sh isql < multiple_gene_nuc.sql > multiple_gene_nuc.result # delete header and footer # $ cat multiple_gene_nuc.result | awk '{print $1,$2}' | sort | uniq -c | sort -nr | awk '{if($1 > 1) print $2,$3,$1 }' > dup_nuc_gene_stats.txt
TaxID+Geneの一覧を求める
SPARQL PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/> PREFIX obo: <http://purl.obolibrary.org/obo/> SELECT ?gene_id FROM <http://togogenome.org/graph/refseq> WHERE { ?gene rdf:type insdc:Gene . ?gene obo:RO_0002162 ?tax_id . ?gene rdfs:label ?gene_label . BIND (CONCAT(REPLACE(STR(?tax_id), "http://identifiers.org/taxonomy/", "") , ":", ?gene_label)AS ?gene_id) } ; #usage: # $ 71.sh isql < multiple_gene_tax.sql > multiple_gene_tax.result # delete header and footer # $ cat multiple_gene_tax.result | sort | uniq -c | sort -nr | awk '{if($1 > 1) print $2,$1 }' > dup_tax_gene_stats.txt