/* * 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.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; import au.com.langdale.inference.Extractor; import au.com.langdale.inference.ProxyRegistry; import au.com.langdale.inference.StandardFunctorActions; import au.com.langdale.inference.ValidationBuiltins; import au.com.langdale.inference.RuleParser.ParserException; import au.com.langdale.kena.OntModel; import au.com.langdale.kena.ModelFactory; import au.com.langdale.splitmodel.SplitBase; import au.com.langdale.splitmodel.SplitReader; 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.graph.Node; import com.hp.hpl.jena.mem.GraphMem; import com.hp.hpl.jena.reasoner.rulesys.BuiltinRegistry; /** * A validation processor for split models. */ public class SplitValidator extends ValidatorUtil implements ValidatorProtocol { private List rules; private Map functors; GraphMem params = new GraphMem(); /** * Initialise with validation schema and rules. * * @param schema: schema axioms to be used for validation * @param namespace: not used * @param ruleText: the validation rules in source form * @throws ParserException * @throws IOException */ public SplitValidator(OntModel schema, InputStream ruleText) throws ParserException, IOException { functors = StandardFunctorActions.create(); BuiltinRegistry registry = new ProxyRegistry(functors.keySet()); ValidationBuiltins.registerAll(registry); rules = expandRules(schema, ruleText, registry); } /** * Set an option that will be available to the validation rules. * * @param option: a resource representing the option * @param state: the value of the option */ public void setOption(Node option, boolean state) { StandardFunctorActions.setOption(params, option, state); } /** * Read an option * @param option: a resource representing the option * @return the option value */ public boolean getOption(Node option) { return StandardFunctorActions.getOption(params, option); } public OntModel run(String source, String base, String namespace, Logger errors) throws IOException { GraphMem axioms = new GraphMem(); axioms.getBulkUpdateHandler().add(params); SplitReader reader = new SplitReader(source); if(base != null) reader.assignQuote(Node.createURI(SplitBase.SPLITMODEL+"base_model"), base); Extractor extractor = new Extractor( reader, axioms, rules, functors); extractor.run(); Graph result = extractor.getResult(); logProblems(errors, result); return ModelFactory.createMem(result); } }