You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/11/08 22:06:42 UTC
svn commit: r1199454 - in /incubator/jena/Jena2/ARQ/trunk:
src-examples/arq/examples/riot/ src/main/java/arq/
src/main/java/arq/cmdline/ src/main/java/com/hp/hpl/jena/query/
src/main/java/com/hp/hpl/jena/sparql/core/
src/main/java/com/hp/hpl/jena/sparq...
Author: andy
Date: Tue Nov 8 21:06:41 2011
New Revision: 1199454
URL: http://svn.apache.org/viewvc?rev=1199454&view=rev
Log:
Merge interface DataSource into interface Dataset; leave DataSource as deprecated stub for compatibility.
Removed:
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DataSourceImpl.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl2.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DataSourceAssembler.java
Modified:
incubator/jena/Jena2/ARQ/trunk/src-examples/arq/examples/riot/ExRIOT_3.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/cmdline/ModDatasetGeneral.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/qparse.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/sse_query.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DataSource.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Dataset.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryExecutionFactory.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraph.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/AssemblerUtils.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DatasetAssembler.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/GraphStoreAssembler.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/GraphStoreBasic.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DatasetUtils.java
incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDataset.java
incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDatasetDataSource.java
incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/junit/UpdateTest.java
Modified: incubator/jena/Jena2/ARQ/trunk/src-examples/arq/examples/riot/ExRIOT_3.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-examples/arq/examples/riot/ExRIOT_3.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-examples/arq/examples/riot/ExRIOT_3.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-examples/arq/examples/riot/ExRIOT_3.java Tue Nov 8 21:06:41 2011
@@ -43,8 +43,8 @@ public class ExRIOT_3
// read some (more) data into a dataset graph.
RiotLoader.read("data2.trig", dsg) ;
- // Create a daatset,
- Dataset ds = DatasetFactory.create() ;
+ // Create a dataset,
+ Dataset ds = DatasetFactory.createMem() ;
// read in data.
RiotLoader.read("data2.trig", ds.asDatasetGraph()) ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/cmdline/ModDatasetGeneral.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/cmdline/ModDatasetGeneral.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/cmdline/ModDatasetGeneral.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/cmdline/ModDatasetGeneral.java Tue Nov 8 21:06:41 2011
@@ -26,7 +26,6 @@ import org.openjena.riot.RiotLoader ;
import arq.cmd.CmdException ;
-import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.query.DatasetFactory ;
import com.hp.hpl.jena.query.LabelExistsException ;
@@ -97,13 +96,13 @@ public class ModDatasetGeneral extends M
// This can auto-add graphs.
DatasetGraph dsg = DatasetGraphFactory.createMem() ;
- DataSource ds = DatasetFactory.create(dsg) ;
+ Dataset ds = DatasetFactory.create(dsg) ;
addGraphs(ds) ;
dataset = ds ;
return dataset ;
}
- protected void addGraphs(DataSource ds)
+ protected void addGraphs(Dataset ds)
{
try {
if ( (graphURLs != null) || (namedGraphURLs != null) )
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/qparse.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/qparse.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/qparse.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/qparse.java Tue Nov 8 21:06:41 2011
@@ -164,7 +164,7 @@ public class qparse extends CmdARQ
{
divider() ;
// This forces internal query initialization - must be after QueryUtils.checkQuery
- QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.create()) ;
+ QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.createMem()) ;
QueryOutputUtils.printPlan(query, qExec) ;
}
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/sse_query.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/sse_query.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/sse_query.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/arq/sse_query.java Tue Nov 8 21:06:41 2011
@@ -123,7 +123,7 @@ public class sse_query extends CmdARQ
Dataset dataset = modDataset.getDataset() ;
// Check there is a dataset.
if ( dataset == null )
- dataset = DatasetFactory.create() ;
+ dataset = DatasetFactory.createMem() ;
modTime.startTimer() ;
DatasetGraph dsg = dataset.asDatasetGraph() ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DataSource.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DataSource.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DataSource.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DataSource.java Tue Nov 8 21:06:41 2011
@@ -20,21 +20,10 @@ package com.hp.hpl.jena.query;
//import java.util.Iterator;
-import com.hp.hpl.jena.rdf.model.Model ;
-/** A DataSource is a Dataset that has modification operations. */
+/** A DataSource is a Dataset that has modification operations.
+ * @deprecated Use Dataset, which now has the operations for add/remove of named models.
+ * */
-public interface DataSource extends Dataset
-{
- /** Set the background graph. Can be set to null for none. */
- public void setDefaultModel(Model model) ;
-
- /** Set a named graph. */
- public void addNamedModel(String uri, Model model) throws LabelExistsException ;
-
- /** Remove a named graph. */
- public void removeNamedModel(String uri) ;
-
- /** Change a named graph for another using the same name */
- public void replaceNamedModel(String uri, Model model) ;
-}
+@Deprecated
+public interface DataSource extends Dataset {}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Dataset.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Dataset.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Dataset.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Dataset.java Tue Nov 8 21:06:41 2011
@@ -33,12 +33,24 @@ public interface Dataset
/** Get the default graph as a Jena Model */
public Model getDefaultModel() ;
+ /** Set the background graph. Can be set to null for none. */
+ public void setDefaultModel(Model model) ;
+
/** Get a graph by name as a Jena Model */
public Model getNamedModel(String uri) ;
/** Does the dataset contain a model with the name supplied? */
public boolean containsNamedModel(String uri) ;
+ /** Set a named graph. */
+ public void addNamedModel(String uri, Model model) throws LabelExistsException ;
+
+ /** Remove a named graph. */
+ public void removeNamedModel(String uri) ;
+
+ /** Change a named graph for another using the same name */
+ public void replaceNamedModel(String uri, Model model) ;
+
/** List the names */
public Iterator<String> listNames() ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java Tue Nov 8 21:06:41 2011
@@ -22,12 +22,14 @@ import java.util.List ;
import com.hp.hpl.jena.assembler.Assembler ;
import com.hp.hpl.jena.rdf.model.Model ;
+import com.hp.hpl.jena.rdf.model.ModelFactory ;
import com.hp.hpl.jena.rdf.model.Resource ;
import com.hp.hpl.jena.sparql.ARQException ;
-import com.hp.hpl.jena.sparql.core.DataSourceImpl ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-import com.hp.hpl.jena.sparql.core.assembler.DataSourceAssembler ;
+import com.hp.hpl.jena.sparql.core.DatasetImpl ;
+import com.hp.hpl.jena.sparql.core.assembler.DatasetAssembler ;
import com.hp.hpl.jena.sparql.util.DatasetUtils ;
+import com.hp.hpl.jena.sparql.util.graph.GraphFactory ;
import com.hp.hpl.jena.sparql.util.graph.GraphUtils ;
import com.hp.hpl.jena.util.FileManager ;
@@ -35,33 +37,43 @@ import com.hp.hpl.jena.util.FileManager
public class DatasetFactory
{
- /** Create a Dataset
- *
- * @return DataSource
+ /** Create an in-memory, modifable Dataset */
+ public static Dataset createMem() { return create() ; }
+
+ /** Create an in-memory, modifable Dataset
+ * @deprecated Use createMem
*/
+ @Deprecated
public static DataSource create()
- { return DataSourceImpl.createMem() ; }
+ {
+ // This may not be a defaultJena model - during testing,
+ // we use a graph that is not value-aware for xsd:String vs plain literals.
+ return new DatasetImpl(ModelFactory.createModelForGraph(GraphFactory.createDefaultGraph())) ;
+ }
/** Create a dataset with the given model as the default graph
* @param model
- * @return DataSource (Updateable Dataset)
+ * @return Dataset
*/
+ @SuppressWarnings("deprecation")
public static DataSource create(Model model)
- { return new DataSourceImpl(model) ; }
+ { return new DatasetImpl(model) ; }
/** Create a dataset
* @param dataset
- * @return DataSource (Updateable Dataset)
+ * @return Dataset
*/
+ @SuppressWarnings("deprecation")
public static DataSource create(Dataset dataset)
- { return new DataSourceImpl(dataset) ; }
+ { return new DatasetImpl(dataset) ; }
/** Wrap a datasetgraph to make a mutable dataset
* @param dataset DatasetGraph
- * @return DataSource (Updateable Dataset)
+ * @return Dataset
*/
+ @SuppressWarnings("deprecation")
public static DataSource create(DatasetGraph dataset)
- { return DataSourceImpl.wrap(dataset) ; }
+ { return new DatasetImpl(dataset) ; }
/** Create a dataset based on a list of URIs : these are merged into the default graph of the dataset.
*
@@ -197,7 +209,7 @@ public class DatasetFactory
public static Dataset make(Dataset ds, Model defaultModel)
{
- DataSourceImpl ds2 = new DataSourceImpl(ds) ;
+ Dataset ds2 = new DatasetImpl(ds) ;
ds2.setDefaultModel(defaultModel) ;
return ds2 ;
}
@@ -221,9 +233,9 @@ public class DatasetFactory
*/
public static Dataset assemble(Model model)
{
- Resource r = GraphUtils.findRootByType(model, DataSourceAssembler.getType()) ;
+ Resource r = GraphUtils.findRootByType(model, DatasetAssembler.getType()) ;
if ( r == null )
- throw new ARQException("No root found for type <"+DataSourceAssembler.getType()+">") ;
+ throw new ARQException("No root found for type <"+DatasetAssembler.getType()+">") ;
return assemble(r) ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryExecutionFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryExecutionFactory.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryExecutionFactory.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryExecutionFactory.java Tue Nov 8 21:06:41 2011
@@ -19,12 +19,12 @@
package com.hp.hpl.jena.query;
import java.util.List ;
+import org.openjena.atlas.logging.Log ;
+
import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.rdf.model.Model ;
-import com.hp.hpl.jena.sparql.core.DataSourceImpl ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
-import com.hp.hpl.jena.sparql.core.DatasetImpl ;
import com.hp.hpl.jena.sparql.engine.Plan ;
import com.hp.hpl.jena.sparql.engine.QueryEngineFactory ;
import com.hp.hpl.jena.sparql.engine.QueryEngineRegistry ;
@@ -33,11 +33,9 @@ import com.hp.hpl.jena.sparql.engine.bin
import com.hp.hpl.jena.sparql.engine.binding.BindingRoot ;
import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP ;
import com.hp.hpl.jena.sparql.syntax.Element ;
-import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.sparql.util.Context ;
import com.hp.hpl.jena.util.FileManager ;
-
/** Place to make QueryExecution objects from Query objects or a string. */
public class QueryExecutionFactory
@@ -179,7 +177,7 @@ public class QueryExecutionFactory
{
checkArg(query) ;
checkArg(model) ;
- return make(query, new DatasetImpl(model)) ;
+ return make(query, DatasetFactory.create(model)) ;
}
/** Create a QueryExecution to execute over the Model.
@@ -261,7 +259,7 @@ public class QueryExecutionFactory
static public QueryExecution create(Query query, Model model, QuerySolution initialBinding)
{
checkArg(model) ;
- return create(query, new DataSourceImpl(model), initialBinding) ;
+ return create(query, DatasetFactory.create(model), initialBinding) ;
}
/** Create a QueryExecution to execute over the Model,
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraph.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraph.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraph.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraph.java Tue Nov 8 21:06:41 2011
@@ -25,15 +25,15 @@ import org.openjena.atlas.lib.Closeable
import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.TripleMatch ;
-import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.shared.Lock ;
import com.hp.hpl.jena.sparql.util.Context ;
/** DatasetGraph: The graph representation of an RDF Dataset. See {@link Dataset}
* for the Model level, read-only view (fixed set of models - the models
- * themselves are still mutable) of an RDF dataset and {@link DataSource} for an
- * mutabe RDF Datset Whether a dataset contains a graph if there are no triples
+ * themselves are still mutable) of an RDF dataset.
+ * <p>
+ * Whether a dataset contains a graph if there are no triples
* is not defined; see the specifc implementation. Some datasets are "open" -
* they have all graphs even if no triples, Some datasets are "closed" - fixed
* set of graphs
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/DatasetImpl.java Tue Nov 8 21:06:41 2011
@@ -25,7 +25,9 @@ import org.openjena.atlas.lib.CacheFacto
import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.query.LabelExistsException ;
import com.hp.hpl.jena.query.ReadWrite ;
import com.hp.hpl.jena.rdf.model.Model ;
import com.hp.hpl.jena.rdf.model.ModelFactory ;
@@ -33,40 +35,74 @@ import com.hp.hpl.jena.shared.Lock ;
import com.hp.hpl.jena.sparql.ARQException ;
import com.hp.hpl.jena.sparql.util.NodeUtils ;
-/** Wrapper around a DatasetGraph. See also DataSourceImpl. */
+/** A implementation of a Dataset.
+ * This is the "usual" implementation based on wrapping a DatasetGraph
+ * and providing an adapter layer from Model/Resource to Graph/Node
+ * The characteristics of this adpter depend on the charcateristics of
+ * DatasetGraph.
+ */
-public class DatasetImpl implements Dataset
+@SuppressWarnings("deprecation")
+public class DatasetImpl implements Dataset, DataSource
{
+ /*
+ * We are cautious - SPARQL Update can change the graphs in a store
+ * so we assume DatasetGraph.getGraph is efficient and
+ * here cut the overhead of model wrappers.
+ */
+
protected DatasetGraph dsg = null ;
- private Object lock = new Object() ;
+ // Cache of graph -> model so that we don't churn model creation.
+ private Cache<Graph, Model> cache = CacheFactory.createCache(0.75f, 20) ;
+ private Object internalLock = new Object() ;
+
+ protected DatasetImpl()
+ {}
- // A small cache so that calls getDefaultModel()/getNamedModel() are
- // cheap when used repeatedly in code. This is not an excuse for
- // DatasetGraph not to cache if appropriate for the storage technology.
- private Model defaultModel = null ;
- // read synchronised in this class, not need for a sync wrapper.
- private Cache<String, Model> cache = CacheFactory.createCache(0.75f, 20) ;
+ public DatasetImpl(DatasetGraph dsg)
+ {
+ this.dsg = dsg ;
+ }
+ /** Wrap an existing DatasetGraph */
+ public static Dataset wrap(DatasetGraph datasetGraph)
+ {
+ DatasetImpl ds = new DatasetImpl() ;
+ ds.dsg = datasetGraph ;
+ return ds ;
+ }
+
+ /** Clone the structure of a DatasetGraph.
+ * The current graph themselves are shared but new naming and new graphs are
+ * only in the cloned
+ */
+ public static Dataset cloneStructure(DatasetGraph datasetGraph)
+ {
+ DatasetImpl ds = new DatasetImpl() ;
+ ds.dsg = new DatasetGraphMap(datasetGraph) ;
+ return ds ;
+ }
+ /** Create a Dataset with the model as default model.
+ * Named models must be explicitly added to identify the storage to be used.
+ */
public DatasetImpl(Model model)
{
- defaultModel = model ;
+ addToCache(model) ;
+ // TODO Is this right? this sort of DatasetGraph can't auto-add graphs.
this.dsg = DatasetGraphFactory.create(model.getGraph()) ;
}
-
- public DatasetImpl(DatasetGraph dsg)
+
+ public DatasetImpl(Dataset ds)
{
- this.dsg = dsg ;
+ this.dsg = DatasetGraphFactory.create(ds.asDatasetGraph()) ;
}
- /** Return the default model */
@Override
public Model getDefaultModel()
{
- synchronized(lock)
+ synchronized(internalLock)
{
- if ( defaultModel == null )
- defaultModel = graph2model(dsg.getDefaultGraph()) ;
- return defaultModel ;
+ return graph2model(dsg.getDefaultGraph()) ;
}
}
@@ -77,53 +113,72 @@ public class DatasetImpl implements Data
@Override public void begin(ReadWrite mode) { throw new UnsupportedOperationException("Transactions not supported") ; }
@Override public void commit() { throw new UnsupportedOperationException("Transactions not supported") ; }
@Override public void abort() { throw new UnsupportedOperationException("Transactions not supported") ; }
-
+
@Override
public DatasetGraph asDatasetGraph() { return dsg ; }
- /** Return a model for the named graph - repeated calls so not guarantee to return the same Java object */
@Override
public Model getNamedModel(String uri)
{
checkGraphName(uri) ;
-
- // synchronized because we need to read and possible update the cache atomically
- synchronized(lock)
+ Node n = Node.createURI(uri) ;
+ synchronized(internalLock)
{
- Model m = cache.get(uri) ;
- if ( m == null )
- {
- m = graph2model(dsg.getGraph(Node.createURI(uri))) ;
- cache.put(uri, m) ;
- }
- return m ;
+ Graph g = dsg.getGraph(n) ;
+ if ( g == null )
+ return null ;
+ return graph2model(g) ;
}
}
- private static void checkGraphName(String uri)
- {
- if ( uri == null )
- throw new ARQException("null for graph name") ;
+ @Override
+ public void addNamedModel(String uri, Model model) throws LabelExistsException
+ {
+ checkGraphName(uri) ;
+ // Assumes single writer.
+ addToCache(model) ;
+ Node n = Node.createURI(uri) ;
+ dsg.addGraph(n, model.getGraph()) ;
}
@Override
- public boolean containsNamedModel(String uri)
+ public void removeNamedModel(String uri)
+ {
+ checkGraphName(uri) ;
+ Node n = Node.createURI(uri) ;
+ // Assumes single writer.
+ removeFromCache(dsg.getGraph(n)) ;
+ dsg.removeGraph(n) ;
+ }
+
+ @Override
+ public void replaceNamedModel(String uri, Model model)
{
+ // Assumes single writer.
checkGraphName(uri) ;
+ Node n = Node.createURI(uri) ;
+ removeFromCache(dsg.getGraph(n)) ;
+ dsg.removeGraph(n) ;
+ addToCache(model) ;
+ dsg.addGraph(n, model.getGraph() ) ;
+ }
- // Don't look in the cache - just ask the DSG which either caches graphs
- // or asks the storage as needed. The significant case is whether an
- // empty graph is contained in a dataset. If it's pure quad storage,
- // the answer is usually better as "no"; if it's an in-memory
- // dataset the answer is "yes".
- return dsg.containsGraph(Node.createURI(uri)) ;
+ @Override
+ public void setDefaultModel(Model model)
+ {
+ // Assumes single writer.
+ removeFromCache(dsg.getDefaultGraph()) ;
+ addToCache(model) ;
+ dsg.setDefaultGraph(model.getGraph()) ;
}
@Override
- public void close()
- {
- cache = null ;
- dsg.close();
+ public boolean containsNamedModel(String uri)
+ {
+ // Does not touch the cache.
+ checkGraphName(uri) ;
+ Node n = Node.createURI(uri) ;
+ return dsg.containsGraph(n) ;
}
@Override
@@ -132,8 +187,49 @@ public class DatasetImpl implements Data
return NodeUtils.nodesToURIs(dsg.listGraphNodes()) ;
}
+
+ // -------
+ // Cache models wrapping graphs
+ // Assumes outser syncrhonization of necessary (multiple readers possible).
+ // Assume MRSW (Multiple Reader OR Single Writer)
+
+ @Override
+ public void close()
+ {
+ dsg.close() ;
+ cache = null ;
+ }
+
+ private void removeFromCache(Graph graph)
+ {
+ // Assume MRSW - no synchronized needed.
+ if ( graph == null )
+ return ;
+ cache.remove(graph) ;
+ }
+
+ private void addToCache(Model model)
+ {
+ // Assume MRSW - no synchronized needed.
+ cache.put(model.getGraph(), model) ;
+ }
+
private Model graph2model(Graph graph)
{
- return ModelFactory.createModelForGraph(graph) ;
+ // Called from readers -- outer synchronation needed.
+ Model model = cache.get(graph) ;
+ if ( model == null )
+ {
+ model = ModelFactory.createModelForGraph(graph) ;
+ cache.put(graph, model) ;
+ }
+ return model ;
}
+
+ private static void checkGraphName(String uri)
+ {
+ if ( uri == null )
+ throw new ARQException("null for graph name") ;
+ }
+
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/AssemblerUtils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/AssemblerUtils.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/AssemblerUtils.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/AssemblerUtils.java Tue Nov 8 21:06:41 2011
@@ -65,7 +65,7 @@ public class AssemblerUtils
static public void register(AssemblerGroup g)
{
// Wire in the extension assemblers (extensions relative to the Jena assembler framework)
- g.implementWith(DataSourceAssembler.getType(), new DataSourceAssembler()) ;
+ g.implementWith(DatasetAssembler.getType(), new DatasetAssembler()) ;
g.implementWith(GraphStoreAssembler.getType(), new GraphStoreAssembler()) ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DatasetAssembler.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DatasetAssembler.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DatasetAssembler.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/DatasetAssembler.java Tue Nov 8 21:06:41 2011
@@ -16,28 +16,129 @@
* limitations under the License.
*/
-package com.hp.hpl.jena.sparql.core.assembler ;
+package com.hp.hpl.jena.sparql.core.assembler;
+
+import java.lang.reflect.Method;
+import java.util.Iterator ;
+import java.util.List ;
import com.hp.hpl.jena.assembler.Assembler ;
import com.hp.hpl.jena.assembler.Mode ;
-import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.assembler.assemblers.AssemblerBase ;
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.DatasetFactory ;
+import com.hp.hpl.jena.rdf.model.Model ;
+import com.hp.hpl.jena.rdf.model.RDFNode ;
import com.hp.hpl.jena.rdf.model.Resource ;
+import org.openjena.atlas.logging.Log ;
+import org.slf4j.LoggerFactory ;
-public class DatasetAssembler extends DataSourceAssembler
-{
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
+import com.hp.hpl.jena.sparql.util.FmtUtils ;
+import com.hp.hpl.jena.sparql.util.graph.GraphFactory ;
+import com.hp.hpl.jena.sparql.util.graph.GraphUtils ;
+public class DatasetAssembler extends AssemblerBase implements Assembler
+{
+ public static Resource getType() { return DatasetAssemblerVocab.tDataset ; }
+
@Override
- public final Object open(Assembler a, Resource root, Mode mode)
+ public Object open(Assembler a, Resource root, Mode mode)
{
Dataset ds = createDataset(a, root, mode) ;
createTextIndex(ds, root) ;
+
+ return ds ;
+ }
+
+ public Dataset createDataset(Assembler a, Resource root, Mode mode)
+ {
+ // Expanding version.
+ DatasetGraph dsg = DatasetGraphFactory.createMem() ;
+ AssemblerUtils.setContext(root, dsg.getContext()) ;
+
+ Dataset ds = DatasetFactory.create(dsg) ;
+
+ // -------- Default graph
+ // Can use ja:graph or ja:defaultGraph
+ Resource dftGraph = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pDefaultGraph) ;
+ if ( dftGraph == null )
+ dftGraph = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pGraph) ;
+
+ Model dftModel = null ;
+ if ( dftGraph != null )
+ dftModel = a.openModel(dftGraph) ;
+ else
+ // Assembler description did not define one - make a dummy.
+ dftModel = GraphFactory.makePlainModel() ;
+
+ ds.setDefaultModel(dftModel) ;
+
+ // -------- Named graphs
+ List<RDFNode> nodes = GraphUtils.multiValue(root, DatasetAssemblerVocab.pNamedGraph) ;
+
+ for ( Iterator<RDFNode> iter= nodes.iterator() ; iter.hasNext() ; )
+ {
+ RDFNode n = iter.next();
+ if ( ! ( n instanceof Resource ) )
+ throw new DatasetAssemblerException(root, "Not a resource: "+FmtUtils.stringForRDFNode(n)) ;
+ Resource r = (Resource)n ;
+
+ String gName = GraphUtils.getAsStringValue(r, DatasetAssemblerVocab.pGraphName) ;
+ Resource g = GraphUtils.getResourceValue(r, DatasetAssemblerVocab.pGraph) ;
+ if ( g == null )
+ {
+ g = GraphUtils.getResourceValue(r, DatasetAssemblerVocab.pGraphAlt) ;
+ if ( g != null )
+ Log.warn(this, "Use of old vocabulary: use :graph not :graphData") ;
+ else
+ throw new DatasetAssemblerException(root, "no graph for: "+gName) ;
+ }
+
+ Model m = a.openModel(g) ;
+ ds.addNamedModel(gName, m) ;
+ }
return ds ;
}
+
+ public Object createTextIndex (Dataset ds, Resource root)
+ {
+ Object result = createTextIndex (ds, root, "org.apache.jena.larq.assembler.AssemblerLARQ") ;
+ if ( result == null ) result = createTextIndex (ds, root, "com.hp.hpl.jena.query.larq.AssemblerLARQ") ;
+ return result ;
+ }
- public Dataset createDataset(Assembler a, Resource root, Mode mode)
+ protected Object createTextIndex (Dataset ds, Resource root, String className)
{
- return super.createDataSource(a, root, mode) ;
+ try
+ {
+ Class<?> clazz = Class.forName(className) ;
+ if ( root.hasProperty(DatasetAssemblerVocab.pIndex) )
+ {
+ try {
+ Log.info(DatasetAssembler.class, "Initializing LARQ") ;
+ String index = GraphUtils.getAsStringValue(root, DatasetAssemblerVocab.pIndex) ;
+ Class<?> paramTypes[] = new Class[] { Dataset.class, String.class } ;
+ Method method = clazz.getDeclaredMethod("make", paramTypes) ;
+ Object args[] = new Object[] { ds, index } ;
+ return method.invoke(clazz, args) ;
+ } catch (Exception e) {
+ String msg;
+ if ( e.getMessage() != null ) {
+ msg = e.getMessage();
+ } else {
+ msg = e.getCause().getMessage();
+ }
+ Log.warn(DatasetAssembler.class, String.format("Unable to initialize LARQ using %s: %s", className, msg)) ;
+ }
+ }
+ } catch(ClassNotFoundException e) {
+ LoggerFactory.getLogger(DatasetAssembler.class).debug("LARQ initialization: class " + className + " not in the classpath.") ;
+ }
+
+ return null ;
}
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/GraphStoreAssembler.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/GraphStoreAssembler.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/GraphStoreAssembler.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/assembler/GraphStoreAssembler.java Tue Nov 8 21:06:41 2011
@@ -20,12 +20,12 @@ package com.hp.hpl.jena.sparql.core.asse
import com.hp.hpl.jena.assembler.Assembler ;
import com.hp.hpl.jena.assembler.Mode ;
-import com.hp.hpl.jena.query.DataSource ;
+import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.rdf.model.Resource ;
import com.hp.hpl.jena.update.GraphStore ;
import com.hp.hpl.jena.update.GraphStoreFactory ;
-public class GraphStoreAssembler extends DataSourceAssembler
+public class GraphStoreAssembler extends DatasetAssembler
{
public static Resource getType() { return DatasetAssemblerVocab.tGraphStore ; }
@@ -33,12 +33,12 @@ public class GraphStoreAssembler extends
public Object open(Assembler a, Resource root, Mode mode)
{
// Same vocabulary as datasets.
- // Have dispatched on type by now so can just call the dataset code to build a DataSource.
+ // Have dispatched on type by now so can just call the dataset code to build a Dataset.
GraphStore gs = null ;
Object ds = super.open(a, root, mode) ;
- if ( ds instanceof DataSource )
- gs = GraphStoreFactory.create((DataSource)ds) ;
+ if ( ds instanceof Dataset )
+ gs = GraphStoreFactory.create((Dataset)ds) ;
else
throw new DatasetAssemblerException(root, "Not a graph store") ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/GraphStoreBasic.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/GraphStoreBasic.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/GraphStoreBasic.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/GraphStoreBasic.java Tue Nov 8 21:06:41 2011
@@ -20,9 +20,9 @@ package com.hp.hpl.jena.sparql.modify;
import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.query.DatasetFactory ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.sparql.core.DatasetGraphWrapper ;
-import com.hp.hpl.jena.sparql.core.DatasetImpl ;
import com.hp.hpl.jena.update.GraphStore ;
public class GraphStoreBasic extends DatasetGraphWrapper implements GraphStore
@@ -40,7 +40,7 @@ public class GraphStoreBasic extends Dat
@Override
public Dataset toDataset()
{
- return new DatasetImpl(getWrapped()) ;
+ return DatasetFactory.create(getWrapped()) ;
}
@Override
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DatasetUtils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DatasetUtils.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DatasetUtils.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DatasetUtils.java Tue Nov 8 21:06:41 2011
@@ -24,10 +24,9 @@ import java.util.List ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.n3.IRIResolver ;
-import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.query.DatasetFactory ;
import com.hp.hpl.jena.rdf.model.Model ;
-import com.hp.hpl.jena.sparql.core.DataSourceImpl ;
import com.hp.hpl.jena.sparql.core.DatasetDesc ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
@@ -60,7 +59,7 @@ public class DatasetUtils
public static Dataset createDataset(List<String> uriList, List<String> namedSourceList,
FileManager fileManager, String baseURI)
{
- DataSource ds = DataSourceImpl.createMem() ;
+ Dataset ds = DatasetFactory.createMem() ;
addInGraphs(ds, uriList, namedSourceList, fileManager, baseURI) ;
return ds ;
}
@@ -78,13 +77,13 @@ public class DatasetUtils
/** add graphs into an exiting DataSource */
- public static Dataset addInGraphs(DataSource ds, List<String> uriList, List<String> namedSourceList)
+ public static Dataset addInGraphs(Dataset ds, List<String> uriList, List<String> namedSourceList)
{
return addInGraphs(ds, uriList, namedSourceList, null, null) ;
}
/** add graphs into an existing DataSource */
- public static Dataset addInGraphs(DataSource ds, List<String> uriList, List<String> namedSourceList,
+ public static Dataset addInGraphs(Dataset ds, List<String> uriList, List<String> namedSourceList,
FileManager fileManager, String baseURI)
{
if ( fileManager == null )
Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDataset.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDataset.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDataset.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDataset.java Tue Nov 8 21:06:41 2011
@@ -29,7 +29,6 @@ import java.util.List ;
import org.junit.Test ;
import org.openjena.atlas.iterator.Iter ;
-import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.rdf.model.Model ;
import com.hp.hpl.jena.rdf.model.ModelFactory ;
@@ -38,7 +37,7 @@ import com.hp.hpl.jena.rdf.model.Resourc
public abstract class TestDataset
{
- protected abstract DataSource create() ;
+ protected abstract Dataset create() ;
static Model model1 = ModelFactory.createDefaultModel() ;
static Model model2 = ModelFactory.createDefaultModel() ;
@@ -88,7 +87,7 @@ public abstract class TestDataset
@Test public void datasource_01()
{
- DataSource ds = create() ;
+ Dataset ds = create() ;
ds.setDefaultModel(model2) ;
assertTrue(model2.isIsomorphicWith(ds.getDefaultModel())) ;
}
@@ -96,7 +95,7 @@ public abstract class TestDataset
@Test public void datasource_02()
{
String graphName = "http://example/" ;
- DataSource ds = create() ;
+ Dataset ds = create() ;
ds.addNamedModel(graphName, model1) ;
assertTrue(ds.containsNamedModel(graphName)) ;
@@ -118,7 +117,7 @@ public abstract class TestDataset
@Test public void datasource_03()
{
String graphName = "http://example/" ;
- DataSource ds = create() ;
+ Dataset ds = create() ;
ds.addNamedModel(graphName, model1) ;
ds.replaceNamedModel(graphName, model2) ;
assertTrue(ds.containsNamedModel(graphName)) ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDatasetDataSource.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDatasetDataSource.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDatasetDataSource.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/core/TestDatasetDataSource.java Tue Nov 8 21:06:41 2011
@@ -20,7 +20,7 @@ package com.hp.hpl.jena.sparql.core;
import junit.framework.JUnit4TestAdapter ;
-import com.hp.hpl.jena.query.DataSource ;
+import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.query.DatasetFactory ;
public class TestDatasetDataSource extends TestDataset
@@ -31,7 +31,5 @@ public class TestDatasetDataSource exten
}
@Override
- protected DataSource create() { return DatasetFactory.create() ; }
-
-
+ protected Dataset create() { return DatasetFactory.createMem() ; }
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/junit/UpdateTest.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/junit/UpdateTest.java?rev=1199454&r1=1199453&r2=1199454&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/junit/UpdateTest.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/junit/UpdateTest.java Tue Nov 8 21:06:41 2011
@@ -24,14 +24,13 @@ import java.util.List ;
import org.openjena.atlas.iterator.Iter ;
import org.openjena.riot.checker.CheckerLiterals ;
-import com.hp.hpl.jena.query.DataSource ;
import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.query.DatasetFactory ;
import com.hp.hpl.jena.query.Syntax ;
import com.hp.hpl.jena.rdf.model.Model ;
import com.hp.hpl.jena.rdf.model.Property ;
import com.hp.hpl.jena.rdf.model.Resource ;
import com.hp.hpl.jena.rdf.model.Statement ;
-import com.hp.hpl.jena.sparql.core.DataSourceImpl ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
import com.hp.hpl.jena.sparql.vocabulary.TestManifestUpdate_11 ;
@@ -70,11 +69,11 @@ public class UpdateTest extends EarlTest
this.result = result ;
/*
* mf:action [ ut:query <insert-data-spo1.rq> ;
- ut:data <empty.ttl>
- ] ;
- mf:result [ ut:result ut:success ;
- ut:data <spo.ttl>
- ] .
+ ut:data <empty.ttl>
+ ] ;
+ mf:result [ ut:result ut:success ;
+ ut:data <spo.ttl>
+ ] .
*/
@@ -130,8 +129,6 @@ public class UpdateTest extends EarlTest
}
}
-
-
private boolean datasetSame(Dataset ds1, Dataset ds2, boolean verbose)
{
List<String> names1 = Iter.toList(ds1.listNames()) ;
@@ -173,7 +170,7 @@ public class UpdateTest extends EarlTest
//DataSource ds = DatasetFactory.create() ;
DatasetGraph dsg = DatasetGraphFactory.createMem() ;
// Growing. dataset.
- DataSource ds = DataSourceImpl.wrap(dsg) ;
+ Dataset ds = DatasetFactory.create(dsg) ;
List<String> dftData = getAll(r, TestManifestUpdate_11.data) ;