理研プレスリリース "仮想ラボセンター「SciNetS」の新たなウェブインターフェースを公開" へのリンクはこちらです。

仮想ラボセンター SciNetS へのリンクはこちらです。

論文:
N. Kobayashi, M. Ishii,S. Takahashi, Y. Mochizuki, A. Matsushima, and T. Toyoda,
Semantic-JSON: a lightweight web service interface for Semantic Web contents integrating multiple life science databases,
Nucl. Acids Res. (2011) 39 (suppl 2): W533-W540. doi: 10.1093/nar/gkr353


Semantic-JSON 仕様書

小林 紀郎, 石井 学, 豊田 哲郎,
生命情報基盤研究部門 (BASE), 理 化学研究所.

30 Dec 2009 (version 1.0; the original version)
2010年3月26日 (第1.1版)
2010年12月26日 (第1.2版; 最新版)
Creative Commons License

  1. はじめに
  2. 試行プログラム
  3. Semantic-JSONの設計
  4. Semantic-JSONのアーキテクチャ
  5. サイネスデータ構造
  6. Semantic-JSON URI
  7. プログラミング例
  8. 応用プログラム

1. はじめに

生命の総合的な理解のために、生命情報の統合は重要な研究課題です。セマンティックウエブはウエブ上に分散配置される異種データの統合を実現する技術の一つです。 セマンティックウエブでは、各データアイテムにはグローバルに唯一無二の識別子(URI)が付けられ、二つのデータアイテム間の関係を主語、述語、目的語を含む文で記述します。これらデータアイテムは、通常 resource description framework (RDF) と呼ぶ標準形式で記述されます。またRDFデータの検索にはSPARQLと呼ぶ標準クエリ言語が用いられます。 しかし、RDFとSPARQLの組み合わせは多くの計算リソースを要することから、生命情報科学者がよく用いるスクリプト言語を含む様々なコンピュータ言語でそのようなデータアイテムを効率よく扱うことは容易ではありません。

Semantic-JSONはRDFファイルをダウンロードしたりSPARQLを用いたクエリを実行することなくセマンティックウエブデータにアクセスできる軽量インターフェイスを提供する技術です。 より具体的には、Semantic-JSONはセマンティックウエブの複数のドメインを集め、統合された単一ドメインのデータリポジトリを用います。そして、軽量なJavaScript Object Notation (JSON)データ形式で記述されたセマンティックウエブデータを扱うRepresentational State Transfer (REST) ウエブサービスを提供します。 JSONは多くの著名なプログラミング言語でサポートされているので、Semantic-JSONのサービスインターフェイスは実装に用いるプログラミング言語に依存することなく定義されます。また、単一ドメインのセマンティックウエブデータリポジトリを、Scientists' Network System (SciNetS)と呼ぶ、ウエブ上の研究者が互いに協力してデータベースを作成、統合するためのフレームワークを活用し実現しました。さらに、SciNetS上でSemantic-JSONサーバインターフェイスを実装しました。

この文書はSemantic-JSONの設計について議論し、さらに幾つかのプログラミング言語で記述されたサンプルプログラムを用いてSemantic-JSON経由でSciNetSに登録されているセマンティックウエブデータを操作する方法を紹介します。

2. 試行プログラム

  1. ID rib158iが付けられたSciNetSウエブサイトの英語名(タイトル)をJSON形式で取得するSemantic-JSON命令
    http://semantic-json.org/json/name/en/rib158i

  2. ID cria93s1ria93s1iが付けられた、"Protocol of SHIRPA test in RIKEN"を主語に持つ文(主語、述語、目的語から構成されるセマンティック関係の記述)をJSON形式で取得するSemantic-JSON命令
    http://semantic-json.org/json/statements/cria93s1ria93s1i

  3. キーワード "arabidopsis" を持つタキソノミデータレコードを検索するSemantic-JSON命令
    http://semantic-json.org/json/searchInstances/crib166u26i?keyword=arabidopsis

  4. SciNetSウエブサイトの英語名(タイトル)を取得するJavaScriptプログラム(第7.2章を参照)
        プログラムコードを閲覧    プログラムコードを実行

  5. ゲノム配列を処理するJavaScriptプログラム(第7.3章を参照)
        プログラムコードを閲覧    プログラムコードを実行

  6. Semantic-JSONの機能を用いて作成されたPlant Ontology (PO)用オントロジツリービューア (第8.1章を参照)
    http://scinets.org/sw/wiki/en/cria130u7131i


3. Semantic-JSONの設計

Semantic-JSONの核となるデータコンポーネントは統合された単一ドメインのデータリポジトリーです。(図 3.1).



図 3.1.  Semantic-JSONの概念図.  この図はドメイン1のデータアイテムから始まりドメインnのデータアイテムで終わる意味論的推論のパスを示しています。ユーザは、Semantic-JSON URIをSemantic-JSONリポジトリに次々と発行することで、意味論的推論を実現します。Semantic-JSON URIは内部IDとコマンド名が含まれており、JSON形式で記述されたセマンティックウエブデータの一部分をURIを発行するたびに次々と得ることができます。


レポジトリに登録されるデータセットは、ウエブ上で公開されている複数のドメインにわたるセマンティックウエブデータを収集することで構築されます。 各データアイテムは同時に内部IDによりラベル付され、グローバルURIと内部ID間のマッピングがリポジトリ上でLinked Open Data (LOD)として管理されます。 RDF文を構成する各要素(主語、プロパティ、述語の3つ組あるいはトリプル)は内部IDによりラベル付され、内部IDと命令名から構成されるSemantic-JSON URIと呼ぶグローバルなURIを用いてこれら要素にアクセスすることができます。 Semantic-JSONでは、JSON形式で記述れたデータアイテムやリンクされたデータを含む、小さいながら有用なセマンティックデータの部分を取得する命令セットが定義されます。この機構により、ユーザは巨大で分散配置されているセマンティックウエブデータを辿ることなく、好きなプログラミング言語を用いてSemantic-JSON URIを次々に発行することにより、内部IDを用いてセマンティックウエブデータを辿ることができます。そして、必要に応じて内部IDから当該の外部URIを取得することもできます。 ここで、ウエブ上で複数のSemantic-JSONリポジトリが存在し、ユーザがそれらを使用するとき、 Semantic-JSON URIと命令セットは、標準化されていなければなりません。 これら標準化の議論についてはSemantic-JSON URIの章で扱います。 次の章では、Semantic-JSONの実装について議論します。

4. Semantic-JSONのアーキテクチャ

Semantic-JSONは図4.1に示すような、サーバ-クライアントモデルに基づいたウエブアプリケーションです。


図 4.1. Semantic-JSONのアーキテクチャ

Semantic-JSONクライアントは、ユーザプログラムやウエブブラウザなどの、HTTPあるいはHTTPSに対応しているクライアントプログラムです。
Semantic-JSONサーバは、Semantic-JSONインターフェイスを実装するREST準拠のウエブサービスプロバイダとして実装されます。 Semantic-JSONサーバは、セマンティックウエブのデータリポジトリとしてフレームワークSciNetSを利用して、クライアントのリクエストを評価、実行するサービスを提供します。
まず、クライアントはSemantic-JSONサーバにデータリクエストとしてURIを送信します。 そのURIは、Semantic-JSONの仕様で定義された、セマンティックウエブデータセットを処理する機能を指示するものです。 Semantic-JSONサーバはクライアントから送られてきたURIを評価し、SciNetSフレームワークの機能を利用してセマンティックウエブデータを的確に取得し、さらにそのデータをJSON形式に変換します。 最後にそのJSONデータがクライアントに命令の返答として返されます。

5. SciNetSデータ構造

Semantic-JSONは、Web ontology lanaugage (OWL)やRDFを含む標準化されたセマンティックウエブデータ構造のみならず、OWLやRDFを拡張して定義されたSciNetSデータ構造をも扱います。 この章では、Semantic-JSON仕様定義の準備として、SciNetSデータ構造について議論します。
SciNetSは生命科学データベースの構築と統合を実現するシステムとして設計され、データの閲覧には、人によるウエブブラウザを用いる方法とプログラムを用いた方法の両方が可能です。 SciNetSデータ構造には、それぞれRDF個体 (individual、あるいはインスタンス(instance))、OWLクラス、RDFプロパティ、RDF文に対応する、ページ(page)、フォルダ(folder)、プロパティ(property)、リンク(link)の他に、OWLクラスとして定義されるディスク(disk)があります。ディスクは研究者が機密データの共有、編集を行いながら共同作業を行うための、仮想的にセキュアに区切られたデータ空間を提供するものです。 これら各データ型を実用的な生命科学データベースの枠組みに適用させるために、各データ型にはOWL/RDF仕様で定義されているプロパティの他に独自の定義済プロパティが備わっています。 ユーザは独自のオントロジや標準化オントロジを用いることにより、OWL-Full仕様に従ってデータアイテム間の関係をリンク(リンクURI、主語、述語、目的語の4つ組でRDF文と等価なデータ構造を持つ)として記述することができます。

cria160s1ria160s5i~files~SciNetSTopPage.png
図 5.1. ウエブブラウザ(Firefox 4) からアクセスしたSciNetSのスナップショット。このパネルには、ディスク 'RIKEN SciNetS' (URI: http://scinets.org/item/rib158i)が表示されています。(A)には当該ディスクのWikiページが、(B)には当該ディスクのルートフォルダとサブフォルダが表示されています。さらに(C)にはSemantic-JSONのチュートリアルページへのリンクが備わっています。

5.1. ディスク

ディスクは仮想的に互いに分離、独立したデータセットを構築するためのセキュアなデータ空間です。 各ディスクにはオーナが割り当てられます。オーナは当該ディスク内でデータベース編集者(研究者)間の協調作業とデータアクセス権を管理設定します。 ディスクの定義済プロパティには、uri, name, wiki, image, icon, file, license (第5.5章を参照)があります。


図 5.2. SciNetSディスクのセマンテックウエブデータ構造

5.2. フォルダ

フォルダはOWLクラスを拡張して定義され、RDF個体を拡張したページと呼ぶデータの集合を定義します。 フォルダの定義済プロパティには、uri, name, wiki, image, icon, dna, rna, peptide, protein, compound, file, license (第5.5章を参照)があります。


図 5.3. SciNetSフォルダのセマンテックウエブデータ構造

5.3. ページ

ページはRDF個体を、次の定義済プロパティを用いて拡張したものです: uri, name, wiki, image, icon, dna, rna, peptide, protein, compound, file, license (第5.5章を参照)。


図 5.4. SciNetSページのセマンテックウエブデータ構造

5.4. プロパティ

SciNetSのプロパティはOWLプロパティと等価なものです。 プロパティはそれ自身が定義済プロパティ uri, name, wiki, image, icon, file, license (第5.5章を参照) により記述されます。

図 5.5. SciNetSプロパティのセマンテックウエブデータ構造

5.5. 定義済プロパティ

これまでに列挙した定義済プロパティは uri, name, wiki, image, icon, dna, rna, peptide, protein, compound, file, license でした。 以下ではこれらプロパティの詳細を見ていきます。

5.5.1. プロパティ uri

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
URI (当該データアイテムのURI)
[意味論]:
当該データアイテムのグローバルなURIを記述します。

5.5.2. プロパティ name

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
文字列 (xsd:String)
[意味論]:
当該データアイテムの名前を記述します。このプロパティはRDFスキーマのプロパティ 'rdfs:label' と等価で、名前は言語属性と共に文字列リテラル(xsd:String)として記述されます。 SciNetSの現在の実装では名前を記述する言語として英語と日本語か利用可能です。

5.5.3. プロパティ wiki

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
Wikiページ (WikiページのグローバルなURI)
[意味論]:
当該データアイテムのWikiページを指定します。各データアイテムには英語と日本語それぞれ高々1つのWikiページを関連付けることができます。 WikiページにはグローバルなURIが割り当てられ、ユーザはウエブブラウザを用いてそのWikiページを閲覧することができます。

5.5.4. プロパティ image、icon

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
ファイル (ファイルのグローバルなURI)
[意味論]:
画像ファイルを指定します。Wikiページと同様に、画像ファイルにはグローバルなURIが割り当てられ、そのURIをURLと読み替えアクセスすることにより当該ファイルをダウンロードすることができます。 imageとiconの違いは画像の大きさです。imageはSciNetSに投稿されたオリジナルの大きさの画像で、iconは100x100ピクセルにサイズ変更された画像です。

5.5.5. プロパティ dna、rna、peptide、protein、compound

[定義域]:
フォルダ、ページ
[値域]:
ファイル (ファイルのグローバルなURI)
[意味論]:
当該フォルダやページには、Fasta形式等のDNA、RNA、ペプチド、タンパク配列ファイル、Molfile形式等の化合物構造ファイルを関連付けることができます。 これらのファイルにはプロパティ名(dna, rna, peptide, protein, compundのうちの一つ)を含むグローバルなURIが名前として付けられます。

5.5.6. プロパティ file

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
ファイル (ファイルのグローバルなURI)
[意味論]:
第4.5.4章と第4.5.5章に掲げた特別なファイルの他に、任意のファイルを当該データアイテムに関連付けることもできます。 このプロパティ 'file' は後者のファイルをグローバルなURIを付して指定します。

5.5.7. プロパティ license

[定義域]:
ディスク、フォルダ、ページ、プロパティ
[値域]:
ライセンス (ライセンスのグローバルなURI)
[意味論]:
当該データアイテムに与えられるライセンスを指定します。 ライセンスは Creative Commons ライセンスのようにグローバルなURIが付されていることが仮定されています。このようなライセンスURIがこのプロパティの目的語として用いられます。

6. Semantic-JSON URI

Semantic-JSONのリクエストを記述するURIは以下に掲げる構文に従い記述されます:

サーバ参照 / json / 命令 / [ 言語 / ] 内部ID [ ? パラメータ ]

言語 は命令が言語に依存しないときは省略されます。 現在、言語は英語(en)と日本語(ja)が利用可能です。 命令 はRDF、RDFスキーマあるいはそれらの拡張された枠組みに基づき定義されたデータ処理命令の名前です。 内部IDサーバ参照に配置されているSemantic-JSONサーバ上でローカルに唯一無二に定義される識別子です。 パラメータ は '&' で連結されるパラメータのリストで、命令 internalID, dna, rna, searchで用いられます。

例えば、SciNetS サーバ http://semantic-json.org 上の、URI http://scinets.org/item/crib158s1i (内部ID: crib158s1i) で指定されるフォルダの英語名を取得する命令は次のように記述されます。

http://semantic-json.org/json/name/en/crib158s1i

URIとして記述される命令を実行するために、ユーザはウエブブラウザやプログラムなどのHTTP / HTTPSクライアントプログラムにおいて、URIをURLとして用いサーバにアクセスすることができます。 ウエブブラウザを用いて命令 'name' を実行する例を図6.1.に示します。


図 6.1. ウエブブラウザを用いてJSON形式で記述されるフォルダ 'crib158s1i' の英語名を取得する例

現在のSemantic-JSONで実装されている命令を表6.1と表6.2に示します。 表6.1の命令リストはRDFとRDFスキーマに基づいて定義されたもの、表6.2の命令リストはRDFとRDFスキーマをSciNetS用に拡張した仕様に基づき定義されたものです。 各命令について、結果が空データである時はその返り値は空のJSONオブジェクト {} が返ります。また、サーバ側でエラーが発生した場合には、その返り値であるJSONオブジェクトはキーが'Error'で値がエラー理由reasonであるキー-値ペア {"Error":reason} です。

以下、各命令を実行例を付して紹介します。

命令 言語 内部ID 機能
externalURI
任意のデータアイテム 与えられたデータアイテムの外部(オリジナル)URIを完全でグローバルなURIとして返す
internalID
与えられたデータアイテムの内部IDを返す。この命令では、データアイテムは パラメータ で指定され与えられる
uri
任意のデータアイテム 与えられたデータアイテムの完全でグローバルなURIを返す
label 言語コード (例: en, ja) 任意のデータアイテム 指定された言語で記述された、与えられたデータアイテムのラベルを返す
comment 言語コード (例: en, ja) 任意のデータアイテム 指定された言語で記述された、与えられたデータアイテムのコメントを返す
seeAlso
任意のデータアイテム 与えられたデータアイテムと、RDFスキーマのプロパティ 'rdfs:seeAlso' で関係付けられたデータアイテムの内部IDのリストを返す
isDefinedBy
任意のデータアイテム 与えられたデータアイテムと、RDFスキーマのプロパティ 'rdfs:isDefinedBy' で関係付けられたデータアイテムの内部IDのリストを返す
instances
クラス 与えられたクラスに属しているインスタンスの内部IDのリストを返す
classes
インスタンス 与えられたインスタンスを持つクラスの内部IDのリストを返す
superClasses
クラス
与えられたクラスの親クラス(RDFスキーマの 'rdfs:subClsssOf' で関連付けられるクラス)の内部IDのリストを返す
subClasses
クラス
与えられたクラスのサブクラス (サブクラスは親クラスの逆の関係)の内部IDのリストを返す
properties
クラス 与えられたクラスに関係するプロパティの内部IDのリストを返す。すなわち、与えられたクラスが定義域あるいは値域となっているプロパティをすべて返す
superProperties
プロパティ 与えられたプロパティの親プロパティ(RDFスキーマの 'rdfs:subPropertyOf' で関連付けられるプロパティ)の内部IDのリストを返す
subProperties
プロパティ 与えれたプロパティのサブプロパティ (サブプロパティは親プロパティの逆の関係)の内部IDのリストを返す
domain
プロパティ 与えられたプロパティの定義域になっているクラス(RDFスキーマの 'rdfs:domain' で関連付けられるプロパティ)の内部IDのリストを返す
range
プロパティ 与えられたプロパティの値域になっているクラスの内部IDあるいはデータ型(いずれもRDFスキーマの 'rdfs:range' で関連付けられるプロパティ)のリストを返す
statements

クラス、インスタンス 与えられたデータアイテムが主語となっているトリプルのリストを返す。結果のトリプルにURIが割り当てられている場合は、当該トリプルはURIを含めた4つ組みで返す
reverseStatements
クラス、インスタンス 与えられたデータアイテムが目的語となっているトリプルのリストを返す。結果のトリプルにURIが割り当てられている場合は、当該トリプルはURIを含めた4つ組みで返す
type
クラス 常に 'rdfs:Class' を返す
インスタンス 与えられたインスタンスを持つクラスの内部IDのリストを返す
file
インスタンス 与えられたインスタンスがファイルを記述しているとき、ファイルの内部ID、ファイル形式、ファイルサイズを含むファイル情報を返す
searchClasses

与えられたキーワードにヒットするラベルを持つクラスの内部IDのリストを返す
searchInstances
空、クラス
与えられたキーワードにヒットするラベルを持つインスタンスの内部IDのリストを返す。与えられた内部IDがクラスの場合には、結果インスタンスは当該クラスに属するものに限られる
searchProperties
空、クラス
キーワードにヒットするラベルを持つプロパティの内部IDのリストを返す。与えられた内部IDがクラスの場合には、結果プロパティは当該クラスに関連付けられているものに限られる
searchLiteralStatements
空、クラス、インスタンス
キーワードにヒットするリテラル値を目的語に持つトリプルのリストを返す。。結果のトリプルにURIが割り当てられている場合は、当該トリプルはURIを含めた4つ組みで返す
表 6.1. Semantic-JSONで与えられる命令の一覧。 これらの命令は、黄色や青色でハイライトされた命令を除き、RDFとRDFスキーマに基づいて定義されています。 黄色でハイライトされている命令 'file' はインスタンスとして表記されるデータファイルを扱うために追加された命令です。 赤色でハイライトされている命令 'internalID' はデコードされた文字列形式で与えられた外部URIを パラメータ で与えます。 青色でハイライトされている検索命令も、http://semantic-json.org/searchClasses?keyword=SciNetSのようにキーワードをパラメータ で与えます。 キーワードはPosMedのクエリ形式で記述ずることができます。(http://omicspace.riken.jp/Help/index.htmlを参照).

命令 言語 内部ID 機能
name en, ja ディスク、フォルダ、ページ、プロパティ、ファイル 指定された言語で記述された、与えられたデータアイテムの名前を返す。当該データアイテムがフォルダあるいはページの時は、この命令は表5.1に記載の命令 'label' と等価である
リンク
与えられたリンクの目的語がデータアイテムの場合は、目的語データアイテムの指定された言語で記述された名前を返す。そうでない場合は、指定された言語で記述されたリテラル値を返す
image
ディスク、フォルダ、ページ、プロパティ 与えられたデータアイテムに関連付けられているイメージファイルの内部IDを返す
icon
ディスク、フォルダ、ページ、プロパティ 与えられたデータアイテムに関連付けられているアイコンファイルの内部IDを返す
dna
フォルダ、ページ 与えられたデータアイテムに付されている、DNA配列ファイルに格納されている文字列形式の配列データを返す。パラメータ が与えられるときは、DNA配列の部分が返される
rna
フォルダ、ページ 与えられたデータアイテムに付されている、RNA配列ファイルに格納されている文字列形式の配列データを返す。パラメータ が与えられるときは、RNA配列の部分が返される
peptide
フォルダ、ページ 与えられたデータアイテムに付されている、ペプチド配列ファイルに格納されている文字列形式の配列データを返す
protein
フォルダ、ページ 与えられたデータアイテムに付されている、タンパク配列ファイルに格納されている文字列形式の配列データを返す
compound
フォルダ、ページ 与えられたデータアイテムに付されている、化合物構造ファイルに格納されている文字列形式の構造データを返す
files
ディスク、フォルダ、ページ、プロパティ 与えられたデータアイテムに付されているファイル群について、ファイルURI、ファイル形式、ファイルサイズから構成されるファイル情報のリストを返す
fileTextString
ファイル 与えられたファイルの内容をテキスト形式で返す
fileBase64String
ファイル 与えられたファイルの内容を base-64 形式で返す
links

フォルダ、ページ 与えられたデータアイテムが主語になっているリンクの内部IDのリストを返す
reverseLinks
フォルダ、ページ 与えられたデータアイテムが目的語になっているリンクの内部IDのリストを返す
subject
リンク
与えられたリンクの主語の内部IDを返す
property
リンク
与えられたリンクのプロパティの内部IDを返す
object
リンク
与えられたリンクの目的語の内部IDを返す
wiki en, ja ディスク、フォルダ、ページ、プロパティ 指定された言語で記述された、与えられたデータアイテムのWikiページの内部IDを返す
pages
フォルダ 与えられたフォルダに属しているすべてのページの内部IDのリストを返す
folders
ディスク 与えられたディスクに属しているすべてのフォルダの内部IDのリストを返す
ページ 与えられたページを持つすべてのフォルダの内部IDのリストを返す
superFolders
フォルダ 与えられたフォルダの親フォルダ (RDFスキーマのプロパティ 'rdfs:subClsssOf' と同義)の内部IDのリストを返す
subFolders
フォルダ
与えられたフォルダのサブフォルダ(サブフォルダは親フォルダの逆の関係)の内部IDのリストを返す
properties
フォルダ 与えられたフォルダに関連付けられているすべてのプロパティの内部IDのリストを返す。 この命令は内部IDがクラスの時の命令 'properties' と等価である
ディスク 与えられたディスク内で定義されているすべてのプロパティの内部IDのリストを返す
superProperties
プロパティ 与えられたプロパティの親プロパティ (RDFスキーマのプロパティ 'rdfs:subPropertyOf' と同義)の内部IDのリストを返す
subProperties
プロパティ 与えられたプロパティのサブプロパティ(サブプロパティは親プロパティの逆の関係)の内部IDのリストを返す
license
ディスク、フォルダ、ページ、プロパティ、ファイル 与えられたデータアイテムに付されているライセンスのURIを返す
searchDisks

与えられたキーワードにヒットするすべてのディスクの内部IDのリストを返す
searchFolders
空、ディスク 与えられたキーワードにヒットするすべてのフォルダの内部IDのリストを返す。与えられた内部IDがディスクの場合、結果のフォルダは当該ディスクに属しているものに限られる
searchPages
空、ディスク、フォルダ
与えられたキーワードにヒットするすべてのページの内部IDのリストを返す。与えられた内部IDがディスクの場合、結果のページは当該ディスクに属しているものに限られる。また与えられた内部IDがフォルダの場合、 結果のページは当該フォルダに属しているものに限られる
searchProperties
空、ディスク、フォルダ
与えられたキーワードにヒットするすべてのプロパティの内部IDのリストを返す。与えられた内部IDがプロパティの場合、結果のプロパティは当該ディスクに属しているものに限られる。また与えられた内部IDがフォルダの場合、 結果のプロパティは当該フォルダに属しているものに限られる
searchLiteralLinks
空、ディスク、フォルダ、ページ
与えられたキーワードにヒットするリテラルを目的語に持つ全てのリンクの内部IDのリストを返す
表 6.2. SciNetS用Semantic-JSON仕様で与えられる命令の一覧。 SciNetSデータはRDFとRDFスキーマを拡張して定義されているので、表5.1に掲げた命令のリストも、それぞれフォルダとページをクラスとインスタンスに置き換えて呼び出せばSciNetS上でも動作します。 緑色でハイライトされた命令 'dna' と 'rna' は、それぞれパラメータを指定することでDNAあるいはRNA配列の一部のみを取得することができます。 青色でハイライトされた検索命令は、キーワードとキーワードを見つける対象データ(Wikiとファイルがオブションで指定でき、名前がデフォルトで対象になります)を パラメータ で、例えば http://semantic-json.org/searchPages?keyword=SciNetS&wiki=on&file=on と指定します。キーワードはPosMedクエリ形式で記述することができます。(http://omicspace.riken.jp/Help/index.htmlを参照)

6.1. RDFとRDFスキーマに対応したSemantic-JSON命令

6.1.1. 命令 externalURI

[言語]:
不要
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
内部IDで指定されるデータアイテムの外部(オリジナル)URIを完全でグローバルなURIとして返す
[JSON形式の返り値]:
キーが 'URI' であるキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/externalURI/crib158s1i
[JSON形式の返り値の例]:
{"URI":"http:\/\/scinets.org\/item\/crib158s1i"}

6.1.2. 命令 internalID

[言語]:
不要
[内部ID]:
[パラメータ]:
任意のデータ型のデータアイテムの外部URI
[機能]:
パラメータで与えられたデータアイテムの内部IDを返す
[JSON形式の返り値]:
キーが 'ID' であるキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/internalID?http%3A%2F%2Fscinets.org%2Fitem%2Fcrib158s1i
[JSON形式の返り値の例]:
{"ID":"crib158s1i"}

6.1.3. 命令 uri

[言語]:
不要
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
内部IDで指定されるデータアイテムの完全でグローバルなURIを返す
[JSON形式の返り値]:
キーが 'URI' であるキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/uri/crib158s1i
[JSON形式の返り値の例]:
{"URI":"http:\/\/scinets.org\/item\/crib158s1i"}

6.1.4. 命令 label

[言語]:
言語コード (: en (英語) あるいは ja (日本語))
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
指定された言語で記述された、内部IDで指定されるデータアイテムのラベルを返す。すなわち、主語が当該データアイテムで述語がRDFスキーマのプロパティ 'rdfs:label' であるトリプルの目的語リテラルが返される
[JSON形式の返り値]:
それぞれキーが 'label' と 'lang' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/label/en/crib158s1i
[JSON形式の返り値の例]:
{"label":"Portal", "lang":"en"}

6.1.5. 命令 comment

[言語]:
言語コード (: en (英語) あるいは ja (日本語))
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
指定された言語で記述された、内部IDで指定されるデータアイテムのコメントを返す。すなわち、主語が当該データアイテムで述語がRDFスキーマのプロパティ 'rdfs:comment' であるトリプルの目的語リテラルが返される
[JSON形式の返り値]:
それぞれキーが 'comment' と 'lang' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/comment/en/crib158s1i
[JSON形式の返り値の例]:
{"comment":"The top page of SciNetS", "lang":"en"}

6.1.6. 命令 seeAlso

[言語]:
不要
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
内部IDで指定されるデータアイテムと参照関係のある全てのデータアイテムの内部IDのリストを返す。 すなわち、主語が当該データアイテムで述語がRDFスキーマのプロパティ 'rdfs:seeAlso' であるトリプルの目的語データアイテムの内部IDが返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/seeAlso/crib158s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s2i","dataType":"Class"}]}

6.1.7. 命令 isDefinedBy

[言語]:
不要
[内部ID]:
任意のデータ型のデータアイテム
[機能]:
内部IDで指定されるデータアイテムと定義関係のある全てのデータアイテムの内部IDのリストを返す。 すなわち、主語が当該データアイテムで述語がRDFスキーマのプロパティ 'rdfs:isDefinedBy' であるトリプルの目的語データアイテムの内部IDが返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/isDefinedBy/crib158s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s3i","dataType":"Class"}]}

6.1.8. 命令 instances

[言語]:
不要
[内部ID]:
クラス
[機能]:
内部IDで指定されるクラスに属しているすべてのインスタンスの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/instances/cria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"cria93s1ria93s1i","dataType":"Instance"},{"ID":"cria93s1ria93s2i","dataType":"Instance"}]}

6.1.9. 命令 classes

[言語]:
不要
[内部ID]:
インスタンス
[機能]:
内部IDで指定されるインスタンスを持つ全てのクラスの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/classes/cria93s1ria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"cria93s1i","dataType":"Class"}]}

6.1.10. 命令 superClasses

[言語]:
不要
[内部ID]:
クラス
[機能]:
内部IDで指定されるクラスのすべての親クラスの内部IDのリストを返す。親クラスはRDFスキーマのプロパティ 'rdfs:subClassOf' で記述されるクラスと等価で、すなわちトリプル'クラス rdfs:subClassOf 親クラス' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/superClasses/crib158s12i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s6i","dataType":"Class"}]}

6.1.11. 命令 subClasses

[言語]:
不要
[内部ID]:
クラス
[機能]:
内部IDで指定されるクラスのすべてのサブクラスの内部IDのリストを返す。サブクラスは親クラスの逆の関係で、すなわちトリプル'サブクラス rdfs:subClassOf クラス' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/subClasses/crib158s6i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s12i","dataType":"Class"}]}

6.1.12. 命令 properties

[言語]:
不要
[内部ID]:
クラス
[機能]:
内部IDで指定されるクラスに関連付けられているプロパティの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/properties/cria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"prib23s91i","dataType":"Property"},...,{"ID":"pria93s9i","dataType":"Property"}]}

6.1.13. 命令 superProperties

[言語]:
不要
[内部ID]:
プロパティ
[機能]:
内部IDで指定されるプロパティのすべての親プロパティの内部IDのリストを返す。親プロパティはRDFスキーマのプロパティ 'rdfs:subPropertyOf' で記述されるプロパティと等価で、すなわちトリプル'プロパティ rdfs:subPropertyOf 親プロパティ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/superProperties/pria93s10i
[JSON形式の返り値の例]:
{"list":{"ID":"pria93s8i","dataType":"Property"}}

6.1.14. 命令 subProperties

[言語]:
不要
[内部ID]:
プロパティ
[機能]:
内部IDで指定されるプロパティのすべてのサブプロパティの内部IDのリストを返す。サブプロパティは親プロパティの逆の関係で、すなわちトリプル'サブプロパティ rdfs:subPropertyOf プロパティ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/subProperties/pria93s8i
[JSON形式の返り値の例]:
{"list":{"ID":"pria93s10i","dataType":"Property"}}

6.1.15. 命令 domain

[言語]:
不要
[内部ID]:
プロパティ
[機能]:
内部IDで指定されるプロパティの定義域であるすべてのクラスの内部IDのリストを返す。すなわち、RDFスキーマのプロパティ 'rdfs:domain' を用いて記述されるトリプル 'プロパティ rdfs:domain クラス' が記述されるとき、そのようなすべてのトリプルについて目的語となるクラスの内部IDのリストが返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/domain/pria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"rdfs:Class","dataType":"Class"}]}

6.1.16. 命令 range

[言語]:
不要
[内部ID]:
プロパティ
[function]:
内部IDで指定されるプロパティの値域であるすべてのクラスの内部IDあるいリテラルのデータ型のリストを返す。すなわち、RDFスキーマのプロパティ 'rdfs:range' を用いて記述されるトリプル 'プロパティ rdfs:range クラス' あるいはトリプル 'プロパティ rdfs:range データ型' が記述されるとき、そのようなすべてのトリプルについて目的語となるクラスの内部IDあるいはデータ型のリストが返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアあるいはキーが'dataType' のキー-値ペアを要素とする配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/range/pria93s8i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib23s319i","dataType":"Class"}]}

6.1.17. 命令 statements

[言語]:
不要
[内部ID]:
クラスあるいはインスタンス
[機能]:
内部IDで指定されるデータアイテムが主語となっているトリプルのリストを返す。結果のトリプルが内部IDを持つ場合には、当該トリプルは内部IDを含む4つ組で返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID'、'subject'、'property'、'object'、'dataType' の5つのキー-値ペアあるいはそれぞれキーが 'subject'、'property'、'object'、'dataType' の4つのキー-値ペアを要素とする配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/statements/cria93s1ria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"prib23s56rib23s36i","dataType":"Statement",...},...,{"ID":"pria93s12ria93s2i","dataType":"Statement",...}]}

6.1.18. 命令 reverseStatements

[言語]:
不要
[内部ID]:
クラスあるいはインスタンス
[機能]:
内部IDで指定されるデータアイテムが目的語となっているトリプルのリストを返す。結果のトリプルが内部IDを持つ場合には、当該トリプルは内部IDを含む4つ組で返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID'、'subject'、'property'、'object'、'dataType' の5つのキー-値ペアあるいはそれぞれキーが 'subject'、'property'、'object'、'dataType' の4つのキー-値ペアを要素とする配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/reverseStatements/cria197s9ria197s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"pria197s2ria197s1i","dataType":"Statement",...}]}

6.1.19-1. 命令 type

[言語]:
不要
[内部ID]:
クラス
[機能]:
常に 'rdfs:Class' を返す
[JSON形式の返り値]:
キーが 'type' であるキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/type/crib158s1i
[JSON形式の返り値の例]:
{"type":"rdfs:Class" }

6.1.19-2. 命令 type

[言語]:
不要
[内部ID]:
インスタンス
[機能]:
内部IDで指定されるインスタンスを持つすべてのクラスの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'type' であるキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/type/cria93s1ria93s2i
[JSON形式の返り値の例]:
{"type":"cria93s1i" }

6.1.20. 命令 file

[言語]:
不要
[内部ID]:
インスタンス
[機能]:
内部IDで指定されるインスタンスとして記述されるファイルについて、当該ファイルの内部ID、ファイル形式、ファイルサイズを含むファイル情報を返す
[JSON形式の返り値]:
それぞれキーが 'ID'、'fileType'、'fileSize'、'dataType' である4つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/file/cria197s3ria197s1i~files~Oxt.fasta
[JSON形式の返り値の例]:
{"ID":"cria197s3ria197s1i~files~Oxt.fasta", "fileType":"chemical\/seq-aa-fasta","fileSize":933, "dataType":"File"}

6.1.21. 命令 searchClasses

[言語]:
不要
[内部ID]:
[パラメータ]:
キーワード
[機能]:
パラメータとして与えられるキーワードをラベルに含むすべてのクラスの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchClasses?keyword=SciNetS
[JSON形式の返り値の例]:
{"list":[{"ID":"cria309s5i", "dataType":"Class"},...,{"ID":"crib158s2i", "dataType":"Class"}]}

6.1.22. 命令 searchInstances

[言語]:
不要
[内部ID]:
空あるいはクラス
[パラメータ]:
keyword
[機能]:
パラメータとして与えられるキーワードをラベルに含むすべてのインスタンスの内部IDのリストを返す。 内部IDとしてクラスが指定された場合は、結果インスタンスは当該クラスに属するものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchInstances/cria61u5i?keyword=arabidopsis
[JSON形式の返り値の例]:
{"list":[{"ID":"cria61u5ria61u2006020100i", "dataType":"Instance"},...,{"ID":"cria61u5ria61u2002260100i", "dataType":"Instance"}]}

6.1.23. 命令 searchProperties

[言語]:
不要
[内部ID]:
空あるいはクラス
[パラメータ]:
キーワード
[機能]:
パラメータとして与えられるキーワードをラベルに含むすべてのプロパティの内部IDのリストを返す。 内部IDとしてクラスが指定された場合は、結果プロパティは当該クラスに関係のあるものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchProperties/cria35u3i?keyword=language
[JSON形式の返り値の例]:
{"list":[{"ID":"pria35u14i", "dataType":"Property"}]}

6.1.24. 命令 searchLiteralStatements

[言語]:
不要
[内部ID]:
空、クラス、インスタンスのいずれか
[パラメータ]:
キーワード
[機能]:
Semantic-JSON URIのパラメータとして与えられるキーワードをリテラルに含むすべてのトリプルのリストを返す。 内部IDとしてクラスが指定された場合は、結果トリプルは主語が当該クラスに属しているものに限られる。また、内部IDとしてインスタンスが指定された場合は、結果トリプルは主語が当該インスタンスのものに限られる。 結果のトリプルが内部IDを持つ場合には、当該トリプルは内部IDを含む4つ組で返される
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID'、'subject'、'property'、'object'、'dataType' の5つのキー-値ペアあるいはそれぞれキーが 'subject'、'property'、'object'、'dataType' の4つのキー-値ペアを要素とする配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchLiteralStatements/crib151s2i?keyword=semantic
[JSON形式の返り値の例]:
{"list":[{"subject":"crib151s2rib151s132i", "property":"prib164s17i", "object":{"literalDataType":"xsd:String", "value":"The RIKEN integrated database of mammals ...", "lang":"en"}", dataType":"Statement"}]}


6.2. SciNetS用Semantic-JSON命令

6.2.1-1. 命令 name

[言語]:
en (英語) あるいは ja (日本語)
[内部ID]:
ディスク、フォルダ、ページ、プロパティ、ファイルのいずれか
[機能]:
指定された言語で記述された、内部IDで指定されるデータアイテムの名前を返す
[JSON形式の返り値]:
それぞれキーが 'name' と 'lang' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/name/en/crib158s1i
[JSON形式の返り値の例]:
{"name":"Portal", "lang":"en"}

6.2.1-2. 命令 name

[言語]:
en (英語) あるいは ja (日本語)
[内部ID]:
リンク
[機能]:
(1) 内部IDで指定されるリンクの目的語がデータアイテムのとき、当該目的語データアイテムの名前を返す。 (2) そうでないとき、指定された言語で記述されたリテラル値を返す
[JSON形式の返り値]:
(1) それぞれキーが 'name' と 'lang' である2つのキー-値ペアから構成されるJSONオブジェクト。 (2)それぞれキーが 'literalDataType'、'value'、'lang' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例 (1)]:
http://semantic-json.org/json/name/en/prib139u3rib139s32i
[JSON形式の返り値の例 (1)]:
{"lang":"en","name":"Adviser"}
[URIの例 (2)]:
http://semantic-json.org/json/name/en/prib139s1rib139s3i
[JSON形式の返り値の例 (2)]:
{"lang":"en","literalDataType":"xsd:string","value":"Advanced Industrial Science"}

6.2.2. 命令 image

[言語]:
不要
[内部ID]:
ディスク、フォルダ、ページ、プロパティのいずれか
[機能]:
内部IDで指定されたデータアイテムに関連付けられているイメージファイルの内部IDを返す
[JSON形式の返り値]:
それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/image/crib158s1i
[JSON形式の返り値の例]:
{"ID":"/sw/image/crib158s1","dataType":"Image"}

6.2.3. 命令 icon

[言語]:
不要
[内部ID]:
ディスク、フォルダ、ページ、プロパティのいずれか
[function]:
内部IDで指定されたデータアイテムに関連付けられているアイコンファイルの内部IDを返す
[JSON形式の返り値]:
それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/icon/crib158s1i
[JSON形式の返り値の例]:
{"dataType":"Icon","fileType":"image/png","contents":"iVBOR..."}

6.2.4. 命令 dna

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[パラメータ]:
start (オプションで開始位置を示す値、デフォルト値は1)、end (オプションで終了位置を示す値、デフォルト値は当該配列の長さ)、strand (オプションで順方向か逆方向かを選択する、デフォルト値は順方向)
[機能]:
内部IDで指定されたデータアイテムに関連付けられているDNA配列を文字列形式で返す。当該配列データはコメントのないFasta形式で記述される。 パラメータが与えられたとき、当該DNA配列からstartendの間のstrand方向の配列が抽出され返される
[JSON形式の返り値]:
それぞれキーが 'sequence'、'dataType'、'fileType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/dna/cria197s3ria197s1i
[JSON形式の返り値の例]:
{"sequence":"CATCACCTACAGCGGATCT...","dataType":"DNA", "fileType":"chemical\/seq-aa-fasta"}

6.2.5. 命令 rna

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[パラメータ]:
start (オプションで開始位置を示す値、デフォルト値は1), end (オプションで終了位置を示す値、デフォルト値は当該配列の長さ)、strand (オプションで順方向か逆方向かを選択する、デフォルト値は順方向)
[機能]:
内部IDで指定されたデータアイテムに関連付けられているRNA配列を文字列形式で返す。当該配列データはコメントのないFasta形式で記述される。 パラメータが与えられたとき、当該RNA配列からstartendの間のstrand方向の配列が抽出され返される
[JSON形式の返り値]:
それぞれキーが 'sequence'、'dataType'、'fileType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/rna/cria197s6ria197s1i
[JSON形式の返り値の例]:
{"sequence":"UUCACUGUGGGAUGAGGUAG...","dataType":"RNA", "fileType":"chemical\/seq-aa-fasta"}

6.2.6. 命令 peptide

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[機能]:
内部IDで指定されたデータアイテムに関連付けられているペプチド配列を文字列形式で返す。当該配列データはコメントのないFasta形式で記述される
[JSON形式の返り値]:
それぞれキーが 'sequence'、'dataType'、'fileType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/peptide/cria197s4ria197s1i
[JSON形式の返り値の例]:
{"sequence":"CYIENCPLG","dataType":"Peptide", "fileType":"chemical\/seq-aa-fasta"}

6.2.7. 命令 protein

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[機能]:
内部IDで指定されたデータアイテムに関連付けられているタンパク配列を文字列形式で返す。当該配列データはコメントのないFasta形式で記述される
[JSON形式の返り値]:
それぞれキーが 'sequence'、'dataType'、'fileType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/protein/cria197s5ria197s1i
[JSON形式の返り値の例]:
{"sequence":"mmcqkfyvvllhweflyvia...", "dataType":"Protein", "fileType":"chemical\/seq-aa-fasta"}

6.2.8. 命令 compound

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[機能]:
内部IDで指定されたデータアイテムに関連付けられている化合物構造データを文字列形式で返す。当該データはMolfileなどの標準形式で記述されることが仮定されている
[JSON形式の返り値]:
それぞれキーが 'structure'、'dataType'、'fileType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/compound/cria197s2ria197s1i
[JSON形式の返り値の例]:
{“structure”:” 28 33 0 0 1 0 0 0 0 0999 V2000...", "dataType":"Compound", "fileType":"chemical\/x-mdl-molfile"}

6.2.9. 命令 files

[言語]:
不要
[内部ID]:
ディスク、フォルダ、ページ、プロパティのいずれか
[機能]:
内部IDで指定されるデータアイテムに関連付けれられているすべてのファイルについて、内部ID、ファイル形式、ファイルサイズを含むファイル情報のリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID'、'fileType'、'fileSize'、'dataType' である3つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/files/crib151s2i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib151s2i~files~contents_SJIS.txt", "fileType":"text\/plain", "fileSize":262215, "dataType":"File"},..., {"ID":"crib151s2i~files~crib151s2i_swf_Fig2.PNG", "fileType":"image\/png", "fileSize":2048, "dataType":"File"}]}

6.2.10. 命令 fileTextString

[言語]:
不要
[内部ID]:
ファイル
[機能]:
内部IDで指定されるファイルの内容を文字列形式で返す
[JSON形式の返り値]:
それぞれキーが 'ID'、'contents'、'fileType'、'fileSize'、'dataType' である5つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/fileTextString/cria197s6ria197s1i~files~mmu-let-7a-1.fasta
[JSON形式の返り値の例]:
{"ID":"cria197s6ria197s1i~files~mmu-let-7a-1.fasta", "fileType":"chemical\/seq-aa-fasta", "dataType":"File", "fileSize":121, "contents":">mmu-let-7a-1 MI0000556...}

6.2.11. 命令 fileBase64String

[言語]:
不要
[内部ID]:
ファイル
[機能]:
内部IDで指定されるファイルの内容をbase-64形式で返す
[JSON形式の返り値]:
それぞれキーが 'ID'、'contents'、'fileType'、'fileSize'、'dataType' である5つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/fileBase64String/cria197s15ria197s1i~files~title-en.jpg
[JSON形式の返り値の例]:
{"ID":"cria197s15ria197s1i~files~title-en.jpg", "fileType":"image\/jpeg", "fileSize":56178, "dataType":"File", "contents":"\/9j\/4AAQSkZJRgABAgAAZAB...}

6.2.12. 命令 wiki

[言語]:
en (英語) あるいは ja (日本語)
[内部ID]:
ディスク、フォルダ、ページ、プロパティのいずれか
[機能]:
指定された言語で記述された、内部IDで指定されるデータアイテムのWikiページの内部IDを返す
[JSON形式の返り値]:
それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/wiki/en/crib158s1i
[JSON形式の返り値の例]:
{"ID":"wiki\/en\/crib158s1i", "dataType":"Wiki"}

6.2.13. 命令 links

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[機能]:
内部IDで指定されるデータアイテムが主語となっているすべてのリンクの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/links/cria93s1ria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"prib23s56rib23s36i","dataType":"Link",...},...,{"ID":"pria93s12ria93s2i","dataType":"Link",...}]}

6.2.14. 命令 reverseLinks

[言語]:
不要
[内部ID]:
フォルダあるいはページ
[機能]:
内部IDで指定されるデータアイテムが目的語となっているすべてのリンクの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/reverseLinks/cria197s9ria197s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"pria197s2ria197s1i","dataType":"Link",...}]}

6.2.15. 命令 subject

[言語]:
不要
[内部ID]:
リンク
[機能]:
内部IDで指定されるリンクの主語となっているデータアイテムの内部IDを返す
[JSON形式の返り値]:
それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト'
[URIの例]:
http://semantic-json.org/json/subject/pria197s3ria197s1i
[JSON形式の返り値の例]:
{"ID":"cria197s11ria197s1i","dataType":"Page"}

6.2.16. 命令 property

[言語]:
不要
[内部ID]:
リンク
[機能]:
内部IDで指定されるリンクの述語となっているプロパティの内部IDを返す
[JSON形式の返り値]:
それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/property/prib23s88rib23s1i
[JSON形式の返り値の例]:
{"ID":"prib23s88i","dataType":"Property"}

6.2.17. 命令 object

[言語]:
不要
[内部ID]:
リンク
[機能]:
内部IDで指定されるリンクの目的語について、(1) 当該目的語がデータアイテムのとき、当該データアイテムの内部IDを返す。 (2) 当該目的語がリテラルのとき、当該リテラルのデータ型と値を返す
[JSON形式の返り値]:
(1) それぞれキーが 'ID' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト。(2) それぞれキーが 'dataType' と 'value' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/object/prib23s88rib23s1i
[JSON形式の返り値の例]:
{"ID":"cria93s1ria93s1i","dataType":"Page"}

6.2.18. 命令 pages

[言語]:
不要
[内部ID]:
フォルダ
[機能]:
内部IDで指定されるフォルダに属しているすべてのページの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/pages/cria93s1i
[JSON形式の返り値の例]:
{"list":[{"ID":"cria93s1ria93s1i","dataType":"Page"},{"ID":"cria93s1ria93s2i","dataType":"Page"}]}

6.2.19-1. 命令 folders

[言語]:
不要
[内部ID]:
ディスク
[機能]:
内部IDで指定されるディスクに属しているすべてのフォルダの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/folders/rib158i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s1i","dataType":"Folder"},...,{"ID":"crib158s65i","dataType":"Folder"}]}

6.2.19-2. 命令 folders

[言語]:
不要
[内部ID]:
ページ
[機能]:
内部IDで指定されるページを持つすべてのフォルダの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/folders/crib151s2rib151s11i
[JSON形式の返り値の例]:
{"list":[{"ID":"cria40u3i","dataType":"Folder"},...,{"ID":"crib151s2i","dataType":"Folder"}]}

6.2.20. 命令 superFolders

[言語]:
不要
[内部ID]:
フォルダ
[機能]:
内部IDで指定されるフォルダのすべての親フォルダの内部IDのリストを返す。親フォルダはRDFスキーマのプロパティ 'rdfs:subClassOf' で記述されるフォルダと等価で、すなわちトリプル 'フォルダ rdfs:subClassOf 親フォルダ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/superFolders/crib158s12i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s6i","dataType":"Folder"}]}

6.2.21. 命令 subFolders

[言語]:
不要
[内部ID]:
フォルダ
[機能]:
内部IDで指定されるフォルダのすべてのサブフォルダの内部IDのリストを返す。サブフォルダは親フォルダの逆の関係で、すなわちトリプル 'サブフォルダ rdfs:subClassOf フォルダ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/subFolders/crib158s6i
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s12i","dataType":"Folder"}]}

6.2.22. 命令 properties

[言語]:
不要
[内部ID]:
フォルダ
[機能]:
内部IDで指定されるフォルダに関連付けられている全てのプロパティの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/properties/ria93i
[JSON形式の返り値の例]:
{"list":[{"ID":"pria93s1i","dataType":"Property"},...,{"ID":"pria93s9i","dataType":"Property"}]}

6.2.23. 命令 superProperties

[言語]:
不要
[内部ID]:
プロパティ
[機能]:
内部IDで指定されるプロパティのすべての親プロパティの内部IDのリストを返す。親プロパティはRDFスキーマのプロパティ 'rdfs:subPropertyOf' で記述されるプロパティと等価で、すなわちトリプル 'プロパティ rdfs:subPropertyOf 親プロパティ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/superProperties/pria93s10i
[JSON形式の返り値の例]:
{"list":{"ID":"pria93s8i","dataType":"Property"}}

6.2.24. 命令 subProperties

[言語]:
不要
[内部ID]:
プロパティ
[機能]:
内部IDで指定されるプロパティのすべてのサブプロパティの内部IDのリストを返す。サブプロパティは親プロパティの逆の関係で、すなわちトリプル 'サブプロパティ rdfs:subPropertyOf プロパティ' が成り立つ
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/subProperties/pria93s8i
[JSON形式の返り値の例]:
{"list":{"ID":"pria93s10i","dataType":"Property"}}

6.2.25. 命令 license

[言語]:
不要
[内部ID]:
ディスク、フォルダ、ページ、プロパティ、ファイルのいずれか
[機能]:
内部IDで指定されたデータアイテムに与えられるライセンスのグローバルURIを返す
[JSON形式の返り値]:
それぞれキーが 'URI' と 'dataType' である2つのキー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/license/rib158i
[JSON形式の返り値の例]:
{"URI":"http:\/\/creativecommons.org\/licenses\/by-sa\/2.1\/jp","dataType":"License"}

6.2.26. 命令 searchDisks

[言語]:
不要
[内部ID]:
[パラメータ]:
キーワード、wiki (オプション)、file (オプション)
[機能]:
パラメータとして与えられるキーワードを含むすべてのディスクの内部IDのリストを返す
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchDisks?keyword=database
[JSON形式の返り値の例]:
{"list":[{"ID":"rib220i", "dataType":"Disk"},...,{"ID":"ria109i", "dataType":"Disk"}]}

6.2.27. 命令 searchFolders

[言語]:
不要
[内部ID]:
空あるいはディスク
[パラメータ]:
キーワード、wiki (オプション)、file (オプション)
[機能]:
パラメータとして与えられるキーワードを含むすべてのフォルダの内部IDのリストを返す。 内部IDとしてディスクが指定された場合は、結果フォルダは当該ディスクに属するものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchFolders/rib158i?keyword=SciNetS&wiki=on
[JSON形式の返り値の例]:
{"list":[{"ID":"crib158s2i", "dataType":"Folder"}]}

6.2.28. 命令 searchPages

[言語]:
不要
[内部ID]:
空、ディスク、フォルダのいずれか
[パラメータ]:
キーワード、wiki (オプション)、file (オプション)
[機能]:
パラメータとして与えられるキーワードを含むすべてのページの内部IDのリストを返す。 内部IDとしてディスクが指定された場合は、結果ページは当該ディスクに属するものに限られる。 また、内部IDとしてフォルダが指定された場合は、結果ページは当該フォルダに属するものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchPages/cria61u5i?keyword=arabidopsis&wiki=on&file=on
[JSON形式の返り値の例]:
{"list":[{"ID":"cria61u5ria61u2006020100i", "dataType":"Page"},...,{"ID":"cria61u5ria61u2002260100i", "dataType":"Page"}]}

6.2.29. 命令 searchProperties

[言語]:
不要
[内部ID]:
空、ディスク、フォルダのいずれか
[パラメータ]:
キーワード、wiki (オプション)、file (オプション)
[機能]:
パラメータとして与えられるキーワードを含むすべてのプロパティの内部IDのリストを返す。 内部IDとしてディスクが指定された場合は、結果プロパティは当該ディスクに属するものに限られる。 また、内部IDとしてフォルダが指定された場合は、結果プロパティは当該フォルダに関連づけられているものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID' と 'dataType' の2つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchProperties/cria35u3i?keyword=affilication
[JSON形式の返り値の例]:
{"list":[{"ID":"pria35u14i", "dataType":"Property"}]}

6.2.30. 命令 searchLiteralLinks

[言語]:
不要
[内部ID]:
空、ディスク、フォルダ、ページのいずれか
[パラメータ]:
キーワード、wiki (オプション)、file (オプション)
[機能]:
Semantic-JSON URIのパラメータとして与えられるキーワードをリテラルに含むすべてのリンクの内部IDのリストを返す。 内部IDとしてディスクが指定された場合は、結果リンクの主語が当該ディスクに属しているものに限られる。 内部IDとしてフォルダが指定された場合は、結果リンクの主語が当該フォルダに属しているものに限られる。 内部IDとしてページが指定された場合は、結果リンクの主語が当該ページのものに限られる
[JSON形式の返り値]:
キーが 'list' で値がそれぞれキーが 'ID'、'subject'、'property'、'object'、'dataType' の5つのキー-値ペアの配列である、キー-値ペアから構成されるJSONオブジェクト
[URIの例]:
http://semantic-json.org/json/searchLiteralLinks/crib151s2i?keyword=semantic
[JSON形式の返り値の例]:
{"list":[{"subject":"crib151s2rib151s132i", "property":"prib164s17i", "object":{"literalDataType":"xsd:string", "value":"The RIKEN integrated database of mammals ...", "lang":"en"}", dataType":"Link"}]}

7. プログラミング例

Semantic-JSONはクライアントがサーバに対しURIを指定することによりデータリクエストを行い、その返答をJSONオブジェクトとして受け取る単純なウエブ準拠のサービスインターフェイスです。 このため、Semantic-JSON開発者は、RubyやPerlなどのHTTP/HTTPSクライアントとJSONライブラリを実装する多くのプログラミング言語を用いて、Semantic-JSONクライアントプログラムを数行のコードで記述することができます。 しかし、Semantic-JSON URIの生成などの開発者への便宜のため、筆者らはSemantic-JSONクライアントをより容易に実装できる小さなライブラリを開発しました。 以下、SciNetSサーバに登録されているセマンティックウエブデータを扱う、単純なプログラムや応用プログラムを紹介します。

7.1. 準備

Java、Ruby、Perl、Python、Mathematicaのぞれぞれの言語で実装されたSemantic-JSONライブラリがダウンロード可能です。JavaScript版のSemantic-JSONライブラリはSciNetSフレームワーク上に配置されています。 各言語について、プログラミング環境の構築方法を紹介します。

7.1.1. Java

Java版のSemantic-JSONライブラリには、Java-docドキュメントとサンプルプログラムを収集したJARファイル semanticJSON.jar が含まれています。 このライブラリはSciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonJava.zip からダウンロードできます。 このライブラリの使用にあたっては、以下に掲げる他のライブラリも必要になります。
  • Json-lib (http://json-lib.sourceforge.net/)
  • Commons BeanUtils (http://commons.apache.org/beanutils/)
  • Commons Collections (http://commons.apache.org/collections/)
  • Commons Logging (http://commons.apache.org/logging/)
  • Commons Lang (http://commons.apache.org/lang/)
  • Apache log4j (http://logging.apache.org/log4j/index.html)
  • EZMorph (http://sourceforge.net/projects/ezmorph/)
以上すべてのJARファイルはクラスパスの通る適切な場所にインストールされる必要があります。

7.1.2. Ruby

Ruby版のSemantic-JSONライブラリは、Rubyプログラムファイル semanticJson.rb です。このプログラムはSciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonRuby.zip からダウンロードできます。 さらに、外部プログラムとして、Simple JSON (http://rubyforge.org/projects/simple-json/) が必要です。 以上のすべてのファイルはRubyインタプリタが発見できるよう、環境変数 'RUBYLIB' に記述されるディレクトリに配置される必要があります。

7.1.3. Perl

Perl版のSemantic-JSONライブラリは、Perlプログラムファイル semanticJson.pl です。このプログラムはSciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonPerl.zip からダウンロードできます。 さらに、外部プログラムとして、ライブラリ JSON/CPAN library (http://search.cpan.org/dist/JSON/) が必要ですが、幾つかのPerlの実行系にはこのライブラリはデフォルトで含まれています。

7.1.4. Python

Python版のSemantic-JSONライブラリは、Pythonプログラムファイル semanticJson.py です。このプログラムはSciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonPython.zip からダウンロードできます。 さらに、外部プログラムとして、ライブラリ json-py (http://sourceforge.net/projects/json-py/) が必要ですが、幾つかのPython実行系にはこのライブラリはデフォルトで含まれています。

7.1.5. JavaScript

セキュリティの理由から、通常JavaScript実行系では、サーバへのHTTP/HTTPSリクエストはそのJavaScriptプログラムをダウンロードしたサーバ上でのみ実行できるようになっています。 したがって、SemanticJSON.library という名前のオブジェクトを実装しているSemantic-JSONライブラリを用いたプログラミング環境をSciNetSフレームワーク上に配置しています。その環境では、SciNetSユーザはJavaScriptでSemantic-JSONのクライアントプログラムを開発し、SciNetSページあるいはフォルダのWikiページに埋め込むことで該プログラムを公開することができます。 Semantic-JSONサーバ上でJavaScriptプログラムを開発するには、その開発者はSciNetSシステムにログオンする必要があります。しかしウエブブラウザを用いた、Wikiに埋め込まれたJavaScriptプログラムの実行に当たってはユーザはログオンする必要はありません。 開発者の便宜のため、javaScriptで記述されたサンプルプログラムを含むアーカイブファイルが、SciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonJavaScript.zip からダウンロードできるようになっています。

7.1.6. Mathematica

Mathematica版のSemantic-JSONライブラリは、Mathematicaパッケージファイル SemanticJson.m です。このプログラムはSciNetSサーバ http://semantic-json.org/item/cria160s1ria160s5i~files~semanticJsonMathematica.zip からダウンロードできます。 さらに、ライブラリ JSON-Mathematica (http://semantic-json.org/item/cria160s4ria160s1i) が必要ですが、このライブラリはSemantic-JSONライブラリに含まれています。

7.2. 最も単純なプログラミングの例

ここでは、Semantic-JSONライブラリを用いた最も単純なプログラミングの例を紹介します。 この章で紹介するすべてのプログラムは、いずれもSciNetSサーバ 'http://semantic-json.org' に格納されている内部ID 'rib158i' で指定されるSciNetSディスクの英語名を取得するプログラムです。

7.2.1. Java

コード 7.1. はクラス 'jp.riken.base.scines.JSON.test.SimpleTest' として実装されたJavaプログラムです。

package jp.riken.base.scines.JSON.test;

// imports class JSONObject defined in Json-lib
import net.sf.json.JSONObject;

// imports class JSONClient that implements a Semantic-JSON client provided by the Semantic-JSON library
import jp.riken.base.scines.JSON.JSONClient;

public class SimpleTest {

    public static void main(String[] args) throws Exception{
        // initialises a client for Semantic-JSON server http://semantic-json.org
        JSONClient client = new JSONClient("http://semantic-json.org");

        // obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i"
        JSONObject jObject = client.invoke("http://semantic-json.org/json/name/en/rib158i");

        // the previous line is equivalent to the following line
        jObject = client.invoke("name", "en", "rib158i", null);

        // prints the JSON object
        System.out.println("JSONObject: " + jObject.toString());
        System.out.println("name: " + jObject.getString("name"));
        System.out.println("language: " + jObject.getString("lang"));
    }

}

コード 7.1. Java言語による単純なプログラム。まず、クラス 'JSONClient' のインスタンスがSemantic-JSONサーバURLをパラメータとし生成されます。次にメソッド 'invoke' が実行され、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。受け取ったJSONオブジェクトはJson-libライブラリを用いて処理されます。

プログラムが起動されると、次に掲げる結果が得られます。


% java jp.riken.base.scines.JSON.test.SimpleTest

JSONObject: {"lang":"en","name":"RIKEN SciNetS"}
name: RIKEN SciNetS
language: en

図 7.1. コード 7.1.の実行結果

7.2.2. Ruby

コード 7.2. はRubyプログラム 'simpleTest.rb' です。


# Loads the Semantic-JSON library
require "semanticJson"

# Initialises a client for Semantic-JSON service at http://semantic-json.org
jsonClient = JSONClient.new("http://semantic-json.org")

# Obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i"
jObject = jsonClient.invokeByURI("http://semantic-json.org/json/name/en/rib158i");

# the previous line is equivalent to the following line
jObject = jsonClient.invoke("name", "en", "rib158i",nil);

# Prints the JSON object
print "JSONObject: "; p jObject
puts "name: " << jObject["name"]
puts "language: " << jObject["lang"]

コード 7.2. Ruby言語による単純なプログラム。まず、クラス 'JSONClient' がSemantic-JSONサーバのURLをパラメータとし生成されます。 メソッド 'invokeByURI' あるいは 'invoke' が実行され、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。受け取ったJSONオブジェクトはRubyのHashあるいはArray形式に変換されます。

プログラムが起動されると、次に掲げる結果が得られます。


% ruby simpleTest.rb
JSONObject: {"lang"=>"en", "name"=>"RIKEN SciNetS"}
name: RIKEN SciNetS
language: en

図 7.2. コード 7.2.の実行結果

7.2.3. Perl

コード 7.3. はPerlプログラム 'simpleTest.pl' です。


#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
# Loads the Semantic-JSON library
use SemanticJson;

# Initialises a Semantic-JSON Client for Semantic-JSON service at http://semantic-json.org
my $jsonClient = SemanticJson->new("http://semantic-json.org");

# Obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i"
my $jObject = $jsonClient->invokeByURI("http://semantic-json.org/json/name/en/rib158i");

# the previous line is equivalent to the following line
$jObject = $jsonClient->invoke("name", "en", "rib158i",undef);

# Prints the JSON object
print "JSONObject: ".Dumper($jObject);
print "name: ".$jObject->{"name"}."\n";
print "language: ".$jObject->{"lang"}."\n";

コード 7.3. Perl言語による単純なプログラム。まずモジュール 'JSONClient' がSemantic-JSONサーバのURLをパラメータとし初期化されます。 次に関数 'invokeByURI' あるいは 'invoke' が実行され、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。受け取ったJSONオブジェクトはPerlのHashあるいはArray形式に変換されます。

プログラムが起動されると、次に掲げる結果が得られます。


% perl simpleTest.pl

JSONObject: $VAR1 = {
'lang' => 'en',
'name' => 'RIKEN SciNetS'
};
name: RIKEN SciNetS'
language: en'


図 7.3. コード 7.3.の実行結果

7.2.4. Python

コード 7.4. はPythonプログラム 'simpleTest.py' です。


#!/usr/bin/python

import semanticJson

# Initialises a Semantic-JSON Client for Semantic-JSON service at http://semantic-json.org
jClient = semanticJson.jsonClient('http://semantic-json.org')

# Obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i"
jObject = jClient.invokeByURI('http://semantic-json.org/json/name/en/rib158i')

# the previous line is equivalent to the following line
jObject = jClient.invoke('name', 'en', 'rib158i','')

# Prints the JSON object
print 'JSONObject: ',
print jObject
print 'name: ' + jObject['name']
print 'language: ' + jObject['lang']

コード 7.4. Python言語による単純なプログラム。 まずクラス 'JSONClient' がSemantic-JSONサーバのURLをパラメータとし初期化されます。 次にメソッド 'invokeByURI' あるいは 'invoke' が実行され、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。受け取ったJSONオブジェクトはPythonのMapあるいはArray形式に変換されます。

プログラムが起動されると、次に掲げる結果が得られます。


% python simpleTest.py
JSONObject: {'lang': 'en', 'name': 'RIKEN SciNetS'}
name: RIKEN SciNetS
language: en

図 7.4. コード 7.4.の実行結果

7.2.5. JavaScript

コード 7.5. はJavaScriptプログラム 'simpleTest.js' です。 このプログラムはSciNetSサーバ
http://semantic-json.org/sw/script/en/cria197s17ria197s1i/ でも閲覧できます。


function main() {
   // obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i"
   var obj = SemanticJSON.Library.invokeByURI("http://semantic-json.org/json/name/en/rib158i");
   // the previous line is equivalent to the following line
   obj = SemanticJSON.Library.invoke("name","en","rib158i","");
   // prints the JSON object
   SemanticJSON.Library.write("name: "+obj.name);
   SemanticJSON.Library.write("<br>\n");
   SemanticJSON.Library.write("language: "+obj.lang);
   SemanticJSON.Library.write("<br>\n");
}

コード 7.5. JavaScript言語による単純なプログラム。 関数 'invokeByURI' あるいは 'invoke' が実行され、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。

プログラムが起動されると、次に掲げる結果が得られます。


name: RIKEN SciNetS
language: en

図 7.5. コード 7.5.の実行結果

7.2.6. Mathematica

コード 7.6 はMathematicaプログラム 'SimpleTest.nb' です。 コード 7.6 には、各Mathematica式の評価結果も含まれています。


In[1]:= Needs["RIKEN`BASE`SemanticJSON`" ]
Out[1]:= Package RIKEN`BASE`JSON` loaded. (rev: 20100113-4)
         Package RIKEN`BASE`SemanticJSON` loaded. (rev: 20100114-4)

        (* Set a URL for Semantic-JSON service at http://semantic-json.org *)
In[2]:= $JsonServerURL = "http://semantic-json.org"
Out[2]:=
"http://semantic-json.org"

        (* Obtains a JSON object including a disk name in English by calling name command for SciNes disk "rib158i" *)
In[3]:= obj = Invoke["http://semantic-json.org/json/name/en/rib158i"]
Out[3]:=
JsonObject[KVPair["lang", "en"], KVPair["name", "RIKEN SciNetS"]]

        (* the previous line is equivalent to the following line *)
In[4]:=obj = Invoke["name", "en", "rib158i"]
Out[4]:=JsonObject[KVPair["lang", "en"], KVPair["name", "RIKEN SciNetS"]]

        (* Prints the result *)
In[5]:= Print["JsonObject: ", obj];
       Print["name: ", GetValue[obj, "name"]];
       Print["language: ", GetValue[obj, "lang"]]

        JsonObject: JsonObject[KVPair[lang,en],KVPair[name,RIKEN SciNetS]]
        name: RIKEN SciNetS
        language: en

コード 7.6. Mathematica言語による単純なプログラム。まず、In[1] でパッケージSemantic-JSONを読み込み、In[2]でSematntic-JSONサーバのURLを指定します。 次にIn[3] あるいは In[4]で関数 'Invoke' を実行し、プログラムはサーバにアクセスしてJSONオブジェクトを取得します。 受け取ったJSONオブジェクトはJSON-Mathematicaに準拠したMathematica式に変換されます。

7.3. ゲノム配列処理を行う応用プログラム

生命情報科学の問題解決の例として、SciNetSに登録されたゲノム配列を操作する例題プログラムを紹介します。 この例題プログラムはディスク 'SciNetS Data Structure' (URI: http://semantic-json.org/item/ria197i, 内部ID: ria197i)のフォルダ 'Arabidopsis Locus' (URI: http://semantic-json.org/item/cria197s11i, 内部ID: cria197s11i)に属しているページ 'ATGC00280' (URI: http://semantic-json.org/item/cria197s11ria197s1i, 内部ID: cria197s11ria197s1)を起点としセマンティックウエブデータを辿り、最終的にFasta形式で記述されたゲノム配列の一部分を取得するものです。(図7.6を参照)


図 7.6. SciNetSディスク 'SciNetS Data Structure' (URI: http://semantic-json.org/item/ria197i, 内部ID: ria197i)に格納されたセマンティックウエブデータ構造の一部。この例題では、フォルダ 'Arabidopsis Locus' に属しているページ 'ATCG00280' を起点とし、フォルダ 'Arabidopsis Genome Sequence' に属しているページ 'chloroplast genome'に関連付けられているゲノム配列の一部を取得します。

各プログラミング言語により記述されたこの例題のプログラムは、当該プログラミング言語のアーカイブに含まれています。プログラムについての詳細な説明はソースコードのコメントとして記述されています。

7.3.1. Java

コード 7.7 はクラス'jp.riken.base.scines.JSON.test.GenomeSequenceTest'として実装されたJavaプログラムです。

package jp.riken.base.scines.JSON.test;

import net.sf.json.JSONObject;
import jp.riken.base.scines.JSON.JSONClient;

public class GenomeSequenceTest {

   public static void main(String[] args) throws Exception{

     // initialises a Semantic-JSON client
     JSONClient client = new JSONClient("http://semantic-json.org");

     // obtains a list of statements start with the individual labeled by "ATCG00280"
     JSONObject jObject = client.invoke("statements", null, "cria197s11ria197s1i", null);
     JSONObject[] statements = client.getJSONObjectList(jObject);

     // obtains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements
     String start=null, end=null, strand=null, genomeSequenceURI = null;
     for( JSONObject statement: statements){
       String propertyURI = statement.getJSONObject("property").getString("URI");
       String propertyName = client.invoke("name", "en", propertyURI, null).getString("name");
       if( "start".equals(propertyName) ) {
         start = statement.getJSONObject("object").getString("value");
       }
       if( "end".equals(propertyName) ) {
         end = statement.getJSONObject("object").getString("value");
       }
       if( "strand".equals(propertyName) ) {
         String strandURI = statement.getJSONObject("object").getString("URI");
         strand = client.invoke("name", "en", strandURI, null).getString("name");
       }
       if( "genomeSequence".equals(propertyName) ) {
         genomeSequenceURI = statement.getJSONObject("object").getString("URI");
       }
     }

     // obtains part of the genome sequence
     String sequence = client.invoke("dna", null, genomeSequenceURI,new String[]{"start="+start, "end="+end, "strand="+strand}).getString("sequence");

     // finally, print the sequence
     System.out.println("DNA sequence: " + sequence);
  }
}

コード 7.7. クラス'jp.riken.base.scines.JSON.test.GenomeSequenceTest'として実装されたJavaプログラム。このプログラムは Arabidopsisの遺伝子座'ATCG00280'で特定される、葉緑体ゲノム配列の一部(33720bp~35141bpの順方向配列)を取得するクライアントを実装するものです。

プログラムが起動されると、次に掲げる結果が得られます。


% java jp.riken.base.scines.JSON.test.GenomeSequenceTest

DNA Sequence: atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaac
tttagctttagctggtcgtgaccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaat
ttatctggtaaacttttgggagctcatgtagcccatgccggattaatcgtattctgggccggagcaatgaact
tatttgaagtggcccattttgtacctgaaaagcccatgtatgaacaaggattaattttacttccccacctagc
cactttaggatggggggtaggtcctgggggagaagttatagacacctttccgtactttgtatctggagtactt
cacttaatttcttctgcagttttgggctttggcggtatttatcatgcacttctgggacccgaaactcttgaag
aatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccattttgggtattcacttaat
tttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatgatacctgggct
ccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttactaa
aatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatg
gttaggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgca
cttgtatggtctggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgtt
gttttgtctggtttaataataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagc
tcaagcatttacttttctagttagagaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggt
ttaggtaaatacttaatgcgttctccgactggagaagttatttttggaggagaaacaatgcgtttttgggatc
tgcgtgctccctggttagaacctttaaggggtcctaacggtttggacttgagtaggttgaaaaaagacataca
accttggcaagaacgacgttcggcagaatatatgactcatgctcctttaggttcgttaaattctgtagggggc
gtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatctacctctcattttgttctag
gatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgggatttgaaaaagg
aattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

図 7.7. Javaクラス 'jp.riken.base.scines.JSON.test.GenomeSequenceTest'の起動とその実行結果

7.3.2 Ruby

コード 7.8 はRubyプログラム 'genomeSequenceTest.rb' です。


# Loads the Semantic-JSON library
require "semanticJson"

# Initialises a client for Semantic-JSON service at Semantic-JSON http://semantic-json.org
jsonClient = JSONClient.new("http://semantic-json.org")

# Obtains a list of statements start with the individual labeled by "ATCG00280"
statements = jsonClient.invoke("statements", nil, "cria197s11ria197s1i", nil)["list"]

# Obtains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements
statements.each do |statement|
   propertyURI = statement["property"]["URI"]
   propertyName = jsonClient.invoke("name", "en", propertyURI, nil)["name"]
   if( propertyName == "start" )
     $start = statement["object"]["value"].to_s
   end
   if( propertyName == "end" )
     $end = statement["object"]["value"].to_s
   end
   if( propertyName == "strand" )
     strandURI = statement["object"]["URI"]
     $strand = jsonClient.invoke("name", "en", strandURI, nil)["name"]
   end
   if( propertyName == "genomeSequence" )
     $genomeSequenceURI = statement["object"]["URI"]
   end
end

# Obtains part of the genome sequence
sequence = jsonClient.invoke("dna", nil, $genomeSequenceURI,"start="+$start+"&end="+$end+"&strand="+$strand)["sequence"]

# Finally, print the sequence
puts "DNA sequence: " << sequence

コード 7.8. Rubyプログラム 'genomeSequenceTest.rb'

プログラムが起動されると、次に掲げる結果が得られます。

% ruby genomeSequenceTest.rb

DNA Sequence: atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaac
tttagctttagctggtcgtgaccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaat
ttatctggtaaacttttgggagctcatgtagcccatgccggattaatcgtattctgggccggagcaatgaact
tatttgaagtggcccattttgtacctgaaaagcccatgtatgaacaaggattaattttacttccccacctagc
cactttaggatggggggtaggtcctgggggagaagttatagacacctttccgtactttgtatctggagtactt
cacttaatttcttctgcagttttgggctttggcggtatttatcatgcacttctgggacccgaaactcttgaag
aatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccattttgggtattcacttaat
tttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatgatacctgggct
ccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttactaa
aatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatg
gttaggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgca
cttgtatggtctggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgtt
gttttgtctggtttaataataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagc
tcaagcatttacttttctagttagagaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggt
ttaggtaaatacttaatgcgttctccgactggagaagttatttttggaggagaaacaatgcgtttttgggatc
tgcgtgctccctggttagaacctttaaggggtcctaacggtttggacttgagtaggttgaaaaaagacataca
accttggcaagaacgacgttcggcagaatatatgactcatgctcctttaggttcgttaaattctgtagggggc
gtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatctacctctcattttgttctag
gatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgggatttgaaaaagg
aattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

図 7.8. Rubyプログラム 'genomeSequenceTest.nb' の起動とその実行結果

7.3.3. Perl

コード 7.9 はPerlプログラム 'genomeSequenceTest.pl' です。


#!/usr/bin/perl
use strict;
use warnings;

# Loads the Semantic-JSON library
use JsonClient;

# Initialise a client for Semantic-JSON service at http://semantic-json.org
my $jsonClient = JsonClient->new("http://semantic-json.org");

# Obtains a list of statements start with the individual labeled by "ATCG00280"
my $statements = $jsonClient->invoke("statements", "", "cria197s11ria197s1i" ,"")->{"list"};

my $start="";
my $end="";
my $strand="";
my $genomeSequenceURI="";

# Otains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements
foreach my $statement (@$statements){
   my $propertyURI = $statement->{"property"}->{"URI"};
   my $propertyName = $jsonClient->invoke("name", "en", $propertyURI ,"")->{"name"};
   if( $propertyName eq "start"){
     $start = $statement->{"object"}->{"value"};
   }
   if( $propertyName eq "end"){
     $end = $statement->{"object"}->{"value"};
   }
   if( $propertyName eq "strand"){
     my $strandURI = $statement->{"object"}->{"URI"};
     $strand = $jsonClient->invoke("name", "en", $strandURI,"")->{"name"};
   }
   if( $propertyName eq "genomeSequence"){
     $genomeSequenceURI = $statement->{"object"}->{"URI"};
   }
}

# Obtains part of the genome sequence
my $sequence = $jsonClient->invoke("dna", "", $genomeSequenceURI ,"start=".$start."&end=".$end."&strand=".$strand)->{"sequence"};

# Finally, print the sequence
print 'DNA sequence: ' . $sequence . "\n";

コード 7.9. Perlプログラム 'genomeSequenceTest.pl'

プログラムが起動されると、次に掲げる結果が得られます。

% perl genomeSequenceTest.pl

DNA Sequence: atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaac
tttagctttagctggtcgtgaccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaat
ttatctggtaaacttttgggagctcatgtagcccatgccggattaatcgtattctgggccggagcaatgaact
tatttgaagtggcccattttgtacctgaaaagcccatgtatgaacaaggattaattttacttccccacctagc
cactttaggatggggggtaggtcctgggggagaagttatagacacctttccgtactttgtatctggagtactt
cacttaatttcttctgcagttttgggctttggcggtatttatcatgcacttctgggacccgaaactcttgaag
aatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccattttgggtattcacttaat
tttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatgatacctgggct
ccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttactaa
aatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatg
gttaggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgca
cttgtatggtctggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgtt
gttttgtctggtttaataataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagc
tcaagcatttacttttctagttagagaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggt
ttaggtaaatacttaatgcgttctccgactggagaagttatttttggaggagaaacaatgcgtttttgggatc
tgcgtgctccctggttagaacctttaaggggtcctaacggtttggacttgagtaggttgaaaaaagacataca
accttggcaagaacgacgttcggcagaatatatgactcatgctcctttaggttcgttaaattctgtagggggc
gtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatctacctctcattttgttctag
gatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgggatttgaaaaagg
aattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

図7.9. Perlプログラム 'genomeSequenceTest.pl' の起動とその実行結果

7.3.4. Python

コード 7.10 はPythonプログラム 'genomeSequenceTest.py' です。


# Loads the Semantic-JSON library
import semanticJson

# Initialise a client for Semantic-JSON service at http://semantic-json.org
jClient = semanticJson.jsonClient('http://semantic-json.org')

# Obtains a list of statements start with the individual labeled by "ATCG00280"
statements = jClient.invoke('statements', '', 'cria197s11ria197s1i', '')["list"]

# Otains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements
for statement in statements:
   propertyURI = statement["property"]["URI"]
   propertyName = jClient.invoke('name', 'en', propertyURI, '')["name"]
   if propertyName == 'start':
     start = statement["object"]["value"]
   if propertyName == 'end':
     end = statement["object"]["value"]
   if propertyName == 'strand':
   strandURI = statement["object"]["URI"]
     strand = jClient.invoke('name', 'en', strandURI, '')["name"]
   if propertyName == 'genomeSequence':
     genomeSequenceURI = statement["object"]["URI"]

# Obtains part of the genome sequence
sequence = jClient.invoke('dna', '', genomeSequenceURI, 'start=' + str(start) + '&end='+str(end) + '&strand=' + strand)["sequence"]

# Finally, print the sequence
print 'DNA sequence: ' + sequence

コード 7.10. Pythonプログラム 'genomeSequenceTest.py'

プログラムが起動されると、次に掲げる結果が得られます。

% python genomeSequenceTest.py

DNA Sequence: atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaac
tttagctttagctggtcgtgaccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaat
ttatctggtaaacttttgggagctcatgtagcccatgccggattaatcgtattctgggccggagcaatgaact
tatttgaagtggcccattttgtacctgaaaagcccatgtatgaacaaggattaattttacttccccacctagc
cactttaggatggggggtaggtcctgggggagaagttatagacacctttccgtactttgtatctggagtactt
cacttaatttcttctgcagttttgggctttggcggtatttatcatgcacttctgggacccgaaactcttgaag
aatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccattttgggtattcacttaat
tttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatgatacctgggct
ccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttactaa
aatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatg
gttaggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgca
cttgtatggtctggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgtt
gttttgtctggtttaataataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagc
tcaagcatttacttttctagttagagaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggt
ttaggtaaatacttaatgcgttctccgactggagaagttatttttggaggagaaacaatgcgtttttgggatc
tgcgtgctccctggttagaacctttaaggggtcctaacggtttggacttgagtaggttgaaaaaagacataca
accttggcaagaacgacgttcggcagaatatatgactcatgctcctttaggttcgttaaattctgtagggggc
gtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatctacctctcattttgttctag
gatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgggatttgaaaaagg
aattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

図 7.10. Pythonプログラム 'genomeSequenceTest.py' の起動とその実行結果

7.3.5. JavaScript

コード 7.11 はJavaScriptプログラム 'genomeSequenceTest.js' です。 このプログラムはSciNetSサーバ http://semantic-json.org/sw/script/en/cria197s17ria197s2i/ でも閲覧できます。


function main(){
   var start = 0;
   var end = 0;
   var strand = "";
   var genomeSequenceURI="";
  
   // obtains a list of statements start with the individual labeled by "ATCG00280"
   var obj = SemanticJSON.Library.invoke("statements","","cria197s11ria197s1i","");
   var list = obj.list;
  
   // obtains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements
   for(var i = 0; i
     var statement = list[i];
     var propertyURI = statement.property.URI;
     var nameObj = SemanticJSON.Library.invoke("name","en",propertyURI,"");
     var propertyName = nameObj.name;

     if(propertyName=="start"){
       start = statement.object.value;
     }else if(propertyName=="end"){
       end = statement.object.value;
     }else if(propertyName=="strand"){
       var strandURI = statement.object.URI;
       var strandObj = SemanticJSON.Library.invoke("name","en",strandURI,"");
       strand = strandObj.name;
     }else if(propertyName=="genomeSequence"){
       genomeSequenceURI=statement.object.URI;
     }
   }

   // obtains part of the genome sequence
   var dnaObj = SemanticJSON.Library.invoke("dna","",genomeSequenceURI,"start="+start+"&end="+end+"&strand="+strand);
   var dnaSequence = dnaObj.sequence;
   var result = "<br>";
   for(var j = 0 ; j < dnaSequence.length ; j++){
     result=result+dnaSequence.charAt(j);
     if((j+1)%80===0){
       result=result+"<br>\n";
     }
   }

   // finally, print the sequence
   SemanticJSON.Library.write("DNA sequence: "+ result+"<br>\n");
}

コード 7.11. JavaScriptプログラム 'genomeSequenceTest.js'

プログラムが起動されると、次に掲げる結果が得られます。

DNA Sequence:
atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaactttagctttagctggtcgtga
ccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaatttatctggtaaacttttgggagctcatg
tagcccatgccggattaatcgtattctgggccggagcaatgaacttatttgaagtggcccattttgtacctgaaaagccc
atgtatgaacaaggattaattttacttccccacctagccactttaggatggggggtaggtcctgggggagaagttataga
cacctttccgtactttgtatctggagtacttcacttaatttcttctgcagttttgggctttggcggtatttatcatgcac
ttctgggacccgaaactcttgaagaatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccatt
ttgggtattcacttaattttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatga
tacctgggctccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttac
taaaatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatggtta
ggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgcacttgtatggtc
tggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgttgttttgtctggtttaata
ataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagctcaagcatttacttttctagttaga
gaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggtttaggtaaatacttaatgcgttctccgactgg
agaagttatttttggaggagaaacaatgcgtttttgggatctgcgtgctccctggttagaacctttaaggggtcctaacg
gtttggacttgagtaggttgaaaaaagacatacaaccttggcaagaacgacgttcggcagaatatatgactcatgctcct
ttaggttcgttaaattctgtagggggcgtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatc
tacctctcattttgttctaggatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgg
gatttgaaaaaggaattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

図 7.11. JavaScriptプログラム 'genomeSequenceTest.js' の起動と実行結果

7.3.6. Mathematica

コード 7.12 はMathematicaプログラム 'GenomeSequenceTest.nb' です。 コード 7.12 には各Mathematica式の評価結果も含まれています。


In[1]:= Needs["RIKEN`BASE`SemanticJSON`" ]
Out[1]:= Package RIKEN`BASE`JSON` loaded. (rev: 20100201-1)
         Package RIKEN`BASE`SemanticJSON` loaded. (rev: 20100201-1)

        (* Set a URL for Semantic-JSON service at http://semantic-json.org/json *)
In[2]:= $JsonServerURL = "http://semantic-json.org/json"
Out[2]:=
http://semantic-json.org/json

        (* Obtains a list of statements start with the individual labeled by \ "ATCG00280" *)
In[3]:= statements = GetValue[Invoke["statements", "cria197s11ria197s1i"], "list"];

        (* Obtains start, end, strand data and the URI of individual associated with a genome sequence from the list of statements *)
In[4]:=Map[Module[{propertyURI, propertyName, strandURI},
           propertyURI = GetValue[GetValue[#, "property"], "URI"];
           propertyName = GetValue[Invoke["name", "en", propertyURI], "name"];
           If[Equal[propertyName, "start"], start = ToString[GetValue[GetValue[#, "object"], "value"]]];
           If[Equal[propertyName, "end"], end = ToString[GetValue[GetValue[#, "object"], "value"]]];
           If[Equal[propertyName, "strand"], strandURI = GetValue[GetValue[#, "object"], "URI"]; strand = GetValue[Invoke["name", "en", strandURI], "name"]];
           If[Equal[propertyName, "genomeSequence"], genomeSequenceURI = GetValue[GetValue[#, "object"], "URI"]];] &, statements];


        (* Obtains part of the genome sequence *)
In[5]:= sequence = GetValue[Invoke["dna", genomeSequenceURI, {"start=" <> start, "end=" <> end, "starnd=" <> strand}], "sequence"];

        (* Finally, prints the sequence *)
In[6]:= Print["DNA Sequence: ", sequence]
Out[6]:=
DNA Sequence: atgaaaaccttatattccctgaggaggttctaccacgtggaaacgctctttaatggaac
tttagctttagctggtcgtgaccaagaaaccaccggtttcgcttggtgggccgggaatgcccgacttatcaat
ttatctggtaaacttttgggagctcatgtagcccatgccggattaatcgtattctgggccggagcaatgaact
tatttgaagtggcccattttgtacctgaaaagcccatgtatgaacaaggattaattttacttccccacctagc
cactttaggatggggggtaggtcctgggggagaagttatagacacctttccgtactttgtatctggagtactt
cacttaatttcttctgcagttttgggctttggcggtatttatcatgcacttctgggacccgaaactcttgaag
aatcttttccctttttcggttatgtatggaaagatagaaataaaatgaccaccattttgggtattcacttaat
tttgttaggtgtaggtgcctttcttctagtattcaaggctctctattttgggggcgtatatgatacctgggct
ccgggagggggggatgtaagaaaaattacaaacttgactcttagcccaagtgttatatttggttatttactaa
aatctccctttgggggagaaggatggattgttagtgtggacgatttggaagatataattggaggacatgtatg
gttaggttccatttgtatatttggtggaatctggcatatcttaaccaagccttttgcatgggctcgccgcgca
cttgtatggtctggggaggcttacttgtcttatagtttagctgctttatctgtttgtggtttcattgcttgtt
gttttgtctggtttaataataccgcttaccctagtgagttttacggacctacggggccagaagcttctcaagc
tcaagcatttacttttctagttagagaccaacgtcttggagctaacgtggggtctgctcaaggacctacaggt
ttaggtaaatacttaatgcgttctccgactggagaagttatttttggaggagaaacaatgcgtttttgggatc
tgcgtgctccctggttagaacctttaaggggtcctaacggtttggacttgagtaggttgaaaaaagacataca
accttggcaagaacgacgttcggcagaatatatgactcatgctcctttaggttcgttaaattctgtagggggc
gtagctactgagatcaatgcagtcaattatgtctctccgagaagttggttatctacctctcattttgttctag
gatttttcctattcgtgggtcatttatggcacgcgggaagggctcgggcagcggcagcgggatttgaaaaagg
aattgatcgtgattttgaacctgttctttccatgactcctcttaactaat

コード 7.12. Mathematicaプログラム 'GenomeSequenceTest.nb' の評価結果


7.4. マウス表現型データベース上で推論を行う応用プログラム

ここではSciNetS上で統合されたマウス表現型データベースを扱うプログラム例を紹介します。ここで扱うマウス表現型データベースは、Japan Mouse Clinic (JMC)データベース (http://semantic-json.org/item/ria110i)と、Europhenome Mouse Phenotyping Resourceデータベース(http://semantic-json.org/item/ria109i)で、これらは共通のオントロジーとデータ構造を共有するMouse Phenotyping Experiment テンプレート (http://semantic-json.org/item/ria108i)に基づいて作成されています。

7.4.1. 統合されたデータベースの連結

まず初めに、JMCとEurophenomeの両データベースから抽出された部分データの連結を行うプログラムを紹介します。これらのプログラムはいずれもマウス個体のグループを定義するJMCのフォルダ‘Cohort' (http://semantic-json.org/item/cria109s4i)に属するページと、Europhenomeのフォルダ 'Group' (http://semantic-json.org/item/cria110s4i)に属するページをそれぞれ主語とするすべてのリンク(トリプル)の和集合を得るためのクライアントプログラムです。 これらプログラムは大きなものなので、ここではJava言語のプログラムのみを紹介します。その他の言語で記述されたプログラムは、当該言語のアーカイブをダンロードして参照してください。

コード 7.13. はクラス 'jp.riken.base.scines.JSON.test.MousePenotypeIntegrationTest' として実装されたJavaプログラムです。

package jp.riken.base.scines.JSON.test;

import jp.riken.base.scines.JSON.JSONClient;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class MousePhenotypeIntegrationTest {

   private final String[] defaultClassURIs = {"cria109s1i","cria110s1i"};
   private String serverReference = "http://semantic-json.org";
   private JSONClient jsonClient = null;
   private int limitNumOfInstances = 3;

   static public void main(String[] args) throws Exception{
      if( args.length > 2 ){
         String serviceRef = args[0];
         String command = args[1];
         String[] ids = new String[args.length-2];
         for( int i = 2; i < args.length; i++ ) {
            ids[i-2] = args[i];
         }
         MousePhenotypeIntegrationTest generator = new MousePhenotypeIntegrationTest(serviceRef);
         if( command.indexOf("c") >= 0 ) {
            generator.generateInstanceListByClasses(ids);
         }else{
            generator.generateInstanceList(ids);
         }
      }else{
         // Default operation
         MousePhenotypeIntegrationTest generator = new MousePhenotypeIntegrationTest("http://semantic-json.org");
         generator.generateInstanceListByClasses(new String[]{"cria109s4i","cria110s4i"});
      }
   }


   // Constructor: sets a server reference for a JSON client
   public MousePhenotypeIntegrationTest(String serverReference) {
      if( serverReference != null ){
         this.serverReference = serverReference;
      }
      jsonClient = new JSONClient(this.serverReference);
   }


   // Generate a list of records as lists of statements by specifying a list of class URIs
   public void generateInstanceListByClasses(String[] classURIs) throws Exception {
      if( classURIs == null ){
         classURIs = defaultClassURIs;
      }
      // Obtain a list of instances
      for( String classURI: classURIs){
         String className = jsonClient.invoke("name", "en", classURI, null).getString("name");
         System.out.println("Class: " + className + " (" + classURI + ")==============================");

         JSONObject[] instances = jsonClient.getJSONObjectList(jsonClient.invoke("instances", null, classURI, null));
         System.out.println(instances.length + " instances found. (limit: " + limitNumOfInstances + ")");
         int cnt = 0;
         for( JSONObject instance: instances ){
            String instanceID = instance.getString("ID");
            System.out.println(generateInstanceRecord(instanceID));
            cnt++;
            if( cnt >= limitNumOfInstances ){
               break;
            }
         }
      }
   }


   // Generate a list of records as lists of statements by specifying a list of instance URIs
   public void generateInstanceList(String[] instanceURIs) throws Exception{
      if( instanceURIs != null ){
         for( String instanceURI: instanceURIs){
            System.out.println(generateInstanceRecord(instanceURI));
            System.out.println();
         }
      }
   }


   // Generate a record as a list of statements by specifying an instance URI
   public String generateInstanceRecord(String instanceURI) throws Exception {
      // Obtain a list of statements
      String instanceName = jsonClient.invoke("name", "en", instanceURI, null).getString("name");

      JSONObject[] statements = jsonClient.getJSONObjectList(jsonClient.invoke("statements", null, instanceURI, null));
      StringBuffer sb = new StringBuffer();
      sb.append(instanceName);
      sb.append(" (");
      sb.append(instanceURI);
      sb.append(")\n");
      for( JSONObject statement: statements){
         String propertyURI = statement.getJSONObject("property").getString("ID");
         String propertyName = jsonClient.invoke("name", "en", propertyURI, null).getString("name");
         sb.append("\t ---");
         sb.append(propertyName);
         sb.append(" (");
         sb.append(propertyURI);
         sb.append(")---> ");
         if( statement.containsKey("literalDataType")){
            // literal
            String value = null;
            if( statement.getString("literalDataType").equals("xsd:string")){
               JSONArray array = statement.getJSONArray("object");
               for( int i = 0; i < array.size(); i++ ){
                  JSONObject obj = array.getJSONObject(i);
                  if( obj.getString("lang").equals("en")){
                     value = obj.getString("value");
                     break;
                  }
               }
            }else{
               JSONObject obj = statement.getJSONObject("object");
               value = obj.getString("value");
            }
            sb.append(value);
            sb.append(" (Literal)");
         }else{
            JSONObject object = statement.getJSONObject("object");
            String objectType = object.getString("dataType");
            if( objectType.equals("Instance") || objectType.equals("Class")){
               String objectID = object.getString("ID");
               String objectName = jsonClient.invoke("name", "en", objectID, null).getString("name");
               sb.append(objectName);
               sb.append(" (");
               sb.append(objectID);
               sb.append(")");
            }
         }
         sb.append("\n");
      }
      return sb.toString();
   }
}

コード 7.13. クラス 'jp.riken.base.scines.JSON.test.MousePhenotypeIntegrationTest' として実装されたJavaプログラム。 このプログラムは、マウス個体のグループを定義するフォルダ‘Cohort’ (http://semantic-json.org/item/cria109s4i/)とフォルダ‘Group’ (http://semantic-json.org/item/cria110s4i/)に属している各ページを主語とするリンク(トリプル)の和集合を得るクライアントを実装したものです。

プログラムが起動されると、次に掲げる結果が得られます。


% java jp.riken.base.scines.JSON.test.MousePhenotypeIntegrationTest

Class: Cohort (cria109s4i)==============================
100 instances found. (limit: 3)
Clinical Chemistry-Creatine kinase-Tpm1 Het_female (cria109s4ria109u494i)
         ---Individual Organism (prib23s73i)---> M00045201 (baseline) (cria109s5ria109u1311i)
...
         ---phenotypic sex (prib23s79i)---> female (cria73s26ria73s1i)
         ---Genotype (prib23s87i)---> Tpm1 Het (cria73s69ria109u48i)
...
Class: Cohort (cria110s4i)==============================
10 instances found. (limit: 3)
B6;D2-Polg_homo_female+male (cria110s4ria110s10i)
         ---by Whom (prib23s56i)---> Technology and Develoment Team for Mouse Phenotype Analysis: Japan Mouse Clinic (crib140u2rib140u455i)
         ---has_body part (prib23s71i)---> whole body of B6;D2-Polg< Rgsc625/Rgsc625 > female and male (cria90s35ria90s2i)
         ---Individual Organism (prib23s73i)---> 0000064009 (cria110s5ria110s9i)
...
         ---Genotype (prib23s87i)---> Polg (Rgsc625/Rgsc625) (cria73s69ria73s2i)
...

図 7.13. Javaクラス 'jp.riken.base.scines.JSON.test.MousePhenotypeIntegrationTest' の起動とその実行結果

7.4.2. 遺伝子型の推論

ここで紹介するプログラムは、遺伝子型の情報を推論し、データスキーマを変更する操作を行うものです。 遺伝子型は、図7.14.に示すように、フォルダパス‘Annotation of Phenotype Data’ → ‘Attribute’ → ‘Entity’ → ‘Genotype’に従って表現型の注釈データを起点に取得します。 そして、この推論結果として得られる‘Annotation of Phenotype Data’から ‘Genotype’に至るフォルダパスの起点と終点を直接結ぶ新たなプロパティ‘inferred Genotype’を定義します。 この機能を実現するプログラムは大きなものなので、以下ではJava言語によるプログラムのみを紹介します。その他のプログラミング言語による実装ついては、当該プログラミング言語のアーカイブをダンロードし参照してください。


図 7.14.  推論結果の記述に用いられるプロパティ 'inferred Genotype' の定義



コード 7.14 はクラス 'jp.riken.base.scines.JSON.test.GenotypeInference' として実装されたJavaプログラムです。

package jp.riken.base.scines.JSON.test;

import java.util.ArrayList;
import jp.riken.base.scines.JSON.JSONClient;
import net.sf.json.JSONObject;

public class GenotypeInference {

   private String serverReference = "http://semantic-json.org";
   private JSONClient jsonClient = null;
   private String measuredTraitPropertyURI = "prib23s58i";
   private String inheresInPropertyURI = "prib23s96i";
   private String genotypePropertyURI = "prib23s87i";

   public static void main(String args[]) throws Exception {
      if (args.length != 2) {
         args = new String[] { "http://semantic-json.org", "cria110s1ria110s188i" };
      }
      GenotypeInference ig = new GenotypeInference(args[0]);
      ig.inferenceGenotype(args[1]);
   }

   public GenotypeInference(String serverReference) {
      if (serverReference != null) {
         this.serverReference = serverReference;
      }
      jsonClient = new JSONClient(this.serverReference);
   }

   public void inferenceGenotype(String instanceURI) throws Exception {
      // Obtain a name of instance specified by instanceURI
      String instanceName = jsonClient.invoke("name", "en", instanceURI, null).getString("name");

      // Obtain property names
      String measuredTraitPropertyName = jsonClient.invoke("name", "en", measuredTraitPropertyURI, null).getString("name");
      String inheresInPropertyName = jsonClient.invoke("name", "en", inheresInPropertyURI, null).getString("name");
      String genotypePropertyName = jsonClient.invoke("name", "en", genotypePropertyURI, null).getString("name");

      int count = 1;
      JSONObject[] morphologyObjects = getObjects(instanceURI, measuredTraitPropertyURI);
      for (JSONObject morphologyObject : morphologyObjects) {
         String morphologyObjectName = jsonClient.invoke("name", "en", morphologyObject.getString("ID"), null).getString("name");
         JSONObject[] tailObjects = getObjects(morphologyObject.getString("ID"), inheresInPropertyURI);
         for (JSONObject tailObject : tailObjects) {
            String tailObjectName = jsonClient.invoke("name", "en", tailObject.getString("ID"), null).getString("name");
            JSONObject[] genotypeObjects = getObjects(tailObject.getString("ID"), genotypePropertyURI);
            for (JSONObject genotypeObject : genotypeObjects) {
               String genotypeObjectName = jsonClient.invoke("name", "en", genotypeObject.getString("ID"), null).getString("name");

               StringBuffer sb = new StringBuffer();
               sb.append("Inference(");
               sb.append(count);
               count++;
               sb.append(")==================================================================\n");
               sb.append(instanceName);
               sb.append("(");
               sb.append(instanceURI);
               sb.append(")\n");
               // property: measured Trait
               sb.append("\t --- ");
               sb.append(measuredTraitPropertyName);
               sb.append("(");
               sb.append(measuredTraitPropertyURI);
               sb.append(") ---> ");
               sb.append(morphologyObjectName);
               sb.append("(");
               sb.append(morphologyObject.getString("ID"));
               sb.append(")\n");
               // property: inheres In
               sb.append("\t --- ");
               sb.append(inheresInPropertyName);
               sb.append("(");
               sb.append(inheresInPropertyURI);
               sb.append(") ---> ");
               sb.append(tailObjectName);
               sb.append("(");
               sb.append(tailObject.getString("ID"));
               sb.append(")\n");
               // property: genotype
               sb.append("\t --- ");
               sb.append(genotypePropertyName);
               sb.append("(");
               sb.append(genotypePropertyURI);
               sb.append(") ---> ");
               sb.append(genotypeObjectName);
               sb.append("(");
               sb.append(genotypeObject.getString("ID"));
               sb.append(")\n");
               // print the inferred property: inferred genotype
               sb.append("Inferred Property--------------------------------------------------------------\n");
               sb.append(instanceName);
               sb.append("(");
               sb.append(instanceURI);
               sb.append(")\n");
               sb.append("\t --- inferred genotype ---> ");
               sb.append(genotypeObjectName);
               sb.append("(");
               sb.append(genotypeObject.getString("ID"));
               sb.append(")\n===============================================================================\n");
               System.out.println(sb.toString());
            }
         }
      }
   }

   // Obtain a list objects of statements whose subjects are specified by the given instanceURI and properties are specified by the given propertyURI
   private JSONObject[] getObjects(String instanceURI, String propertyURI)
         throws Exception {
      JSONObject[] statements = jsonClient.getJSONObjectList(jsonClient.invoke("statements", null, instanceURI, null));
      ArrayList results = new ArrayList();
      for (JSONObject statement : statements) {
         String propURI = statement.getJSONObject("property").getString("ID");
         if (propURI.equals(propertyURI)
               && !statement.containsKey("literalDataType")) {
            JSONObject obj = statement.getJSONObject("object");
            String objectType = obj.getString("dataType");
            if (objectType.equals("Instance") || objectType.equals("Class")) {
               results.add(obj);
            }
         }
      }
      return results.toArray(new JSONObject[0]);
   }

}

コード 7.14. クラス 'jp.riken.base.scines.JSON.test.GenotypeInference' として実装されたJavaプログラム。このプログラムは、ページパス ‘Ano_SHQ34_hom_M’ (フォルダ ‘Annotation of Phenotype Data’) → ‘tail morphology of B6;D2-Polg <Rgsc625/Rgsc625> male’ (フォルダ ‘Attribute’) → ‘tail of B6;D2-Polg <Rgsc625/Rgsc625> male’ (フォルダ ‘Entity’) → ‘Polg (Rgsc625/Rgsc625)’ (フォルダ ‘Genotype’) を推論し、推論結果の始点と終点すなわち‘Ano_SHQ34_hom_M’ と ‘Polg (Rgsc625/Rgsc625)’をプロパティ 'inferred genotype' で直接つないだトリプルを得る機能を備えたクライアントプログラムです。

プログラムが起動されると、次に掲げる結果が得られます。


% java jp.riken.base.scines.JSON.test.GenotypeInference

Inference(1)==================================================================
Ano_SHQ34_hom_M(cria110s1ria110s188i)
         --- Measured trait(prib23s58i) ---> tail morphology of B6;D2-Polg< Rgsc625/Rgsc625 > male(cria73s63ria73s13i)
         --- inheres in(prib23s96i) ---> tail of B6;D2-Polg< Rgsc625/Rgsc625 > male(cria90s2ria90s1i)
         --- Genotype(prib23s87i) ---> Polg (Rgsc625/Rgsc625)(cria73s69ria73s2i)
Inferred Property--------------------------------------------------------------
Ano_SHQ34_hom_M(cria110s1ria110s188i)
         --- inferred genotype ---> Polg (Rgsc625/Rgsc625)(cria73s69ria73s2i)
===============================================================================

図 7.15. Javaクラス 'jp.riken.base.scines.JSON.test.GenotypeInference' の起動とその実行結果

8. 応用プログラム

8.1. オントロジーツリー表示

Gene OntologyやPlant Ontologyなどのライフサイエンス分野のオントロジがSciNetSに登録されています。Semantic-JSONを用いて、オントロジタームをツリー表示し閲覧できるグラフィカルユーザインターフェイスが、SciNetSのWeb応用プログラムとして開発され配置されています。


図 8.1. URI http://scinets.org/sw/wiki/en/cria130u7131i で指定される、Plant Ontology のターム'seeding growth' の表示例。

図 8.1. は、URI http://scinets.org/sw/wiki/en/cria130u7131i で指定される、Plant Ontology のターム'seeding growth' の表示例です。 この例では、POターム'seeding growth PO:0007131'を起点としています。 この起点ノードの祖先ノードについては、is_a関係で結ばれた祖先ノードはSemantic-JSON命令'superClasses'を用いて、その他の関係で結ばれた祖先ノードはSemantic-JSON命令'reverseStatements'を用いて取得され、表示されます。 同様に、子ノードの取得については、is_a関係で結ばれた子ノードはSemantic-JSON命令'subClasses'を用いて、その他の関係で結ばれた子ノードはSemantic-JSON命令'statements'を用いて取得され、表示されます。

8.2. SciNetS JavaScriptプログラミング環境

SciNetSには、Semantic-JSONを介したセマンティックウェブデータへのアクセスを可能にするJavaScriptプログラムを開発するグラフィカルユーザインターフェイスが実装され備わっています。


図 8.2. JavaScriptプログラム環境のグラフィカルユーザインターフェイスのスナップショット。(This environment requires log-on.)

図 8.2. はグラフィカルユーザインターフェイスのスナップショットです。 このインターフェイスには、JavaScriptプログラムエディタ、実行結果モニタパネル、ロガーコンソールが備わっています。 ユーザはSciNetS JavaScriptライブラリと呼ぶライブラリで定義されている関数を呼び出すJavaScriptプログラムを記述することができます。 このライブラリはSemantic-JSONを活用し開発されており、実行ログ取得機能と実行結果文字列の表示機能が実装されています。 ロガーコンソールには、Semantic-JSON命令を呼び出した結果とその状態を表示させることができ、またユーザプログラムの実行フローを制御する機能が備わっています。