I have build a small ontology in Protege 5.0.0. When I run Hermit 1.3.8.3 reasoner, it outputs status as:
Initializing the reasoner by performing the following steps:
class hierarchy
object property hierarchy
data property hierarchy
class assertions
object property assertions
same individuals
HermiT 1.3.8.3 classified in 97ms
On the other hand, When I run Fact++ on same ontology, it seems that ontology is inconsistent. Output is:
Initializing the reasoner by performing the following steps:
class hierarchy
object property hierarchy
data property hierarchy
class assertions
object property assertions
same individuals
Error logged
java.io.IOException: invalid url
at javax.swing.JEditorPane.setPage(JEditorPane.java:418)
at org.protege.editor.owl.ui.explanation.io.IntroductoryPanel.createCenterPanel(IntroductoryPanel.java:42)
at org.protege.editor.owl.ui.explanation.io.IntroductoryPanel.<init>(IntroductoryPanel.java:33)
at org.protege.editor.owl.ui.explanation.io.InconsistentOntologyManager.explain(InconsistentOntologyManager.java:37)
at org.protege.editor.owl.model.inference.OWLReasonerManagerImpl$ClassificationRunner.installRunningReasoner(OWLReasonerManagerImpl.java:436)
at org.protege.editor.owl.model.inference.OWLReasonerManagerImpl$ClassificationRunner.run(OWLReasonerManagerImpl.java:375)
at java.lang.Thread.run(Thread.java:745)
Which of the reasoners should I rely upon. Fact++ is throwing exception "invalid url".How should I solve this?
UPDATE # 1
Sorry, I am not able to find the owl file on which the above scenario was happening. But, today same thing is happening on another file where Hermit throws Exception but FACT works properly:
Link to file is: Link.
Exception thrown in Hermit is:
Error 7 Logged at Tue Feb 24 10:27:06 IST 2015
IOException: invalid url
javax.swing.JEditorPane.setPage(JEditorPane.java:418)
org.protege.editor.owl.ui.explanation.io.IntroductoryPanel.createCenterPanel(IntroductoryPanel.java:42)
org.protege.editor.owl.ui.explanation.io.IntroductoryPanel.<init>(IntroductoryPanel.java:33)
org.protege.editor.owl.ui.explanation.io.InconsistentOntologyManager.explain(InconsistentOntologyManager.java:37)
org.protege.editor.owl.model.inference.OWLReasonerManagerImpl$ClassificationRunner.installRunningReasoner(OWLReasonerManagerImpl.java:436)
org.protege.editor.owl.model.inference.OWLReasonerManagerImpl$ClassificationRunner.run(OWLReasonerManagerImpl.java:375)
java.lang.Thread.run(Thread.java:745)
(This correspond to the ontology linked to in UPDATE 1)
The ontology is inconsistent according to the OWL 2 DL Standard, FaCT++ is correct there. The reason why the ontology is inconsistent is as follows.
1) There is a data property measures
in the ontology, described as (only relevant bits left):
<rdf:Description rdf:about="http://www.example.com/tempsensor#measures">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#float"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
</rdf:Description>
2) The usage of this property everywhere in the ontology is:
<rdf:Description rdf:about="http://www.example.com/tempsensor#ind20">
<measures rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">24</measures>
<rdf:type rdf:resource="http://www.example.com/tempsensor#TempSensor"/>
</rdf:Description>
Note that the range of the property is set to float
, but the values used in the actual individuals are integer
. According to the OWL 2 spec (Floating-Point Numbers), float
and integer
are disjoint datatypes.
It seems that for a practical reason HermiT relaxes the formal datatype restrictions, while FaCT++ stays close to the standard.