Open madbkr opened 1 month ago
First of all: Not working in the case of pellet means that the reasoner doesn't even initialize. No error message, no progress bar. HermiT works fine with all OEO files, ELK also works but gives out warnings:
INFO 11:55:25 Potential incompleteness due to occurrences of DataProperty
INFO 11:55:25 1 occurrence of DataProperty found in the current ontology. Enable DEBUG for details
INFO 11:55:25 Potential incompleteness due to occurrences of DataPropertyDomain
INFO 11:55:25 1 occurrence of DataPropertyDomain found in the current ontology. Enable DEBUG for details
INFO 11:55:25 Potential incompleteness due to occurrences of Datatype
INFO 11:55:25 6 occurrences of Datatype found in the current ontology. Enable DEBUG for details
INFO 11:55:25 Potential incompleteness due to occurrences of DisjointObjectProperties
INFO 11:55:25 16 occurrences of DisjointObjectProperties found in the current ontology. Enable DEBUG for details
INFO 11:55:25 Potential incompleteness due to occurrences of InverseObjectProperties
INFO 11:55:25 15 occurrences of InverseObjectProperties found in the current ontology. Enable DEBUG for details
INFO 11:55:25 ... 6 different incompleteness problem types detected
I will look into those warnings in the future.
Edit: This seems to be a feature only ELk has: "Keep track of features that cause incompleteness of reasoning results." as found in the release notes.
Some testing indicates that Pellet actually does work with the OEO. It only does it very very slowly.
I started the reasoner in all the separate OEO files and Pellet started with no problem - excepts foroeo-physical
where it took several minutes.
oeo-shared-axioms
which imports oeo-physical
was the only file that didn't even show a progress bar anymore.
So I tested if removing some imports from oeo-shared-axioms
would make a difference and it does:
Removing oeo-physical
fixes the problem entirely.
Keeping oeo-physical
and ONE other same level import (like oeo-model
or oeo-sector
) will still work but Pellet takes several hours to start.
From this I would conclude that Pellet would eventually start in the whole OEO - but may very well take days to do so.
In my opinion the problem is either:
Apparently it is possible to set up Pellet directly via command line or via the ontology tool NeOn. Sadly I couldn't get NeOn or the command option to run on my system to test it - at least not yet.
This would test if the problem may be related to Protégé.
However as we are also working with the ROBOT tool we might want to stay away from Pellet anyway as ROBOT doesn't support it in it's reasoning functions while HermiT and ELK are supported.
Edit: I managed to get the NeOn toolkit to run but I can't find a way to install the Pellet plugin anymore. I am not surprised as the toolkit used almost 20 year old Java. Many linked resources don't exist anymore.
What is the difference betweeen the 3 reasoners? There are some according to this paper: https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=9091e269a2cf7a44b46681b3de3ca489a36ad243
Note that it is about 10 years old, so information may be outdated. I found at least one case where ist seems to be. I’ll summerize the most meaningfull ones.
Both HermiT and Pellet are working based on tableau. HermiT however is using the faster hypertableau, possibly explaining why the difference for a big ontology like the OEO is this severe. Tablau based performs better on non-horn based description logic while the consequence based ELK would perform better on horn-based DL.
According to this paper: https://ceur-ws.org/Vol-1193/paper_10.pdf Pellet actually uses both tableau and consequence based approaches – but only for lightweight description logic.
According to the first paper mentioned, both Pellet and HermiT handle SROIQ(D) while ELK’s expressivity is only the lightweight description logic
Pellet can use incremental classification, the other 2 cannot. That means that finished classification can be re-used when new content is implemented.
While all 3 have support for rules, ELK doesn’t support SWRL.
According to the paper only Pellet offers justifications – but I tested that and all 3 gave me an explaination for an inconsistant class. So that is outdated.
Only Pellet supports the Jena API.
ELK doesn’t offer Abox reasoning.
I would conclude that most of those make little difference to us.
Here is more info on the ELK warnings. Since we now have the IRI of the entity that cause them we can look at the potential incompleteness if need occurs.
WARN 14:44:50 Ontology satisfiability cannot be checked! Enable INFO for details.
INFO 14:44:50 Potential incompleteness due to occurrences of AsymmetricObjectProperty
INFO 14:44:50 1 occurrence of AsymmetricObjectProperty found in the current ontology. Enable DEBUG for details
DEBUG 14:44:50 AsymmetricObjectProperty(<http://openenergy-platform.org/ontology/oeo/OEO_00000532>)
INFO 14:44:50 Potential incompleteness due to occurrences of DataHasValue
INFO 14:44:50 4 occurrences of DataHasValue found in the current ontology. Enable DEBUG for details
DEBUG 14:44:50 SubClassOf(<http://openenergy-platform.org/ontology/oeo/OEO_00020090> ObjectSomeValuesFrom(<http://purl.obolibrary.org/obo/BFO_0000051> ObjectIntersectionOf(<http://openenergy-platform.org/ontology/oeo/OEO_00030035> ObjectSomeValuesFrom(<http://openenergy-platform.org/ontology/oeo/OEO_00040010> <http://purl.obolibrary.org/obo/UO_0000036>) DataHasValue(<http://openenergy-platform.org/ontology/oeo/OEO_00140178> "1"^^<http://www.w3.org/2001/XMLSchema#integer>))))
DEBUG 14:44:50 SubClassOf(<http://openenergy-platform.org/ontology/oeo/OEO_00020097> ObjectSomeValuesFrom(<http://purl.obolibrary.org/obo/BFO_0000051> ObjectIntersectionOf(<http://openenergy-platform.org/ontology/oeo/OEO_00030035> ObjectSomeValuesFrom(<http://openenergy-platform.org/ontology/oeo/OEO_00040010> <http://purl.obolibrary.org/obo/UO_0000036>) DataHasValue(<http://openenergy-platform.org/ontology/oeo/OEO_00140178> "1"^^<http://www.w3.org/2001/XMLSchema#integer>))))
DEBUG 14:44:50 SubClassOf(<http://openenergy-platform.org/ontology/oeo/OEO_00020091> ObjectSomeValuesFrom(<http://purl.obolibrary.org/obo/BFO_0000051> ObjectIntersectionOf(<http://openenergy-platform.org/ontology/oeo/OEO_00030035> ObjectSomeValuesFrom(<http://openenergy-platform.org/ontology/oeo/OEO_00040010> <http://purl.obolibrary.org/obo/UO_0000033>) DataHasValue(<http://openenergy-platform.org/ontology/oeo/OEO_00140178> "1"^^<http://www.w3.org/2001/XMLSchema#integer>))))
DEBUG 14:44:50 ...
INFO 14:44:50 Potential incompleteness due to occurrences of DataProperty
INFO 14:44:50 3 occurrences of DataProperty found in the current ontology. Enable DEBUG for details
DEBUG 14:44:50 Declaration(DataProperty(<http://openenergy-platform.org/ontology/oeo/OEO_00140178>))
DEBUG 14:44:50 Declaration(DataProperty(<http://openenergy-platform.org/ontology/oeo/OEO_00140170>))
DEBUG 14:44:50 ...
INFO 14:44:50 Potential incompleteness due to occurrences of DataPropertyDomain
INFO 14:44:50 2 occurrences of DataPropertyDomain found in the current ontology. Enable DEBUG for details
DEBUG 14:44:50 DataPropertyDomain(<http://openenergy-platform.org/ontology/oeo/OEO_00140170> <http://openenergy-platform.org/ontology/oeo/OEO_00000274>)
DEBUG 14:44:50 DataPropertyDomain(<http://openenergy-platform.org/ontology/oeo/OEO_00140178> <http://openenergy-platform.org/ontology/oeo/OEO_00000350>)
INFO 14:44:50 Potential incompleteness due to occurrences of Datatype
INFO 14:44:50 17 occurrences of Datatype found in the current ontology. Enable DEBUG for details
DEBUG 14:44:50 Declaration(Datatype(<http://www.w3.org/2001/XMLSchema#string>))
DEBUG 14:44:50 Declaration(Datatype(<http://www.w3.org/2001/XMLSchema#boolean>))
DEBUG 14:44:50 Declaration(Datatype(<http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral>))
DEBUG 14:44:50 ...
INFO 14:44:50 ... 17 different incompleteness problem types detected
Description of the issue
I agreed to take a look at the question why the OEO doesn't seem to work with Pellet but works fine with Hermit or ELK. I agreed to document all findings in one issue.
Ideas of solution
If you already have ideas for the solution describe them here
Workflow checklist