You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commonsrdf.apache.org by st...@apache.org on 2016/06/20 08:59:20 UTC

[1/8] incubator-commonsrdf git commit: Merge branch 'quad' into parser-with-quads

Repository: incubator-commonsrdf
Updated Branches:
  refs/heads/rdf4j ea6b992b0 -> 5d1d8e2db


Merge branch 'quad' into parser-with-quads


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/036029bb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/036029bb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/036029bb

Branch: refs/heads/rdf4j
Commit: 036029bb50676fa65f873421b4cec556b14867fb
Parents: defdbd9 580484c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 17 21:17:10 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 17 21:17:10 2016 +0100

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  39 ++++
 RELEASE-PROCESS.md                              |  16 ++
 api/pom.xml                                     |   2 +-
 .../org/apache/commons/rdf/api/Dataset.java     |  12 +-
 .../java/org/apache/commons/rdf/api/Graph.java  |  40 +++-
 .../org/apache/commons/rdf/api/GraphLike.java   |  98 ++++++++++
 .../java/org/apache/commons/rdf/api/Quad.java   |   7 +-
 .../org/apache/commons/rdf/api/QuadLike.java    |  57 ++++++
 .../java/org/apache/commons/rdf/api/Triple.java |   2 +-
 .../org/apache/commons/rdf/api/TripleLike.java  |  61 ++++++
 .../apache/commons/rdf/api/TripleOrQuad.java    |  64 -------
 .../commons/rdf/api/AbstractGraphTest.java      | 192 ++++++++++++++++++-
 .../rdf/api/AbstractRDFTermFactoryTest.java     |  29 +++
 examples/pom.xml                                |   4 +-
 examples/src/example/UserGuideTest.java         |   1 +
 pom.xml                                         |  95 ++++-----
 simple/pom.xml                                  |   3 +-
 .../commons/rdf/simple/DatasetGraphView.java    | 138 +++++++++++++
 .../apache/commons/rdf/simple/DatasetImpl.java  |  23 +--
 .../apache/commons/rdf/simple/GraphImpl.java    |  12 +-
 .../commons/rdf/simple/TestWritingGraph.java    |   8 +-
 src/assembly/src.xml                            |  45 +++++
 src/main/assembly/src.xml                       |  44 -----
 src/site/markdown/download.md                   |  34 ++--
 src/site/markdown/userguide.md                  |  60 ++++--
 25 files changed, 840 insertions(+), 246 deletions(-)
----------------------------------------------------------------------



[4/8] incubator-commonsrdf git commit: Merge branch 'parser-with-quads' into rdf4j

Posted by st...@apache.org.
Merge branch 'parser-with-quads' into rdf4j


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/be891eb8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/be891eb8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/be891eb8

Branch: refs/heads/rdf4j
Commit: be891eb8a0a17ba5a119d7bb3b21bc520797ac36
Parents: bd57975 7c69d4f
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:44:31 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:44:31 2016 +0100

----------------------------------------------------------------------
 .../rdf/simple/AbstractRDFParserBuilder.java    | 78 ++++++++++++++++++++
 1 file changed, 78 insertions(+)
----------------------------------------------------------------------



[3/8] incubator-commonsrdf git commit: add getContextFilter() and draft of parser

Posted by st...@apache.org.
add getContextFilter() and draft of parser


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/bd579759
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/bd579759
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/bd579759

Branch: refs/heads/rdf4j
Commit: bd5797590d2698e5fb24051f74c562c8d661a6b7
Parents: ea6b992
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:42:47 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:42:47 2016 +0100

----------------------------------------------------------------------
 rdf4j/pom.xml                                   |   5 +
 .../apache/commons/rdf/rdf4j/RDF4JGraph.java    |  26 ++++
 .../commons/rdf/rdf4j/RDF4JTermFactory.java     |  48 +++++--
 .../commons/rdf/rdf4j/impl/ModelGraphImpl.java  |   7 +
 .../rdf/rdf4j/impl/RDF4JParserBuilder.java      | 139 +++++++++++++++++++
 .../rdf/rdf4j/impl/RepositoryGraphImpl.java     |   7 +
 6 files changed, 217 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/pom.xml
----------------------------------------------------------------------
diff --git a/rdf4j/pom.xml b/rdf4j/pom.xml
index 204de4a..29aeb3f 100644
--- a/rdf4j/pom.xml
+++ b/rdf4j/pom.xml
@@ -43,6 +43,11 @@
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>commons-rdf-simple</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
 			<groupId>org.eclipse.rdf4j</groupId>
 			<artifactId>rdf4j-runtime</artifactId>
 			<version>${rdf4j.version}</version>

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
index 5333f31..f328be1 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraph.java
@@ -17,10 +17,13 @@
  */
 package org.apache.commons.rdf.rdf4j;
 
+import java.util.Optional;
+
 import org.apache.commons.rdf.api.Graph;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
 import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
+import org.eclipse.rdf4j.model.Resource;
 
 
 /**
@@ -31,4 +34,27 @@ import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
  */
 public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
 	
+	/**
+	 * Return a copy of the context filter, if present.
+	 * <p>
+	 * If {@link Optional#isPresent()}, the filter determines which contexts
+	 * this graph reflect. Modifications to the graph (e.g. {@link #add(Triple)
+	 * will be performed for all the specified contexts, while retrieval (e.g.
+	 * {@link #contains(Triple)}) will succeed if the triple is in at least one
+	 * of the specified contexts.
+	 * <p>
+	 * The context filter array may contain <code>null</code>, indicating the
+	 * default context (the <em>default graph</em> in RDF datasets).
+	 * <p>
+	 * If the context filter is {@link Optional#empty()}, then this is a union
+	 * graph which triples reflecting statements in any contexts. Triples added
+	 * to the graph will be added in the default context <code>null</code>.
+	 * <p>
+	 * The returned filter is a copy and thus any modifications are not
+	 * reflected in the RDF4JGraph.
+	 * 
+	 * @return
+	 */
+	public Optional<Resource[]> getContextFilter();
+	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
index 04b0030..2cd64e7 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java
@@ -26,6 +26,7 @@ import org.apache.commons.rdf.api.BlankNode;
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.Dataset;
 import org.apache.commons.rdf.api.Graph;
+import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.RDFTermFactory;
@@ -116,7 +117,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 
 	private UUID salt = UUID.randomUUID();
 
-	private ValueFactory valueFactory;
+	private final ValueFactory valueFactory;
 
 	public RDF4JTermFactory() {
 		this.valueFactory = SimpleValueFactory.getInstance();
@@ -251,7 +252,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
 			context = (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null));
 		}
 
-		return valueFactory.createStatement(subject, predicate, object, context);
+		return getValueFactory().createStatement(subject, predicate, object, context);
 	}
 
 	/**
@@ -298,17 +299,17 @@ public class RDF4JTermFactory implements RDFTermFactory {
 		}
 		if (term instanceof org.apache.commons.rdf.api.IRI) {
 			org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) term;
-			return valueFactory.createIRI(iri.getIRIString());
+			return getValueFactory().createIRI(iri.getIRIString());
 		}
 		if (term instanceof org.apache.commons.rdf.api.Literal) {
 			org.apache.commons.rdf.api.Literal literal = (org.apache.commons.rdf.api.Literal) term;
 			String label = literal.getLexicalForm();
 			if (literal.getLanguageTag().isPresent()) {
 				String lang = literal.getLanguageTag().get();
-				return valueFactory.createLiteral(label, lang);
+				return getValueFactory().createLiteral(label, lang);
 			}
 			org.eclipse.rdf4j.model.IRI dataType = (org.eclipse.rdf4j.model.IRI) asValue(literal.getDatatype());
-			return valueFactory.createLiteral(label, dataType);
+			return getValueFactory().createLiteral(label, dataType);
 		}
 		if (term instanceof BlankNode) {
 			// This is where it gets tricky to support round trips!
@@ -316,20 +317,20 @@ public class RDF4JTermFactory implements RDFTermFactory {
 			// FIXME: The uniqueReference might not be a valid BlankNode
 			// identifier..
 			// does it have to be in RDF4J?
-			return valueFactory.createBNode(blankNode.uniqueReference());
+			return getValueFactory().createBNode(blankNode.uniqueReference());
 		}
 		throw new IllegalArgumentException("RDFTerm was not an IRI, Literal or BlankNode: " + term.getClass());
 	}
 
 	@Override
 	public RDF4JBlankNode createBlankNode() throws UnsupportedOperationException {
-		BNode bnode = valueFactory.createBNode();
+		BNode bnode = getValueFactory().createBNode();
 		return (RDF4JBlankNode) asRDFTerm(bnode);
 	}
 
 	@Override
 	public RDF4JBlankNode createBlankNode(String name) throws UnsupportedOperationException {
-		BNode bnode = valueFactory.createBNode(name);
+		BNode bnode = getValueFactory().createBNode(name);
 		return (RDF4JBlankNode) asRDFTerm(bnode);
 	}
 
@@ -340,37 +341,54 @@ public class RDF4JTermFactory implements RDFTermFactory {
 
 	@Override
 	public RDF4JIRI createIRI(String iri) throws IllegalArgumentException, UnsupportedOperationException {
-		return (RDF4JIRI) asRDFTerm(valueFactory.createIRI(iri));
+		return (RDF4JIRI) asRDFTerm(getValueFactory().createIRI(iri));
 	}
 
 	@Override
 	public RDF4JLiteral createLiteral(String lexicalForm)
 			throws IllegalArgumentException, UnsupportedOperationException {
-		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm);
+		org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm);
 		return (RDF4JLiteral) asRDFTerm(lit);
 	}
 
 	@Override
 	public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, org.apache.commons.rdf.api.IRI dataType)
 			throws IllegalArgumentException, UnsupportedOperationException {
-		org.eclipse.rdf4j.model.IRI iri = valueFactory.createIRI(dataType.getIRIString());
-		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm, iri);
+		org.eclipse.rdf4j.model.IRI iri = getValueFactory().createIRI(dataType.getIRIString());
+		org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, iri);
 		return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
 	}
 
 	@Override
 	public org.apache.commons.rdf.api.Literal createLiteral(String lexicalForm, String languageTag)
 			throws IllegalArgumentException, UnsupportedOperationException {
-		org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm, languageTag);
+		org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, languageTag);
 		return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
 	}
 
 	@Override
 	public RDF4JTriple createTriple(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object)
 			throws IllegalArgumentException, UnsupportedOperationException {
-		final Statement statement = valueFactory.createStatement((org.eclipse.rdf4j.model.Resource) asValue(subject),
-				(org.eclipse.rdf4j.model.IRI) asValue(predicate), asValue(object));
+		final Statement statement = getValueFactory().createStatement(
+				(org.eclipse.rdf4j.model.Resource) asValue(subject),
+				(org.eclipse.rdf4j.model.IRI) asValue(predicate), 
+				asValue(object));
 		return asTriple(statement);
 	}
 
+	@Override
+	public Quad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object)
+			throws IllegalArgumentException, UnsupportedOperationException {
+		final Statement statement = getValueFactory().createStatement(
+				(org.eclipse.rdf4j.model.Resource) asValue(subject),
+				(org.eclipse.rdf4j.model.IRI) asValue(predicate), 
+				asValue(object), 
+				(org.eclipse.rdf4j.model.Resource)asValue(graphName));
+		return asQuad(statement);
+	}
+	
+	public ValueFactory getValueFactory() {
+		return valueFactory;
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
index d016837..10347e3 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/ModelGraphImpl.java
@@ -124,4 +124,11 @@ public final class ModelGraphImpl implements RDF4JGraph {
 			.map(rdf4jTermFactory::asTriple);
 	}
 	
+	@Override
+	public Optional<Resource[]> getContextFilter() {
+		// ModelGraph always do the unionGraph
+		return Optional.empty();
+		// TODO: Should we support contextFilter like in RepositoryGraphImpl?
+	}
+	
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RDF4JParserBuilder.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RDF4JParserBuilder.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RDF4JParserBuilder.java
new file mode 100644
index 0000000..855c526
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RDF4JParserBuilder.java
@@ -0,0 +1,139 @@
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Optional;
+import java.util.function.Consumer;
+
+import org.apache.commons.rdf.api.Quad;
+import org.apache.commons.rdf.api.RDFParserBuilder;
+import org.apache.commons.rdf.rdf4j.RDF4JDataset;
+import org.apache.commons.rdf.rdf4j.RDF4JGraph;
+import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
+import org.apache.commons.rdf.simple.AbstractRDFParserBuilder;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.repository.util.RDFInserter;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.eclipse.rdf4j.rio.RDFHandler;
+import org.eclipse.rdf4j.rio.RDFHandlerException;
+import org.eclipse.rdf4j.rio.RDFParser;
+import org.eclipse.rdf4j.rio.Rio;
+import org.eclipse.rdf4j.rio.helpers.AbstractRDFHandler;
+
+public class RDF4JParserBuilder extends AbstractRDFParserBuilder implements RDFParserBuilder {
+
+	private final class AddToQuadConsumer extends AbstractRDFHandler {
+		private final Consumer<Quad> quadTarget;
+
+		private AddToQuadConsumer(Consumer<Quad> quadTarget) {
+			this.quadTarget = quadTarget;
+		}
+
+		public void handleStatement(org.eclipse.rdf4j.model.Statement st)
+				throws org.eclipse.rdf4j.rio.RDFHandlerException {
+			// TODO: if getRdfTermFactory() is a non-rdf4j factory, should
+			// we use factory.createQuad() instead?
+			// Unsure what is the promise of setting getRdfTermFactory() --
+			// does it go all the way down to creating BlankNode, IRI and
+			// Literal?
+			quadTarget.accept(rdf4jTermFactory.asQuad(st));
+			// Performance note:
+			// Graph/Quad.add should pick up again our
+			// RDF4JGraphLike.asStatement()
+			// and avoid double conversion.
+			// Additionally the RDF4JQuad and RDF4JTriple implementations
+			// are lazily converting subj/obj/pred/graph.s
+		}
+	}
+
+	private final static class AddToModel extends AbstractRDFHandler {
+		private final Model model;
+
+		public AddToModel(Model model) {
+			this.model = model;
+		}
+
+		public void handleStatement(org.eclipse.rdf4j.model.Statement st)
+				throws org.eclipse.rdf4j.rio.RDFHandlerException {
+			model.add(st);
+		}
+		
+		@Override
+		public void handleNamespace(String prefix, String uri) throws RDFHandlerException {
+			model.setNamespace(prefix, uri);
+		}
+	}
+
+	private RDF4JTermFactory rdf4jTermFactory;
+
+	@Override
+	protected RDF4JTermFactory createRDFTermFactory() {
+		return new RDF4JTermFactory();
+	}
+
+	@Override
+	protected AbstractRDFParserBuilder prepareForParsing() throws IOException, IllegalStateException {
+		RDF4JParserBuilder c = (RDF4JParserBuilder) prepareForParsing();
+		// Ensure we have an RDF4JTermFactory for conversion.
+		// We'll make a new one if user has provided a non-RDF4J factory
+		c.rdf4jTermFactory = (RDF4JTermFactory) getRdfTermFactory().filter(RDF4JTermFactory.class::isInstance)
+				.orElseGet(c::createRDFTermFactory);
+		return c;
+	}
+
+	@Override
+	protected void parseSynchronusly() throws IOException, RDFParseException {
+		if (getContentType().isPresent()) {
+			Rio.getParserFormatForMIMEType(getContentType().get());
+		}
+
+		Optional<RDFFormat> formatByMimeType = getContentType().flatMap(Rio::getParserFormatForMIMEType);
+		Optional<RDFFormat> formatByFilename = getSourceFile().map(Path::getFileName).map(Path::toString)
+				.flatMap(Rio::getParserFormatForFileName);
+		RDFFormat format = formatByMimeType.orElse(
+				formatByFilename.orElseThrow(() -> new RDFParseException("Unrecognized or missing content type")));
+
+		RDFParser parser = Rio.createParser(format);
+
+		parser.setRDFHandler(makeRDFHandler());
+	}
+
+	protected RDFHandler makeRDFHandler() {
+
+		// TODO: Can we join the below DF4JDataset and RDF4JGraph cases
+		// using RDF4JGraphLike<TripleLike<BlankNodeOrIRI,IRI,RDFTerm>>
+		// or will that need tricky generics types?
+
+		if (getTargetDataset().filter(RDF4JDataset.class::isInstance).isPresent()) {
+			// One of us, we can add them as Statements directly
+			RDF4JDataset dataset = (RDF4JDataset) getTargetDataset().get();
+			if (dataset.asRepository().isPresent()) {				
+				return new RDFInserter(dataset.asRepository().get().getConnection());
+			}
+			if (dataset.asModel().isPresent()) {
+				Model model = dataset.asModel().get();
+				return new AddToModel(model);
+			}
+			// Not backed by Repository or Model?
+			// Third-party RDF4JDataset subclass, so we'll fall through to the
+			// getTarget() handling further down
+		} else if (getTargetGraph().filter(RDF4JGraph.class::isInstance).isPresent()) {
+			RDF4JGraph graph = (RDF4JGraph) getTargetGraph().get();
+
+			if (graph.asRepository().isPresent()) {
+				RDFInserter inserter = new RDFInserter(graph.asRepository().get().getConnection());
+				graph.getContextFilter().ifPresent(inserter::enforceContext);
+				return inserter;
+			}
+			if (graph.asModel().isPresent() && graph.getContextFilter().isPresent()) {
+				Model model = graph.asModel().get();
+				return new AddToModel(model);
+			}
+			// else - fall through
+		}
+
+		// Fall thorough: let target() consume our converted quads.
+		return new AddToQuadConsumer(getTarget());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/bd579759/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
index 7c15d1d..73e1065 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
@@ -17,6 +17,8 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
+import java.util.Arrays;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -154,4 +156,9 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
 		return rdf4jTermFactory.asTriple(statement);
 	}
 
+	public Optional<Resource[]> getContextFilter() {
+		// Make sure we clone
+		return Optional.ofNullable(contextFilter).map(f -> f.clone());		
+	}
+	
 }


[5/8] incubator-commonsrdf git commit: target() in javadocs

Posted by st...@apache.org.
target() in javadocs


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/c0700de1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/c0700de1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/c0700de1

Branch: refs/heads/rdf4j
Commit: c0700de1f2adb83200f3443ef29e884a7ffae289
Parents: d153b4c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:48:19 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:48:19 2016 +0100

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/RDFParserBuilder.java | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c0700de1/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java b/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
index 1425263..b387406 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.util.concurrent.Future;
+import java.util.function.Consumer;
 
 /**
  * Builder for parsing an RDF source into a Graph.
@@ -35,7 +36,7 @@ import java.util.concurrent.Future;
  * RDFParserBuilder - however methods can be called in any order.
  * <p>
  * The call to {@link #parse()} returns a {@link Future}, allowing asynchronous parse
- * operations. This can be combined with {@link #intoGraph(Graph)}
+ * operations. This can be combined with {@link #target(Graph)}
  * allowing access to the graph before parsing has completed,
  * however callers are still recommended to to check 
  * {@link Future#get()} for any exceptions thrown during parsing.
@@ -73,7 +74,7 @@ public interface RDFParserBuilder {
 	 * Specify which {@link RDFTermFactory} to use for generating
 	 * {@link RDFTerm}s.
 	 * <p>
-	 * This option may be used together with {@link #intoGraph(Graph)} to
+	 * This option may be used together with {@link #target(Graph)} to
 	 * override the implementation's default factory and graph.
 	 * <p>
 	 * <strong>Warning:</strong> Using the same {@link RDFTermFactory} for 
@@ -82,7 +83,7 @@ public interface RDFParserBuilder {
 	 * use the {@link RDFTermFactory#createBlankNode(String)} method
 	 * from the parsed blank node labels.
 	 * 
-	 * @see #intoGraph(Graph)
+	 * @see #target(Graph)
 	 * @param rdfTermFactory
 	 *            {@link RDFTermFactory} to use for generating RDFTerms.
 	 * @return An {@link RDFParserBuilder} that will use the specified
@@ -165,8 +166,12 @@ public interface RDFParserBuilder {
 	 * @return An {@link RDFParserBuilder} that will insert triples into the
 	 *         specified graph.
 	 */
-	RDFParserBuilder intoGraph(Graph graph);
+	default RDFParserBuilder target(Graph graph) {
+		return target(graph::add);
+	}
 
+	RDFParserBuilder target(Consumer<Triple> tripleConsumer);
+	
 	/**
 	 * Specify a base IRI to use for parsing any relative IRI references.
 	 * <p>
@@ -357,7 +362,7 @@ public interface RDFParserBuilder {
 	 * synchronous implementation MAY be blocking on the <code>parse()</code>
 	 * call and return a Future that is already {@link Future#isDone()}.
 	 * <p>
-	 * If {@link #intoGraph(Graph)} has been specified, this SHOULD be the same
+	 * If {@link #target(Graph)} has been specified, this SHOULD be the same
 	 * {@link Graph} instance returned from {@link Future#get()} once parsing has
 	 * completed successfully.
 	 * <p>


[7/8] incubator-commonsrdf git commit: Only Quad consumer, not Triple consumer

Posted by st...@apache.org.
Only Quad consumer, not Triple consumer


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/ddc545e5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/ddc545e5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/ddc545e5

Branch: refs/heads/rdf4j
Commit: ddc545e511ef9c8459ea5ce81fab750b4cd0a3b0
Parents: 953e9b8
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:56:51 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:56:51 2016 +0100

----------------------------------------------------------------------
 api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ddc545e5/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java b/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
index 5e8ee33..0494502 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
@@ -191,8 +191,6 @@ public interface RDFParserBuilder {
 		});
 	}
 
-	RDFParserBuilder target(Consumer<Triple> tripleConsumer);
-	
 	/**
 	 * Specify a {@link Dataset} to add parsed quads to.
 	 * <p>


[6/8] incubator-commonsrdf git commit: Merge branch 'parser-writer-interface' into parser-with-quads

Posted by st...@apache.org.
Merge branch 'parser-writer-interface' into parser-with-quads


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/953e9b89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/953e9b89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/953e9b89

Branch: refs/heads/rdf4j
Commit: 953e9b8915fd7d42f8beac6fac8cabc39d5351e1
Parents: 7c69d4f c0700de
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:52:59 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:52:59 2016 +0100

----------------------------------------------------------------------
 api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/953e9b89/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
----------------------------------------------------------------------
diff --cc api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
index 0494502,b387406..5e8ee33
--- a/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/RDFParserBuilder.java
@@@ -183,71 -166,13 +183,73 @@@ public interface RDFParserBuilder 
  	 * @return An {@link RDFParserBuilder} that will insert triples into the
  	 *         specified graph.
  	 */
 -	default RDFParserBuilder target(Graph graph) {
 -		return target(graph::add);
 +	default RDFParserBuilder target(Graph graph) {		
 +		return target(q -> { 
 +			if (! q.getGraphName().isPresent()) { 
 +				graph.add(q.asTriple());
 +			}
 +		});
  	}
  
+ 	RDFParserBuilder target(Consumer<Triple> tripleConsumer);
+ 	
  	/**
 +	 * Specify a {@link Dataset} to add parsed quads to.
 +	 * <p>
 +	 * It is undefined if any quads are added to the specified
 +	 * {@link Dataset} if {@link #parse()} throws any exceptions. 
 +	 * (However implementations are free to prevent this using transaction 
 +	 * mechanisms or similar).  On the other hand, if {@link #parse()}
 +	 * does not indicate an exception, the 
 +	 * implementation SHOULD have inserted all parsed quads 
 +	 * to the specified dataset.
 +	 * <p>
 +	 * Calling this method will override any earlier targets set with 
 +	 * {@link #target(Graph)}, {@link #target(Consumer)} or {@link #target(Dataset)}.
 +	 * <p>
 +	 * The default implementation of this method calls {@link #target(Consumer)}
 +	 * with a {@link Consumer} that does {@link Dataset#add(Quad)}.
 +	 * 
 +	 * @param dataset
 +	 *            The {@link Dataset} to add quads to.
 +	 * @return An {@link RDFParserBuilder} that will insert triples into the
 +	 *         specified dataset.
 +	 */
 +	default RDFParserBuilder target(Dataset dataset) {
 +		return target(dataset::add);
 +	}
 +
 +	/**
 +	 * Specify a consumer for parsed quads.
 +	 * <p>
 +	 * It is undefined if any quads are consumed if {@link #parse()} throws any
 +	 * exceptions. On the other hand, if {@link #parse()} does not indicate an
 +	 * exception, the implementation SHOULD have produced all parsed quads to
 +	 * the specified consumer.
 +	 * <p>
 +	 * Calling this method will override any earlier targets set with
 +	 * {@link #target(Graph)}, {@link #target(Consumer)} or
 +	 * {@link #target(Dataset)}.
 +	 * <p>
 +	 * The consumer is not assumed to be thread safe - only one
 +	 * {@link Consumer#accept(Object)} is delivered at a time for a given
 +	 * {@link RDFParserBuilder#parse()} call.
 +	 * <p>
 +	 * This method is typically called with a functional consumer, for example:
 +	 * <pre>
 +	 * List<Quad> quads = new ArrayList<Quad>;
 +	 * parserBuilder.target(quads::add).parse();
 +	 * </pre>
 +	 * 
 +	 * @param consumer
 +	 *            A {@link Consumer} of {@link Quad}s
 +	 * @return An {@link RDFParserBuilder} that will call the consumer for into
 +	 *         the specified dataset.
 +	 * @return
 +	 */
 +	RDFParserBuilder target(Consumer<Quad> consumer);
 +	
 +	/**
  	 * Specify a base IRI to use for parsing any relative IRI references.
  	 * <p>
  	 * Setting this option will override any protocol-specific base IRI (e.g.


[8/8] incubator-commonsrdf git commit: Merge branch 'parser-with-quads' into rdf4j

Posted by st...@apache.org.
Merge branch 'parser-with-quads' into rdf4j


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/5d1d8e2d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/5d1d8e2d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/5d1d8e2d

Branch: refs/heads/rdf4j
Commit: 5d1d8e2db4951a7f4225cf79c177cacedcefde7f
Parents: be891eb ddc545e
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jun 20 09:59:06 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jun 20 09:59:06 2016 +0100

----------------------------------------------------------------------

----------------------------------------------------------------------



[2/8] incubator-commonsrdf git commit: added getTargetDataset()/getTargetGraph()

Posted by st...@apache.org.
added getTargetDataset()/getTargetGraph()


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/7c69d4fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/7c69d4fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/7c69d4fd

Branch: refs/heads/rdf4j
Commit: 7c69d4fdc1511fe9cbad1cf4abc00d661d2a7871
Parents: 036029b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 17 21:18:47 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 17 21:18:47 2016 +0100

----------------------------------------------------------------------
 .../rdf/simple/AbstractRDFParserBuilder.java    | 78 ++++++++++++++++++++
 1 file changed, 78 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/7c69d4fd/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java b/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
index 9544928..cc5fad0 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/AbstractRDFParserBuilder.java
@@ -28,6 +28,8 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.function.Consumer;
 
+import org.apache.commons.rdf.api.Dataset;
+import org.apache.commons.rdf.api.Graph;
 import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFParserBuilder;
@@ -123,6 +125,40 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 	}
 
 	/**
+	 * Get the target dataset as set by {@link #target(Dataset)}.
+	 * <p>
+	 * The return value is {@link Optional#isPresent()} if and only if
+	 * {@link #target(Dataset)} has been set, meaning that the implementation
+	 * may choose to append parsed quads to the {@link Dataset} directly instead
+	 * of relying on the generated {@link #getTarget()} consumer.
+	 * <p>
+	 * If this value is present, then {@link #getTargetGraph()} MUST 
+	 * be {@link Optional#empty()}.
+	 * 
+	 * @return The target Dataset, or {@link Optional#empty()} if another kind of target has been set.
+	 */
+	public Optional<Dataset> getTargetDataset() {
+		return targetDataset;
+	}
+
+	/**
+	 * Get the target graph as set by {@link #target(Graph)}.
+	 * <p>
+	 * The return value is {@link Optional#isPresent()} if and only if
+	 * {@link #target(Graph)} has been set, meaning that the implementation
+	 * may choose to append parsed triples to the {@link Graph} directly instead
+	 * of relying on the generated {@link #getTarget()} consumer.
+	 * <p>
+	 * If this value is present, then {@link #getTargetDataset()} MUST 
+	 * be {@link Optional#empty()}.
+	 * 
+	 * @return The target Graph, or {@link Optional#empty()} if another kind of target has been set.
+	 */	
+	public Optional<Graph>  getTargetGraph() {
+		return targetGraph;
+	}
+	
+	/**
 	 * Get the set base {@link IRI}, if present.
 	 * <p>
 	 * 
@@ -164,6 +200,7 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 		return sourceIri;
 	}
 
+
 	private Optional<RDFTermFactory> rdfTermFactory = Optional.empty();
 	private Optional<RDFSyntax> contentTypeSyntax = Optional.empty();
 	private Optional<String> contentType = Optional.empty();
@@ -172,6 +209,8 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 	private Optional<Path> sourceFile = Optional.empty();
 	private Optional<IRI> sourceIri = Optional.empty();
 	private Consumer<Quad> target;
+	private Optional<Dataset> targetDataset;
+	private Optional<Graph> targetGraph;
 
 	@Override
 	public AbstractRDFParserBuilder clone() {
@@ -319,6 +358,22 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 		sourceFile = Optional.empty();
 	}
 
+
+	/**
+	 * Reset all optional target* fields to Optional.empty()</code>
+	 * <p>
+	 * Note that the consumer set for {@link #getTarget()} is
+	 * NOT reset.
+	 * <p>
+	 * Subclasses should override this and call <code>super.resetTarget()</code>
+	 * if they need to reset any additional target* fields.
+	 * 
+	 */
+	protected void resetTarget() {
+		targetDataset = Optional.empty();
+		targetGraph = Optional.empty();
+	}	
+	
 	/**
 	 * Parse {@link #sourceInputStream}, {@link #sourceFile} or
 	 * {@link #sourceIri}.
@@ -387,6 +442,10 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 		if (target == null) {
 			throw new IllegalStateException("target has not been set");
 		}
+		if (targetGraph.isPresent() && targetDataset.isPresent()) {
+			// This should not happen as each target(..) method resets the optionals
+			throw new IllegalStateException("targetGraph and targetDataset can't both be set");
+		}
 	}
 
 	/**
@@ -470,8 +529,27 @@ public abstract class AbstractRDFParserBuilder implements RDFParserBuilder, Clon
 	@Override
 	public RDFParserBuilder target(Consumer<Quad> consumer) {
 		AbstractRDFParserBuilder c = clone();
+		c.resetTarget();
 		c.target = consumer;
 		return c;
 	}
+	
+	@Override
+	public RDFParserBuilder target(Dataset dataset) {
+		AbstractRDFParserBuilder c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(dataset);
+		c.resetTarget();
+		c.targetDataset = Optional.of(dataset);
+		return c;
+	}
+	
+	@Override
+	public RDFParserBuilder target(Graph graph) {
+		AbstractRDFParserBuilder c = (AbstractRDFParserBuilder) RDFParserBuilder.super.target(graph);
+		c.resetTarget();
+		c.targetGraph = Optional.of(graph);
+		return c;
+	}
+	
+
 
 }