Exploring the Ontology with EMMOntoPy#
This notebook shows how to use EMMOntoPy, a Python interface for OWL ontologies based on EMMO, to retrieve structured information from the domain-battery ontology.
EMMOntoPy makes it simple to:
- Retrieve ontology classes and properties by label 
- Access rich metadata (like - elucidation,- IEVReference)
- Integrate semantic battery data into other tools or pipelines 
Let’s explore the BatteryCell class from the battery ontology.
[82]:
from ontopy import get_ontology
# Loading from web
battinfo = get_ontology('https://w3id.org/emmo/domain/battery/inferred').load()
Access a Class from the Ontology#
We start by retrieving the BatteryCell class from the ontology. Each class has a globally unique identifier (IRI) and carries metadata that helps us understand its role in the ontology.
[ ]:
battery = battinfo.BatteryCell
# Print its IRI (unique identifier in the ontology)
print("IRI:", battery.iri)
IRI: https://w3id.org/emmo/domain/battery#battery_68ed592a_7924_45d0_a108_94d6275d57f0
View Properties Associated with the Class#
We can retrieve the object and data properties that are defined for this class using .get_class_properties(). These properties describe the relationships and attributes a BatteryCell can have.
[84]:
# Retrieve all properties (object & data) where BatteryCell is in the domain
print("Class Properties:")
for p in battery.get_class_properties():
    print(f" - {p}")
Class Properties:
 - core.altLabel
 - emmo.IEVReference
 - emmo.elucidation
 - core.prefLabel
View Annotations Like Elucidation and Standards References#
Ontology classes often carry rich semantic annotations such as elucidation (a human-readable explanation) or IEVReference (a standards reference, e.g. from IEC). These are useful for interoperability and traceability.
[85]:
# Print annotation properties
print("Elucidation:", battery.elucidation)
print("IEV Reference:", battery.IEVReference)
Elucidation: [locstr('basic functional unit, consisting of an assembly of electrodes, electrolyte, container, terminals and usually separators, that is a source of electric energy obtained by direct conversion of chemical energy.', 'en')]
IEV Reference: ['https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=482-01-01']
Explore the Class Hierarchy#
The .is_a attribute shows the direct superclass(es) of the class, while .mro() (method resolution order) lists the full inheritance chain from the most specific to the most general.
[86]:
# Show the direct superclass(es)
print("Immediate superclasses (is_a):", battery.is_a)
# Show the method resolution order (full class inheritance chain)
print("Full inheritance chain (MRO):")
for cls in battery.mro():
    print(f" - {cls}")
Immediate superclasses (is_a): [battery.Battery, electrochemistry.ElectrochemicalDevice]
Full inheritance chain (MRO):
 - battery.BatteryCell
 - battery.Battery
 - electrochemistry.ElectrochemicalDevice
 - emmo.Device
 - emmo.ManufacturedProduct
 - emmo.Product
 - emmo.Maximal
 - emmo.Fundamental
 - emmo.Structural
 - electrochemistry.ElectrochemicalCell
 - emmo.HolisticArrangement
 - emmo.HolisticSystem
 - emmo.Whole
 - emmo.QualifiedWhole
 - emmo.Holistic
 - emmo.Object
 - emmo.Persistence
 - emmo.Perspective
 - emmo.CausalStructure
 - emmo.Fusion
 - emmo.Item
 - emmo.EMMO
 - owl.Thing
 - <class 'object'>
Summary#
EMMOntoPy allows you to access structured ontology knowledge in Python with minimal effort:
- Use - .iri,- .is_a, and- .elucidationfor metadata
- Use - .get_class_properties()to integrate ontology structure with simulation tools, ELNs, or data pipelines
Next steps:
- Build instances of - BatteryCellusing JSON-LD or RDF
- Annotate test data using ontology terms 
- Query the ontology with SPARQL or integrate into a digital twin