sourish-rygbee / elk-reasoner

Automatically exported from code.google.com/p/elk-reasoner
Apache License 2.0
0 stars 1 forks source link

NullPointer Exception when classifying FMA #35

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1. Attempt to classify the FMA ontology from BioPortal 
(http://data.bioontology.org/ontologies/FMA/submissions/5/download?apikey=8b5b78
25-538d-40e0-9e9e-5ab9274a9aeb)
with ELK 0.4.2. I tested both OWLAPI 4.0.2 and OWLAPI 3.5.0.

What is the expected output? What do you see instead?

Classification terminates with a NullPointerException:

java.lang.NullPointerException
    at org.semanticweb.elk.util.hashing.HashGenerator.combinedHashCode(HashGenerator.java:85)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedObjectEntry.combinedHashCode(IndexedObjectEntry.java:54)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedObjectSomeValuesFromEntry.computeHashCode(IndexedObjectSomeValuesFromEntry.java:48)
    at org.semanticweb.elk.util.collections.entryset.StrongKeyEntry.<init>(StrongKeyEntry.java:56)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedObjectEntry.<init>(IndexedObjectEntry.java:50)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedClassExpressionEntry.<init>(IndexedClassExpressionEntry.java:45)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedObjectSomeValuesFromEntry.<init>(IndexedObjectSomeValuesFromEntry.java:43)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedEntryConverter.visit(IndexedEntryConverter.java:86)
    at org.semanticweb.elk.reasoner.indexing.entries.IndexedEntryConverter.visit(IndexedEntryConverter.java:57)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedObjectSomeValuesFrom.accept(IndexedObjectSomeValuesFrom.java:86)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedObjectSomeValuesFrom.accept(IndexedObjectSomeValuesFrom.java:91)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedObjectCache$IndexedClassExpressionViewFactory.createEntry(IndexedObjectCache.java:431)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedObjectCache$IndexedClassExpressionViewFactory.createEntry(IndexedObjectCache.java:423)
    at org.semanticweb.elk.util.collections.entryset.KeyEntryHashSet.get(KeyEntryHashSet.java:132)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedObjectCache.visit(IndexedObjectCache.java:163)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor$ClassOccurrenceUpdateFilter.visit(MainAxiomIndexerVisitor.java:304)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor$ClassOccurrenceUpdateFilter.visit(MainAxiomIndexerVisitor.java:254)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexObjectConverter.visit(IndexObjectConverter.java:194)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexObjectConverter.visit(IndexObjectConverter.java:59)
    at org.semanticweb.elk.owlapi.wrapper.ElkObjectSomeValuesFromWrap.accept(ElkObjectSomeValuesFromWrap.java:60)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor.indexSubClassOfAxiom(MainAxiomIndexerVisitor.java:145)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.AbstractElkAxiomIndexerVisitor.visit(AbstractElkAxiomIndexerVisitor.java:183)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.AbstractElkAxiomIndexerVisitor.visit(AbstractElkAxiomIndexerVisitor.java:63)
    at org.semanticweb.elk.owlapi.wrapper.ElkSubClassOfAxiomWrap.accept(ElkSubClassOfAxiomWrap.java:58)
    at org.semanticweb.elk.owlapi.wrapper.ElkClassAxiomWrap.accept(ElkClassAxiomWrap.java:51)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.DelegatingElkAxiomVisitor.visit(DelegatingElkAxiomVisitor.java:108)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.DelegatingElkAxiomVisitor.visit(DelegatingElkAxiomVisitor.java:74)
    at org.semanticweb.elk.owlapi.wrapper.ElkSubClassOfAxiomWrap.accept(ElkSubClassOfAxiomWrap.java:58)
    at org.semanticweb.elk.owlapi.wrapper.ElkClassAxiomWrap.accept(ElkClassAxiomWrap.java:51)
    at org.semanticweb.elk.reasoner.indexing.hierarchy.ChangeIndexingProcessor.visit(ChangeIndexingProcessor.java:57)
    at org.semanticweb.elk.owlapi.OwlOntologyLoader.load(OwlOntologyLoader.java:129)
    at org.semanticweb.elk.reasoner.stages.AxiomLoadingStage.executeStage(AxiomLoadingStage.java:121)
    at org.semanticweb.elk.reasoner.stages.AbstractReasonerStage.execute(AbstractReasonerStage.java:165)
    at org.semanticweb.elk.reasoner.stages.AxiomLoadingStage.execute(AxiomLoadingStage.java:45)
    at org.semanticweb.elk.reasoner.stages.LoggingStageExecutor.execute(LoggingStageExecutor.java:53)
    at org.semanticweb.elk.reasoner.stages.AbstractStageExecutor.complete(AbstractStageExecutor.java:55)
    at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.complete(AbstractReasonerState.java:145)
    at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.loadAxioms(AbstractReasonerState.java:306)
    at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.isInconsistent(AbstractReasonerState.java:284)
    at org.semanticweb.elk.owlapi.ElkReasoner.isConsistent(ElkReasoner.java:854)
    at org.protege.editor.owl.model.inference.OWLReasonerManagerImpl.getReasonerStatus(OWLReasonerManagerImpl.java:236)
    at org.protege.editor.owl.model.inference.OWLReasonerManagerImpl$1.uncaughtException(OWLReasonerManagerImpl.java:277)
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1986)

What version of the product are you using? On what operating system?

ELK 0.4.2, OWLAPI 3.5.0 and OWLAPI 4.0.2, on Ubuntu GNU/Linux.

Original issue reported on code.google.com by leechuck2@gmail.com on 24 May 2015 at 11:40

GoogleCodeExporter commented 8 years ago
Thank you for your detailed bug report! I can confirm that I was able to 
reproduce this problem.

Further analysis has revealed that this version of FMA is not a valid OWL 2 
ontology. Specifically, there are three axioms with the empty 
ObjectIntersectionOf:

SubClassOf(<http://purl.org/sig/ont/fma/fma256019> 
ObjectSomeValuesFrom(<http://purl.org/sig/ont/fma/attributed_part> 
ObjectIntersectionOf()))
SubClassOf(<http://purl.org/sig/ont/fma/fma242199> 
ObjectSomeValuesFrom(<http://purl.org/sig/ont/fma/attributed_part> 
ObjectIntersectionOf()))
SubClassOf(<http://purl.org/sig/ont/fma/fma63841> 
ObjectSomeValuesFrom(<http://purl.org/sig/ont/fma/attributed_constitutional_part
> ObjectIntersectionOf()))

According to the OWL 2 specification, ObjectIntersectionOf should have at least 
two class expressions as parameters:

http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/#Intersection_of_Class_Expres
sions

I am not really sure why OWL API accepts such ontologies. Perhaps to be 
backward compatible with OWL 1, in which such expressions are probably allowed.
You can test if your ontology is compatible with OWL 2 by, e.g., converting it 
to OWL 2 functional-style syntax and loading it again via OWL API (in general, 
OWL 2 functional-style or OWL 2 XML syntax are more stable and easier to parse 
by OWL API than OWL 2 RDF XML syntax). For this ontology the OWL API functional 
style parser would return an error.

Coincidently, this issue has been already fixed in the next development version 
of ELK (0.5.0-SNAPSHOT). If there will be some further urgent problems, I might 
consider fixing this problem in the 0.4.x branch and release a new minor 
version. For now, I would just recommend fixing this problem in the ontology 
directly, perhaps also notifying the developers of FMA.

Best regards,

Yevgeny

Original comment by ykazako...@gmail.com on 31 May 2015 at 9:11