use of org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException in project stanbol by apache.
the class ReasoningServiceExecutor method executeOWLApiReasoningService.
/**
* Executes the OWLApiReasoingService
*
* @param task
* @param s
* @param input
* @param rules
* @param targetGraphID
* @param parameters
* @return
* @throws InconsistentInputException
* @throws ReasoningServiceException
* @throws UnsupportedTaskException
*/
private ReasoningServiceResult<OWLOntology> executeOWLApiReasoningService(String task, OWLApiReasoningService s, OWLOntology input, List<SWRLRule> rules, String targetGraphID, boolean filtered, Map<String, List<String>> parameters) throws InconsistentInputException, ReasoningServiceException, UnsupportedTaskException {
// Check task: this is managed directly by the endpoint
if (task.equals(ReasoningServiceExecutor.TASK_CHECK)) {
log.debug("Task is '{}'", ReasoningServiceExecutor.TASK_CHECK);
try {
boolean is = s.isConsistent(input);
return new ReasoningServiceResult<OWLOntology>(ReasoningServiceExecutor.TASK_CHECK, is);
} catch (ReasoningServiceException e) {
throw e;
}
}
// We get the manager from the input ontology
// XXX We must be aware of this.
OWLOntologyManager manager = input.getOWLOntologyManager();
try {
OWLOntology output = manager.createOntology();
Set<OWLAxiom> axioms = s.runTask(task, input, rules, filtered, parameters);
log.debug("Prepare output: {} axioms", axioms.size());
manager.addAxioms(output, axioms);
if (targetGraphID == null) {
return new ReasoningServiceResult<OWLOntology>(task, true, manager.getOntology(output.getOntologyID()));
} else {
save(output, targetGraphID);
return new ReasoningServiceResult<OWLOntology>(task, true);
}
} catch (InconsistentInputException e) {
log.warn("The input is not consistent");
return new ReasoningServiceResult<OWLOntology>(ReasoningServiceExecutor.TASK_CHECK, false);
} catch (ReasoningServiceException e) {
throw e;
} catch (OWLOntologyCreationException e) {
log.error("Error! \n", e);
throw new ReasoningServiceException(new IOException(e));
} catch (UnsupportedTaskException e) {
log.error("Error! \n", e);
throw e;
} catch (Throwable t) {
log.error("Error! \n", t);
throw new ReasoningServiceException(t);
}
}
use of org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException in project stanbol by apache.
the class ReasoningServiceExecutor method executeJenaReasoningService.
/**
* Execute a JenaReasoningService
*
* TODO: Add parameter to decide if the output graph must be deleted if exists
*
* @param s
* @param input
* @param rules
* @return
* @throws ReasoningServiceException
* @throws UnsupportedTaskException
*/
private ReasoningServiceResult<Model> executeJenaReasoningService(String task, JenaReasoningService s, Model input, List<Rule> rules, String targetGraphID, boolean filtered, Map<String, List<String>> parameters) throws ReasoningServiceException, UnsupportedTaskException {
// Check task: this is managed directly by the endpoint
if (task.equals(ReasoningServiceExecutor.TASK_CHECK)) {
log.debug("Task is '{}'", ReasoningServiceExecutor.TASK_CHECK);
try {
boolean is = s.isConsistent(input);
return new ReasoningServiceResult<Model>(ReasoningServiceExecutor.TASK_CHECK, is);
} catch (ReasoningServiceException e) {
log.error("Error thrown: {}", e);
throw e;
}
}
try {
Set<Statement> result = s.runTask(task, input, rules, filtered, parameters);
if (result == null) {
log.error("Result is null");
throw new RuntimeException("Result is null.");
}
Model outputModel = ModelFactory.createDefaultModel();
outputModel.add(result.toArray(new Statement[result.size()]));
// If target is null, then get back results, elsewhere put it in
// target graph
log.debug("Prepare output");
if (targetGraphID == null) {
log.debug("Returning {} statements", result.size());
return new ReasoningServiceResult<Model>(task, true, outputModel);
} else {
save(outputModel, targetGraphID);
return new ReasoningServiceResult<Model>(task, true);
}
} catch (ReasoningServiceException e) {
log.error("Error thrown: {}", e);
throw e;
} catch (InconsistentInputException e) {
log.debug("The input is not consistent");
return new ReasoningServiceResult<Model>(ReasoningServiceExecutor.TASK_CHECK, false);
} catch (UnsupportedTaskException e) {
log.error("Error thrown: {}", e);
throw e;
} catch (IOException e) {
throw new ReasoningServiceException(e);
}
}
use of org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException in project stanbol by apache.
the class ReasoningServiceExecutor method execute.
/**
* General method for execution, delegates to specific implementations.
*
* @param task
* @param service
* @param targetGraphID
* @param parameters
* @return
* @throws ReasoningServiceException
* @throws UnsupportedTaskException
* @throws InconsistentInputException
*/
private ReasoningServiceResult<?> execute(String task, ReasoningService<?, ?, ?> service, String targetGraphID, Map<String, List<String>> parameters) throws ReasoningServiceException, UnsupportedTaskException, InconsistentInputException {
long start = System.currentTimeMillis();
if (log.isDebugEnabled()) {
log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
log.debug("[start] Execution: {}", service.getClass().getCanonicalName());
log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
log.debug("-----------------------------------------------------");
log.debug("execute()");
log.debug(" > task: {}", task);
log.debug(" > service: {}", service.getClass().getCanonicalName());
log.debug(" > target: {}", targetGraphID);
log.debug(" > parameters:");
for (Entry<String, List<String>> e : parameters.entrySet()) {
log.debug(" >> {}: {}", e.getKey());
for (String v : e.getValue()) {
log.debug(" >>> value: {}", v);
}
}
log.debug(" > input providers:");
for (ReasoningServiceInputProvider p : inmgr.getProviders()) {
log.debug(" >> {}", p.getClass().getCanonicalName());
}
log.debug("-----------------------------------------------------");
}
ReasoningServiceResult<?> result = null;
/**
* TODO Switch this into the ReasoningService implementation
*/
if (service instanceof JenaReasoningService) {
Model input = ModelFactory.createDefaultModel();
synchronized (inmgr) {
Iterator<Statement> statements = inmgr.getInputData(Statement.class);
while (statements.hasNext()) {
input.add(statements.next());
}
}
List<Rule> rules = null;
synchronized (inmgr) {
Iterator<Rule> rulesI = inmgr.getInputData(Rule.class);
while (rulesI.hasNext()) {
Rule o = rulesI.next();
log.debug("Rule: {}", o);
if (rules == null) {
rules = new ArrayList<Rule>();
}
rules.add(o);
}
}
if (log.isDebugEnabled()) {
log.debug("Input size is {} statements", input.listStatements().toSet().size());
}
result = executeJenaReasoningService(task, (JenaReasoningService) service, input, rules, targetGraphID, true, parameters);
} else if (service instanceof OWLApiReasoningService) {
OWLOntology input;
try {
input = OWLManager.createOWLOntologyManager().createOntology();
} catch (OWLOntologyCreationException e) {
throw new ReasoningServiceException(e);
}
synchronized (inmgr) {
Iterator<OWLAxiom> statements = inmgr.getInputData(OWLAxiom.class);
while (statements.hasNext()) {
input.getOWLOntologyManager().addAxiom(input, statements.next());
}
}
// FIXME Please check if this is really necessary!!!
input = input.getOWLOntologyManager().getOntology(input.getOntologyID());
List<SWRLRule> rules = null;
synchronized (inmgr) {
Iterator<SWRLRule> rulesI = inmgr.getInputData(SWRLRule.class);
while (rulesI.hasNext()) {
if (rules == null) {
rules = new ArrayList<SWRLRule>();
}
rules.add(rulesI.next());
}
}
if (log.isDebugEnabled()) {
log.debug("Input size is {} statements", input.getAxiomCount());
}
result = executeOWLApiReasoningService(task, (OWLApiReasoningService) service, input, rules, targetGraphID, true, parameters);
} else
throw new UnsupportedOperationException("Service implementation not supported!");
if (log.isDebugEnabled()) {
log.debug("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
long end = System.currentTimeMillis();
log.debug("[end] In time: {}ms", (end - start));
log.debug("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
}
return result;
}
use of org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException in project stanbol by apache.
the class AbstractOWLApiReasoningService method isConsistent.
/**
* Only check consistency.
*
* Subclasses may want to change how.
*
* @param ontology
* @param rules
* @return
* @throws ReasoningServiceException
*/
@Override
public boolean isConsistent(OWLOntology ontology, List<SWRLRule> rules) throws ReasoningServiceException {
log.debug("Create a input ontology to merge rules in.");
OWLOntology input;
try {
OWLOntologyManager manager = createOWLOntologyManager();
input = manager.createOntology();
Set<SWRLRule> ruleSet = new HashSet<SWRLRule>();
ruleSet.addAll(rules);
manager.addAxioms(input, ruleSet);
input = manager.getOntology(input.getOntologyID());
log.debug("Created ontology: {}", input);
return getReasoner(ontology).isConsistent();
} catch (OWLOntologyCreationException e) {
log.error("An error have been thrown while attempting to create ontology. Message was: {}", e.getLocalizedMessage());
// TODO Add explanation of this exception
throw new ReasoningServiceException();
}
}
use of org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException in project stanbol by apache.
the class JenaReasoningServiceTest method testClassifyWithRule.
/**
* Tests the classify(Model data, List<Rule> rules) method
*/
private void testClassifyWithRule(JenaReasoningService service) {
log.info("Testing {}", service.getClass());
// Prepare the rule set
String source = "" + "\n@prefix rdf: <" + RDF.getURI() + ">." + "\n@prefix foaf: <" + TestData.FOAF_NS + ">." + "\n@prefix ex: <" + TestData.TEST_NS + ">." + "\n[rule: (?a foaf:workplaceHomepage ?w) (?w rdf:type ex:SWResearchLab) -> (?a rdf:type ex:SWResearcher)] ";
// log.info("This is the ruleset: \n {}", source);
List<Rule> rules = TestUtils.parseRuleStringAsFile(source);
log.info("Loaded {} rules", rules.size());
// Clean data
TestData.alexdma.removeProperties();
TestData.enridaga.removeProperties();
Resource wphomepage = TestData.model.createResource("http://stlab.istc.cnr.it");
Resource swResearchLab = TestData.model.createResource(TestData.TEST_NS + "SWResearchLab");
// Prepare data
TestData.alexdma.addProperty(TestData.foaf_workplaceHomepage, wphomepage);
TestData.enridaga.addProperty(TestData.foaf_workplaceHomepage, wphomepage);
wphomepage.addProperty(RDF.type, swResearchLab);
// Setup input for the reasoner
Model input = ModelFactory.createUnion(TestData.enridaga.getModel(), TestData.alexdma.getModel());
input = ModelFactory.createUnion(input, wphomepage.getModel());
input = ModelFactory.createUnion(input, TestData.foaf);
try {
// Run the method
Set<Statement> inferred = service.runTask(ReasoningService.Tasks.CLASSIFY, input, rules, false, null);
// Expected statements
Resource swResearcher = TestData.model.createResource(TestData.TEST_NS + "SWResearcher");
Set<Statement> expected = new HashSet<Statement>();
expected.add(TestData.model.createStatement(TestData.alexdma, RDF.type, swResearcher));
expected.add(TestData.model.createStatement(TestData.enridaga, RDF.type, swResearcher));
log.info("All the expected statements must be in the inferred output");
Set<Statement> notInOutput = TestUtils.expectedStatementsCheck(inferred, expected);
log.info("Are all expected statements in the inferred set (true)? {}", notInOutput.isEmpty());
if (!notInOutput.isEmpty()) {
for (Statement bad : notInOutput) {
log.error("The following statement is not included in the reasoner output: {}", bad);
}
}
assertTrue(notInOutput.isEmpty());
// There must be only rdf:type output
boolean onlyRdf = true;
for (Statement stat : inferred) {
// Here we want only rdf:type statements
if (!stat.getPredicate().equals(RDF.type)) {
log.error("This statement is not rdf:type: {}", stat);
}
if (!stat.getPredicate().equals(RDF.type)) {
onlyRdf = false;
}
}
log.info("Check for statements to be rdf:type only (true): {}", onlyRdf);
assertTrue(onlyRdf);
} catch (ReasoningServiceException e) {
log.error("Error thrown: {}", e);
assertTrue(false);
} catch (InconsistentInputException e) {
log.error("Error thrown: {}", e);
assertTrue(false);
} catch (UnsupportedTaskException e) {
log.error("Error thrown: {}", e);
assertTrue(false);
}
// Clean data
TestData.alexdma.removeProperties();
TestData.enridaga.removeProperties();
}
Aggregations