OpenEnergyPlatform / ontology

Repository for the Open Energy Ontology (OEO)
Creative Commons Zero v1.0 Universal
111 stars 23 forks source link

Some reasoners not working with the ontology #1957

Open madbkr opened 1 month ago

madbkr commented 1 month ago

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

madbkr commented 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.

madbkr commented 1 month ago

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-physicalwhere it took several minutes. oeo-shared-axioms which imports oeo-physicalwas 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-modelor 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:

madbkr commented 1 month ago

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.

madbkr commented 4 weeks ago

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.

madbkr commented 3 weeks ago

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