You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Martin Weitzel <tr...@googlemail.com> on 2011/08/29 10:31:14 UTC

getResource(...).as(OntClass.class) fails after reasoning

[Notice: this post is slightly related to
http://tech.groups.yahoo.com/group/jena-dev/message/47883 -- Crosspost from
depreciated List@http://tech.groups.yahoo.com/group/jena-dev/message/47884]

Hi there,

I want to test within my InfModel, how modified (deleted, added) Statements
(via
Jena Java API) are dealt with by the Reasoner.

The Model is initiated by:
infModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);

Then, individuals are added like:
final OntClass classOfferedHandlingCondition = infModel.getResource(
nsImotrisOntology + "#OfferedHandlingCondition").as(OntClass.class);

final Individual individualOfferedService =
classOfferedServices.createIndividual(nsImotrisOntology + "#OfferedService_"
+
offeredService.id);

This works fine _before_ reasoning. However, after Reasoning, the OntClass
cast
fails with:

Cannot convert node
http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedServiceto
OntClass: it does not have rdf:type owl:Class or equivalent.

But the rdf:type is definitely there: I am printing the related statements
with
listStatements() right before the cast.

[Console Output:] -
(
http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedService
rdf:type owl:Class)

If I disable the reasoner within exact the same setup, the cast works fine.

The Reasoner is configured as follows:

final GenericRuleReasoner reasoner = new
GenericRuleReasoner(Rule.rulesFromURL(owlResourceReasonerRulesLayer
.getFile().toURI().toURL().toExternalForm()));
infModel = ModelFactory.createInfModel(reasoner, infModel);

And the Rules are shown here: http://pastebin.com/i96sM1W3


So: Why is the OntClass cast impossible after reasoning? I would appreciate
any
hints!

-- Weizen

Re: getResource(...).as(OntClass.class) fails after reasoning

Posted by Martin Weitzel <tr...@googlemail.com>.
Hi,

thank you for the solution: This is it!
I recently tried to minimize the application's object dissipation, but I
didn't noticed this side effect.

-- Martin


2011/8/29 Dave Reynolds <da...@gmail.com>

> Hi,
>
> On Mon, 2011-08-29 at 10:31 +0200, Martin Weitzel wrote:
>
> > I want to test within my InfModel, how modified (deleted, added)
> Statements
> > (via
> > Jena Java API) are dealt with by the Reasoner.
> >
> > The Model is initiated by:
> > infModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
> >
> > Then, individuals are added like:
> > final OntClass classOfferedHandlingCondition = infModel.getResource(
> > nsImotrisOntology + "#OfferedHandlingCondition").as(OntClass.class);
> >
> > final Individual individualOfferedService =
> > classOfferedServices.createIndividual(nsImotrisOntology +
> "#OfferedService_"
> > +
> > offeredService.id);
> >
> > This works fine _before_ reasoning. However, after Reasoning, the
> OntClass
> > cast
> > fails with:
> >
> > Cannot convert node
> >
> http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedServiceto
> > OntClass: it does not have rdf:type owl:Class or equivalent.
> >
> > But the rdf:type is definitely there: I am printing the related
> statements
> > with
> > listStatements() right before the cast.
> >
> > [Console Output:] -
> > (
> >
> http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedService
> > rdf:type owl:Class)
> >
> > If I disable the reasoner within exact the same setup, the cast works
> fine.
> >
> > The Reasoner is configured as follows:
> >
> > final GenericRuleReasoner reasoner = new
> > GenericRuleReasoner(Rule.rulesFromURL(owlResourceReasonerRulesLayer
> > .getFile().toURI().toURL().toExternalForm()));
> > infModel = ModelFactory.createInfModel(reasoner, infModel);
>
> > And the Rules are shown here: http://pastebin.com/i96sM1W3
> >
> >
> > So: Why is the OntClass cast impossible after reasoning? I would
> appreciate
> > any
> > hints!
>
> This is nothing to do with reasoning. We would need a complete minimal
> example to work out exactly what is going on but I suspect you are just
> getting the two models (the OntModel and the non-Ont-InfModel) mixed up
> since you assign them both to the same java variable. Depending on when
> you create the OntClasses and Individuals they will be pointing to one
> or other model and it would be easy to be printing from one but
> implicitly querying from the other.
>
> The easy way to get both inference and and OntModel API is to clone your
> own copy of the relevant OneModel spec:
>
>    OntModelSpec myspec = new OntModelSpec(OntModelSpec.OWL_MEM);
>    myspec.setReasoner(reasoner);
>    infModel = ModelFactory.createOntologyModel(myspec);
>
> Dave
>
>
>

Re: getResource(...).as(OntClass.class) fails after reasoning

Posted by Dave Reynolds <da...@gmail.com>.
Hi,

On Mon, 2011-08-29 at 10:31 +0200, Martin Weitzel wrote:

> I want to test within my InfModel, how modified (deleted, added) Statements
> (via
> Jena Java API) are dealt with by the Reasoner.
> 
> The Model is initiated by:
> infModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
> 
> Then, individuals are added like:
> final OntClass classOfferedHandlingCondition = infModel.getResource(
> nsImotrisOntology + "#OfferedHandlingCondition").as(OntClass.class);
> 
> final Individual individualOfferedService =
> classOfferedServices.createIndividual(nsImotrisOntology + "#OfferedService_"
> +
> offeredService.id);
> 
> This works fine _before_ reasoning. However, after Reasoning, the OntClass
> cast
> fails with:
> 
> Cannot convert node
> http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedServiceto
> OntClass: it does not have rdf:type owl:Class or equivalent.
> 
> But the rdf:type is definitely there: I am printing the related statements
> with
> listStatements() right before the cast.
> 
> [Console Output:] -
> (
> http://www.igd-r.fraunhofer.de/IMOTRIS/Ontologies/imotris.owl#OfferedService
> rdf:type owl:Class)
> 
> If I disable the reasoner within exact the same setup, the cast works fine.
> 
> The Reasoner is configured as follows:
> 
> final GenericRuleReasoner reasoner = new
> GenericRuleReasoner(Rule.rulesFromURL(owlResourceReasonerRulesLayer
> .getFile().toURI().toURL().toExternalForm()));
> infModel = ModelFactory.createInfModel(reasoner, infModel);

> And the Rules are shown here: http://pastebin.com/i96sM1W3
> 
> 
> So: Why is the OntClass cast impossible after reasoning? I would appreciate
> any
> hints!

This is nothing to do with reasoning. We would need a complete minimal
example to work out exactly what is going on but I suspect you are just
getting the two models (the OntModel and the non-Ont-InfModel) mixed up
since you assign them both to the same java variable. Depending on when
you create the OntClasses and Individuals they will be pointing to one
or other model and it would be easy to be printing from one but
implicitly querying from the other.

The easy way to get both inference and and OntModel API is to clone your
own copy of the relevant OneModel spec:

    OntModelSpec myspec = new OntModelSpec(OntModelSpec.OWL_MEM);
    myspec.setReasoner(reasoner);
    infModel = ModelFactory.createOntologyModel(myspec);

Dave