/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail;
import java.io.File;
import org.openrdf.model.ValueFactory;
/**
* An interface for an RDF Storage And Inference Layer. RDF Sails can store RDF
* statements and evaluate queries over them. Statements can be stored in named
* contexts or in the null context. Contexts can be used to group sets of
* statements that logically belong together, for example because they come from
* the same source. Both URIs and bnodes can be used as context identifiers.
*
* @author Arjohn Kampman
*/
public interface Sail {
public void setDataDir(File dataDir);
public File getDataDir();
/**
* Initializes the Sail. Care should be taken that required initialization
* parameters have been set before this method is called. Please consult the
* specific Sail implementation for information about the relevant
* parameters.
*
* @throws SailException
* If the Sail could not be initialized.
*/
public void initialize()
throws SailException;
/**
* Shuts down the Sail, giving it the opportunity to synchronize any stale
* data. Care should be taken that all initialized Sails are being shut down
* before an application exits to avoid potential loss of data. Once shut
* down, a Sail can no longer be used until it is re-initialized.
*
* @throws SailException
* If the Sail object encountered an error or unexpected situation
* internally.
*/
public void shutDown()
throws SailException;
/**
* Checks whether this Sail object is writable, i.e. if the data contained in
* this Sail object can be changed.
*/
public boolean isWritable()
throws SailException;
/**
* Opens a connection on the Sail which can be used to query and update data.
* Depending on how the implementation handles concurrent access, a call to
* this method might block when there is another open connection on this
* Sail.
*
* @throws SailException
* If no transaction could be started, for example because the Sail
* is not writable.
*/
public SailConnection getConnection()
throws SailException;
/**
* Gets a ValueFactory object that can be used to create URI-, blank node-,
* literal- and statement objects.
*
* @return a ValueFactory object for this Sail object.
*/
public ValueFactory getValueFactory();
/**
* Adds the specified SailChangedListener to receive events when the data in
* this Sail object changes.
*/
public void addSailChangedListener(SailChangedListener listener);
/**
* Removes the specified SailChangedListener so that it no longer receives
* events from this Sail object.
*/
public void removeSailChangedListener(SailChangedListener listener);
}