/* * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.sail; import info.aduna.iteration.CloseableIteration; import org.openrdf.model.Namespace; import org.openrdf.model.Resource; import org.openrdf.model.Statement; import org.openrdf.model.URI; import org.openrdf.model.Value; import org.openrdf.query.BindingSet; import org.openrdf.query.Dataset; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.algebra.TupleExpr; /** * A connection to an RDF Sail object. A SailConnection is active from the * moment it is created until it is closed. Care should be taken to properly * close SailConnections as they might block concurrent queries and/or updates * on the Sail while active, depending on the Sail-implementation that is being * used. * * @author jeen * @author Arjohn Kampman */ public interface SailConnection { /** * Checks whether this SailConnection is open. A SailConnection is open from * the moment it is created until it is closed. * * @see SailConnection#close */ public boolean isOpen() throws SailException; /** * Closes the connection. Any updates that haven't been committed yet will be * rolled back. The connection can no longer be used once it is closed. */ public void close() throws SailException; /** * Evaluates the supplied TupleExpr on the data contained in this Sail * object, using the (optional) dataset and supplied bindings as input * parameters. * * @param tupleQuery * The TupleQuery to evaluate. * @param dataset * The dataset to use for evaluating the query, <tt>null</tt> to use * the Sail's default dataset. * @param bindings * A set of input parameters for the query evaluation. The keys * reference variable names that should be bound to the value they map * to. * @param includeInferred * Indicates whether inferred triples are to be considered in the * query result. If false, no inferred statements are returned; if * true, inferred statements are returned if available * @return The TupleQueryResult. * @throws SailException * If the Sail object encountered an error or unexpected situation * internally. */ public CloseableIteration<? extends BindingSet, QueryEvaluationException> evaluate(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings, boolean includeInferred) throws SailException; /** * Returns the set of all unique context identifiers that are used to store * statements. * * @return An iterator over the context identifiers, should not contain any * duplicates. */ public CloseableIteration<? extends Resource, SailException> getContextIDs() throws SailException; /** * Gets all statements from the specified contexts that have a specific * subject, predicate and/or object. All three parameters may be null to * indicate wildcards. The <tt>includeInferred</tt> parameter can be used * to control which statements are fetched: all statements or only the * statements that have been added explicitly. * * @param subj * A Resource specifying the subject, or <tt>null</tt> for a * wildcard. * @param pred * A URI specifying the predicate, or <tt>null</tt> for a wildcard. * @param obj * A Value specifying the object, or <tt>null</tt> for a wildcard. * @param includeInferred * if false, no inferred statements are returned; if true, inferred * statements are returned if available * @param contexts * The context(s) to get the data from. Note that this parameter is a * vararg and as such is optional. If no contexts are supplied the * method operates on the entire repository. * @return The statements matching the specified pattern. * @throws SailException * If the Sail object encountered an error or unexpected situation * internally. */ public CloseableIteration<? extends Statement, SailException> getStatements(Resource subj, URI pred, Value obj, boolean includeInferred, Resource... contexts) throws SailException; /** * Returns the number of (explicit) statements. * * @return The number of explicit statements in this Sail. */ public long size(Resource... contexts) throws SailException; /** * Commits any updates that have been performed since the last time * {@link #commit()} or {@link #rollback()} was called. * * @throws SailException * If the SailConnection could not be committed. */ public void commit() throws SailException; /** * Rolls back the SailConnection, discarding any uncommitted changes that * have been made in this SailConnection. * * @throws SailException * If the SailConnection could not be rolled back. */ public void rollback() throws SailException; /** * Adds a statement to each context in the specified contexts. * * @param subj * The subject of the statement to add. * @param pred * The predicate of the statement to add. * @param obj * The object of the statement to add. * @param contexts * The context(s) to add the statement to. Note that this parameter is * a vararg and as such is optional. If no contexts are supplied the * method operates on the entire repository. * @throws SailException * If the statement could not be added. */ public void addStatement(Resource subj, URI pred, Value obj, Resource... contexts) throws SailException; /** * Removes all statements matching the specified subject, predicate and * object from the repository. All three parameters may be null to indicate * wildcards. * * @param subj * The subject of the statement that should be removed, or * <tt>null</tt> to indicate a wildcard. * @param pred * The predicate of the statement that should be removed, or * <tt>null</tt> to indicate a wildcard. * @param obj * The object of the statement that should be removed , or * <tt>null</tt> to indicate a wildcard. * * @param contexts * The context(s) from which to remove the statement. Note that this * parameter is a vararg and as such is optional. If no contexts are * supplied the method operates on the entire repository. * @throws SailException * If the statement could not be removed. */ public void removeStatements(Resource subj, URI pred, Value obj, Resource... context) throws SailException; /** * Removes all statements from the specified/all contexts. If no contexts are * specified the method operates on the entire repository. * * @param contexts * The context(s) from which to remove the statements. Note that this * parameter is a vararg and as such is optional. If no contexts are * supplied the method operates on the entire repository. * @throws SailException * If the statements could not be removed. */ public void clear(Resource... contexts) throws SailException; /** * Gets the namespaces relevant to the data contained in this Sail object. * * @returns An iterator over the relevant namespaces, should not contain any * duplicates. * @throws SailException * If the Sail object encountered an error or unexpected situation * internally. */ public CloseableIteration<? extends Namespace, SailException> getNamespaces() throws SailException; /** * Gets the namespace that is mapped to the specified prefix. * * @param prefix * A namespace prefix. * @return The namespace name that the specified prefix maps to. */ public String getNamespace(String prefix) throws SailException; /** * Sets the prefix of a namespace. * * @param prefix * The new prefix. * @param name * The namespace name that the prefix maps to. */ public void setNamespace(String prefix, String name) throws SailException; /** * Removes a namespace declaration by removing the association between a * prefix and a namespace name. * * @param prefix * The namespace prefix of which the assocation with a namespace name * is to be removed. * @throws SailException * If the namespace prefix could not be removed. */ public void removeNamespace(String prefix) throws SailException; /** * Removes all namespace declarations from the repository. * * @throws SailException * If the namespaces could not be removed. */ public void clearNamespaces() throws SailException; /** * Registers a SailConnection listener with this SailConnection. The listener * should be notified of any statements that are added or removed as part of * this SailConnection. * * @param listener * A SailConnectionListener. */ public void addConnectionListener(SailConnectionListener listener); /** * Deregisters a SailConnection listener with this SailConnection. * * @param listener * A SailConnectionListener. */ public void removeConnectionListener(SailConnectionListener listener); }