Difference between revisions of "ConvertingToDatabaseProject"
(categorizing page) |
|||
(8 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | + | = Converting an OWL file to OWL Database backend = | |
There are 2 ways in which the conversion from an OWL file to the database backend can be done: | There are 2 ways in which the conversion from an OWL file to the database backend can be done: | ||
Line 7: | Line 7: | ||
+ | '''Note: We do provide a script that does the streaming and non-streaming conversion that use the code snippets from below. Instead of using the code snippets, please consider using the [[ConvertToDBScript|conversion script]].''' | ||
− | + | ||
+ | __TOC__ | ||
+ | |||
+ | |||
+ | == Non-streaming conversion == | ||
The following routine will convert an OWL file project to an OWL database project by first loading it into memory and then by dumping it into a database backend. | The following routine will convert an OWL file project to an OWL database project by first loading it into memory and then by dumping it into a database backend. | ||
Line 36: | Line 41: | ||
factory.saveKnowledgeBase(fileModel, sources, errors); | factory.saveKnowledgeBase(fileModel, sources, errors); | ||
− | displayErrors(errors); // | + | displayErrors(errors); //forget this and it will be a mystery when things go wrong, see method below |
if (!errors.isEmpty()) { | if (!errors.isEmpty()) { | ||
return null; | return null; | ||
} | } | ||
+ | |||
+ | //Following lines are optional. | ||
+ | //Use them if you want to have a pprj generated for the DB project (you usually want this) | ||
+ | //If not, you can always create a new project from existing sources in the Protege editor | ||
Project dbProject = Project.createNewProject(factory, errors); | Project dbProject = Project.createNewProject(factory, errors); | ||
Line 48: | Line 57: | ||
dbProject.save(errors); | dbProject.save(errors); | ||
− | displayErrors(errors); // | + | displayErrors(errors); //forget this and it will be a mystery when things go wrong, see method below |
return (OWLModel) dbProject.getKnowledgeBase(); | return (OWLModel) dbProject.getKnowledgeBase(); | ||
} | } | ||
Line 62: | Line 71: | ||
</code> | </code> | ||
− | + | == Streaming conversion == | |
− | |||
− | |||
The streaming conversion should be used for very large ontologies that cannot be loaded in memory. This method dumps the ontology directly in the database without loading it completely in memory. | The streaming conversion should be used for very large ontologies that cannot be loaded in memory. This method dumps the ontology directly in the database without loading it completely in memory. | ||
Line 78: | Line 85: | ||
//private final static String uri = "file:/tmp/pizza/pizza.owl"; | //private final static String uri = "file:/tmp/pizza/pizza.owl"; | ||
− | public static | + | public static Project convertToDatabaseProjectStreaming(URI uri) throws URISyntaxException { |
CreateOWLDatabaseFromFileProjectPlugin creator = new CreateOWLDatabaseFromFileProjectPlugin(); | CreateOWLDatabaseFromFileProjectPlugin creator = new CreateOWLDatabaseFromFileProjectPlugin(); | ||
creator.setKnowledgeBaseFactory(new OWLDatabaseKnowledgeBaseFactory()); | creator.setKnowledgeBaseFactory(new OWLDatabaseKnowledgeBaseFactory()); | ||
Line 86: | Line 93: | ||
creator.setUsername(user); | creator.setUsername(user); | ||
creator.setPassword(password); | creator.setPassword(password); | ||
− | creator.setOntologyFileURI(uri); | + | creator.setOntologyInputSource(uri); |
+ | //creator.setOntologyFileURI(uri); //versions of Protege pre 3.4 beta 500 | ||
creator.setUseExistingSources(true); | creator.setUseExistingSources(true); | ||
Line 92: | Line 100: | ||
List errors = new ArrayList(); | List errors = new ArrayList(); | ||
p.save(errors); | p.save(errors); | ||
+ | displayErrors(errors); // if you forget to do this it will be a mystery when things go wrong, see method below | ||
+ | return p; | ||
} | } | ||
+ | </pre> | ||
+ | </code> | ||
+ | |||
+ | If you don't need the the project after this call you need to dispose it to save memory. To dispose the file model call: | ||
+ | |||
+ | <code> | ||
+ | <pre> | ||
+ | p.dispose() | ||
+ | </pre> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | == displayErrors method == | ||
+ | |||
+ | This is a utility method used to display the errors during convert. | ||
+ | |||
+ | <code> | ||
+ | <pre> | ||
+ | public static void displayErrors(Collection errors) { | ||
+ | Iterator i = errors.iterator(); | ||
+ | while (i.hasNext()) { | ||
+ | Object elem = i.next(); | ||
+ | if (elem instanceof Throwable) { | ||
+ | Log.getLogger().log(Level.WARNING, "Warnings at loading changes project", (Throwable)elem); | ||
+ | } else if (elem instanceof MessageError) { | ||
+ | Log.getLogger().log(Level.WARNING, ((MessageError)elem).getMessage(), ((MessageError)elem).getException()); | ||
+ | } else { | ||
+ | Log.getLogger().warning(elem.toString()); | ||
+ | } | ||
+ | } | ||
+ | } | ||
</pre> | </pre> | ||
</code> | </code> | ||
− | + | = Other resources = | |
* [http://protege.stanford.edu/doc/design/jdbc_backend.html Database schema used by the Protege database backend] | * [http://protege.stanford.edu/doc/design/jdbc_backend.html Database schema used by the Protege database backend] | ||
* [http://protege.stanford.edu/plugins/owl/api/guide.html Protege-OWL API Programmer's Guide] | * [http://protege.stanford.edu/plugins/owl/api/guide.html Protege-OWL API Programmer's Guide] | ||
− | [[Category:Protege | + | [[Category:Protege developer documentation]] |
− | |||
− |
Latest revision as of 16:31, April 10, 2009
Converting an OWL file to OWL Database backend
There are 2 ways in which the conversion from an OWL file to the database backend can be done:
- Non-streaming conversion: Loading the OWL file in memory and then dumping it into a database
- Streaming: Stream the OWL file directly in the database
Note: We do provide a script that does the streaming and non-streaming conversion that use the code snippets from below. Instead of using the code snippets, please consider using the conversion script.
Contents
Non-streaming conversion
The following routine will convert an OWL file project to an OWL database project by first loading it into memory and then by dumping it into a database backend.
This is a good option for medium to large ontologies that can be loaded in memory. It is also faster than the streaming solution.
One flaw of this method is that the forms information is lost. We will provide a better version later.
private final static String driver = "com.mysql.jdbc.Driver"; private final static String url = "jdbc:mysql://localhost/protege"; private final static String table = "newtable"; private final static String user = "myUser"; private final static String password = "myPassword"; //private final static String uri = "file:/tmp/pizza/pizza.owl"; @SuppressWarnings("unchecked") private static OWLModel convertToDatabaseProject(OWLModel fileModel) throws Exception { System.out.println("In Convert to Database Project"); List errors = new ArrayList(); Project fileProject = fileModel.getProject(); OWLDatabaseKnowledgeBaseFactory factory = new OWLDatabaseKnowledgeBaseFactory(); PropertyList sources = PropertyList.create(fileProject.getInternalProjectKnowledgeBase()); DatabaseKnowledgeBaseFactory.setSources(sources, driver, url, table, user, password); factory.saveKnowledgeBase(fileModel, sources, errors); displayErrors(errors); //forget this and it will be a mystery when things go wrong, see method below if (!errors.isEmpty()) { return null; } //Following lines are optional. //Use them if you want to have a pprj generated for the DB project (you usually want this) //If not, you can always create a new project from existing sources in the Protege editor Project dbProject = Project.createNewProject(factory, errors); DatabaseKnowledgeBaseFactory.setSources(dbProject.getSources(), driver, url, table, user, password); dbProject.createDomainKnowledgeBase(factory, errors, true); dbProject.setProjectURI(URIUtilities.createURI(dbProjectFile)); dbProject.save(errors); displayErrors(errors); //forget this and it will be a mystery when things go wrong, see method below return (OWLModel) dbProject.getKnowledgeBase(); }
If you don't need the file model after this call you need to dispose it to save memory. To dispose the file model call:
fileModel.dispose()
Streaming conversion
The streaming conversion should be used for very large ontologies that cannot be loaded in memory. This method dumps the ontology directly in the database without loading it completely in memory.
private final static String driver = "com.mysql.jdbc.Driver"; private final static String url = "jdbc:mysql://localhost/protege"; private final static String table = "newtable"; private final static String user = "myUser"; private final static String password = "myPassword"; //private final static String uri = "file:/tmp/pizza/pizza.owl"; public static Project convertToDatabaseProjectStreaming(URI uri) throws URISyntaxException { CreateOWLDatabaseFromFileProjectPlugin creator = new CreateOWLDatabaseFromFileProjectPlugin(); creator.setKnowledgeBaseFactory(new OWLDatabaseKnowledgeBaseFactory()); creator.setDriver(driver); creator.setURL(url); creator.setTable(table); creator.setUsername(user); creator.setPassword(password); creator.setOntologyInputSource(uri); //creator.setOntologyFileURI(uri); //versions of Protege pre 3.4 beta 500 creator.setUseExistingSources(true); Project p = creator.createProject(); List errors = new ArrayList(); p.save(errors); displayErrors(errors); // if you forget to do this it will be a mystery when things go wrong, see method below return p; }
If you don't need the the project after this call you need to dispose it to save memory. To dispose the file model call:
p.dispose()
displayErrors method
This is a utility method used to display the errors during convert.
public static void displayErrors(Collection errors) { Iterator i = errors.iterator(); while (i.hasNext()) { Object elem = i.next(); if (elem instanceof Throwable) { Log.getLogger().log(Level.WARNING, "Warnings at loading changes project", (Throwable)elem); } else if (elem instanceof MessageError) { Log.getLogger().log(Level.WARNING, ((MessageError)elem).getMessage(), ((MessageError)elem).getException()); } else { Log.getLogger().warning(elem.toString()); } } }