糖鎖情報のRDF連携について
提供:TogoWiki
目次 |
糖鎖関連遺伝子のデータベース
- 糖鎖関連遺伝子のデータベース、GGDB(産総研で開発)
- RDF化されている
- RefSeqのリソースURI が使われている。ex. http://identifiers.org/refseq/NP_003024
- UniProt のTaxonomy URI が使われている。ex. http://purl.uniprot.org/taxonomy/9606
- UniProt で利用されているアクセッション番号を含んだ URI は含まれていなかった。
GGDBのエンドポイントについて
GGDBのエンドポイントは、2017/5/16現在公開されていない。
UniProtとの連携を探る
RefSeqのIDから行けるか?
例として、ST3GAL1を例として UniProt のRDFを見てみる。
- UniProtの検索フォームに、「ST3GAL1」のみを突っ込んだら、当たり前だが、3桁の結果が出てきたので、「NP_003024」をクエリとして投げた。
- Q11201を選択し、エントリーのRDFを見てみる。
- http://identifiers.org/refseq/NP_003024 の記述は、UniProt のRDFでは見つからなかった。
- NP_003024.1というバージョンが入っているものが URIとして利用されていた。
- バージョン情報を含んだURIであれば、連携ができる。
最新のバージョンは、 togows.org を使って取ることができる。
Gene symbol を UniProt Accession にコンバートしてみる
- IDをコンバートできるサイト
- http://biodb.jp/
- ID Converterで、HUGO gene symbol —> UniProt Accession ができる
- GGDB の HUGO gene symbol から UniProt Accession へ変換してみる
- ST3GAL1
- --> Q11201 (homo sapiense)
- ST3GAL1
- 他の gene symbolからでも、変換してみる
- FUT9
- --> B4DEW1 (homo sapiense)
- --> Q5Q0U2 (homo sapiense)
- --> Q9BUV6 (homo sapiense)
- --> Q9Y231 (homo sapiense)
- FUT9
- gene symbolで、対応を取るだけなら、コンバーター使わなくても、SPARQLの文字列マッチでできるはず。
SPARQL クエリ
対応を取るための、sparql クエリをつくる。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> CONSTRUCT{ ?glycogene a ggdb:Glycogene. ?glycogene ggdb:has_gene ?up_gene. ?up_gene a up:Gene. } WHERE{ ?glycogene a ggdb:Glycogene; ggdb:has_gene ?gene. ?gene a edam:data2299; rdfs:label ?gene_name. SERVICE SILENT <http://sparql.uniprot.org> { ?up_gene a up:Gene; skos:prefLabel ?gene_name. } }
クエリが正しいかどうか、未確認。。。
- スクリーニングには、いいかもしれない
- キュレーションとしての使用はできない
Gene symbolで連携
2017/5/15-16記述
Federated query
docker-virtuosoを使ってローカルで、federated queryを行った。
VirtuosoのConductorにある、ISQLフォームに以下を実行。
grant select on "DB.DBA.SPARQL_SINV_2" to "SPARQL"; grant execute on "DB.DBA.SPARQL_SINV_IMP" to "SPARQL";
UniProtのエンドポイントで使えるクエリを拾ってきたので、以下のクエリを実行。
SELECT * WHERE { SERVICE <http://sparql.uniprot.org/sparql> { <http://purl.uniprot.org/uniprot/P38398> ?p ?o . } }
結果、エンドポイントからの検索結果が表示された。
p o http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://purl.uniprot.org/core/Protein http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/mim/114480 http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/mim/167000 http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/mim/604370 http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/mim/614320 http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/intact/P38398 http://www.w3.org/2000/01/rdf-schema#seeAlso http://purl.uniprot.org/iptmnet/P38398 ...
GGDBのRDFをアップロード
GGDB(FUT9)のRDFをcURLを使って、ローカルのVirtuosoにアップロードする。
- FUT9 : Alpha-(1,3)-fucosyltransferase 9
まずは、GGDB(FUT9)のRDFをダウンロード
$ wget http://acgg.asia/ggdb2/gg008.ttl
TTLをcURLで、ローカルのVirtuosoへアップロード (PUT)
参考:https://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtGraphProtocolCURLExamples
$ curl --digest --user dba:dba --verbose --url "http://localhost:8890/sparql-graph-crud-auth?graph-uri=http://rdf.glycoinfo.org/ggdb/fut9" -T gg008.ttl
RDFが入った模様
$ curl --verbose --url "http://localhost:8890/sparql-graph-crud?graph-uri=http://rdf.glycoinfo.org/ggdb/fut9" * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8890 (#0) > GET /sparql-graph-crud?graph-uri=http://rdf.glycoinfo.org/ggdb/fut9 HTTP/1.1 > Host: localhost:8890 > User-Agent: curl/7.51.0 > Accept: */* > < HTTP/1.1 200 OK < Server: Virtuoso/07.20.3217 (Linux) x86_64-unknown-linux-gnu < Connection: Keep-Alive < Date: Mon, 15 May 2017 08:08:48 GMT < Accept-Ranges: bytes < Content-Type: text/turtle; charset=UTF-8 < Content-Length: 36092 < @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix up: <http://purl.uniprot.org/core/> . <http://purl.uniprot.org/taxonomy/9606> rdf:type up:Taxon . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . <http://purl.uniprot.org/taxonomy/9606> rdfs:label "Homo sapiens" ; rdfs:seeAlso <http://identifiers.org/taxonomy/9606> . <http://acgg.asia/ggdb2/img/structure/175_JCGG-STR029404.png> rdfs:label "175_JCGG-STR029404.png" . ...
GGDB RDF から rdfs:labelの"FUT9"を取り出す
2017/5/15記述
GGDBのRDF (FUT9) に記述されている "rdfs:label" から、"FUT9" をSPARQLで取り出せることを確認する。
以下のクエリで"FUT9"を取得。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> select distinct * from <http://rdf.glycoinfo.org/ggdb/fut9> where{ ?glycogene a ggdb:Glycogene; ggdb:has_gene ?gene. ?gene sio:SIO_000008 ?gene_name. ?gene_name a edam:data_2299. ?gene_name rdfs:label ?gene_name_label. }
以下が、結果。
glycogene gene gene_name gene_name_label http://acgg.asia/ggdb2/gg008 http://acgg.asia/ggdb2/gg008#gene http://acgg.asia/ggdb2/gg008#genename "FUT9"
UniProtのエンドポイントから、"FUT9"を見つける
2017/5/16記述
UniProtのエンドポイントから、"FUT9"のラベルを取り出すクエリを作り、結果を確認する。
SELECT * WHERE { SERVICE <http://sparql.uniprot.org/sparql> { <http://purl.uniprot.org/uniprot/Q9Y231> up:encodedBy ?gene . ?gene a up:Gene. ?gene skos:prefLabel ?gene_label. } }
以下が、結果。"FUT9"が取れた。
gene gene_label http://purl.uniprot.org/uniprot/Q9Y231#gene-MD57B4A70848C9654350A86951FBD37C6CC "FUT9"
Federated query その2
GGDB (FUT9) のRDFに記述されている "FUT9" のラベルから、UniProtのエンドポイント内で紐づいてる情報を取得する。
- 最初は、FROM句でグラフ名を指定していて、うまく行かなかったが、GRAPH句に変えることで解決できた。
- 参考:SPARQLthon20/FederatedQueryTips
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> select distinct ?gene_name_label ?p ?up_gene where{ GRAPH <http://rdf.glycoinfo.org/ggdb/fut9>{ ?glycogene a ggdb:Glycogene. ?glycogene ggdb:has_gene ?gene. ?gene sio:SIO_000008 ?gene_name. ?gene_name a edam:data_2299. ?gene_name rdfs:label ?gene_name_label. } SERVICE <http://sparql.uniprot.org/sparql> { ?up_gene ?p ?gene_name_label. } }
以下が、Federated queryの実行結果。"FUT9"のラベルから、UniProtのエンドポイント内で紐づく情報を取得できた。
gene_name_label p up_gene "FUT9" http://www.w3.org/2000/01/rdf-schema#comment http://purl.uniprot.org/hgnc/4020 "FUT9" http://www.w3.org/2000/01/rdf-schema#label http://purl.uniprot.org/uniparc/UPI00072CFB73 "FUT9" http://www.w3.org/2000/01/rdf-schema#label http://purl.uniprot.org/uniprot/A0A0S7I5K1 "FUT9" http://www.w3.org/2004/02/skos/core#altLabel http://purl.uniprot.org/uniprot/Q8UWC1#gene-MD5C374E2557F7C5C0DAB401B7CCA409039 "FUT9" http://www.w3.org/2004/02/skos/core#prefLabel http://purl.uniprot.org/RefSeq/XP_007052844.1#gene-FUT9 .... (prefLabel を使った記述が続く・・) "FUT9" http://www.w3.org/1999/02/22-rdf-syntax-ns#object http://purl.uniprot.org/uniprot/#_13E673249AF8AF8F_FFA56BCD0169E5A3_FUT9 .... (object を使った記述が続く・・) "FUT9" http://purl.uniprot.org/core/fullName http://purl.uniprot.org/uniprot/A0A0S7I5K1#SIPE22BE32823D800F3 "FUT9" http://purl.uniprot.org/core/structuredNameType http://purl.uniprot.org/EMBL_TSA/JAO48485.1#name-FUT9 "FUT9" http://purl.uniprot.org/core/structuredNameType http://purl.uniprot.org/embl-cds/AIC55837.1#name-FUT9
Federated query その3
UniProtの "up:Protein" クラスを指定した場合、このクラスのインスタンスはどうなっているのか?
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> SELECT DISTINCT ?gene_name_label ?up_gene ?up_protein ?class WHERE{ GRAPH <http://rdf.glycoinfo.org/ggdb/fut9>{ ?glycogene a ggdb:Glycogene. ?glycogene ggdb:has_gene ?gene. ?gene sio:SIO_000008 ?gene_name. ?gene_name a edam:data_2299. ?gene_name rdfs:label ?gene_name_label. } SERVICE <http://sparql.uniprot.org/sparql> { ?up_gene skos:prefLabel ?gene_name_label. ?up_gene a up:Gene. ?up_protein up:encodedBy ?up_gene. VALUES ?class { up:Protein } ?up_protein a ?class. } }
実行結果。
gene_name_label up_gene up_protein class "FUT9" http://purl.uniprot.org/uniprot/B4DEW1#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/B4DEW1 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q5Q0U2#gene-MD5FF41112C1D33A0108C98297E620AC836 http://purl.uniprot.org/uniprot/Q5Q0U2 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q9XI77#gene-MD55E3FCA3F8163BAE07C399E9B0898E109 http://purl.uniprot.org/uniprot/Q9XI77 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q9Y231#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/Q9Y231 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/A0A0M3LHU2#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/A0A0M3LHU2 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/A0A0M3LIL7#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/A0A0M3LIL7 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/A0A0S7I5K1#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/A0A0S7I5K1 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/A0A0M3LI81#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/A0A0M3LI81 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/A0A0M3LJH3#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/A0A0M3LJH3 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q659L0#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/Q659L0 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q659L1#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/Q659L1 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q8HZR2#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/Q8HZR2 http://purl.uniprot.org/core/Protein "FUT9" http://purl.uniprot.org/uniprot/Q9JIG1#gene-MD57B4A70848C9654350A86951FBD37C6CC http://purl.uniprot.org/uniprot/Q9JIG1 http://purl.uniprot.org/core/Protein .....
- 絞り込みする必要があるが、何で絞り込むか?
Gene IDで連携
2017/5/16記述
GGDBでGene IDを取得するクエリ
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> SELECT DISTINCT * WHERE{ GRAPH <http://rdf.glycoinfo.org/ggdb/fut9>{ ?gene_id a edam:data_2295. ?gene_id dcterms:identifier ?id. ?gene_id rdfs:seeAlso ?ncbi_gene. } }
UniProtのエンドポイントで、Gene ID (10690) を取得するクエリ
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> SELECT DISTINCT * WHERE{ SERVICE <http://sparql.uniprot.org/sparql> { <http://purl.uniprot.org/uniprot/Q9Y231> rdfs:seeAlso ?ncbi_gene. } }
Gene IDで結合するクエリ
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX up: <http://purl.uniprot.org/core/> PREFIX ggdb: <http://purl.jp/bio/12/ggdb/2015/6/owl#> PREFIX edam: <http://edamontology.org/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX sio: <http://semanticscience.org/resource/> SELECT DISTINCT * WHERE{ GRAPH <http://rdf.glycoinfo.org/ggdb/fut9>{ ?gene_id a edam:data_2295. ?gene_id dcterms:identifier ?id. ?gene_id rdfs:seeAlso ?ncbi_gene. } SERVICE <http://sparql.uniprot.org/sparql> { ?up_protein rdfs:seeAlso ?ncbi_gene. } }
結果
gene_id id ncbi_gene up_protein http://acgg.asia/ggdb2/gg008#gene_id "10690"^^<http://www.w3.org/2001/XMLSchema#int> http://identifiers.org/ncbigene/10690 http://purl.uniprot.org/uniprot/Q9Y231