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() );
}
}