public OWLOntology loadOWLOntology( OWLOntologyDocumentSource documentSource, final OWLOntologyCreationHandler mediator) throws OWLOntologyCreationException { // Attempt to parse the ontology by looping through the parsers. If the // ontology is parsed successfully then we break out and return the ontology. // I think that this is more reliable than selecting a parser based on a file extension // for example (perhaps the parser list could be ordered based on most likely parser, which // could be determined by file extension). Map<OWLParser, OWLParserException> exceptions = new LinkedHashMap<OWLParser, OWLParserException>(); // Call the super method to create the ontology - this is needed, because // we throw an exception if someone tries to create an ontology directly OWLOntology existingOntology = null; IRI iri = documentSource.getDocumentIRI(); if (getOWLOntologyManager().contains(iri)) { existingOntology = getOWLOntologyManager().getOntology(iri); } OWLOntologyID ontologyID = new OWLOntologyID(); OWLOntology ont = super.createOWLOntology(ontologyID, documentSource.getDocumentIRI(), mediator); // Now parse the input into the empty ontology that we created for (final OWLParser parser : getParsers()) { try { if (existingOntology == null && !ont.isEmpty()) { // Junk from a previous parse. We should clear the ont getOWLOntologyManager().removeOntology(ont); ont = super.createOWLOntology(ontologyID, documentSource.getDocumentIRI(), mediator); } OWLOntologyFormat format = parser.parse(documentSource, ont); mediator.setOntologyFormat(ont, format); return ont; } catch (IOException e) { // No hope of any parsers working? // First clean up getOWLOntologyManager().removeOntology(ont); throw new OWLOntologyCreationIOException(e); } catch (UnloadableImportException e) { // First clean up getOWLOntologyManager().removeOntology(ont); throw e; } catch (OWLParserException e) { // Record this attempts and continue trying to parse. exceptions.put(parser, e); } catch (RuntimeException e) { // Clean up and rethrow getOWLOntologyManager().removeOntology(ont); throw e; } } if (existingOntology == null) { getOWLOntologyManager().removeOntology(ont); } // We haven't found a parser that could parse the ontology properly. Throw an // exception whose message contains the stack traces from all of the parsers // that we have tried. throw new UnparsableOntologyException(documentSource.getDocumentIRI(), exceptions); }
/** * Gets a list of parsers that this factory uses when it tries to create an ontology from a * concrete representation. */ public List<OWLParser> getParsers() { List<OWLParser> parsers = new ArrayList<OWLParser>(); List<OWLParserFactory> factories = OWLParserFactoryRegistry.getInstance().getParserFactories(); for (OWLParserFactory factory : factories) { OWLParser parser = factory.createParser(getOWLOntologyManager()); parser.setOWLOntologyManager(getOWLOntologyManager()); parsers.add(parser); } return new ArrayList<OWLParser>(parsers); }