OWL2Parser.java revision 53680982da7898ae889870da416205a85f0bffad
d25c69509848853b0b15b93e3cc180cab81047acChristian Maederimport org.coode.owlapi.owlxml.renderer.OWLXMLRenderer;
d25c69509848853b0b15b93e3cc180cab81047acChristian Maederimport org.coode.owlapi.rdf.rdfxml.RDFXMLRenderer;
2578a6d217296401d347302c9104fee179bd0470Francisc Nicolae Bungiuimport org.semanticweb.owlapi.apibinding.OWLManager;
d25c69509848853b0b15b93e3cc180cab81047acChristian Maederimport org.semanticweb.owlapi.io.OWLRendererException;
6f52b2f195d946649597c21e5888c70ccfeeb81eChristian Maederimport org.semanticweb.owlapi.io.StreamDocumentSource;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport org.semanticweb.owlapi.model.MissingImportEvent;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport org.semanticweb.owlapi.model.MissingImportHandlingStrategy;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport org.semanticweb.owlapi.model.MissingImportListener;
43f8464f7a29c9609509b9c58925f0432263803dSimon Ulbrichtimport org.semanticweb.owlapi.model.OWLOntologyLoaderConfiguration;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport org.semanticweb.owlapi.model.OWLOntologyManager;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport org.semanticweb.owlapi.util.OWLOntologyMerger;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport uk.ac.manchester.cs.owl.owlapi.OWLOntologyIRIMapperImpl;
4ffc423a7df8af7e7d7e563a15471da4505ddeb5ignazioimport uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxRenderer;
53680982da7898ae889870da416205a85f0bffadJens Elkner private static enum OPTION {
53680982da7898ae889870da416205a85f0bffadJens Elkner protected static final Set<IRI> missingImports = new HashSet<IRI>();
53680982da7898ae889870da416205a85f0bffadJens Elkner private static final Set<OWLOntology> exported = new HashSet<OWLOntology>();
53680982da7898ae889870da416205a85f0bffadJens Elkner private static OWLOntologyIRIMapperImpl mapper =
53680982da7898ae889870da416205a85f0bffadJens Elkner // A simple example of how to load and save an ontology
53680982da7898ae889870da416205a85f0bffadJens Elkner URLConnection con = uri.toURL().openConnection();
53680982da7898ae889870da416205a85f0bffadJens Elkner new StreamDocumentSource(con.getInputStream(), IRI.create(uri));
53680982da7898ae889870da416205a85f0bffadJens Elkner .setMissingImportHandlingStrategy(MissingImportHandlingStrategy.SILENT);
53680982da7898ae889870da416205a85f0bffadJens Elkner manager.loadOntologyFromOntologyDocument(sds, config);
53680982da7898ae889870da416205a85f0bffadJens Elkner IRI ontohub = IRI.create("https://ontohub.org/external/");
53680982da7898ae889870da416205a85f0bffadJens Elkner mapper.addMapping(mi, ontohub.resolve(mi.toURI().getHost()
53680982da7898ae889870da416205a85f0bffadJens Elkner // reset the manager. clear out imports to avoid duplicates
53680982da7898ae889870da416205a85f0bffadJens Elkner manager = setupManagerWithMissingImportListener();
53680982da7898ae889870da416205a85f0bffadJens Elkner // collect missing imports again to report them in output file.
53680982da7898ae889870da416205a85f0bffadJens Elkner manager.loadOntologyFromOntologyDocument(sds, config);
53680982da7898ae889870da416205a85f0bffadJens Elkner ontologies = getImports(ontology, new HashSet<OWLOntology>());
53680982da7898ae889870da416205a85f0bffadJens Elkner String str = ontology.getOntologyID().getOntologyIRI().toString();
53680982da7898ae889870da416205a85f0bffadJens Elkner // we must make a new name
53680982da7898ae889870da416205a85f0bffadJens Elkner // System.out.println("NAME: " + merged_name + "\n");
53680982da7898ae889870da416205a85f0bffadJens Elkner IRI mergedOntologyIRI = IRI.create(merged_name);
53680982da7898ae889870da416205a85f0bffadJens Elkner // System.out.println("MERGED_IRI " + mergedOntologyIRI + "\n");
53680982da7898ae889870da416205a85f0bffadJens Elkner // Axioms can be excluded when 'quick' Option selected
53680982da7898ae889870da416205a85f0bffadJens Elkner merged = manager.createOntology(mergedOntologyIRI);
53680982da7898ae889870da416205a85f0bffadJens Elkner OWLOntologyMerger merger = new OWLOntologyMerger(manager);
53680982da7898ae889870da416205a85f0bffadJens Elkner merger.createMergedOntology(manager, mergedOntologyIRI);
53680982da7898ae889870da416205a85f0bffadJens Elkner System.err.println("OWL parse error: " + ex.getMessage());
53680982da7898ae889870da416205a85f0bffadJens Elkner // print usage information screen
53680982da7898ae889870da416205a85f0bffadJens Elkner private static void showHelpScreen() {
53680982da7898ae889870da416205a85f0bffadJens Elkner System.out.println("Usage: processor [<options..>] <URI>\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + "_>_options_<______________\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " | -o <tp> <fn> ..write output to file\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " - - - tp <- type [: owl xml omn rdf obo dol ttl]\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " - - - fn <- filename\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " | -o-sys <tp> ..write output to system.out\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " - - - - - tp <- type\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " | -qk ..internal(!) sets 'quick' option\n"
53680982da7898ae889870da416205a85f0bffadJens Elkner + " | -h ..this helptext");
53680982da7898ae889870da416205a85f0bffadJens Elkner // parse arguments according to option set
53680982da7898ae889870da416205a85f0bffadJens Elkner // fails for unknown or incomplete arguments, or when IRI is not set
53680982da7898ae889870da416205a85f0bffadJens Elkner private static void parseArgs(String[] args, OWLOutputHandler out)
53680982da7898ae889870da416205a85f0bffadJens Elkner String inp = "", msg = "OWL2Parser.parseArgs: ";
53680982da7898ae889870da416205a85f0bffadJens Elkner throw new Exception(msg + "no arguments provided");
53680982da7898ae889870da416205a85f0bffadJens Elkner + "insufficient arguments (-o [format] [filename])");
53680982da7898ae889870da416205a85f0bffadJens Elkner out.add(parseOption(args[++i].toLowerCase(), msg), args[++i]);
53680982da7898ae889870da416205a85f0bffadJens Elkner + "insufficient arguments (-o-sys [format])");
53680982da7898ae889870da416205a85f0bffadJens Elkner out.add(parseOption(args[ ++i].toLowerCase(), msg));
53680982da7898ae889870da416205a85f0bffadJens Elkner } else if (arg.equals("-qk") || arg.equals("-q")) {
53680982da7898ae889870da416205a85f0bffadJens Elkner } else if (arg.equals("-h") || arg.equals("--help")) {
53680982da7898ae889870da416205a85f0bffadJens Elkner throw new Exception(msg + "unknown command <" + arg + ">");
53680982da7898ae889870da416205a85f0bffadJens Elkner inp = args[i]; // read again to undo earlier 'toLowerCase'
53680982da7898ae889870da416205a85f0bffadJens Elkner if (arg.startsWith("http:") || arg.startsWith("https:")) {
53680982da7898ae889870da416205a85f0bffadJens Elkner private static OPTION parseOption(String opt, String err) throws Exception {
53680982da7898ae889870da416205a85f0bffadJens Elkner throw new Exception(err + "unrecognized owl-format: " + opt);
53680982da7898ae889870da416205a85f0bffadJens Elkner private static OWLOntologyManager setupManagerWithMissingImportListener() {
53680982da7898ae889870da416205a85f0bffadJens Elkner OWLOntologyManager mgr = OWLManager.createOWLOntologyManager();
53680982da7898ae889870da416205a85f0bffadJens Elkner mgr.addMissingImportListener(new HasMissingImports());
53680982da7898ae889870da416205a85f0bffadJens Elkner private static class HasMissingImports implements MissingImportListener {
53680982da7898ae889870da416205a85f0bffadJens Elkner public void importMissing(MissingImportEvent event) {
53680982da7898ae889870da416205a85f0bffadJens Elkner missingImports.add(event.getImportedOntologyURI());
53680982da7898ae889870da416205a85f0bffadJens Elkner private static Set<OWLOntology> getImports(OWLOntology ontology,
53680982da7898ae889870da416205a85f0bffadJens Elkner Set<OWLOntology> s = new HashSet<OWLOntology>();
53680982da7898ae889870da416205a85f0bffadJens Elkner Set<OWLOntology> next = new HashSet<OWLOntology>(stop);
53680982da7898ae889870da416205a85f0bffadJens Elkner for (OWLOntology imported : ontology.getDirectImports()) {
53680982da7898ae889870da416205a85f0bffadJens Elkner Set<OWLOntology> i = getImports(imported, next);
53680982da7898ae889870da416205a85f0bffadJens Elkner private static void exportImports(OWLOutputHandler out) throws IOException {
53680982da7898ae889870da416205a85f0bffadJens Elkner if (exported.containsAll(onto.getDirectImports())) {
53680982da7898ae889870da416205a85f0bffadJens Elkner // output handler allows and handles a list of output-requests
53680982da7898ae889870da416205a85f0bffadJens Elkner protected static class OWLOutputHandler {
53680982da7898ae889870da416205a85f0bffadJens Elkner void add(OPTION op, String filename) throws Exception {
53680982da7898ae889870da416205a85f0bffadJens Elkner writer.add(new OWLOntologyWriter(filename, op));
53680982da7898ae889870da416205a85f0bffadJens Elkner // function need to be called once to render and close every output
53680982da7898ae889870da416205a85f0bffadJens Elkner void renderUsingOption(OWLOntology onto) throws IOException {
53680982da7898ae889870da416205a85f0bffadJens Elkner // custem OntolgyWriter bundles a BufferedWriter with an OWL output format
53680982da7898ae889870da416205a85f0bffadJens Elkner protected static class OWLOntologyWriter extends BufferedWriter {
53680982da7898ae889870da416205a85f0bffadJens Elkner OWLOntologyWriter(String fn, OPTION op) throws Exception {
53680982da7898ae889870da416205a85f0bffadJens Elkner void _close(Writer pointer) throws IOException {
53680982da7898ae889870da416205a85f0bffadJens Elkner void renderUsingOption(OWLOntology onto) throws IOException {
53680982da7898ae889870da416205a85f0bffadJens Elkner // TODO: the below still need implementation!
53680982da7898ae889870da416205a85f0bffadJens Elkner System.err.println("Error by ManchesterParser!");
53680982da7898ae889870da416205a85f0bffadJens Elkner File tempFile = File.createTempFile("owlTemp_1", ".xml");
53680982da7898ae889870da416205a85f0bffadJens Elkner rBuf.readLine(); // ignore the first line containing <?xml version="1.0"?>