/* * This software is Copyright 2005,2006,2007,2008 Langdale Consultants. * Langdale Consultants can be contacted at: http://www.langdale.com.au */ package au.com.langdale.validation; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import au.com.langdale.inference.SimpleReasoner; import au.com.langdale.inference.ValidationBuiltins; import au.com.langdale.inference.RuleParser.ParserException; import au.com.langdale.kena.OntModel; import au.com.langdale.util.Logger; import au.com.langdale.validation.ValidatorUtil.ValidatorProtocol; import com.hp.hpl.jena.graph.Graph; import com.hp.hpl.jena.rdf.model.InfModel; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.RDFReader; import com.hp.hpl.jena.reasoner.Reasoner; import com.hp.hpl.jena.reasoner.rulesys.BuiltinRegistry; /** * A validator based on the Jena rule based inference engine. * */ public class ModelValidator extends ValidatorUtil implements ValidatorProtocol { private Reasoner reasoner; public ModelValidator(OntModel schema, InputStream ruleText) throws ParserException, IOException { reasoner = new SimpleReasoner(expandRules(schema, ruleText, BuiltinRegistry.theRegistry)); } public OntModel run(String source, String base, String namespace, Logger errors) throws IOException { String lang = "RDF/XML"; if( source.endsWith(".ttl")) lang = "TURTLE"; InputStream input = new FileInputStream(source); Model data = ModelFactory.createDefaultModel(); RDFReader reader = data.getReader(lang); reader.setErrorHandler(errors.getRDFErrorHandler()); reader.read(data, input, namespace); InfModel infmodel = ModelFactory.createInfModel(reasoner, data); infmodel.prepare(); Model result = infmodel.getDeductionsModel(); Graph graph = result.getGraph(); logProblems(errors, graph); return au.com.langdale.kena.ModelFactory.createMem(graph); } static { ValidationBuiltins.registerAll(); } }