HermiT 1.2.2 includes new blocking strategies called core blocking. A set of ontologies that we used to test HermiT with core blocking is available here. The test results are described in a technical report and all the data generated during our tests is available in Excel spread sheets. The blocking strategies can be enabled in Java, and can significantly reduce the size of the (abstractions of) models that HermiT builds. Thus, HermiT requires less memory, which can make all the difference between being able to classify an ontology or not. The main difference from the standard blocking techniques is that the blocking condition is approximate, rather than exact. If used alone, it would no longer be possible to guarantee soundness. HermiT therefore includes a validation phase in which a more detailed check is performed to ensure that blocks are valid, halting construction only if this is the case. Checking blocks for validity is a more costly procedure, but has to be performed relatively rarely on most ontologies.
Core blocking comes in two flavours: simple and complex core blocking. Simple core blocking blocks very agressively while complex core blocking is a bit more conservative. Our initial tests show, however, that simple core blocking works better.
Furthermore, core blocking can either be used with single or with pairwise blocking, but unlike standard blocking any ontology can be used with single blocking due to the additional validation phase. Single blocking is the default for core blocking, but in some cases switching to pairwise might work better, depending on the ontology.
To use HermiT with core blocking, you need to creates a reasoner object with a configuration as follows:
OWLOntologyManager m=OWLManager.createOWLOntologyManager();
OWLOntology o=m.loadOntologyFromOntologyDocument(ontologyIRI);
Configuration c=new Configuration();
c.blockingStrategyType=BlockingStrategyType.SIMPLE_CORE; // or COMPLEX_CORE
// uncomment to force pairwise core blocking
// c.directBlockingType=DirectBlockingType.PAIR_WISE;
Reasoner hermit=new Reasoner(c,o);
System.out.println(hermit.isConsistent());
// or for testing concept satisfiability
OWLClass cls=m.getOWLDataFactory().getOWLClass(classIRI);
System.out.println(hermit.isSatisfiable(cls));