protegeproject / swrlapi

Java API for working with the SWRL rule and SQWRL query languages
Other
99 stars 41 forks source link

Fail to writing inferred result back to ontology #86

Open OrselChiang opened 1 month ago

OrselChiang commented 1 month ago

I have written the following code to utilize the SWRLRuleEngine for executing a self-defined rule. When I output the ontology to a file and inspect it in Protege, I notice that only the rule is being recorded in the ontology, not the inferences. In contrast, when I execute the rule through the Protege plugin, the inferred results are correctly displayed.

I am puzzled by this discrepancy and would like to know what might be incorrect with my code.


 // Read an OWL ontology using the OWLAPI
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLDataFactory factory = manager.getOWLDataFactory();
String PathName = "src/main/java/org/swrlapi/example/exercise_based_pulmonary_rehabilitation2.0.owl";
File file = new File(PathName);
OWLOntology localEBPRont = manager.loadOntologyFromOntologyDocument(file);

SWRLRuleEngine ruleEngine = SWRLAPIFactory.createSWRLRuleEngine(localEBPRont);
SWRLAPIRule rule = ruleEngine.createSWRLRule("PatientProfile-ChestTightness",
        "PatientAssessment(?p) ^ ChestTightness(?e)-> hasPatientProfile(?p, ?e)");

ruleEngine.infer();
File folder = new File("src/main/java/org/swrlapi/example");
File filesave = new File(folder, "inferredResult_saving.owl");
manager.saveOntology(localEBPRont, IRI.create(filesave.toURI()));
martinjoconnor commented 1 month ago

I would use a SQWRL query to verify that the rule generates a result, e.g.,

PatientAssessment(?p) ^ ChestTightness(?e)-> sqwrl:select(?p, ?e)

The rule engine also has a method called getInferredOWLAxioms that can be used to see what axioms were generated by the inference process.