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;
+ }
+
+
}