4.2 KiB
Ontology Quickstart
Step-by-step guide to using OWL ontologies to ground Cognee knowledge graphs
A minimal guide to using OWL ontologies to ground Cognee's knowledge graphs. You'll point Cognee at an ontology file during cognify and then ask ontology-aware questions.
Before you start:
- Complete Quickstart to understand basic operations
- Read Ontologies to understand the concepts
- Ensure you have LLM Providers configured
- Have an OWL ontology file (
.owl) in RDF/XML format - Have some text or files relevant to the ontology's domain
What Ontology Support Does
- Grounds entities and relations to your OWL ontology (classes, individuals, properties)
- Validates types via ontology domains/ranges and class hierarchy
- Improves graph completion answers for domain-specific queries
Step 1: Prepare an Ontology File
Start from a simple OWL file. Minimal ingredients:
- Classes (e.g.,
TechnologyCompany,Car) - Individuals (e.g.,
Apple,Audi) - Object properties with domain/range (e.g.,
produceswithdomain=CarManufacturer,range=Car)
Example ontology files:
examples/python/ontology_input_example/basic_ontology.owlexamples/python/ontology_input_example/enriched_medical_ontology_with_classes.owl
Step 2: Add Your Data
Add either raw text or a directory. Keep it relevant to your ontology.
import cognee
texts = [
"Audi produces the R8 and e-tron.",
"Apple develops iPhone and MacBook."
]
await cognee.add(texts)
# or: await cognee.add("/path/to/folder/of/files")
This simple example uses a list of strings for demonstration. In practice, you can add multiple documents, files, or entire datasets - the ontology processing works the same way across all your data.
Step 3: Cognify Your Data + Ontologies
Create the config which contains the information about the ontology,
to ground extracted entities/relations to the ontology.
Then, simply pass the config to the cognify operation.
import os
from cognee.modules.ontology.ontology_config import Config
from cognee.modules.ontology.rdf_xml.RDFLibOntologyResolver import RDFLibOntologyResolver
ontology_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "ontology_input_example/basic_ontology.owl"
)
# Create full config structure manually
config: Config = {
"ontology_config": {
"ontology_resolver": RDFLibOntologyResolver(ontology_file=ontology_path)
}
}
await cognee.cognify(config=config)
If omitted, Cognee builds a graph without ontology grounding. With an ontology, Cognee aligns nodes to classes/individuals and enforces property domain/range.
Step 4: Ask Ontology-aware Questions
Use SearchType.GRAPH_COMPLETION to get answers that leverage ontology structure.
from cognee.api.v1.search import SearchType
result = await cognee.search(
query_type=SearchType.GRAPH_COMPLETION,
query_text="What cars and their types are produced by Audi?",
)
print(result)
Phrase questions using ontology terms (class names, individual names, property language like "produces", "develops"). If results feel generic, check that the ontology contains the expected classes/individuals and that your data mentions them.
Code in Action
- Small cars/tech demo:
examples/python/ontology_demo_example.py - Medical comparison demo:
examples/python/ontology_demo_example_2.py
To find navigation and other pages in this documentation, fetch the llms.txt file at: https://docs.cognee.ai/llms.txt