The explanation of imports processing and the resulting trees of models
is well-described in the Ontology documentation.
As I said to Ashish the sub-model system (which under the hood is
MultiUnion) is general purpose. You are free to change sub-models and
those changes are immediate reflected in the dynamic union. You are free
to use this mechanism how you wish.
There is a distinguished member of the union where updates to the union
get sent. So *if* you had a single mutable model and a collection of
imported models then it would be sensible to make the mutable model the
base model. Hence my original comment to Ashish. That's not the same as
saying that you are constrained to *only* use sub-models that way.
Dave
On 27/11/12 14:23, David Jordan wrote:
I had the same reaction. Is this described in the documentation? I have been
away from Jena for about a year, but luckily it looks like I have finally
gotten commitment to do some work with it again. I was not aware of this
characteristic of sub models when I started playing around with them a year
ago. I'll be doing another technical/performance evaluation, and things like
this are very important to know.
-----Original Message-----
From: ashish nijhara [mailto:[email protected]]
Sent: Tuesday, November 27, 2012 9:16 AM
To: [email protected]
Subject: Re: Storing to the correct sub model
Thanks Dave. you gave me a really interesting information.
Is that the purpose of designing sub models really? that sub models will
typically represent static things?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
So, my ontology set up is like the following:
parent ontology -> A.owl->only concepts
child ontology 1-> B.owl-> some new concepts+ some Named Individuals, this imports
A.owl child ontology 2-> c.owl-> some new concepts+ some Named Individuals [different
than B.owl], this also imports A.owl
data.rdf -> only individuals created during runtime [this data.rdf needs to be
divided into further sub models based on what data is required]. So it is a Tree
of Graphs essentially.
I attached the reasoner on the Ontmodel of child ontology 1 and added data.rdf
as a subModel to the OntModel. This data.rdf can have further sub models
(models directly mapped to graphs in a database using SDB), so I would need
correct keys (uris) of these of the submodels (graphs).
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If Jena is primarily designed to work the other way, then my approach may end
up using more memory or?
Thanks,
Ashish
On Tue, Nov 27, 2012 at 1:21 AM, Dave Reynolds <[email protected]>wrote:
On 23/11/12 08:10, ashish nijhara wrote:
Hi All,
I have a problem statement as the following:
I have an OntModel which has only stored concepts with pre-defined
individuals or named individuals. There is a reasoner attached to it.
I have a sub model which needs to contain only the working data. No
new concepts can be added here.
final OntModelSpec spec = OntModelSpec.OWL_DL_MEM;
final OntModel ontModel = ModelFactory.**createOntologyModel(spec);
ontModel.read(<url>);
final Reasoner reasoner = PelletReasonerFactory.**
theInstance().create();
reasoner.bindSchema(ontModel);
final OntModel dataModel = ModelFactory.**createOntologyModel();
ontModel.addSubModel(**dataModel);
ontModel.prepare();
...........
...........
...........
Now when I create an individual, I would like to add this to the subModel.
To do this, I need to find correct Sub Model.
ontModel.listSubModels() will return all the submodels (there are
more than one sub models to the ontModel).
How do I fetch my correct subModel that is the dataModel above? There
is no method in Jena to get me a particular subModel or it there
something I need to do more to achieve this.?
Seems like an odd arrangement. When you add statements to an OntModel
the additions go into the base model. So normal practice is to make
the things you don't want to change (like the ontology) the sub-models.
If you go round finding particular sub-models and adding directly to
them you will probably need to call rebind() on the OntModel to
restart the reasoner over the changed data.
If you really do want to use this sub-model arrangement they you will
need to keep an index of sub-models somewhere else. Jena itself is
just treating an OntModel as set of graphs, there's no associated
label or annotation on the graphs.
Dave