skills/ontology/ontology-explorer/SKILL.md
Parse, navigate, and query materials science ontology structures — browse class hierarchies, inspect individual classes and their properties, look up object and data property definitions with domain/range, search for ontology terms by keyword, and parse or summarize raw OWL/XML files. Supports the OCDO ecosystem (CMSO, ASMO, CDCO, PODO, PLDO, LDO). Use when exploring what classes or properties an ontology provides, finding the right CMSO term for a crystal structure or simulation concept, understanding parent-child class relationships, or onboarding to an unfamiliar materials ontology, even if the user only says "what ontology terms describe my FCC copper simulation" or "show me the CMSO class hierarchy."
npx skillsauth add HeshamFS/materials-simulation-skills ontology-explorerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Enable an agent to understand, navigate, and query the structure of materials science ontologies without loading verbose OWL/XML files directly. Provides fast access to class hierarchies, property definitions, and domain-range relationships through pre-processed JSON summaries.
owl_parser.py and ontology_summarizer.py when fetching remote OWL files| Input | Description | Example |
|-------|-------------|---------|
| Ontology name | Registered ontology to query | cmso |
| Class name | A specific class to inspect | Material, UnitCell |
| Property name | A specific property to look up | hasMaterial, hasSpaceGroupNumber |
| Search term | Keyword to search across labels | crystal, lattice |
| OWL source | Path or URL to an OWL/XML file (for parsing/summarizing) | https://raw.githubusercontent.com/OCDO/cmso/main/cmso.owl |
What do you need?
├── Understand overall ontology structure
│ └── class_browser.py --ontology cmso --list-roots
├── Inspect a specific class
│ └── class_browser.py --ontology cmso --class <name>
├── Find properties for a class
│ └── property_lookup.py --ontology cmso --class <name>
├── Look up a specific property
│ └── property_lookup.py --ontology cmso --property <name>
├── Search for a concept
│ ├── class_browser.py --ontology cmso --search <term>
│ └── property_lookup.py --ontology cmso --search <term>
├── Parse a new/updated OWL file
│ └── owl_parser.py --source <path-or-url>
└── Generate/refresh a summary JSON
└── ontology_summarizer.py --source <url> --output <path>
| Script | Key Outputs |
|--------|-------------|
| scripts/owl_parser.py | results.metadata, results.classes, results.object_properties, results.data_properties, results.class_hierarchy |
| scripts/ontology_summarizer.py | results.output_file, results.statistics |
| scripts/class_browser.py | results.class_info, results.subtree, results.properties, results.path_to_root, results.roots, results.search_results |
| scripts/property_lookup.py | results.property_info, results.class_properties, results.search_results |
class_browser.py --list-roots to see the top-level concepts.class_browser.py --class <name> to see hierarchy, children, and applicable properties.property_lookup.py --property <name>.--search to find matching classes or properties.owl_parser.py to parse the raw OWL, then ontology_summarizer.py to generate a summary JSON.User: I have an FCC copper simulation. What CMSO classes should I use to describe it?
Agent: Let me explore the CMSO ontology to find the relevant classes.
[Runs: class_browser.py --ontology cmso --search "crystal" --json]
For an FCC copper simulation, the relevant CMSO classes are:
- **Computational Sample** → **Atomic Scale Sample**: your simulation is an atomic-scale sample
- **Material** → **Crystalline Material**: copper is crystalline
- **Crystal Structure**: describes the FCC arrangement
- **Unit Cell**: the repeating FCC unit cell (a=b=c=3.615 Å, α=β=γ=90°)
- **Space Group**: FCC copper is space group 225 (Fm-3m)
- **Chemical Element**: Cu
The key relationships:
AtomicScaleSample → hasMaterial → CrystallineMaterial → hasStructure → CrystalStructure → hasUnitCell → UnitCell
Shall I look up the specific properties for any of these classes?
# List root classes in CMSO
python3 skills/ontology/ontology-explorer/scripts/class_browser.py \
--ontology cmso --list-roots --json
# Inspect the Material class hierarchy
python3 skills/ontology/ontology-explorer/scripts/class_browser.py \
--ontology cmso --class Material --json
# Search for crystal-related classes
python3 skills/ontology/ontology-explorer/scripts/class_browser.py \
--ontology cmso --search crystal --json
# Find all properties for UnitCell
python3 skills/ontology/ontology-explorer/scripts/property_lookup.py \
--ontology cmso --class UnitCell --json
# Look up a specific property
python3 skills/ontology/ontology-explorer/scripts/property_lookup.py \
--ontology cmso --property "has space group" --json
# Parse a remote OWL file
python3 skills/ontology/ontology-explorer/scripts/owl_parser.py \
--source https://raw.githubusercontent.com/OCDO/cmso/main/cmso.owl --json
# Generate a summary JSON from an OWL file
python3 skills/ontology/ontology-explorer/scripts/ontology_summarizer.py \
--source https://raw.githubusercontent.com/OCDO/cmso/main/cmso.owl \
--output summary.json --json
| Error | Cause | Resolution |
|-------|-------|------------|
| Ontology 'X' not in registry | Ontology name not registered | Check references/ontology_registry.json for available names |
| Class 'X' not found | Class label doesn't match any entry | Use --search to find similar names, or --list-roots to see available classes |
| Property 'X' not found | Property label doesn't match | Use --search to find similar properties |
| Cannot parse OWL source | Invalid XML or unreachable URL | Check file path or URL; ensure the file is valid OWL/XML |
| Summary file not found | Summary JSON hasn't been generated | Run ontology_summarizer.py first |
UnitCell and range Basis means a unit cell has a basis.ChemicalElement and range xsd:string means an element has a string-valued attribute.hasVector applies to both SimulationCell and UnitCell), shown as SimulationCell | UnitCell.--ontology is validated against registered ontology names in ontology_registry.json (fixed allowlist)--class and --property names are validated against a safe-character pattern to prevent injection--search terms are length-limited and used only for substring matching against pre-processed labels (never interpolated into queries or code)--source for owl_parser.py accepts file paths or URLs; URLs are validated against https:// scheme onlyclass_browser.py and property_lookup.py read pre-processed JSON summary files from the references/ directory (read-only)owl_parser.py reads a single OWL/XML file from a local path or HTTPS URL; remote fetches have a 30-second timeoutontology_summarizer.py writes a single JSON summary file to the path specified by --outputowl_parser.py, ontology_summarizer.py, class_browser.py, property_lookup.py) with explicit argument lists; URL fetching is contained within the Python scripts with timeout limitseval(), exec(), or dynamic code generationshell=True)xml.etree.ElementTree which does not resolve external entities by default, mitigating XXE attacksrdfs:subClassOf only (not complex OWL restrictions)rdfs:comment, skos:definition, or IAO annotations| Date | Version | Changes | |------|---------|---------| | 2026-02-25 | 1.0 | Initial release with CMSO support |
development
Plan verification and validation campaigns for simulation codes using manufactured solutions, canonical benchmark problems, grid/time refinement, uncertainty propagation, and pass/fail acceptance criteria. Use when an agent needs to prove a solver, model, or result is trustworthy rather than only plausible.
testing
Map computational materials tasks onto workflow engines such as atomate2, jobflow, AiiDA, pyiron, or a simple one-off script. Use when deciding how to structure a reproducible campaign, DAG, restart strategy, provenance record, storage layout, or migration path from ad hoc scripts to managed workflows.
development
Plan molecular dynamics post-processing for materials simulations, including RDF, MSD and diffusion, VACF/VDOS, coordination numbers, bond-angle distributions, stress-strain curves, equilibration detection, PBC unwrapping, and trajectory format choices. Use before writing MD analysis scripts or trusting trajectory-derived results.
development
Triage cross-code simulation failures and propose safe retry ladders for nonconvergence, NaN/Inf, exploding energies, unstable timesteps, pressure blow-up, missing potentials, bad pseudopotentials, corrupted output, and incomplete runs. Use when an agent sees a failed or suspicious materials simulation and needs a defensible first response.