commit e4fc9601f6902f285e93299ffd7350ffea351dc9 Author: Zhongwei Li Date: Sat Nov 29 17:51:44 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..0e16b7d --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "ontology-access-kit", + "description": "Skills for querying ontologies using the Ontology Access Kit (OAK)", + "version": "0.0.0-2025.11.28", + "author": { + "name": "Chris Mungall", + "email": "cjmungall@lbl.gov" + }, + "skills": [ + "./skills/ontology-access-kit" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d3619b --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# ontology-access-kit + +Skills for querying ontologies using the Ontology Access Kit (OAK) diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..7bd81f1 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,44 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:ai4curation/curation-skills:ontology-access-kit", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "72708fc18d1f829be261ec919c737f934ebb8e70", + "treeHash": "e85fa79861657b9e36badaa5226709a74a4a8e7e45164f568d82addc74ce2137", + "generatedAt": "2025-11-28T10:13:05.824382Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "ontology-access-kit", + "description": "Skills for querying ontologies using the Ontology Access Kit (OAK)" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "2ab38d78d22629c567c3a311b78997a04d3e73982cb47157cc7e9606643112c2" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "dbbbf44fa469b2245d5857dac937294c7af0da81867c62ac889a7788daac3157" + }, + { + "path": "skills/ontology-access-kit/SKILL.md", + "sha256": "59b5bfb1f7c5736daaa65bf847fb195b14012d1472708610bb0c6272a7bf077f" + } + ], + "dirSha256": "e85fa79861657b9e36badaa5226709a74a4a8e7e45164f568d82addc74ce2137" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/ontology-access-kit/SKILL.md b/skills/ontology-access-kit/SKILL.md new file mode 100644 index 0000000..17e56fa --- /dev/null +++ b/skills/ontology-access-kit/SKILL.md @@ -0,0 +1,105 @@ +--- +name: ontology-access-kit +description: Skills for querying ontologies using the Ontology Access Kit (OAK). This should only be used for complex ontology operations, for basic external ontology searching use the OLS MCP +--- + +# OAK Guide + +## Overview + +OAK is a powerful command line library for accessing ontologies. It can be installed via: + +- `uv add oaklib` +- `pip install oaklib` + +The main command is `runoak` + +## When to use + +OAK is generally to be used for more complex operations. + +- if you want to do basic search over external ontologies, you should favor the OLS MCP over OAK +- if you are working with local obo files, then hacky obo tools like `obo-grep.pl` may be better + +## Adapters + +You typically want to use the sqlite adapter. This gives you fast access to any ontology in OBO, plus a number of other commonly used ontologies, found in semantic-sql. + +Example: + +`runoak -i sqlite:obo:cl COMMAND COMMAND-OPTS ARGS` + +Note the `-i` comes (*before*) the command-specific opts + +You can also access any ontology in OLS or BioPortal: + +- `runoak -i bioportal:snomedct relationships SNOMEDCT:128351009` +- `runoak -i bioportal:efo tree -p i EFO:0004200` + +But some OAK commands may not be implemented. + +With OLS or BioPortal you can also do searches over all ontologies: + +- `runoak -i bioportal: info l~NovaSeq` +- `runoak -i ols: info l~NovaSeq` + +To work with local obo files: + +- `runoak -i impleobo:my_ont.obo info MY:1234 -O obo` + +## Common Operations + +You can find a list of all commands with `runoak --help`. oak is highly fully featured, and you are encouraged to +explore to find the functionality you need. We provide some examples below. + +We use `info` for many examples, but note that many options and arguments work across different commands + +* Lookup + * By exact label: `runoak -i sqlite:obo:cl info neuron` (returns `CL:0000540 ! neuron`) + * By exact label (multiple): `runoak -i sqlite:obo:uberon info finger toe` + * Search (any match): `runoak -i sqlite:obo:cl info 'l~T cell'` + * Search (starts with): `runoak -i sqlite:obo:cl info l^neuron` +* Fetching detailed info + * OBO format: `runoak -i sqlite:obo:cl info CL:0000540 -O obo` + * relationships: `runoak -i sqlite:obo:cl relationships --direction both CL:0000540` + * mappings: `runoak -i sqlite:obo:mondo mappings 'Marfan syndrome'` + * tree (is-a only): `runoak -i sqlite:obo:cl tree -p i CL:0000540` + * metadata: `runoak -i sqlite:obo:chebi term-metdata CHEBI:35235` +* Complex queries + * subclasses: `runoak -i sqlite:obo:cl info .sub CL:0000540 | head` + * disjunctions (OR): `runoak -i sqlite:obo:cl info .sub neuron .sub 'T cell' | tail` + * conjunctions: `runoak -i sqlite:obo:cl info .sub neuron .and .desc//p=i,p forebrain` (neurons and is-a/part-of the forebrain) + * minus: `runoak -i sqlite:obo:cl info .sub neuron .minus .desc//p=i,p forebrain` (neurons and NOT is-a/part-of the forebrain) +* Visualization + * `cl viz -p i,p,RO:0002215 'dopaminergic neuron' -o /tmp/dn.png` - subgraph from a CL term. + * note that graphviz requires installing og2dot +* Subsets + * list subsets: `runoak -i sqlite:obo:go subsets` - list all subsets (goslim_prokaryote etc) + * terms in subsets: `runoak -i sqlite:obo:go info .in goslim_generic` - all terms in a subset + * terms in subsets: `runoak -i sqlite:obo:go info .in goslim_generic .minus .in goslim_prokaryote` - all terms in a subset not in another +* Other + * `runoak lexmatch --help` for aligning ontologies + * `runoak statistics --help` for summary stats +## Common Options and Idioms + +### Graphs + +OAK is very graph oriented, following ontologies like GO, CL + +Typically for graph operations you want to operate over only is-a and part-of, so use `-p i,p` + +You can also specify RO/BFO ids. + +E.g. + +```bash +runoak -i sqlite:obo:ro info 'capable of' +RO:0002215 ! capable of +``` + +```bash +cl relationships -p RO:0002215 'dopaminergic neuron' +subject predicate object subject_label predicate_label object_label +CL:0000700 RO:0002215 GO:0061527 dopaminergic neuron capable of dopamine secretion, neurotransmission +``` +