From 537277d9ce3ba2aff1d66d1b19dbb77e17be0d48 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 18 May 2022 15:09:37 +0100 Subject: build(hermit): bump HermiT v1.3.8.1 -> v1.4.5.519 This commit contains a "hacky" fix for KARMA2 to access some (now private) field in the OWLAxioms class. The code is now using Java Reflections to turn a private field public and gain access to internal resources. --- .../karma2/clausifier/OntologyProcesser.java | 36 +++++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/semanticweb/karma2/clausifier/OntologyProcesser.java b/src/main/java/org/semanticweb/karma2/clausifier/OntologyProcesser.java index 5ff339e..8e97a2f 100644 --- a/src/main/java/org/semanticweb/karma2/clausifier/OntologyProcesser.java +++ b/src/main/java/org/semanticweb/karma2/clausifier/OntologyProcesser.java @@ -12,6 +12,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.lang.reflect.*; import org.semanticweb.HermiT.model.Atom; import org.semanticweb.HermiT.model.AtomicConcept; @@ -196,21 +197,46 @@ public class OntologyProcesser { public void clausify(OWLDataFactory factory,String ontologyIRI,OWLAxioms axioms,OWLAxiomsExpressivity axiomsExpressivity, File dataFile, File ruleFile) { Set dlClauses=new LinkedHashSet(); Set positiveFacts=new HashSet(); - for (OWLObjectPropertyExpression[] inclusion : axioms.m_simpleObjectPropertyInclusions) { - Atom subRoleAtom=getRoleAtom(inclusion[0],X,Y); - Atom superRoleAtom=getRoleAtom(inclusion[1],X,Y); + /* Quick fix (using Java reflexions) to access some fields that became private in later versions. + * TODO: find how to properly do this... don't be that guy! + */ + Field f_simpleObjectPropertyInclusions; + Field f_conceptInclusions; + Field f_facts; + Collection> m_simpleObjectPropertyInclusions; + Collection> m_conceptInclusions; + Collection m_facts; + try { + f_simpleObjectPropertyInclusions = axioms.getClass().getDeclaredField("m_simpleObjectPropertyInclusions"); + f_simpleObjectPropertyInclusions.setAccessible(true); + f_conceptInclusions = axioms.getClass().getDeclaredField("m_conceptInclusions"); + f_conceptInclusions.setAccessible(true); + f_facts = axioms.getClass().getDeclaredField("m_facts"); + f_facts.setAccessible(true); + m_simpleObjectPropertyInclusions = (Collection>) f_simpleObjectPropertyInclusions.get(axioms); + m_conceptInclusions = (Collection>) f_conceptInclusions.get(axioms); + m_facts = (Collection) f_facts.get(axioms); + } catch (java.lang.NoSuchFieldException e) { + return; + } catch (java.lang.IllegalAccessException e) { + return; + } + + for (List inclusion : m_simpleObjectPropertyInclusions) { + Atom subRoleAtom=getRoleAtom(inclusion.get(0),X,Y); + Atom superRoleAtom=getRoleAtom(inclusion.get(1),X,Y); DLClause dlClause=DLClause.create(new Atom[] { superRoleAtom },new Atom[] { subRoleAtom }); dlClauses.add(dlClause); } NormalizedDatalogAxiomClausifier clausifier=new NormalizedDatalogAxiomClausifier(positiveFacts,factory); - for (OWLClassExpression[] inclusion : axioms.m_conceptInclusions) { + for (List inclusion : m_conceptInclusions) { for (OWLClassExpression description : inclusion) description.accept(clausifier); for(DLClause dlClause :clausifier.getDLClause()) dlClauses.add(dlClause.getSafeVersion(AtomicConcept.THING)); } DatalogFactClausifier factClausifier=new DatalogFactClausifier(positiveFacts); - for (OWLIndividualAxiom fact : axioms.m_facts) + for (OWLIndividualAxiom fact : m_facts) fact.accept(factClausifier); writeDataFile(positiveFacts, dataFile); writeRules(dlClauses, ruleFile); -- cgit v1.2.3