Hatena::Grouplifesciencedb

ゲノム周辺 このページをアンテナに追加 RSSフィード

2009-04-24

セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ

|  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺 を含むブックマーク はてなブックマーク -  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺  セマンティックウェブの勉強会で RDF と SPARQL について調べたまとめ - ゲノム周辺 のブックマークコメント

Briefings in Bioinformatics Special Issue: Semantic Web for Helth Care and Lifesciences: A Review of the State of the Art を題材にセマンティックウェブの勉強会をおこないました。担当した論文が Named Graph をつかって複数のデータソースをまたいだバージョンや更新に関する由来情報の保持、管理をあつかうものでしたので、RDF、Named Graph、SPARQL について調べてみました。

screenshot screenshot


由来情報を扱うシナリオ

Linked data and provenance in biological data webs | Briefings in Bioinformatics | Oxford Academic では、FlyBase が更新されたときに、ある遺伝子が二個の遺伝子に定義されなおされたということを例として、その影響として、FlyBase のその遺伝子と関連づけられていた外部データベースレコードが、更新後にFlyBaseと関連が失われることをあげていました。

遺伝子は、実験手法や研究の進展にしたがって定義しなおされるものなので、このようなことはつねにおこりえます。アセンブリが更新された、クローンが更新された、cDNA がとれたなどなど。また、ゲノムデータベースがあり、独立して表現系の画像を収集するプロジェクトがあったり、さらに別にラージスケールなデータ収集プロジェクト(相互作用や発現など)があるのがいまどきです。このように、独立してゲノムスケールのデータを収集管理するプロジェクトがある状況では、それぞれが遺伝子 ID をりようするので、データソース間で、遺伝子IDとデータの更新と対応関係の保持はだれがおこなうのかというと、実行するところもあれば、おこなわないところもあります。そこで、第三者的にそれを実現するには、RDF 技術をつかえばいいよ、というシナリオです。

第三者的に維持するといのは、遺伝子アノテーションの分野でもおこなわれているアプローチです。遺伝子アノテーションでは、GenBank レコードが著作者しか更新できないという制限から、遺伝子アノテーションといったどんどん更新されるべきデータは第三者がおこなうというのがよいとされています。


RDF

RDF(Resource Description Framework)は、リソースを記述する枠組みです。非常に簡便にいうと、リソースとして IRI やリテラルを使用し、リソース間の関係はOWLなどのオントロジーをつかっています。リソースの記述には、トリプル(主語、述語、目的語)という形などがあります。たとえば、ORF名 slr1311 と遺伝子名 psbA2 の関係は、slr1311 hasGeneName psbA2 のように記述します。slr1311 が主語、hasGeneName が述語、psbA2 が目的語です。英語教育でいうところの SVO型。

以下は、gene1 と gene2、gene3 が owl:sameAs という関係であることを記述している RDF です。

 1: @prefix owl: <http://w3.org/2002/07/owl#> .
 2:
 3: gene1 owl:sameAs gene2 .
 4: gene1 owl:sameAs gene3 .

1行目では、以後に現れる owl: が http://w3.org/2002/07/owl# であることを宣言しています。w3.org/2002/07/owl は OWL を定義している XML 書類です。sameAs の定義はつぎのようになっていました。

71: <rdf:Property rdf:ID="sameAs"> 
72:   <rdfs:label>sameAs</rdfs:label>
73:   <rdfs:domain rdf:resource="#Thing"/>
74:   <rdfs:range rdf:resource="#Thing"/>
75: </rdf:Property>

3行目で主語 gene1 は目的語 gene2 と述語 owl:sameAs であると記述しています。行末にはピリオドが必要です。

主語や述語は IRI(International Resource Identifier)です。IRI は URIUnicode/ISO 10646 に拡張したものです。URIURL + URN です。

述語にはオントロジーを用います。OWL(Web Ontology Language)やDCMI(Dublin Core Metadata Initiative)などが利用されています。owl:sameAs や dcterms:created、dcterms:isPartOf、dc:creator、dcterms:hasPart などがあります。

さらに、型情報としては、XMLSchema などを利用することができます。たとえば、"2009-01-01" を xsd:date として扱うのには:

"2009-01-01"^^xsd:date

のように表現します。


Named Graph

Named Graph は複数の RDF graph を単一の書類のように保持や名付けをするものです。ここでの目的では、個々のリソースにあるRDFを単一の書類のように扱うのに使用していますようです。

論文での Named RDF Graph の例

 1: @prefix openflydata: <http://openflydata.example.com/genenames/> .
 2: @prefix myfly: <http://myfly.example.com/genenames/> .
 3: @prefix owl: <http://www.w3.org/2002/07/owl#> .
 4: @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 5: @prefix dw: <http://purl.org/net/datawebs/provenance/> .
 6: @prefix dcterms: <http://purl.org/dc/terms/> .
 7: @prefix : <http://flylink.example.com/genenamemapping/> .
 8:
 9: :GeneNameMappingGraph-Version-1 {
10:   openflydata:gene1 owl:sameAs myfly:gene1 .
11:   openflydata:gene2 owl:sameAs myfly:gene2 .
12:
13:   openflydata:gene1 owl:differentFrom myfly:gene2 .
14:   openflydata:gene2 owl:differentFrom myfly:gene1 .
15:
16:   :GeneNameMappingGraph-Version-1
17:     dcterms:created "2008-01-01"^^xsd:date ;
18:     dw:versionNumber "1" ;
19:     dw:derivedFrom <http://openflydata.example.com/version1> ;
20:     dw:derivedFrom <http://myflydata.example.com/version1> .
21: }

8行目の :GeneNameMappingGraph-Version-1 がグラフ名。15-19行目はセミコロンをつかったトリプルの主語の省略表記。主語 :GeneNameMappingGraph-Version-1 に対して4個の述語と目的語があります。


SPARQL

SPARQL(SPARQL Protocol and RDF Query Language)は、RDF への問い合わせ言語です。Apache Jena - にそってみました。SQL に似た文法です。

SPARQLの例:

 1: SELECT * 
 2: WHERE { ?subject owl:sameAs ?object . }

?subject と ?object変数、出力される変数は * なのですべて、マッチ条件は、述語が owl:sameAs 。これを上記の named RDF graph に対して問い合わせた仮想的な出力:

 1: -----------------------------------
 2: | subject           | object      |
 3: ===================================
 4: | openflydata:gene1 | myfly:gene1 |
 5: | openflydata:gene2 | myfly:gene2 |
 6: -----------------------------------

述語が owl:sameAs であるトリプルの主語が ?subject に、目的語が ?object に付置されています。

出力を主語だけにするのは、つぎのようになります。

 1: SELECT ?subject WHERE { ?subject owl:sameAs ?object . }

論文で扱っていた問い合わせ例:バージョン番号が "2" であるグラフの二つのリソース遺伝子gene1の述語(=マッピング)を問い合わせる:

 1: SELECT ?p
 2: WHERE {
 3:   GRAPH ?g {
 4:     openflydata:gene1 ?p myfly:gene1 .
 5:     ?g dw:versionNumber ''2'' .
 6:   }
 7: }

出力は、マッピング(?p)となります。

例その2:openflydata:gene2 遺伝子と myfly:gene2 のマッピングのバージョン番号(dw:versionNumber)とその作成日(dcterms:created)を問い合わせる:

 1: SELECT ?g ?p ?n ?date
 2: WHERE {
 3:   GRAPH ?g {
 4:     openflydata:gene2 ?p myfly:gene2 .
 5:     ?g dw:versionNumber ?n ;
 6:          dcterms:created ?date .
 7:   }
 8: }

出力は、グラフ名(?g)、マッピング(?p)、バージョン番号(?n)、作成日(?date)となります。


まとめ

  1. RDF技術をつかうと由来情報を保持、管理、検索することができる
  2. 導入コストは、検索の粒度(バージョンだけ必要か、更新理由や更新者が必要か)をコントロールしておこなうことができる
  3. はてなスーパーpre記法には rdf や sparql がない
  4. 個人的には、RDFをつかうとできること、あることをするのにRDFが適切なことがあるのはわかるけど、導入にはもやもやとした感情をもってしまう

つづいて、SPARQLの実装やバイオ系での RDF の利用について調査したいです。