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 2017/12/07 14:27:20 UTC

[4/9] jena git commit: Better, clearer handling of mixed assembling

Better, clearer handling of mixed assembling


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/10ff0bee
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/10ff0bee
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/10ff0bee

Branch: refs/heads/master
Commit: 10ff0beed4d44a5c61c95d280c4e6ac306c22bba
Parents: 462b5a3
Author: ajs6f <aj...@apache.org>
Authored: Wed Nov 22 11:28:13 2017 -0500
Committer: ajs6f <aj...@apache.org>
Committed: Wed Nov 22 11:28:13 2017 -0500

----------------------------------------------------------------------
 .../sparql/core/assembler/DatasetAssembler.java | 19 ++++-----
 .../core/assembler/InMemDatasetAssembler.java   |  5 +--
 .../core/assembler/TestDatasetAssembler.java    | 44 ++++++++++----------
 .../assembler/TestInMemDatasetAssembler.java    | 10 ++++-
 .../assembler/assemblers/AssemblerBase.java     | 15 ++++---
 .../exceptions/CannotConstructException.java    | 22 +++++-----
 .../jena/assembler/test/AssemblerTestBase.java  |  3 +-
 7 files changed, 66 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
index ec85899..407ed5b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/DatasetAssembler.java
@@ -19,8 +19,8 @@
 package org.apache.jena.sparql.core.assembler ;
 
 import static org.apache.jena.assembler.JA.data;
-import static org.apache.jena.riot.RDFDataMgr.read;
-import static org.apache.jena.sparql.util.graph.GraphUtils.multiValueAsString;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pNamedGraph;
+import static org.apache.jena.sparql.util.graph.GraphUtils.multiValueResource;
 
 import java.util.List ;
 
@@ -30,9 +30,7 @@ import org.apache.jena.assembler.assemblers.AssemblerBase ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.query.Dataset ;
 import org.apache.jena.query.DatasetFactory ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.rdf.model.RDFNode ;
-import org.apache.jena.rdf.model.Resource ;
+import org.apache.jena.rdf.model.*;
 import org.apache.jena.sparql.graph.GraphFactory ;
 import org.apache.jena.sparql.util.FmtUtils ;
 import org.apache.jena.sparql.util.graph.GraphUtils ;
@@ -51,6 +49,10 @@ public class DatasetAssembler extends AssemblerBase implements Assembler {
 
     public Dataset createDataset(Assembler a, Resource root, Mode mode) {
         checkType(root, DatasetAssemblerVocab.tDataset);
+        // use TIM if quads are loaded or if all named Graphs are loaded via data property
+        final boolean allNamedGraphsLoadViaData = multiValueResource(root, pNamedGraph).stream().allMatch(g -> g.hasProperty(data));
+        if (root.hasProperty(data) || allNamedGraphsLoadViaData) return new InMemDatasetAssembler().open(a, root, mode);
+
         // -------- Default graph
         // Can use ja:graph or ja:defaultGraph
         Resource dftGraph = GraphUtils.getResourceValue(root, DatasetAssemblerVocab.pDefaultGraph) ;
@@ -63,12 +65,9 @@ public class DatasetAssembler extends AssemblerBase implements Assembler {
         else
             // Assembler description did not define one.
             dftModel = GraphFactory.makeDefaultModel() ;
-        Dataset ds = DatasetFactory.create(dftModel) ;
+        Dataset ds = DatasetFactory.create(dftModel);
+
         Txn.executeWrite(ds, () -> {
-            // Load data into the default graph or quads into the dataset.
-            multiValueAsString(root, data)
-                .forEach(dataURI -> read(ds, dataURI));
-    
             // -------- Named graphs
             List<RDFNode> nodes = GraphUtils.multiValue(root, DatasetAssemblerVocab.pNamedGraph) ;
             for ( RDFNode n : nodes ) {

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java
index 792f382..83a8017 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java
@@ -22,8 +22,7 @@ import static org.apache.jena.assembler.JA.data;
 import static org.apache.jena.query.DatasetFactory.createTxnMem;
 import static org.apache.jena.riot.RDFDataMgr.read;
 import static org.apache.jena.sparql.core.assembler.AssemblerUtils.setContext;
-import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pGraphName;
-import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pNamedGraph;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.*;
 import static org.apache.jena.sparql.util.graph.GraphUtils.*;
 
 import org.apache.jena.assembler.Assembler;
@@ -43,7 +42,7 @@ public class InMemDatasetAssembler extends DatasetAssembler {
     
 	@Override
 	public Dataset open(final Assembler assembler, final Resource root, final Mode mode) {
-		checkType(root, DatasetAssemblerVocab.tMemoryDataset);
+		checkType(root, getType(), tDataset);
 		final Dataset dataset = createTxnMem();
 		setContext(root, dataset.getContext());
 

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestDatasetAssembler.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestDatasetAssembler.java
index c65ab54..0515f97 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestDatasetAssembler.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestDatasetAssembler.java
@@ -74,28 +74,28 @@ public class TestDatasetAssembler extends Assert {
 
     @Test
     public void directDataQuadsURI() throws IOException {
-    	// first make a file of quads to load later
-    	final Model model = createDefaultModel();
-    	final Path quads = createTempFile("quadExample", ".nq");
-    	final Resource quadsURI = model.createResource(quads.toFile().toURI().toString());
-    	final Resource simpleExample = model.createResource("test:simpleExample");
-    	simpleExample.addProperty(type, assemblerType());
-    	simpleExample.addProperty(data, quadsURI);
-    
-    	final DatasetGraph dsg = DatasetGraphFactory.createTxnMem();
-        Txn.executeWrite(dsg, () ->
-            model.listStatements().mapWith(Statement::asTriple)
-                .mapWith(t -> new Quad(quadsURI.asNode(), t)).forEachRemaining(dsg::add));
-    
-    	try (OutputStream out = new FileOutputStream(quads.toFile())) {
-    		write(out, dsg, NQUADS);
-    	}
-    
-    	final Dataset dataset = assemble(simpleExample);
-    	final Model assembledDefaultModel = dataset.getDefaultModel();
-    	final Model assembledNamedModel = dataset.getNamedModel(quadsURI.getURI());
-    	assertTrue(assembledDefaultModel.isEmpty());
-    	assertTrue(assembledNamedModel.contains(assembledNamedModel.createStatement(simpleExample, data, quadsURI)));
+        	// first make a file of quads to load later
+        	final Model model = createDefaultModel();
+        	final Path quads = createTempFile("quadExample", ".nq");
+        	final Resource quadsURI = model.createResource(quads.toFile().toURI().toString());
+        	final Resource simpleExample = model.createResource("test:simpleExample");
+        	simpleExample.addProperty(type, assemblerType());
+        	simpleExample.addProperty(data, quadsURI);
+        
+        	final DatasetGraph dsg = DatasetGraphFactory.createTxnMem();
+            Txn.executeWrite(dsg, () ->
+                model.listStatements().mapWith(Statement::asTriple)
+                    .mapWith(t -> new Quad(quadsURI.asNode(), t)).forEachRemaining(dsg::add));
+        
+        	try (OutputStream out = new FileOutputStream(quads.toFile())) {
+        		write(out, dsg, NQUADS);
+        	}
+        
+        	final Dataset dataset = assemble(simpleExample);
+        	final Model assembledDefaultModel = dataset.getDefaultModel();
+        	final Model assembledNamedModel = dataset.getNamedModel(quadsURI.getURI());
+        	assertTrue(assembledDefaultModel.isEmpty());
+        	assertTrue(assembledNamedModel.contains(assembledNamedModel.createStatement(simpleExample, data, quadsURI)));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
index a4740e5..8ef7ab8 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
@@ -53,6 +53,15 @@ public class TestInMemDatasetAssembler extends TestDatasetAssembler {
     protected DatasetAssembler createAssembler() {
         return new InMemDatasetAssembler();
     }
+    
+    @Test
+    public void shouldAccept_tDataset_type() {
+        final Model model = createDefaultModel();
+        final Resource empty = model.createResource("test:empty");
+        empty.addProperty(type, DatasetAssemblerVocab.tDataset) ;
+        Dataset dataset = assemble(empty) ;
+        assertFalse(dataset.asDatasetGraph().find().hasNext()) ;
+    }
 
 	@Test
 	public void directDataLinkForDefaultAndNamedGraphs() throws IOException {
@@ -92,5 +101,4 @@ public class TestInMemDatasetAssembler extends TestDatasetAssembler {
 		assertEquals(namedGraphName.asNode(), graphNodes.next());
 		assertFalse(graphNodes.hasNext());
 	}
-
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-core/src/main/java/org/apache/jena/assembler/assemblers/AssemblerBase.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/assemblers/AssemblerBase.java b/jena-core/src/main/java/org/apache/jena/assembler/assemblers/AssemblerBase.java
index e1f9bc7..b3ec1e4 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/assemblers/AssemblerBase.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/assemblers/AssemblerBase.java
@@ -63,11 +63,16 @@ public abstract class AssemblerBase implements Assembler
         throw new NotUniqueException( root, property );
         }
 
-    protected void checkType( Resource root, Resource type )
-        {
-        if (!root.hasProperty( RDF.type, type ))
-            throw new CannotConstructException( this.getClass(), root, type );
-        }
+    /**
+     * Throws {@link CannotConstructException} if the offered resource isn't any of the offered types.
+     * 
+     * @param root resource to check
+     * @param types types for which to check
+     */
+    protected void checkType( Resource root, Resource... types ) {
+        for (Resource type : types) if (root.hasProperty( RDF.type, type )) return;
+        throw new CannotConstructException( this.getClass(), root, types );
+    }
 
     @Override
     public Model openModel( Resource root, Mode mode )

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-core/src/main/java/org/apache/jena/assembler/exceptions/CannotConstructException.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/exceptions/CannotConstructException.java b/jena-core/src/main/java/org/apache/jena/assembler/exceptions/CannotConstructException.java
index 032265a..132768a 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/exceptions/CannotConstructException.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/exceptions/CannotConstructException.java
@@ -18,6 +18,9 @@
 
 package org.apache.jena.assembler.exceptions;
 
+import static java.util.Arrays.stream;
+import static java.util.stream.Collectors.joining;
+
 import org.apache.jena.assembler.Assembler ;
 import org.apache.jena.rdf.model.Resource ;
 
@@ -28,23 +31,22 @@ import org.apache.jena.rdf.model.Resource ;
 */
 public class CannotConstructException extends AssemblerException
     {
-    protected final Resource type;
+    protected final Resource[] types;
     protected final Class<?> assemblerClass;
     
-    public CannotConstructException( Class<?> assemblerClass, Resource root, Resource type )
+    public CannotConstructException( Class<?> assemblerClass, Resource root, Resource... types )
         {
-        super( root, constructMessage( assemblerClass, root, type ) );
-        this.type = type; 
+        super( root, constructMessage( assemblerClass, root, types ) );
+        this.types = types; 
         this.assemblerClass = assemblerClass;
         }
 
-    private static String constructMessage( Class<?>assemblerClass, Resource root, Resource type )
+    private static String constructMessage( Class<?>assemblerClass, Resource root, Resource... types )
         {
         return 
             "the assembler " + getClassName( assemblerClass )
             + " cannot construct the object named " + nice( root )
-            + " because it is not of rdf:type " + nice( type ) 
-            ;
+            + " because it is not any rdf:type of " + stream(types).map(AssemblerException::nice).collect(joining(", or "));
         }
     
     private static final String rootPrefix = getPackagePrefix( Assembler.class.getName() );
@@ -68,9 +70,9 @@ public class CannotConstructException extends AssemblerException
         { return assemblerClass; }
 
     /**
-        Answer the (alleged most-specific) type of the object that could not be
+        Answer the types of the object that could not be
         constructed.
     */
-    public Resource getType()
-        { return type; }
+    public Resource[] getTypes()
+        { return types; }
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/10ff0bee/jena-core/src/test/java/org/apache/jena/assembler/test/AssemblerTestBase.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/assembler/test/AssemblerTestBase.java b/jena-core/src/test/java/org/apache/jena/assembler/test/AssemblerTestBase.java
index a315dad..c9403fc 100644
--- a/jena-core/src/test/java/org/apache/jena/assembler/test/AssemblerTestBase.java
+++ b/jena-core/src/test/java/org/apache/jena/assembler/test/AssemblerTestBase.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.assembler.test;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.jena.assembler.* ;
 import org.apache.jena.assembler.assemblers.AssemblerBase ;
 import org.apache.jena.assembler.exceptions.CannotConstructException ;
@@ -125,7 +126,7 @@ public class AssemblerTestBase extends ModelTestBase
         catch (CannotConstructException e)
             {
             assertEquals( getAssemblerClass(), e.getAssemblerClass() );
-            assertEquals( type, e.getType() ); 
+            assertTrue( ArrayUtils.contains(e.getTypes(), type) ); 
             assertEquals( resource( "x" ), e.getRoot() );
             }
         }