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

今後のグラフ構成

グラフ一覧

元データ グラフ名
/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.oboncbitaxon.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 との変更点

廃止されるリンク

これまで、「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 では

ということで比較的キレイに整備されてはいる。とくに miriam.resource があるのは助かる。欠点としては、

  • 現状では、リンクしたい URL すべてに用意されているわけではない
  • miriam.* や MIR:* という prefix が冗長かつちょっと名前が気にくわない
  • rapper で Turtle に変換した時に rdf:type が "" になってしまったりパースエラーになったりする(rapper のバグ? or RDF/XML の書式がおかしい?)

といった問題があるが、現状ではこれを使うしかない。

 % 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 に変換した、

それぞれ 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 の内部パイプラインへの採用

など。