Protege 5 Development Environment

From Protege Wiki
Revision as of 12:02, September 14, 2011 by Tredmond (talk | contribs) (Connecting to the server programatically)

Jump to: navigation, search

Setting Up the Protege 4 Server Development Environment

The Protege server is going to be released with a version of Protege 4.2 very soon. At that time this page will be divided into instructions for users wanting to try it out and a developer page for developers. Until that time, we will only include the developer page.

Install From Svn

First checkout the development tree

     svn checkout http://smi-protege.stanford.edu/repos/protege/protege4/misc/composite/protege.server

If you are using eclipse this will become your eclipse workspace later.

To configure the server, run ant install. This will build a copy of Protege with the server installed in the directory 'build/Protege'. At this point, you will have some ant targets that can replace some of the steps listed below:

  1. run.client runs the Protege client.
  2. run.database.manager runs the database manager which will allow one to copy owl ontologies into the database. Ontologies in the database will automatically become available on the server
  3. run.server builds and runs the server. As part of this target the install target is also built.
  4. debug.server builds and runs the server with debugging turned on at port 8500.
  5. run.client builds and runs the client. As part of this target the install target is also built.
  6. debug.client builds and runs the client with debugging turned on at port 8501

Setting up Eclipse

To set up eclipse,

  1. unzip the ide-eclipse.zip file.
  2. start eclipse using protege.server as the workspace.
  3. import the projects (File -> Import -> General -> Existing Projects Into Workspace).

This eclipse workspace will come with a couple of runnables:

  • Client starts the Protege OWL Client.
  • Server starts the Protege OWL Sever
  • ConnectToAntServer connects to the "ant debug.server" script for debugging.

Loading the database and installing files

Before you can configure and start the Protege 4 server, you will need to set up a database. At the current time, only postgres and mysql are supported. I will assume that you have already installed one of these databases and have created a database for protege 4 use. Now in the top level directory (where protege.server was checked out) run the ant script run.database.manager.

More coming...

Configuring the server

In Protege, navigate to the Protege distribution and open the owl file sample-metaproject.owl. Go to the individuals tab, navigate down the class hierarchy from Thing->ServerComponent->ServerBackend->DatabaseServerBackend and select the individual databaseBackend. This individual will have three properties that you can configure: username, password and url. These properties tell the server how to access the database. MySQL and PostGreSQL databases should work. A typical mysql url will look like this: jdbc:mysql://localhost/protege4.

If you want to have a better understanding of what you have done, in the individuals tab, navigate down the class hierarchy from Thing->PolicyControlledObject->Server->OWL 2 Server. There you will see a single individual called sampleServer. When the Protege server starts up, it sees this individual and uses it as a specification of how to set up a server. In theory there could be multiple servers running in the same jvm but this does not work yet. This sampleServer individual has three object property values. These property values specify what server backend should be used, what connection component should be used and what conflict manager should be used. Currently the only one of these individuals can be further customized (the databaseBackend individual) but this will change in future releases. The connectionManager individual is a RestfulServicesConnection manager and there is a specification of a port which the connectionManager uses. This port property is not yet used but it would be the basis for having more than one server running on the same jvm. The conflictManager individual is of type StrictConflictManager and this is currently the only type that is accepted. Finally the databaseBackend individual is what needed configuring as described above to complete your setup.

When the server is run, this process

	Attempting to start server using metaproject sample-metaproject.owl
Restful Services Server Connection Factory reporting for duty
Database Server Factory reporting for duty
Trying to configure server <http://protege.org/ontologies/SampleMetaproject.owl#sampleServer>
Matched <http://protege.org/ontologies/SampleMetaproject.owl#sampleServer> with server backend (Database Server Factory).
Core Conflict Managers Factory reporting for duty
Matched <http://protege.org/ontologies/SampleMetaproject.owl#sampleServer> with conflict manager(Core Conflict Managers Factory).

More coming...

Connecting to the server programatically

We have written a small protege client that accesses the server here. The code looks like this:

	public void connect() {
		ProtegeOWLOntologyManager manager = ProtegeOWLManager.createOWLOntologyManager();
		connection = new ServletClientConnection(manager, "localhost:8080");
	}
	
	public void run() throws RemoteQueryException, OWLOntologyCreationException {
		Map<String, ServerOntologyInfo> ontologyInfoMap = connection.getOntologyInfoByShortName(true);
		ServerOntologyInfo pizzaInfo = ontologyInfoMap.get("pizza");
		if (pizzaInfo != null) {
			System.out.println("Ontology found.");
			int marked = pizzaInfo.getLatestMarkedRevision(null);
			OWLOntology pizzaOntology = connection.pull(pizzaInfo.getOntologyName(), marked);
			connection.update(pizzaOntology, null);
			System.out.println("Ontology has " + pizzaOntology.getAxiomCount() + " axioms.");
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Main m = new Main();
		m.connect();
		m.run();
	}