BH12.12/SPARQLthon11/TogoGenome
提供:TogoWiki
TogoGenome のデータ更新にともなう TODO と移行パスの整理
目次 |
現状のエンドポイント構成
- /sparql -- 少しだけ古い RefSeq/UniProt データ、バージョンなしグラフ構成
- /sparql7os -- 現状 esm で使ってるバージョンつきグラフ構成
- /sparql7es -- 少しだけ古い EdgeStore データ
TODO
- EdgeStore のデータ更新にともなうSPARQLの変更
- Taxonomy のデータ更新にともなうSPARQLの変更
- 自作した taxonomy.owl に置き換えるのか OBO 版の ncbitaxon.owlとしばらく併存するのか
- taxonomy.owl にはもう問題点は残っていないかどうか
今後のエンドポイント構成
- /sparql7 -- 最新の RefSeq/UniProt データ + 自作 taxonomy.owl + 新しい EdgeStore データを、バージョンなしグラフ構成で全部まとめて入れる
- /sparql7upd -- その後の定期的なデータの更新は同じグラフ構成で upd にロードし、完了次第 /sparql7 にデータをコピー
- /sparql7dev -- 開発用に /sparql7 のコピーを保持、ヘビーなクエリで /sparql7 を落とさないで済むようにする
- /sparql, /sparql7os, /sparql7es -- SPARQL 書き換え等の移行が済めば停止しても大丈夫
TODO
- グラフ名を <http://togogenome.org/グラフ名/> から <http://togogenome.org/graph/グラフ名/> に変更
- UniProt の新リリースがでたら差し替え
- JBrowse のスタンザ作成
- 配列データと設定ファイルをどこに置くことにするか
今後のグラフ構成
グラフ一覧
元データ | グラフ名 |
---|---|
/data/store/rdf/togogenome/refseq/prokaryotes.ttl/**/*.ttl | http://togogenome.org/graph/refseq/ |
/data/store/rdf/uniprot/current/uniprot_unzip/*.owl | http://togogenome.org/graph/uniprot/ |
/data/store/rdf/uniprot/current/uniprot_unzip/*.rdf | |
/data/store/rdf/togogenome/uniprot/current/prokaryotes/**/*.ttl | |
/data/store/rdf/togogenome/ontology/go/go.owl | http://togogenome.org/graph/go/ |
/data/store/rdf/togogenome/ontology/so/so.owl | http://togogenome.org/graph/so/ |
/data/store/rdf/togogenome/ontology/ncbitaxon/ncbitaxon.owl | http://togogenome.org/graph/ncbitaxon/ |
/data/store/rdf/togogenome/ontology/taxonomy/taxdump.owl | http://togogenome.org/graph/taxonomy/ |
/data/store/rdf/togogenome/ontology/MCCV/mccv.ttl | http://togogenome.org/graph/mccv/ |
/data/store/rdf/togogenome/ontology/MEO/meo.owl | http://togogenome.org/graph/meo/ |
/data/store/rdf/togogenome/ontology/MPO/mpo.owl | http://togogenome.org/graph/mpo/ |
/data/store/rdf/togogenome/ontology/GMO/gmo.ttl | http://togogenome.org/graph/gmo/ |
/data/store/rdf/togogenome/ontology/GOLD/gold2meo.ttl | http://togogenome.org/graph/gold/ |
/data/store/rdf/togogenome/ontology/GOLD/gold2taxon.ttl | |
/data/store/rdf/togogenome/ontology/GOLD/gold2mpo.ttl | |
/data/store/rdf/togogenome/ontology/GOLD/additional/*.ttl | |
/data/store/rdf/togogenome/ontology/BRC/*.ttl | http://togogenome.org/graph/brc/ |
/data/store/rdf/togogenome/ontology/GAZETTEER/gazetteer.owl | http://togogenome.org/graph/gazetteer/ |
/data/store/rdf/togogenome/ontology/GAZETTEER/gazetteer_lonlat.ttl | |
/data/store/rdf/togogenome/ontology/PDO/pdo.owl | http://togogenome.org/graph/pdo/ |
/data/store/rdf/togogenome/ontology/PDO/csso.owl | http://togogenome.org/graph/csso/ |
/data/store/rdf/togogenome/ontology/PDO/mapping.ttl | http://togogenome.org/graph/pdo_mapping/ |
http://biohackathon.org/resources/faldo | http://togogenome.org/graph/faldo/ |
/data/store/rdf/edgestore/*.ttl | http://togogenome.org/graph/edgestore/ |
(集計結果) | http://togogenome.org/graph/stats/ |
(自動生成) | http://togogenome.org/graph/ |
(これまでのグラフ構成は → SPARQLthon8でのまとめ を参照)
グラフ名とバージョン管理について
データセットのバージョン管理用メタデータとして、エンドポイント /sparql7os では試験的に
GRAPH <http://togogenome.org/graph/> { <http://togogenome.org/グラフ名/> dct:isVersionOf <http://togogenome.org/グラフ名/バージョン> . }
を定義し、グラフ名 <http://togogenome.org/graph/グラフ名/バージョン> に RDF データをインポートしていた。
SELECT * WHERE { GRAPH <http://togogenome.org/graph> { <http://togogenome.org/uniprot/> dcterms:isVersionOf ?g . } GRAPH ?g { <http://purl.uniprot.org/uniprot/XXXXX> ?p ?o . } }
しかし、SPARQL クエリの効率の問題で、新しいエンドポイント /sparql7 ではデータのインポート先のグラフ名自体にはバージョン情報を含まないことになった(現状の /sparql と同じ状態)。ただし、バージョン情報の管理は必要なので /sparql7 では、データのインポート時に↓の形式で記録を残しておくことにする。あわせて、http://togogenome.org/ 直下は environment, organism, gene など実際にウェブページにアクセスする URL としても利用される名前空間なので、汚さずに分離するためデータセットごとのグラフ名は <http://togogenome.org/graph/グラフ名/> に変更したい。
GRAPH <http://togogenome.org/graph/> { <http://togogenome.org/graph/グラフ名/> dct:isVersionOf <http://togogenome.org/graph/グラフ名/バージョン> . }
Taxonomy のデータ変更について
また、今回から ncbitaxon.owl (OBO) については、自前の taxdump.owl に移行することになった。
NCBI の元データ (taxdump) → EBI の taxonomy.dat → OBO の ncbi_taxonomy.obo → ncbitaxon.owl と変換される過程で
- OBO の ncbitaxon.owl がなかなか更新されない(2013/8 現在、2013/1 から更新されないままである)
- 変換をローカルで再検証すると2日間もかかったり → 独自にスクリプトを作ってみると 20〜30 分で完了
- かなりのデータが抜け落ちてしまっていたり → カルチャーコレクションなどのリソースや citation も拾える
- 使われている URI が他のデータセットと互換性がない → Identifiers.org をプライマリ URI に利用できる
といった問題点があったので taxdump2owl.rb を自作した。
NCBI の taxdump にも多少問題があり、特にリテラルのデータにコントロールコードが入っていたり改行位置が変だったりして汚い、文字コードが UTF-8 ではなく Latin-1 なので変換が必要、URL が書かれているカラムに URL として不正なものが多い(ので URI ではなく Literal として RDF 化せざるを得ない)などは今後改善されると良い。
TODO
- citation を別ファイルに分ける taxdump.owl → taxonomy.ttl (OWL) と citation.ttl (RDF)
- ATCC などカルチャーコレクションなどリソースの ID と URL の対応をいれた追加 RDF を生成する xref.ttl (RDF)
- tax_id と、cellular organism からの生物分類階層をフルパスで書いた対応 RDF を生成する taxpath.ttl (RDF)
EdgeStore のデータ変更について
EdgeStore は Identifiers.org の URI をプライマリにして、
- Identifiers.org の URI 同士を rdfs:seeAlso にてつなぐ
- Identifiers.org の URI と(オリジナルサイトなど)外部 URI とのリンクも rdfs:seeAlso でつなぐ
- Identifiers.org の URI は rdf:type <http://identifiers.org/db名> で区別できるようにする
- 外部 URI は dcterms:publisher <http://identifiers.org/miriam.resource/MIR:xxxxxxxx> で区別できるようにする
という方針にした。
これまでの EdgeStore との変更点
- 外部 URI 同士を rdfs:seeAlso で繋いでいたが廃止
- 外部 URI の rdf:type を <http://identifiers.org/miriam.resource/MIR:xxxxxxxx> にしていたが廃止
- <http://identifiers.org/miriam.resource/MIR:xxxxxxxx> は Class でなくインスタンスのため
- 代わりに Identifiers.org の RDF に合わせて predicate を rdf:type から dcterms:publisher に変更
- Identifiers.org の URI の rdf:type を <http://identifiers.org/miriam.collection/MIR:xxxxxxxx> にしていたが廃止
- <http://identifiers.org/miriam.collection/MIR:xxxxxxxx> は Class ではなくインスタンスのため
- 代わりに <http://identifiers.org/db名/> を使用
廃止されるリンク
これまで、「Id.org の URI 」と「外部 の URI」の様々な組み合わせでリンクを双方向に保持してたが、主語に「外部 の URI」を持たないことで冗長なデータを削除。
- ポイント:「外部 の URI」は主語には来ない
具体的には
- 「Id.org の URI」→「Id.org の URI」、「Id.org の URI」→「外部 の URI」、「外部 の URI」→「Id.org の URI」、「外部 の URI」→「外部 の URI」のリンクのうち、
- 「 外部 の URI」→「Id.org の URI」、「外部 の URI」→「外部 の URI」は削除
また rdf:type で使用するクラスの URI が変更され、「外部 URI」の区別では rdf:type の代わりに dcterms:publisher を使うため、SPARQL の URL パターンと predicate に変更が必要。
# 外部 URL から Id.org の URI をたどる SELECT * WHERE { VALUES ?ext { <http://www.uniprot.org/uniprot/XXXXX> } ?up rdfs:seeAlso ?ext . }
# UniProt から Pfam へのリンクをたどる SELECT * WHERE { VALUES ?up { <http://identifiers.org/uniprot/XXXXX> } ?up rdfs:seeAlso ?pfam . ?pfam rdf:type <http://identifiers.org/pfam/> . }
# UniProt から Pfam へのリンクをたどり、さらに外部 URL として Sanger へのリンクを取得 SELECT * WHERE { VALUES ?up { <http://identifiers.org/uniprot/XXXXX> } ?up rdfs:seeAlso ?pfam . ?pfam rdf:type <http://identifiers.org/pfam/> . ?pfam rdfs:seeAlso ?ext . ?ext dcterms:publisher <http://identifiers.org/miriam.resource/MIR:00100043> . }
変更理由と現状の Identifiers.org の RDF の問題
Identifiers.org では
- <http://identifiers.org/miriam.collection/MIR:xxxxxxxx> は Identifiers.org でユニーク化したデータベースのカタログ
- <http://identifiers.org/miriam.resource/MIR:xxxxxxxx> はユニーク化する前のリンク先(オリジナルサイト)のカタログ
ということで比較的キレイに整備されてはいる。とくに miriam.resource があるのは助かる。欠点としては、
- 現状では、リンクしたい URL すべてに用意されているわけではない
- miriam.* や MIR:* という prefix が冗長かつちょっと名前が気にくわない
- rapper で Turtle に変換した時に rdf:type が "" になってしまったりパースエラーになったりする(rapper のバグ? or RDF/XML の書式がおかしい?)
- <rdf:type rdf:about='http://identifiers.org/miriam.collection/' /> が RDF term about is forbidden as a property attribute. といわれる
といった問題があるが、現状ではこれを使うしかない。
% curl -H "Accept: application/rdf+xml" http://identifiers.org/miriam.collection/MIR:00000028 > MIR:00000028.rdf % rapper -i rdfxml -o turtle MIR:00000028.rdf % curl -H "Accept: application/rdf+xml" http://identifiers.org/miriam.resource/MIR:00100043 > MIR:00100043.rdf % rapper -i rdfxml -o turtle MIR:00100043.rdf
これらの URI は rdf:type <http://identifiers.org/miriam.collection/> や rdf:type <http://identifiers.org/miriam.resoruce/> が意図されているようなので <http://identifiers.org/db名/> や <http://identifiers.org/db名/id名> の rdf:type として使うには不適切。
一方で、特定のエントリを取得してみると
% curl -H "Accept: application/rdf+xml" http://identifiers.org/pfam/PF13895 <rdf:Description rdf:about='http://identifiers.org/pfam/PF13895'> : <rdf:type rdf:about='http://identifiers.org/pfam/' /> :
となっており、rdf:type は <http://identifiers.org/pfam/> が意図されているようなので、<http://identifiers.org/db名/id名> の rdf:type は <http://identifiers.org/db名/> とするのがよさそう。
現状では
% curl -H "Accept: application/rdf+xml" http://identifiers.org/pfam/ : <TITLE>Error 404 - Not Found</TITLE> :
となるためこの URI の定義はよくわからない状態ではあるが。
さらに、
% curl -H "Accept: application/rdf+xml" http://identifiers.org/pfam/PF13895 <rdf:Description rdf:about='http://identifiers.org/pfam/PF13895'> : <dcterms:source rdf:resource='http://identifiers.org/miriam.collection/MIR:00000028' /> : <rdfs:seeAlso> <rdf:Description rdf:about='http://pfam.sanger.ac.uk/family/PF13895/'> <dcterms:format>application/xhtml+xml</dcterms:format> <dcterms:publisher rdf:resource='http://identifiers.org/miriam.resource/MIR:00100043' /> </rdf:Description> </rdfs:seeAlso> :
ということでリンク先の URI は dcterms:publisher で miriam.resource の ID を使って定義されているので predicate を合わせるほうが良い。
新しい EdgeStore の RDF の具体的な例
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix dcterms: <http://purl.org/dc/terms/> . : # データベース自体の URI の定義はまだ Identifiers.org から取れないので追記する <http://identifiers.org/bind/> rdfs:seeAlso <http://identifiers.org/miriam.collection/MIR:00000001> . <http://identifiers.org/bind/> rdfs:label "BIND" . <http://identifiers.org/bind/> rdfs:comment "Biomolecular Interaction Network Database" . : # Identifiers.org の URI の rdf:type は <http://identifiers.org/db名/> を使う <http://identifiers.org/pfam/PF13895> rdf:type <http://identifiers.org/pfam/> . # ついでに Identifiers.org の RDF に準拠して冗長だが dcterms:source もつけておく <http://identifiers.org/pfam/PF13895> dcterms:source <http://identifiers.org/miriam.collection/MIR:00000028> . : # Identifiers.org の URI から外部 URI へのリンクは rdfs:seeAlso とし、リンク先は dcterms:publisher で区別する <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://pfam.sanger.ac.uk/family/PF13895> . <http://pfam.sanger.ac.uk/family/PF13895> dcterms:publisher <http://identifiers.org/miriam.resource/MIR:00100043> . : # 他の外部リンクも同様に(下記では dcterms:publisher の行は省略しているが実際のデータには含める) <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/T80683> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/ncbiprotein/21071030> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AA484435> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/T80683> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/ensembl/ENSG00000121410> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AK289417> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/refseq/XP_005258450> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/unigene/Hs.709582> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AK055885> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AK056201> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/BX325198> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/refseq/XM_005258393> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AK056201> . <http://identifiers.org/pfam/PF13895> rdfs:seeAlso <http://identifiers.org/insdc/AB073611> . : # Identifiers.org の URI の rdf:type は <http://identifiers.org/db名/> を使う <http://identifiers.org/taxonomy/100> rdf:type <http://identifiers.org/taxonomy/> . : # Identifiers.org の URI から外部 URI へのリンクは rdfs:seeAlso とし、リンク先は dcterms:publisher で区別する <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=100> . <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=100> dcterms:publisher <http://identifiers.org/miriam.resource/MIR:00100007> . <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://www.uniprot.org/taxonomy/100> . <http://www.uniprot.org/taxonomy/100> dcterms:publisher <http://identifiers.org/miriam.resource/MIR:00100019> . <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://bioportal.bioontology.org/ontologies/1132?p=terms&conceptid=obo:NCBITaxon_100> . <http://bioportal.bioontology.org/ontologies/1132?p=terms&conceptid=obo:NCBITaxon_100> dcterms:publisher <http://identifiers.org/miriam.resource/MIR:00100507> . : # 一部 miriam.resource がないため dcterms:publisher が付けられない外部リンクもある <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://purl.uniprot.org/taxonomy/100> . <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://www.ebi.ac.uk/ena/data/view/Taxon:100> . <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://purl.obolibrary.org/obo/NCBITaxon_100> . <http://identifiers.org/taxonomy/100> rdfs:seeAlso <http://www.ncbi.nlm.nih.gov/taxonomy/100> .
生物種ごとの RefSeq/UniProt データ配布について
Turtle に変換した、
- RefSeq の原核ゲノムエントリは http://ep.dbcls.jp/rdf/togogenome/refseq/current/ より
- UniProt のファイルは http://ep.dbcls.jp/rdf/uniprot/current/ より
それぞれ Taxonomy ID ごとに分割されたファイルとしてダウンロードすることも可能。
INSDC/RefSeq の RDF 化とオントロジー整備の継続課題
RefSeq から Turtle への変換は現状 refseq2ttl.rb, rs_id.json, ft_so.json を利用。
今後の課題は
- INSDC オントロジーの完成と refseq2ttl.rb コンバータへの取り込み
- Feature table の source_* と feature_* の predicate 名を変更
- INSDC エントリの Feature table 以外の部分のメタデータも RDF 化
- Identifiers.org の URI のクラス定義を再検討
- TogoWS の convert 機能にもコンバータの更新を適用
- DDBJ の内部パイプラインへの採用
など。