Articles

ROBOT:オントロジーのワークフローを自動化するためのツール

概要

ROBOTは、共通の高レベル機能とコマンドラインインターフェイスのライブラリを介して、オントロジー開発ライフサイクルをサポートするための標準化された構成可能な方法を提供します。 ROBOTはOWL API上に構築され、OWL APIがサポートするすべてのオントロジー構文(RDF/XML、OWL/XML、Turtle、OWL Functional Syntax、OWL Manchester Syntax、OBO format)と互換性があります。 ソースコードはJavaで書かれており、オープンソース(BSD3)ライセンスの下でGitHubリポジトリから入手できます。 また、Maven Central上のJavaライブラリとしてもリリースされています。 ロボットコードは、Java仮想マシン(JVM)上で実行される任意のプログラミング言語から使用できます。 コマンドライン・ツールは、Unix(macOSおよびLinuxを含む)、Windows、およびJVMでサポートされている他のプラットフォームで実行できるJARファイルとしてパッケージ化され このJARファイルは、コマンドラインから’robot’を使用するためのプラットフォーム固有のスクリプトとともに、ROBOT GitHubサイトからダウンロードできます。 インストール手順とドキュメントはhttp://robot.obolibrary.orgから入手できます。

アーキテクチャ

以前に、ツールの基本的なアーキテクチャについて説明しましたが、ここでは要約します。

ロボットのソースコードは、’robot-core’と’robot-command’の二つの部分で構成されています。 “robot-core”は、一般的なオントロジー開発タスクをサポートするライブラリであり、”operations”と呼ばれています。 ‘robot-command’は、”コマンド”に分割されたコマンドラインインターフェイスを提供し、それぞれが”robot-core”操作をラップします。

ほとんどのロボット操作は、OWL APIによって提供される低レベルの機能を、OBOコミュニティのオントロジー開発ワークフローに共通の高レベルの機能にパ 最適な互換性のために、ROBOTが使用するOWL APIの正確なバージョンと、最新のProtégéリリースで使用される正確なバージョンを一致させることを目指しています。 一部の操作ではApache Jenaを使用しています。 各操作は、OWLオントロジー、OWL推論者、OWLクラスなどを表すJavaオブジェクトで動作します。 各コマンドはコマンドラインオプション文字列とファイルで動作します。 これらのコマンドは、さまざまな変換と検証の手順も実行します。 コマンドラインインターフェイスは、コマンドの解析にApache Commons CLIライブラリを使用します。

各操作には、最終製品(JARファイル)が生成されるたびに実行されるJUnitで構築された一連の単体テストがあります。 ロボット内の各コマンドは、独自のwebページに文書化されています(例:http://robot.obolibrary.org/reason)。 WebページはMarkdown形式で作成され、統合テストの一部として解析および実行されるコマンドラインの例が埋め込まれており、結果は「ゴールドスタンダード」の出力セットと比較されています。 ROBOTの’diff’機能はオントロジーファイルを比較するときに使用され、それ以外の場合は標準ファイル比較が使用されます。 これは、ドキュメントとコードの正確性と一貫性を確保するのに役立ちます。 単体テストと統合テストは、コードベースへの貢献が検証されるように、Travis continuous integration(Travis CI)を介してコードベースへのプル要求に対して実行されます。

コマンドと操作

ROBOTは現在、15の操作(’robot-core’ライブラリ内)と19のコマンド(コマンドラインインターフェイス用)を提供しています。 いくつかのコマンドは非常に特殊化されており、ほとんどのオントロジープロジェクトはそれらのすべてを使用しません。 ここでは、最も一般的で一般的なコマンドの概要を説明します。 いずれの場合も、コア機能は’robot-core’ライブラリ内の操作によってサポートされており、JVM上で実行される任意のプログラミング言語からのコマンドラインイ

Convert

RDF/XML、Turtle、Manchester、OBO形式など、さまざまなOWLオントロジー形式がサポートされています。 さらなる相互運用性を可能にするために、ROBOTには、サポートされているオントロジー形式間で変更する’convert’コマンドが含まれています。 サポートされている形式の完全なリストは、”変換”のドキュメントにあります。

推論

推論は、ロボットの中で最も重要な操作の一つです。 ‘Reason’コマンドは、オントロジーの論理検証と自動分類の二つの用途をカバーしています。 どちらの場合も、ユーザーは推論を実行するために使用される優先推論を選択することができます。 Gene Ontologyのような大規模なオントロジーは、通常、OWL ELプロファイルを使用して迅速に推論を実行するELKを使用します。 リレーションオントロジーのようなより豊かな公理化を持つより小さなオントロジーは、典型的にはHermiTのような完全なOWL DL推論を使用する。

入力オントロジーで’reason’コマンドが呼び出されると、ROBOTはOWL API Reasonerインターフェイスを使用してreasonerを開始します。 結果として得られる推論は、オントロジーが論理的に一貫していることを確認するためにチェックされます:オントロジーは一貫していなければならず、不満足なクラスを持たない(すなわち、オントロジーは一貫していなければならない)。、矛盾を導入せずにインスタンス化することができないクラス)。 オントロジーがインコヒーレントである場合、これが報告され、実行が停止されます。 ロボットはオプションで、推論後に同等のクラスであると推論されないようにするなど、追加のチェックを実行できます。

オントロジーが一貫している場合、ロボットは自動分類を実行します。 すべての直接推論された”subClassOf”公理は、オントロジーに追加されます。 他のタイプの公理の生成を構成することができます。

すべての推論公理の主張は、多くの場合、生物医学的オントロジーのリリースプロセスの基本的なステップです。 これらのオントロジークラスの多くは、単一の名前付きスーパークラス(’a subClassOf B’、Bはオントロジー内の別のクラス)と、ゼロ以上の匿名スーパークラスおよび/または匿名の等価クラス(’a subClassOf/equivalentTo(r some B)’、rはオブジェクトプロパティ)のみをアサートします。 これらの匿名クラスは推論者が推論を行うことを可能にし、それがアサートされます。 したがって、オントロジーのリリースバージョンでは、クラスに複数の名前付きスーパークラスがある可能性があります。

‘reason’コマンドには”ヘルパー”コマンドが追加されています。 ‘Relax’コマンドは、単純な構造規則に従って付随するsubClassOf公理を主張します。’a equivalentTo(r some B)and…’という式は、’a subClassOf r some B’を伴います。 これは、バイオオントロジーの消費者が、GOやUberonのpartonomyなど、これらの表現をナビゲートすることを期待することが多いために便利です。 ‘Relax’コマンドは、オントロジー開発者が等価公理に加えてこれらをアサートする必要性から解放され、リリースワークフローにも含まれることがよくあります。 最後に、’reduce’コマンドは冗長なsubClassOf公理を削除し、’relax’の後に使用して、そのステップでアサートされた重複した公理を削除することができます。

‘materialize’コマンドは、式Materializing Reasoner(EMR)を使用して、’a subClassOf r some B’という形式の推論された式をアサートします。 ‘Reason’コマンドが推論された名前付きスーパークラスをアサートする場合、’materialize’は匿名スーパークラスをアサートします。 これは標準リリースサイクルの一部ではありませんが、完全なオントロジーサブセットを作成するのに有益です。

外部オントロジーでの作業

OBOファウンドリは、いくつかのオントロジーの一部が他のオントロジーのビルディングブロックとして使用できるように、モジュラー方式でオントロジーを調整することを目指しています。 例えば、ChEBI chemical entities ontologyは、遺伝子オントロジーにおける代謝プロセスおよび活動のためのOWL定義を構築するために使用される。 外部オントロジーを活用したり、オントロジー間の依存関係を管理したりするには、ユースケースに応じてさまざまな戦略があります。

Extract

‘extract’コマンドは、抽出するエンティティのセット(“シード”)に基づいてモジュールを作成します。 4つの異なる抽出方法(‘–method’オプションで指定)があります:MIREOT、TOP、BOT、およびSTAR。

ロボットのMIREOT抽出方法は、同じ名前の原則に基づいており、一つ以上の”ボトム”エンティティが指定されていることを必要とします。

ロボットのMIREOT抽出方法は、同じ名前の原則に基づいています。 必要に応じて、1つ以上の”top”エンティティを指定することもできます。 このコマンドは、入力オントロジーから”最上位”レベルまでのすべての”下位”レベルのエンティティとその祖先を抽出します。 “Top”エンティティが提供されていない場合、トップレベルエンティティ(‘owl:Thing’)までの祖先が含まれます。TOP、BOT、およびSTARメソッドは、OWL API Syntactic Locality Module Extraction(SLME)実装を使用しており、シードセットに論理的に関連するすべての情報を取得することが保証されています。 BOTメソッド(“bottom”)には、入力エンティティとその祖先との間のすべての関係が含まれます。 TOPメソッドには、入力エンティティとその子孫の間のすべてのリレーションシップが含まれます。 最後に、STARメソッドには、入力エンティティ間のすべてのリレーションシップのみが含まれます。 STARメソッドは最小の出力を生成しますが、TOPメソッドは通常最大の出力を生成します。

オントロジー用語の出所をサポートするために、’extract’コマンドには、抽出された各用語に抽出されたソースオントロジーのURLを注釈する’–annotate-with-source true’オプ

Remove and filter

‘remove’コマンドと’filter’コマンドは、OWL公理のきめ細かい操作に使用されます。 ‘remove’は、ユーザーがターゲットオントロジーから削除したい公理のセットを選択することを可能にします。 選択された公理のみが入力から新しい出力オントロジーにコピーされるように、’filter’は反対のことを行います。

これらの二つのコマンドは、エンティティのシードセットから開始し、関連するエンティティを検索するために様々なセレクタを適用し、最後に削除ま この機能を直接使用するのは少数の”パワーユーザー”だけですが、これらのコマンドは最終的には他の高レベルのコマンドの基盤を提供します。

これらのコマンドを使用して、指定された注釈を持つエンティティをフィルター処理または削除することにより、注釈に基づいてオントロジーのサブセットを生成することができます。 OBO Foundryオントロジーでは、クラスが使用される場所を指定するために、’in subset’プロパティでクラスに注釈を付けることがよくあります。 注釈セレクタを使用すると、ユーザーは正規表現を使用して完全な注釈値または一致するパターンを提供できます。

Merge

‘merge’コマンドは、二つ以上の別々の入力オントロジーを単一のオントロジーに結合します。 また、単一の入力オントロジーのインポートされたすべてのオントロジーを、リリースの作成時によく使用される一つのメインオントロジーにマージする機能も提供します。

インポートされたオントロジー(importステートメントで指定)を入力オントロジーにマージすることは自動的に実行されるため、ユーザーはインポートされた各オントロジーを入力として一覧表示する必要はありません。 この機能をオフにするオプション(‘–collapse-import-closure false’)を提供し、ユーザーがimportステートメントを持つが、インポートを別々にしたい複数の入力オントロジーをマージする場合をサポー

クエリとレポート

オントロジーのワークフローには、通常、オントロジーに対するクエリ操作が含まれ、オントロジーの編集者とユーザーの両方に有益なレポー クエリ操作は、検証チェックにも使用できます。 SPARQLクエリ言語は、オントロジメンテナがオントロジレポートと検証チェックを作成するための普遍的で宣言的な方法を提供します。 ROBOTは、’query’コマンドでクエリを実行したり、’verify’を使用して検証チェックを実行したりする便利な方法を提供します。 さらに、’report’コマンドにはOBOプロジェクトの標準クエリの構成可能なパッケージが含まれており、メンテナがSPARQLに精通している必要はありません。

Query

ROBOTの’query’コマンドは、オントロジーまたは他のRDFリソースに対してSPARQLクエリを実行します。 これは、オントロジメンテナが対話型クエリを実行するために使用することも、より一般的にはオントロジワークフローに標準クエリを含めるために使 ‘Query’コマンドは、OWL APIではなくApache Jenaを使用する数少ない操作の1つをラップします。 Jena APIを使用すると、ロボットはrdfモデルオブジェクトに含まれるトリプルのコレクションとしてオントロジーをロードできます。 これらのモデル用のSPARQLクエリエンジンを提供し、すべてのクエリを実行するために使用します。

‘SPARQL SELECT’クエリは、カンマ区切りまたはタブ区切りの結果テーブルを生成します。 ASKクエリはブール値を持つファイルを生成します。 ‘SPARQL CONSTRUCT’クエリはRDFファイルを生成し、ROBOTによってさらに処理するか、ロードされたオントロジーにマージし直すことができます。 ‘CONSTRUCT’は、”マクロ”スタイルの拡張を実行する便利な方法を提供します。 ‘SPARQL UPDATE’クエリは、オントロジー内のデータを直接挿入および/または削除します(RDFモデルとして)。 ROBOTは、更新されたRDFモデルをOWL API ontologyオブジェクトに変換して、サポートされている構文のいずれかに保存します。

‘query’コマンドは、インポートされたオントロジーを’–use-graphs’オプションで名前付きグラフとしてロードするオプションをサポートしています。 これが’true’に設定されている場合、インポートは名前付きグラフ(名前はthat ontologyのIRI)として照会でき、デフォルトのグラフはすべてのグラフの和集合です。 デフォルトのグラフを使用することは、クエリの前にすべてのインポートの’マージ’を実行することに似ていますが、インポートの区別は’マージ’で失われます。

Verify

‘verify’コマンドは、’SPARQL SELECT’実行のバリエーションです。 クエリは、オントロジーが所定の条件セットに準拠していることを確認するために使用されます。 SELECTクエリを指定すると、結果が返されない場合、’verify’は成功します(つまり、ステータスコード0で終了します)。 それは失敗します(すなわち クエリから返された結果がある場合は、ゼロ以外のステータスコードで終了します。 そのため、無効なデータを選択するSPARQLクエリを指定すると、’verify’コマンドはオントロジー(または他のリソース)にそのような無効なデータが含まれていないこ

Report

‘report’コマンドは、オントロジーの一連の構成可能な品質管理(QC)チェックを提供し、違反のスプレッドシートまたはYAML出力を返す’query’および’verify’の拡張 スプレッドシートはカンマまたはタブで区切られた形式で出力され、ユーザーが読みやすくなりますが、YAML出力は他のプログラムで簡単に解析できます。

QCチェックには、注釈チェック、論理チェック、およびメタデータチェックが含まれます。 注釈は人間の理解を容易にするために重要であるため、’report’コマンドは注釈が欠落しているか重複していると問題が発生する可能性があるケースを見つ 論理チェックは、オントロジーの構造的一貫性と一貫性を調べます。 最後に、’report’は、OBO Foundry recommendationsで指定されているように、不足しているオントロジーメタデータを識別します。報告される違反には、ERROR、WARN、INFOの3つのレベルがあります。 エラーは、ラベルの欠落や重複など、最も深刻なものです。 デフォルトでは、エラーレベルの違反がある場合、’report’コマンドは失敗し、自動化されたビルドプロセスを停止します。 これらのタイプの違反は、オントロジーを公開する前に修正する必要があります。 警告レベルの違反は、OBOプロジェクトでは通常意図しない、推論された一対一のクラスの等価など、できるだけ早く修正する必要があります。 INFOは、大文字で定義を開始し、ピリオドで終わるなど、OBO Foundryオントロジー全体の一貫性を維持するのに役立つ推奨される修正のためのものです。 ‘report’は、違反に関係なく、異なる違反レベルで失敗するか、失敗しないようにコマンドラインオプションで構成できます。 私たちは、ユーザーが適用することができ、手動修正のための提案と各QCチェックを文書化します。

各QCチェックのレポートレベルを持つデフォルトの”プロファイル”はROBOTによって提供されますが、ユーザーは独自のプロファイルを作成することもで これらのプロファイルでは、個々のチェックの違反レベルを変更したり、特定のチェックを除外したり、独自のチェックをSPARQLクエリとして追加したり たとえば、いくつかのオントロジーは、テキスト定義のないクラスをエラーとして分類し、他のオントロジーはこれを警告として分類することができます。 私たちの目標の一つは、OBOライブラリ内のすべてのオントロジーのセットに最大限に有用な標準プロファイルに収束し、共通の品質管理チェックの採用を奨励することです。

Repair

‘validate’と’report’で発生したほとんどの問題は手動で修正する必要がありますが、ROBOTは特定の問題を自動的に修正できる’repair’コマンドも提供します。 現在の実装では、重複した公理の注釈をマージし、推奨される置換で注釈が付けられたときに非推奨のクラスへの参照を更新します。 私たちは、正しい修正が明確であるために一般的な問題の広い範囲に”修復”を拡張するつもりです。

テンプレートオントロジー開発

ロボットは、テンプレート駆動オントロジー用語生成システムを提供します。 ユーザーは、Dead Simple OWL Design Patterns(DOS-DPs)など、独自の用語生成システムをワークフローにプラグインするオプションもあります。

膨大な量のデータがスプレッドシートやデータベースに格納されており、表形式は多くの種類のデータに適しています。 ロボットの’template’コマンドは、ユーザーが表形式のデータをRDF/OWL形式に変換することを可能にします。 ロボットテンプレートは、単にタブ区切り値(TSV)またはコンマ区切り値(CSV)ファイルであり、いくつかの特別な規則があります。

これらのテンプレートは、モジュラーオントロジー開発に使用できます。 テンプレートスプレッドシートは、オントロジーのソースコードリポジトリの一部として維持することができ、オントロジーファイルを直接編集する代わりに、開発者はオントロジー内の用語に対応するスプレッドシート内の行を編集する。 その後、’template’コマンドを使用してオントロジーのモジュールを生成し、オントロジーの編集者バージョンにインポート文として含まれ、リリースプロセス中にマージされます。

ワークフロー

ワークフローは、いくつかのワークフローシステムによって調整された一連のタスクで構成されます。 オントロジーのワークフローは、QCチェックの実行、インポートモジュールの構築、オントロジーの推論、さまざまなオントロジーリリース製品の生成などのタス

ROBOT自体はワークフローマネージャではありませんが、複数のコマンドを一つの長いコマンドに連鎖させることができます。 ロボットコマンドを連鎖させるとき、あるコマンドからの出力オントロジーは、次のコマンドへの入力として直接渡されます。 たとえば、オントロジーをマージし、マージされた製品を推論する二つのコマンドを置き換えるためにチェーンを使用することができます。

`robot merge–input ont-1。owl–ont-2を入力します。owl–出力がマージされました。ふくろう

ロボットの理由-入力がマージされました。owl–出力が推論されました。”ふくろう”

マージされた製品を作成し、その上で’reason’を実行する代わりに、1つのコマンドで実行できます:

`robot merge–input ont-1。owl–ont-2を入力します。owl reason–推論された出力。”ふくろう”

チェーンの主な利点は、オントロジーを各ステップ間でシリアル化して解析する必要がないことです; 同じOWL API ontologyオブジェクトがメモリ内に保持され、ロボットコマンドのチェーンを通過します。 大規模なオントロジーの場合、連鎖はロボットの性能を大幅に向上させることができます。

ロボットコマンドはコマンドラインで実行できるため、さまざまなワークフローシステムを使用できます。 私たちは、一般的にソフトウェアをコンパイルするために使用されるGNU Makeの使用を強調しています。 Makefileは、”ターゲット”を作成するために使用される一連のルールで構成されます。 オントロジー開発では、リリースのためのオントロジーの準備など、自動化されたタスクにMakefileが使用されます。 この場合、ターゲットは通常オントロジーファイルです。 ルールの”レシピ”は、’make’コマンドによって実行されるUnixスタイルのシステムコマンドです。

ロボットコマンドは、”ターゲット”を作るための”レシピ”として使用することができます。 一般的なワークフローでは、19個のロボットコマンドのすべてが使用されるわけではありません。 たとえば、すべてのオントロジプロジェクトがロボットテンプレートを使用するわけではないため、すべてのリリースワークフローに’template’コ オントロジーの開発者は、リリースを実行するために必要なコマンドを決定し、それらのコマンドを中心にワークフローを構築することができます。 図1は、リリースワークフローのために選択したロボットコマンドを組み合わせる標準的な方法を示しています。

図。 1
figure1

ロボットリリースワークフロー。 ROBOTを使用した一般的なリリースワークフロー。 オントロジー編集ファイルONT-edit。owlは、まずロボット”verify”による品質管理チェックとして検証されます。 次に、importsディレクトリ内の外部オントロジー用語のリストを含むテキストファイルを使用して、’extract’を使用してインポートモジュールを再生成し、インポートが最新であることを保証します。 ONT-edit.次に、owlは一連のロボットコマンド(’reason’、’relax’、’reduce’、および’annotate’)を介して渡され、リリースONTが生成されます。ふくろう 最後に、ONT。owlはOBO形式に変換されます

まず、品質管理チェックは、’report’または’verify’でオントロジーの編集者のバージョンに対して実行されます。 これらは、同等のクラス、注釈の末尾の空白、自己参照、不適切な相互参照構文、および欠落しているラベルを探します。 結果は、指定された’reports/’ディレクトリに保存されます。 エラーレベルの違反がある場合、タスクは失敗し、違反を簡単に識別できるように違反をテーブルに書き込みます。 このステップにより、開発者は新しい変更がオントロジー内に問題をもたらしたかどうかを迅速に確認し、リリース前に修正することができます。

最初のQCチェックステップが正常に完了したと仮定すると、次のステップはインポートモジュールを作成することです。 ロボット’extract’は、’imports/’ディレクトリに対応する用語ファイル(シードセット用)を持つインポートのリスト内の各エントリに対して実行されます。 これにより、すべてのインポートモジュールが同じ’imports/’ディレクトリに作成されます。 これにより、オントロジーが外部用語でリリースされると、すべての外部用語がソースオントロジーのリリースされたバージョンと最新の状態になります。 古い外部用語をリリースすると、OntobeeやOntology Lookup Serviceなどのオントロジー検索サービスに古いものと新しいものの両方の詳細が表示されるため、混乱を招く可能性があ 追加のQCチェックは、’verify’コマンドを使用するか、’report’を再度実行することによって、インポートを使用して完全なオントロジー上で実行できます。

最後に、メインリリース製品が作成されます: OWLファイルとOBOファイル。 OWLリリースを作成するために、編集者のファイルは一連の連鎖されたロボットコマンド’reason’、’relax’、’reduce’、および’annotate’を通過します。 この一連のコマンドは、リリースされたオントロジーが閲覧と理解が容易であり、冗長な公理がないことを保証するのに役立ちます。 これらのコマンドのいずれかが失敗した場合、Makeプロセスは対応するエラーメッセージで終了します。 たとえば、オントロジーが矛盾している場合、「理由」ステップは失敗します。 最後に、’annotate’コマンドはバージョンIRIをオントロジーメタデータに追加します。 その後、このOWLファイルはOBO形式に変換され、その時点ですべてのターゲットが日付のリリースディレクトリにコピーされます。

Ontology Development Kit

これらすべてのステップを調整するためのMakefileの作成は困難な場合があります。 オントロジー開発キット(ODK)を提供することで、オントロジー開発者にとってこれを容易にします。 これを使用して、標準レイアウトに従ってGitHubリポジトリを作成し、上で詳述したワークフローに従って標準のMakefileを作成できます。 結果のGitHubリポジトリは、Travis CIを介してワークフローの検証ステップ(「レポート」など)を実行するように自動的に構成されます。 このワークフローは、DOCKERHUB上でリリースされたODKコンテナを使用してDockerを使用して実行することもできます。 これにより、オントロジー開発者のローカルコンピュータ、Travis CI、またはJenkinsなどのスケーラブルビルドツールを使用して、ワークフローを簡単に実行できます。

ODKはROBOT上に構築され、ROBOTの有用性を実証していますが、完全な議論はこの記事の範囲を超えています。