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/10/07 15:01:23 UTC
[20/50] incubator-commonsrdf git commit: COMMONSRDF-35 getContextMask
return Set>
COMMONSRDF-35 getContextMask return Set<RDF4JBlankNodeOrIRI<Resource>>
does not expose the Resource[] array directly
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/cd368d58
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/cd368d58
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/cd368d58
Branch: refs/heads/master
Commit: cd368d5889593dfe21b13123258b1145234a4687
Parents: b792b7b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Oct 3 14:35:11 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Oct 3 14:35:11 2016 +0100
----------------------------------------------------------------------
.../apache/commons/rdf/rdf4j/RDF4JGraph.java | 27 +++----
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 79 ++++++++++++++------
.../rdf/rdf4j/experimental/RDF4JParser.java | 13 +++-
.../commons/rdf/rdf4j/impl/ModelGraphImpl.java | 9 ++-
.../rdf/rdf4j/impl/RepositoryGraphImpl.java | 46 +++++++-----
5 files changed, 115 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 aba3f5d..907300a 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
@@ -18,8 +18,8 @@
package org.apache.commons.rdf.rdf4j;
import java.util.Optional;
+import java.util.Set;
-import org.apache.commons.rdf.api.BlankNodeOrIRI;
import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.Triple;
import org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl;
@@ -38,33 +38,34 @@ import org.eclipse.rdf4j.repository.Repository;
public interface RDF4JGraph extends Graph, RDF4JGraphLike<Triple> {
/**
- * Return a copy of the context mask, if present.
+ * Return a copy of the context mask as a {@link Set} of
+ * {@link RDF4JBlankNodeOrIRI} graph names.
* <p>
- * If {@link Optional#isPresent()}, the mask determines which
+ * If the set is not {@link Set#isEmpty()}, the mask determines which
* <em>contexts</em> in the corresponding RDF4J {@link Model} or
* {@link Repository} that 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 mask array may contain the {@link Resource}
- * <code>null</code>, indicating the default context
- * (the <em>default graph</em> in RDF datasets).
+ * The context mask array may contain the {@link RDF4JBlankNodeOrIRI}
+ * <code>null</code>, indicating the default context (the <em>default
+ * graph</em> in RDF datasets).
* <p>
- * If the context mask is {@link Optional#empty()}, then this is a
- * <em>union graph</em> which triples reflecting statements in any contexts.
- * Triples added to the graph will be added in the default context, e.g.
- * <code>new Resource[1]{null}</code>).
+ * If the context mask is {@link Set#isEmpty()}, then this is a <em>union
+ * graph</em> which triples reflect statements in any contexts. Triples
+ * added to the graph will be added in the default context, e.g.
+ * equivalent to <code>new Resource[1]{null}</code>) in RDF4J.
* <p>
* Note that the context mask itself cannot be <code>null</code>.
* <p>
- * The mask array is a copy, and thus any modifications are not reflected
- * in the RDF4JGraph.
+ * The returned set is an immutable copy, to specify a different mask, use
+ * {@link RDF4JTermFactory#asRDFTermGraph(Repository, Set)}.
*
* @return The context mask as an array of {@link Resource}s, or
* {@link Optional#empty()} indicating the union graph (any
* context).
*/
- public Optional<BlankNodeOrIRI[]> getContextMask();
+ public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask();
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 04598d4..a844a1a 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
@@ -17,7 +17,9 @@
*/
package org.apache.commons.rdf.rdf4j;
+import java.util.Arrays;
import java.util.UUID;
+import java.util.stream.Collectors;
// To avoid confusion, avoid importing
// classes that are in both
@@ -42,6 +44,7 @@ import org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl;
import org.apache.commons.rdf.rdf4j.impl.TripleImpl;
import org.eclipse.rdf4j.model.BNode;
import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.ValueFactory;
@@ -142,35 +145,23 @@ public class RDF4JTermFactory implements RDFTermFactory {
throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());
}
- /**
- * Adapt a RDF4J {@link Statement} as a Commons RDF {@link Triple}.
- *
- * @param statement
- * The statement to convert
- * @param salt
- * A {@link UUID} salt to use for uniquely mapping any
- * {@link BNode}s. The salt should typically be the same for
- * multiple statements in the same {@link Repository} or
- * {@link Model} to ensure {@link BlankNode#equals(Object)} and
- * {@link BlankNode#uniqueReference()} works as intended.
- * @return A {@link Triple} that corresponds to the RDF4J statement
- */
- public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
- return new TripleImpl(statement, salt);
- }
-
- private UUID salt = UUID.randomUUID();
+ private final UUID salt;
private final ValueFactory valueFactory;
public RDF4JTermFactory() {
- this.valueFactory = SimpleValueFactory.getInstance();
+ this(SimpleValueFactory.getInstance(), UUID.randomUUID());
}
public RDF4JTermFactory(ValueFactory valueFactory) {
- this.valueFactory = valueFactory;
+ this(valueFactory, UUID.randomUUID());
}
+ public RDF4JTermFactory(ValueFactory valueFactory, UUID salt) {
+ this.valueFactory = valueFactory;
+ this.salt = salt;
+ }
+
/**
* Adapt a RDF4J {@link Statement} as a Commons RDF {@link Quad}.
* <p>
@@ -292,7 +283,8 @@ public class RDF4JTermFactory implements RDFTermFactory {
/**
* Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
* <p>
- * The graph will include triples in any contexts (e.g. the union graph).
+ * The graph will only include triples in the default graph
+ * (equivalent to context <code>new Resource[0]{null})</code> in RDF4J).
* <p>
* Changes to the graph are reflected in the repository, and vice versa.
*
@@ -301,7 +293,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
* @return A {@link Graph} backed by the RDF4J repository.
*/
public RDF4JGraph asRDFTermGraph(Repository repository) {
- return new RepositoryGraphImpl(repository, false, true);
+ return new RepositoryGraphImpl(repository, false, false);
}
/**
@@ -310,6 +302,49 @@ public class RDF4JTermFactory implements RDFTermFactory {
* The graph will include triples in any contexts (e.g. the union graph).
* <p>
* Changes to the graph are reflected in the repository, and vice versa.
+ * Triples added to the graph are added to the default context,
+ * e.g. an RDF4J context of new <code>Resource[1]{null})</code>.
+ *
+ * @param repository
+ * RDF4J {@link Repository} to connect to.
+ * @return A union {@link Graph} backed by the RDF4J repository.
+ */
+ public RDF4JGraph asRDFTermGraphUnion(Repository repository) {
+ return new RepositoryGraphImpl(repository, false, true);
+ }
+
+ /**
+ * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
+ * <p>
+ * The graph will include triples in the specified contexts.
+ * <p>
+ * Changes to the graph are reflected in the repository, and vice versa.
+ * Triples added/removed to the graph are reflected in all the specified
+ * contexts.
+ *
+ * @param repository
+ * RDF4J {@link Repository} to connect to.
+ * @param contexts
+ *
+ * @return A {@link Graph} backed by the RDF4J repository.
+ */
+ public RDF4JGraph asRDFTermGraph(Repository repository, BlankNodeOrIRI... contexts) {
+ if (contexts.length == 0) {
+ throw new IllegalArgumentException("At least one context must be specified. Use asRDFTermGraphUnion for union graph.");
+ }
+ Resource[] resources = new Resource[contexts.length];
+ for (int i=0; i<contexts.length; i++) {
+ resources[i] = (Resource) asValue(contexts[i]);
+ }
+ return new RepositoryGraphImpl(repository, false, true, resources);
+ }
+
+ /**
+ * Adapt an RDF4J {@link Repository} as a Commons RDF {@link Graph}.
+ * <p>
+ * The graph will include triples in any contexts (e.g. the union graph).
+ * <p>
+ * Changes to the graph are reflected in the repository, and vice versa.
*
* @param repository
* RDF4J {@link Repository} to connect to.
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
index 60692dc..88f79e1 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java
@@ -25,16 +25,19 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
import java.util.function.Consumer;
+import java.util.stream.Stream;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFSyntax;
import org.apache.commons.rdf.experimental.RDFParser;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
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.experimental.AbstractRDFParser;
import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.repository.util.RDFInserter;
import org.eclipse.rdf4j.repository.util.RDFLoader;
import org.eclipse.rdf4j.rio.ParserConfig;
@@ -180,10 +183,16 @@ public class RDF4JParser extends AbstractRDFParser<RDF4JParser> implements RDFPa
if (graph.asRepository().isPresent()) {
RDFInserter inserter = new RDFInserter(graph.asRepository().get().getConnection());
- graph.getContextMask().ifPresent(inserter::enforceContext);
+ if (! graph.getContextMask().isEmpty()) {
+ Stream<RDF4JBlankNodeOrIRI<Resource>> b = graph.getContextMask().stream();
+ Stream<Resource> c = b.map(RDF4JBlankNodeOrIRI::asValue);
+ Resource[] contexts = c.toArray(Resource[]::new);
+ inserter.enforceContext(contexts);
+ }
return inserter;
}
- if (graph.asModel().isPresent() && graph.getContextMask().isPresent()) {
+ if (graph.asModel().isPresent() && graph.getContextMask().isEmpty()) {
+ // the model accepts any quad
Model model = graph.asModel().get();
return new AddToModel(model);
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 f24aede..994bf81 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
@@ -17,12 +17,15 @@
*/
package org.apache.commons.rdf.rdf4j.impl;
+import java.util.Collections;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Stream;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
import org.apache.commons.rdf.rdf4j.RDF4JGraph;
import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
import org.apache.commons.rdf.rdf4j.RDF4JTriple;
@@ -125,10 +128,10 @@ public final class ModelGraphImpl implements RDF4JGraph {
}
@Override
- public Optional<Resource[]> getContextMask() {
+ public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask() {
// ModelGraph always do the unionGraph
- return Optional.empty();
- // TODO: Should we support contextFilter like in RepositoryGraphImpl?
+ return Collections.emptySet();
+ // TODO: Should we support contextMask like in RepositoryGraphImpl?
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/cd368d58/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 47591be..4c09110 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,7 +17,10 @@
*/
package org.apache.commons.rdf.rdf4j.impl;
-import java.util.Optional;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
import java.util.stream.Stream;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -25,6 +28,7 @@ import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
import org.apache.commons.rdf.rdf4j.RDF4JGraph;
import org.apache.commons.rdf.rdf4j.RDF4JTriple;
import org.eclipse.rdf4j.common.iteration.Iterations;
@@ -37,22 +41,22 @@ import org.eclipse.rdf4j.repository.RepositoryResult;
public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> implements Graph, RDF4JGraph {
- private final Resource[] contextFilter;
+ private final Resource[] contextMask;
public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, boolean unionGraph) {
super(repository, handleInitAndShutdown, includeInferred);
if (unionGraph) {
- // no context filter aka any context
- this.contextFilter = new Resource[] { };
+ // no context mask, aka any context
+ this.contextMask = new Resource[] { };
} else {
// default context: null
- this.contextFilter = new Resource[] { null };
+ this.contextMask = new Resource[] { null };
}
}
- public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextFilter) {
+ public RepositoryGraphImpl(Repository repository, boolean handleInitAndShutdown, boolean includeInferred, Resource... contextMask) {
super(repository, handleInitAndShutdown, includeInferred);
- this.contextFilter = contextFilter;
+ this.contextMask = Objects.requireNonNull(contextMask);
}
@@ -60,7 +64,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
public void add(Triple tripleLike) {
Statement statement = rdf4jTermFactory.asStatement(tripleLike);
try (RepositoryConnection conn = getRepositoryConnection()) {
- conn.add(statement, contextFilter);
+ conn.add(statement, contextMask);
conn.commit();
}
}
@@ -70,7 +74,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
public boolean contains(Triple tripleLike) {
Statement statement = rdf4jTermFactory.asStatement(tripleLike);
try (RepositoryConnection conn = getRepositoryConnection()) {
- return conn.hasStatement(statement, includeInferred, contextFilter);
+ return conn.hasStatement(statement, includeInferred, contextMask);
}
}
@@ -78,7 +82,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
public void remove(Triple tripleLike) {
Statement statement = rdf4jTermFactory.asStatement(tripleLike);
try (RepositoryConnection conn = getRepositoryConnection()) {
- conn.remove(statement, contextFilter);
+ conn.remove(statement, contextMask);
conn.commit();
}
}
@@ -86,7 +90,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
@Override
public void clear() {
try (RepositoryConnection conn = getRepositoryConnection()) {
- conn.clear(contextFilter);
+ conn.clear(contextMask);
conn.commit();
}
}
@@ -94,7 +98,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
@Override
public long size() {
try (RepositoryConnection conn = getRepositoryConnection()) {
- if (! includeInferred && contextFilter.length == 0) {
+ if (! includeInferred && contextMask.length == 0) {
return conn.size();
} else {
return stream().count();
@@ -109,7 +113,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
Value obj = rdf4jTermFactory.asValue(object);
try (RepositoryConnection conn = getRepositoryConnection()) {
- conn.add(subj, pred, obj, contextFilter);
+ conn.add(subj, pred, obj, contextMask);
conn.commit();
}
}
@@ -120,7 +124,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
Value obj = rdf4jTermFactory.asValue(object);
try (RepositoryConnection conn = getRepositoryConnection()) {
- return conn.hasStatement(subj, pred, obj, includeInferred, contextFilter);
+ return conn.hasStatement(subj, pred, obj, includeInferred, contextMask);
}
}
@@ -130,7 +134,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
Value obj = rdf4jTermFactory.asValue(object);
try (RepositoryConnection conn = getRepositoryConnection()) {
- conn.remove(subj, pred, obj, contextFilter);
+ conn.remove(subj, pred, obj, contextMask);
conn.commit();
}
}
@@ -147,7 +151,7 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
Value obj = rdf4jTermFactory.asValue(object);
RepositoryConnection conn = getRepositoryConnection();
// FIXME: Is it OK that we don't close the connection?
- RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj, includeInferred, contextFilter);
+ RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj, includeInferred, contextMask);
return Iterations.stream(statements).map(this::asTripleLike);
}
@@ -156,9 +160,13 @@ public class RepositoryGraphImpl extends AbstractRepositoryGraphLike<Triple> imp
return rdf4jTermFactory.asTriple(statement);
}
- public Optional<Resource[]> getContextMask() {
- // Make sure we clone
- return Optional.ofNullable(contextFilter).map(f -> f.clone());
+ @Override
+ public Set<RDF4JBlankNodeOrIRI<Resource>> getContextMask() {
+ Set<RDF4JBlankNodeOrIRI<Resource>> mask = new HashSet<>();
+ for (Resource s : contextMask) {
+ mask.add((RDF4JBlankNodeOrIRI<Resource>) rdf4jTermFactory.asRDFTerm(s));
+ }
+ return Collections.unmodifiableSet(mask);
}
}