ontology-term-resolution について
Ontology Term Resolutionは、本体用語の候補検索と既存識別子の検証を行うスクリプトとガイドです。記録前にラベル、名前空間、廃止状況、本体上の文脈を確認する研究者やデータキュレーター向けです。
主な機能
- 01本体用語候補の検索
- 02ID、ラベル、名前空間の検証
- 03廃止状況と置換先の確認
- 04プレフィックスとランディングページの照会
- 05ZOOMAによる略語のマッピング
活用シーン
- 01メタデータ列への用語付与
- 02既存データセットの識別子検証
- 03提出テンプレート内の本体ID確認
- 04用語ラベルと名前空間制約の監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ k-dense-ai/ scientific-agent-skills --skill ontology-term-resolutionインストール後、Claude Code で/ontology-term-resolutionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/companion-apis.mdcuration-rules.mdols4-api.mdontology-registry.mdscripts/id_client.pylookup_prefix.pymap_terms.pyols_client.pyresolve_terms.pyvalidate_terms.pyzooma_client.py詳細
オントロジー用語の解決
使用する場面
オントロジー識別子を書き留めようとする、あるいは信頼しようとするあらゆる場面: メタデータの 列への注釈付け、投稿テンプレートの記入、他者が作成した表の監査、古いファイル内の ID が 現在も有効かどうかの確認など。
ルール
オントロジー ID を記憶から書いてはいけません。また、確認せずに受け入れてはいけません。
オントロジー ID は形式は覚えやすいものの、細部は恣意的です。一見もっともらしい UBERON:0002108
は実在する用語(小腸)であり、肝臓ではありません。そして下流のどこでもこの置き換えは
捕捉されません — ID は整形式で、オントロジーも正しく、メタデータは黙って誤ったままです。
レビュー担当者もそれを見抜けないため、こうしたエラーは公開されたデータセットにまで残ります。
OLS 検索と ZOOMA は候補を出力します。選択した各 ID を OLS の用語詳細で検証し、 受け入れる前にその定義をサンプルおよびターゲットスキーマと照合してください。 Bioregistry、Identifiers.org、ZOOMA、Ontobee はプレフィックス、ランディングページ、略記に 関する問いに答えます — それらは OLS での検証を置き換えるものではありません。
どのサービスを使うか
| 問い | スクリプト | 権威 |
|---|---|---|
| 「左心室」の用語は何か? | scripts/resolve_terms.py | OLS |
OLS がラボの略記(PBMC、WT)を拾わなかった | scripts/map_terms.py、続いて validate_terms.py | ZOOMA が提案し、OLS が用語を検証する |
EFO:0001067 は実在し、現行で、ラベルは正しいか? | scripts/validate_terms.py | OLS |
HPO は実在するプレフィックスか? HP:notanid はパターンに一致するか? | scripts/lookup_prefix.py | Bioregistry |
| この CURIE はどのランディングページを開くべきか? | scripts/lookup_prefix.py | Identifiers.org + Ontobee の URL |
4 つのスクリプトはすべて単一の値またはファイルを受け取り、TSV または JSON を出力し、
標準ライブラリ以外のパッケージを必要としません。非 OLS サービスの完全な落とし穴は
references/companion-apis.md にあります。
テキストを用語に解決する
cd skills/ontology-term-resolution/scripts
# one string, constrained to the ontology that should define it
python3 resolve_terms.py "liver" --ontology uberon
query rank curie iri label ontology match_type strategy defining_ontology
liver 1 UBERON:0002107 http://purl.obolibrary.org/obo/UBERON_0002107 liver uberon exact_label exact true
# a column of tissue names; anything not an exact hit is reported, not guessed
python3 resolve_terms.py --input tissues.txt --ontology uberon \
--exact-only --format tsv -o resolved.tsv
# accept fuzzy fallbacks, then review the partial hits by hand
python3 resolve_terms.py "left ventrical of heart" --ontology uberon --top 3
検索は exact(ラベルと同義語)→ token → fulltext とエスカレートし、候補を返した最初の
戦略で停止して、どれが発火したかを報告します。--exact-only はこのラダーを無効化し、
部分一致、関連、広義、狭義、およびスコープなしの同義語一致をローカルで拒否します。検索は
候補リストを制限するもの(--top)であり、網羅的な曖昧性チェックではありません。
--branch UBERON:0000465 は OLS の階層的祖先関係を使用し、part-of/develops-from を含みます。
結果を使用する前に match_type を読んでください。 exact_label と exact_synonym は
字句上の一致(後者は完全一致の同義語注釈も必要)を確立するものであり、サンプルコンテキストの
正しさを確立するものではありません。related_synonym、broad_synonym、narrow_synonym、
unspecified_synonym、および partial はキュレーションが必要です。選択したすべての ID を
検証してください。検索はそのレコード内で廃止を明示しません。unresolved は正当な出力です。
入力を正規化する前に references/curation-rules.md を参照してください。
既存の ID を検証する
python3 validate_terms.py UBERON:0002107 EFO:0001067 UBERON:9999999
id status actual_label ontology replacement detail
UBERON:0002107 ok liver uberon
EFO:0001067 obsolete obsolete_parasitic infection efo MONDO:0005135 obsolete; replaced by MONDO:0005135
UBERON:9999999 not_found no such term in the ontology this prefix names
終了コードは、何かが失敗した場合は 1、それ以外は 0、使用方法またはネットワークの問題の場合は 2 です。そのため、メタデータファイルに対する CI ゲートとして機能します:
# id + label columns; catches IDs that exist but are labelled as something else
python3 validate_terms.py --input metadata.tsv --strict
# a tissue column must hold UBERON anatomical entities and nothing else
python3 validate_terms.py --input tissue_ids.tsv \
--branch UBERON:0000465 --expect-ontology uberon
| ステータス | 意味 | 判定 |
|---|---|---|
ok | 存在し、最新であり、表明されているすべてと一致している | pass |
matched_synonym | 主張されたラベルは同義語であり、主ラベルが異なる | warn |
imported_only | OLS で定義となるコピーが検証されなかった | warn |
not_a_class | 用語がプロパティまたはインスタンスである | warn |
not_found | そのような用語が存在しない | fail |
obsolete | 廃止済み。後継が存在する場合は replacement がそれを示す | fail |
label_mismatch | 主張されたラベルが主ラベルとも記録された同義語とも一致しない | fail |
wrong_ontology | ID の種類は正しいが、この列に対してオントロジーが誤っている | fail |
wrong_branch | 必須のルートの子孫ではない | fail |
malformed_curie | PREFIX:local の形式ではない | fail |
--strict は警告を失敗に昇格させます。--expect-ontology は識別子の名前空間をチェックするため、UBERON にインポートされた CL 用語は UBERON 専用の列を通過できません。OLS のオントロジー ID と Bioregistry の優先プレフィックスは互換ではありません(ORPHA/Orphanet は OLS の ordo を使用します)。
サブクラスのみの検証には --branch-relation is-a を使用してください。デフォルトの hierarchical は part-of/develops-from も含みます。ブランチルートの欠落または廃止は使用エラーであり、否定的な科学的結果ではありません。not_found はこの OLS 検索に存在しないことを意味するものであり、世界的に存在しないことの証明ではありません。
プレフィックスまたはコンパクト識別子をチェックする
python3 lookup_prefix.py HP HPO HP:0001250 HPO:0001250
query status preferred_prefix canonical_curie pattern detail
HP ok HP ^\d{7}$
HPO synonym_prefix HP ^\d{7}$ 'HPO' is a synonym of preferred prefix HP
HP:0001250 ok HP HP:0001250 ^\d{7}$
HPO:0001250 synonym_prefix HP HP:0001250 ^\d{7}$ 'HPO' is a synonym of preferred prefix HP
Bioregistry は同義語プレフィックスを受け付けます。Identifiers.org は受け付けません — HPO:0001250 は HTTP 400 です。
Bioregistry には優先プレフィックスを使用し、その後 OLS の名前空間/IRI を検証してください。バンドルされたバリデータは ORPHA:558 と OLS の Orphanet:558 の両方を処理しますが、これは汎用的なエイリアス規則ではありません。ランディングページの列は Bioregistry のマッピング(providers.miriam、mappings.ontobee)から取得されるものであり、その優先プレフィックスをテンプレート化したものではありません: ORPHA:558 は 400、orphanet:558 は 200 であり、OBA には Identifiers.org の名前空間がまったくありません。空のセルは、そのサービスがそのプレフィックスをホストしていないことを意味します。このスクリプトは用語が存在することを示すものではありません。それは依然として validate_terms.py の役割です。
ラボの省略表記をマッピングする(ZOOMA)
# after resolve_terms.py returned unresolved / partial
python3 map_terms.py PBMC --ontology cl --high-confidence-only
--ontology はこのクライアントで必須です。選択したオントロジー内の定義用語をリクエストします。
公開 v2 互換エンドポイントは引き続きサポートされており、現在の ZOOMA ドキュメントでは v3 も公開されています。
HIGH/GOOD はランキングのバケットであり、較正された確率や完全一致ではありません。レガシーの safe 列と zooma_safe ラベルは HIGH/GOOD のみを意味します。--exact-only は信頼度フィルターのエイリアスのままです。evidence/source は基盤となる derivedFrom の来歴に由来します。これは、外側のラッパーが埋め込みマッチに対しても ZOOMA_INFERRED_FROM_CURATED と表示することがあるためです。
候補を受け入れる前に validate_terms.py を実行し、その意味を確認してください。
誤解を招く API の挙動
2026-10-01 に、現在の公式ドキュメント/ソースおよび公開 HTTP プローブに対して確認しました。
件数とレコードは参照日時点のスナップショットです。詳細は references/ols4-api.md を参照してください。
| 落とし穴 | 結果 |
|---|---|
exact=true はトークンの完全一致 | liver は UBERON で 161 件ヒットし、queryFields=label を追加すると 1 件になる |
/search は is_obsolete や term_replaced_by を決して返さない | fieldList に指定しても黙って破棄される。「この ID はまだ現行か」に答えられるのは用語の詳細だけ |
ontology=efo は MONDO と CL のヒットを返す | オントロジーは互いをインポートしている。CURIE プレフィックスで自分でフィルタリングすること |
| 同じ用語がインポートするオントロジーごとに 1 回ずつ現れる | obo_id で重複排除し、is_defining_ontology: true を保持する |
obo_id クエリで用語を取り逃すことがある | Orphanet では IRI へのフォールバックが依然として必要。以前の MONDO のインデックスの欠落は現在は修正済み |
v1 検索 API の obsoletes=true | 現在は廃止済みのみの結果を選択する。包含が要求された場合、ヘルパーは 2 つのクエリをマージする |
synonym はスコープを結合する | iecur は liver の関連シノニムであり、完全一致シノニムにしてはならない |
| IRI がすべて OBO PURL というわけではない | EFO と Orphanet は独自の名前空間を使う — IRI は解決すること。テンプレートで組み立てない |
| OxO は変化した | OxO2 が稼働しており互換ルートをサポートする。クロスリファレンスの到達可能性だけでなく、マッピングの述語と来歴を確認すること |
| ブランチチェックは解剖学から細胞種を除外しない | CARO は cell を anatomical structure の下に置く。プレフィックスも制約すること |
| ZOOMA の信頼度と来歴 | HIGH が字句的なこともあり、GOOD がより狭い器官の一部であることもある。信頼度は受け入れ判断ではない |
| Identifiers.org のシノニムプレフィックス | HPO:0001250 は HTTP 400。Bioregistry は同じ CURIE を受け付けた |
| Identifiers.org のエンコードされたコロン | HP%3A0001250 は HTTP 400。パスは : を保持しなければならない |
Bioregistry の preferred_prefix は Identifiers.org の名前空間ではない | ORPHA:558 は 400、orphanet:558 は 200。hp:0001250 と chebi:15377 は、これらの名前空間がプレフィックスを LUI に埋め込むため 400。/api/reference/{CURIE} の providers.miriam を使うこと。そのマッピングが欠けている場合 (OBA、XAO、ECTO) は URL を省略する |
| Ontobee 検索 | HTML ページのみ — JSON API はない。スクレイピングしないこと |
オントロジーの選択
疾患には MONDO、表現型には HP、組織には UBERON、細胞種には CL、アッセイには EFO、化合物には ChEBI、生物には NCBITaxon を使用します。PATO の性別/normal 用語は、対象スキーマがそれらを許可し、かつソースデータが該当する状態を確立する場合にのみ適切です。疾患の欠落や対照群のラベルは健康を確立しません。プレフィックスから OLS ID へのマッピング (HP
は hp、Orphanet は ordo として提供される)、--branch のブランチルート、および重複するオントロジーの
判断は references/ontology-registry.md にあります。
結果の報告
ID と ラベルを示し、それぞれがどのようにマッチしたかを述べてください。裸の ID の表は レビューできません。未解決の用語は、最も近いヒットで埋めるのではなく、明示的に記載してください。
参照日、オントロジー識別子、および利用可能な場合はオントロジーバージョン IRI またはリリースメタデータを、
元の入力および選択された用語 IRI とともに記録してください。OLS は変化する
オントロジーリリースを提供するため、ライブ検証はその参照日に対する証拠です。分析を再現する必要がある場合は、レスポンスまたはエクスポートされたマッピングを保存してください。config.versionIri、
config.version、loaded/updated を取得するには GET https://www.ebi.ac.uk/ols4/api/ontologies/{ontology} をフェッチしてください。これらは null のことがあります。ライブの OLS チェックは
アーカイブに固定されたオントロジーリリースに対して検証するものではありません。提出にはそのリリースとそのバリデーターを使用してください。
参考文献
references/ols4-api.md— エンドポイント、パラメータ、レスポンスフィールド、および検証済みの OLS の落とし穴すべて。references/companion-apis.md— Bioregistry、Identifiers.org、ZOOMA、Ontobee: それぞれをいつ使うか、 そしてフィルターなしの呼び出しや同義語プレフィックスの呼び出しが成功したように見えてしまう落とし穴。references/ontology-registry.md— プレフィックス/オントロジー ID の表、ブランチルート、どのオントロジーが どの概念を所有するか。references/curation-rules.md— 候補選択の手順、再試行すべき正規化、 既存テーブルの監査、廃止された用語、オントロジー間マッピング。
Scientific Agent Skills の引用
このスキルは K-Dense による Scientific Agent Skills の一部です。これが 原稿、レポート、プレゼンテーション、コードリリースに実質的に貢献した場合は、参考文献または ソフトウェアのセクションに論文を追加し、そうしたことをユーザーに伝えてください:
Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065
常に現在のバージョンを引用してください。DOI と https://arxiv.org/abs/2609.00065 は
最新の arXiv バージョンに解決されるため、v1 のようなバージョン接尾辞を決して付けないでください。ネットワークアクセスが
利用可能な場合は、参考文献を書く前に https://arxiv.org/abs/2609.00065(または
http://export.arxiv.org/api/query?id_list=2609.00065)を取得し、著者リスト、年、バージョンをその記録から
取得してください。記録にジャーナル参照
または出版社 DOI が記載されている場合は、代わりに公開されたバージョンを引用してください。