I'm basically following the lead of a couple of other Semantic Web projects. OWLAPI and Jena, the two Java libs for the Semantic Web, both do it this way, plus the Seth project, where I got the idea of metaclasses. That is, they all have some sort of oop class called 'ontology'.
Some explanation in terms of what a "model" is:
-think of "model" in terms of the MVC paradigm
-the RDF graph is the logical underpinning--in fact the base layer for the "model", as it provides the abstraction to state arbitrary predications. So, we have rdflib.graph.Graph as the Py class for this.
-the ontology notion ---notice I'm not referring to any specific class here-- is actually separate from the graph idea. It's another kind of "model", or as I like to think about it, it's another layer, the semantic or "ontological" layer. Furthermore, I think the layers should be separate, ie we can have the eltk.ontology.Ontology class as separate from the RDF "model".
So, I'd like to keep the eltk.ontology.Ontology as a separate layer, that is, not subclass rdflib.graph.Graph.
BUT, we're not really building an ontology per se, each time we read a file. We're just creating instances at the "ontology" layer. In the OWL/description logic world, there is a separation of 1) classes and relations from 2) class instances and statements. The former is called the TBox, and the latter is called the Abox. So, we're populating an ABox each time we read a file. Let me scratch my head about this, b/c I agree w. you that the nomenclature is confusing.
Scott