Hi all,

Stian, thank you very much for creating the case and providing the extra
information.

Dave, thanks for the answer. I'm pretty much a rookie when it comes to
using Jena so I'm probably doing stuff the wrong way. Thanks for the clear
explanation and detailed solution.

I was able to make the changes you suggested and have it working with no
issues and immediaty response time.

Thanks again for everything.

Regards,

Clementina

PS: I'll make sure to subscribe to the users list and use it instead in the
future.

2015-09-13 6:56 GMT-03:00 Dave Reynolds <[email protected]>:

> On 12/09/15 19:33, Maria Clementina Latanzi wrote:
>
>> Hi all,
>>
>> I'm working with Jena. I have an ontology with no more than 50
>> individuals, and I use Jena to
>> get individuals from Ontology by
>>
>> calling*listIndividual*(/*com.hp.hpl.jena.ontology.OntModel.listIndividuals*/).
>> When I call this method, it's taking a lot of time up to 20 seconds.
>> When debugging, it takes more than 1 minute to return. Other methods
>> like *listClass *return instantly.
>>
>> I found a stackoverflow question relevant to my problem but there was no
>> answer. This makes me think that the problem might be general for other
>> people and not just an issue with my ontology. Here's the link:
>>
>>
>> http://stackoverflow.com/questions/27645110/method-listindividual-takes-more-than-15-mins-with-dbpedia-2014-owl-2mb-siz#
>>
>> I'm wondering if you could help me figure out why does it take so long
>> to run. Any ideas? Is this normal and expected behavior because of the
>> size of the ontology?
>>
>
> Short answer:
> Use an explicit OntModelSpec when you create the ontology and use either
> OWL_MEM (if you don't need any inference) or OWL_MEM_MICRO_RULE_INF (if you
> do). On your example I get:
>
>     No OntModelSpec:        1800ms
>     OWL_MEM                   11ms
>     OWL_MEM_MICRO_RULE_INF:    1ms
>
> [I'm running on Java 7, with Jena2.]
>
> Long answer:
> listIndividuals is quite tricky for a tool like Jena which is quite RDF
> centric but does support OWL.
>
> If we know the ontology is supposed to be OWL *and* we are working with a
> sufficiently capable reasoner then we can just list the things of type
> owl:Thing and trust the reasoner to figure things out. That's the place
> where listIndividuals makes sense.
>
> If we are or might be in RDFS land then testing whether a resource is a
> individual is tricky because there is no such separation. In order to be
> useful listIndividuals/isIndividual tries to eliminate things that are
> explicitly classes or properties, and then looks for things which are
> instances of known types. That's a useful heuristic approach which people
> find useful though it has no formal justification - in RDFS everything is
> an individual. However, it's expensive. There was a time when
> listIndividuals tried to improve things but it proved too costly to
> maintain so these days listIndividuals takes the brute force approach of
> applying the isIndividual test to every resource.
>
> The problem is that the default OntModelSpec if you create an ontology
> with no explicit spec has RDFS inference. That is a good default choice for
> a wide range of uses but a real problem for listIndividuals. It tells us we
> can't rely on there being an owl:Thing-aware reasoner, so we have to use
> the expensive heuristic. But is also means there is an actual reasoner
> there which slows things down.
>
> Hence the more efficient alternatives are to either have no reasoner or to
> have an OWL reasoner. Or, if you really want RDFS, then don't use
> listIndividuals in the first place!
>
> [Aside: this is probably a question for the users list rather that the dev
> list.]
>
> Dave
>

Reply via email to