Reputation: 461
I'm try to retrieve property assertions from reasoner (hermit 1.3.8.4) and OWLApi (3.4.10). In this picture, I want to retrieve "isGrandfather Sandro, isGrandfather Sergio".
Picture - object property assertions
I try to use Ignazio answer in: https://stackoverflow.com/a/37497541/3760251
With Horridge example, but OWL API change the signature and I don't know how can I use it. https://www.javatips.net/api/Owl-master/owlapi-master/tools/src/main/java/org/semanticweb/owlapi/util/InferredSubObjectPropertyAxiomGenerator.java
So, if you have a example for addAxioms method from InferredObjectPropertyAxiomGenerator I appreciate.
InferredObjectPropertyAxiomGenerator generator = new InferredObjectPropertyAxiomGenerator() { @Override protected void addAxioms(OWLEntity entity, OWLReasoner reasoner, OWLDataFactory dataFactory, Set result) { } }
Thanks,
Upvotes: 0
Views: 379
Reputation: 461
I found an great code from Ignazio in: https://github.com/owlcs/owlapi/issues/643
I've made minor changes to your code and run it with OWLAPI 4.3.1-SNAPSHOT and HermiT 1.3.8.431-SNAPSHOT (these versions contain fixes detailed in issue #646 )
The output file contains object properties:
public static void main(String[] args) throws Exception {
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLOntology ontology = manager.loadOntology(
IRI.create("https://raw.githubusercontent.com/owlcs/pizza-ontology/master/pizza.owl"));
OWLDataFactory df = manager.getOWLDataFactory();
Configuration configuration = new Configuration();
configuration.ignoreUnsupportedDatatypes = true;
ReasonerFactory rf = new ReasonerFactory();
OWLReasoner reasoner = rf.createReasoner(ontology, configuration);
boolean consistencyCheck = reasoner.isConsistent();
if (consistencyCheck) {
reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY,
InferenceType.CLASS_ASSERTIONS, InferenceType.OBJECT_PROPERTY_HIERARCHY,
InferenceType.DATA_PROPERTY_HIERARCHY, InferenceType.OBJECT_PROPERTY_ASSERTIONS);
List<InferredAxiomGenerator<? extends OWLAxiom>> generators = new ArrayList<>();
generators.add(new InferredSubClassAxiomGenerator());
generators.add(new InferredClassAssertionAxiomGenerator());
generators.add(new InferredDataPropertyCharacteristicAxiomGenerator());
generators.add(new InferredEquivalentClassAxiomGenerator());
generators.add(new InferredEquivalentDataPropertiesAxiomGenerator());
generators.add(new InferredEquivalentObjectPropertyAxiomGenerator());
generators.add(new InferredInverseObjectPropertiesAxiomGenerator());
generators.add(new InferredObjectPropertyCharacteristicAxiomGenerator());
// NOTE: InferredPropertyAssertionGenerator significantly slows down
// inference computation
generators.add(new org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator());
generators.add(new InferredSubClassAxiomGenerator());
generators.add(new InferredSubDataPropertyAxiomGenerator());
generators.add(new InferredSubObjectPropertyAxiomGenerator());
List<InferredIndividualAxiomGenerator<? extends OWLIndividualAxiom>> individualAxioms =
new ArrayList<>();
generators.addAll(individualAxioms);
generators.add(new InferredDisjointClassesAxiomGenerator());
InferredOntologyGenerator iog = new InferredOntologyGenerator(reasoner, generators);
OWLOntology inferredAxiomsOntology = manager.createOntology();
iog.fillOntology(df, inferredAxiomsOntology);
File inferredOntologyFile = new File("output.txt");
// Now we create a stream since the ontology manager can then write to that stream.
try (OutputStream outputStream = new FileOutputStream(inferredOntologyFile)) {
// We use the same format as for the input ontology.
manager.saveOntology(inferredAxiomsOntology, outputStream);
}
} // End if consistencyCheck
else {
System.out.println("Inconsistent input Ontology, Please check the OWL File");
}
}
Upvotes: 1