データベースのRDF化

提供:TogoWiki

(版間での差分)
移動: 案内, 検索
(SPARQL クエリの例)
(データの削除)
154行: 154行:
EOF
EOF
</pre>
</pre>
 +
 +
[[Category:bh10.10]]

2010年10月21日 (木) 02:43時点における版

ショートカット: http://wiki.lifesciencedb.jp/mw/index.php/BH10.10

目次

参加者

  • 金城玲
  • 村上勝彦

開始前の状況

PDBj と H-inv DBのRDF化

PDBj に関してはほぼ出来上がっている。

H-inv DBはこれから調べて考える。

やるべきことのリスト

  • OWL でオントロジーを定義する
  • データベースのデータをRDFに変換する。
  • RDF store にデータをロードする。
  • 適当なクエリを投げてみる。

以上。

PDBj の場合

  • PDBMLのスキーマ pdbx-v32.xsd がある。
  • スタイルシートを作って、pdbx-v32.xsd から pdbx-v32.owl (OWLオントロジー)を作る。
    • pdbx-v32.xsd -> (pdbx2owl.xsl) -> pdbx-v32.owl
  • スタイルシートを作って、pdbx-v32.xsd から RDFをつくるためのスタイルシートを作る。
    • pdbx-v32.xsd -> (pdbx2pdbml2rdf.xsl) -> PDBML2rdf.xsl
  • 前段階で生成されたスタイルシートをつかって、PDBMLをRDFに変換する。
    • 1gof.xml (一例) -> (PDBML2rdf.xsl) -> 1gof.rdf

H-invDB の場合

  • XML スキーマがないので、手でOWLオントロジーを書く必要がある?
  • とりあえず、HIPのXMLファイルを直接RDFに変換するXSLを書くことにする。

Use case

H-invDBとPDBをつないで面白いクエリを作る。

  • ある染色体領域にコードされている蛋白質でで構造が決定されているものをリストする。
  • あるいはその逆。

ちょっとした注意点

  • H-invDBではPDBのIDがchain IDやSCOPのドメイン IDを連結して書かれている(例:1a00A, 2bduA1など)。これは困る。
  • H-invDBのXMLにはバグがある。特殊文字がエスケープされていない。"&" とか "<" とか ">" とか"<gamma>" がある。

SPARQL クエリの例

H-invDB のとある染色体領域(CHROMOSOME-BAND)にある蛋白質でPDBエントリが存在するものを探して、PDBのアノテーションと一緒に列挙する。

prefix PDBo: <http://www.pdbj.org/schema/pdbx-v32.owl#>
prefix Hinv: <http://hinv.jp/hinv.owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?band ?pdbid ?title  where {
 ?s Hinv:CHROMOSOME-BAND ?band .
 ?s Hinv:STRUCTURE_DB-REFERENCE_PDB ?pdbid .
 ?pdbidU rdfs:sameAs ?pdbid .
 ?pdbidU PDBo:structCategory  ?struct .
 ?struct PDBo:struct.title ?title .
}

結果

  1. H-invDB の蛋白質データの一部 XPROTEIN_1 をとってきた。
  2. XPROTEIN_1 のバグを取った。
  3. XPROTEIN_1 全部のデータ(50000件)をロードした場合は transaction time out で結果が得られず。
  4. XPROTEIN_1 の一部(1264件)をロードした。それに含まれるPDBエントリは574エントリ。

参考文献

付録

H-invDB のHIPのXMLをRDFに変換するスタイルシート(一部アイテムのみ対応)


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
   version="2.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:PDBx="http://pdbml.pdb.org/schema/pdbx-v32.xsd"
   xmlns:Hinv="http://hinv.jp/hinv.owl#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   >
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/H-Inv">
    <rdf:RDF>
      <xsl:apply-templates/>
    </rdf:RDF>
  </xsl:template>
  <!-- 
example of URL for a HIP entry:
http://www.h-invitational.jp/hinv/protein/protein_view.cgi?hip_id=HIP000084307
    -->
  <xsl:template match="HIP">
    <rdf:Description rdf:about="http://www.h-invitational.jp/hinv/protein/protein_view.cgi?hip_id={H-INVITATIONAL-PROTEIN-ID}">
      <xsl:apply-templates/>
    </rdf:Description>
  </xsl:template>

  <xsl:template match="REPRESENTATIVE">
      <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="CHROMOSOME-NUMBER">
      <Hinv:CHROMOSOME-NUMBER>
	<xsl:value-of select="."/>
      </Hinv:CHROMOSOME-NUMBER>
  </xsl:template>
  <xsl:template match="CHROMOSOME-BAND">
      <Hinv:CHROMOSOME-BAND>
	<xsl:value-of select="."/>
      </Hinv:CHROMOSOME-BAND>
  </xsl:template>

  <xsl:template match="PROTEIN-STRUCTURE">
      <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="SECONDARY-TERTIARY-STRUCTURE">
      <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="STRUCTURE_DB-REFERENCE_PDB">
    <Hinv:STRUCTURE_DB-REFERENCE_PDB rdf:resource="http://www.pdbj.org/xpath/{substring(.,1,4)}"/>
  </xsl:template>

  <xsl:template match="*"/>

</xsl:stylesheet>

Virtuoso tips

データのロード

/tmp/kk.ttl にturtle formatのデータがあるとする。 "http://www.pdbj.org" という名前のグラフに三つ組みを 入れる。

 isql 1111 dba dba <<EOF
DB.DBA.TTLP_MT(file_to_string_output('/tmp/kk.ttl'), '' ,'http://www.pdbj.org',0);
checkpoint;
EOF

データの削除

"http://www.pdbj.org" という名前のグラフにあるデータをすべて削除する。

 isql 1111 dba dba <<EOF
sparql clear graph <http://www.pdbj.org>;
EOF
個人用ツール