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/03 13:28:35 UTC
[1/7] incubator-commonsrdf git commit: commons-rdf-parent 0.3.0
Repository: incubator-commonsrdf
Updated Branches:
refs/heads/rdf4j 6fd4ce5d9 -> 99bd16f65
commons-rdf-parent 0.3.0
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/a82949f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/a82949f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/a82949f6
Branch: refs/heads/rdf4j
Commit: a82949f6105f8b322dcd9c46278dd477c30f0e52
Parents: 6fd4ce5
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jun 2 18:03:42 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jun 2 18:03:42 2016 +0100
----------------------------------------------------------------------
rdf4j/pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/a82949f6/rdf4j/pom.xml
----------------------------------------------------------------------
diff --git a/rdf4j/pom.xml b/rdf4j/pom.xml
index e02b519..204de4a 100644
--- a/rdf4j/pom.xml
+++ b/rdf4j/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.commons</groupId>
<artifactId>commons-rdf-parent</artifactId>
- <version>0.2.0-incubating-SNAPSHOT</version>
+ <version>0.3.0-incubating-SNAPSHOT</version>
</parent>
<artifactId>commons-rdf-rdf4j</artifactId>
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-bom</artifactId>
- <version>${rdr4j.version}</version>
+ <version>${rdf4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
[7/7] incubator-commonsrdf git commit: Added RepositoryGraphImpl
Posted by st...@apache.org.
Added RepositoryGraphImpl
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/99bd16f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/99bd16f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/99bd16f6
Branch: refs/heads/rdf4j
Commit: 99bd16f6576ffed1efbbe3a734f77e7d82ac1157
Parents: 712eec6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 11:54:39 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 11:54:39 2016 +0100
----------------------------------------------------------------------
.../apache/commons/rdf/rdf4j/RDF4JGraph.java | 24 ++-
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 132 +++++++++-------
.../commons/rdf/rdf4j/impl/BlankNodeImpl.java | 32 ++--
.../commons/rdf/rdf4j/impl/GraphImpl.java | 44 +++---
.../apache/commons/rdf/rdf4j/impl/QuadImpl.java | 34 ++---
.../rdf/rdf4j/impl/RepositoryGraphImpl.java | 153 +++++++++++++++++++
.../commons/rdf/rdf4j/impl/TripleImpl.java | 4 +-
7 files changed, 310 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/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 2fcd2ea..abc4a98 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,8 +17,11 @@
*/
package org.apache.commons.rdf.rdf4j;
+import java.util.Optional;
+
import org.apache.commons.rdf.api.Graph;
import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.repository.Repository;
/**
@@ -28,12 +31,29 @@ import org.eclipse.rdf4j.model.Model;
public interface RDF4JGraph extends Graph {
/**
- * Return the corresponding RDF4J {@link Model}.
+ * Return the corresponding RDF4J {@link Model}, if present.
+ * <p>
+ * The return value is {@link Optional#isPresent()} if this graph is
+ * backed by a Model.
* <p>
* Changes to the Model are reflected in this Graph, and
* vice versa.
*
* @return The corresponding RDF4J Model.
*/
- public Model asModel();
+ public Optional<Model> asModel();
+
+ /**
+ * Return the corresponding RDF4J {@link Repository}, if present.
+ * <p>
+ * The return value is {@link Optional#isPresent()} if this graph is
+ * backed by a Repository.
+ * <p>
+ * Changes to the Repository are reflected in this Graph, and
+ * vice versa.
+ *
+ * @return The corresponding RDF4J Repository.
+ */
+ public Optional<Repository> asRepository();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/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 3df7de9..125a46c 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
@@ -34,6 +34,7 @@ import org.apache.commons.rdf.rdf4j.impl.GraphImpl;
import org.apache.commons.rdf.rdf4j.impl.IRIImpl;
import org.apache.commons.rdf.rdf4j.impl.LiteralImpl;
import org.apache.commons.rdf.rdf4j.impl.QuadImpl;
+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;
@@ -42,6 +43,7 @@ import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
+import org.eclipse.rdf4j.repository.Repository;
/**
* RDF4J implementation of RDFTermFactory
@@ -72,18 +74,6 @@ import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
*/
public class RDF4JTermFactory implements RDFTermFactory {
- private UUID salt = UUID.randomUUID();
-
- private ValueFactory valueFactory;
-
- public RDF4JTermFactory() {
- this.valueFactory = SimpleValueFactory.getInstance();
- }
-
- public RDF4JTermFactory(ValueFactory valueFactory) {
- this.valueFactory = valueFactory;
- }
-
/**
*
* Adapt a RDF4J {@link Value} as a Commons RDF
@@ -102,11 +92,54 @@ public class RDF4JTermFactory implements RDFTermFactory {
* @param value
* @return
*/
- public RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value) {
- return asRDFTerm(value, salt);
+ public static RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value, UUID salt) {
+ if (value instanceof BNode) {
+ return new BlankNodeImpl((BNode) value, salt);
+ }
+ if (value instanceof org.eclipse.rdf4j.model.Literal) {
+ return new LiteralImpl((org.eclipse.rdf4j.model.Literal) value);
+ }
+ if (value instanceof org.eclipse.rdf4j.model.IRI) {
+ return new IRIImpl((org.eclipse.rdf4j.model.IRI) value);
+ }
+ 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
+ * @return
+ */
+ public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
+ return new TripleImpl(statement, salt);
+ }
+
+ private UUID salt = UUID.randomUUID();
+
+ private ValueFactory valueFactory;
+
+ public RDF4JTermFactory() {
+ this.valueFactory = SimpleValueFactory.getInstance();
+ }
+
+ public RDF4JTermFactory(ValueFactory valueFactory) {
+ this.valueFactory = valueFactory;
+ }
+
+ /**
+ * Adapt a RDF4J {@link Statement} as a Commons RDF
+ * {@link Quad}.
+ *
+ * @param statement
+ * @return A {@link RDF4JQuad} that is equivalent to the statement
+ */
+ public RDF4JQuad asQuad(final Statement statement) {
+ return new QuadImpl(statement, salt);
+ }
+
+ /**
*
* Adapt a RDF4J {@link Value} as a Commons RDF
* {@link RDFTerm}.
@@ -124,19 +157,10 @@ public class RDF4JTermFactory implements RDFTermFactory {
* @param value
* @return
*/
- public static RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value, UUID salt) {
- if (value instanceof BNode) {
- return new BlankNodeImpl((BNode) value, salt);
- }
- if (value instanceof org.eclipse.rdf4j.model.Literal) {
- return new LiteralImpl((org.eclipse.rdf4j.model.Literal) value);
- }
- if (value instanceof org.eclipse.rdf4j.model.IRI) {
- return new IRIImpl((org.eclipse.rdf4j.model.IRI) value);
- }
- throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());
+ public RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value) {
+ return asRDFTerm(value, salt);
}
-
+
/**
* Adapt an RDF4J {@link Model} as a
* Commons RDF {@link Graph}.
@@ -150,7 +174,30 @@ public class RDF4JTermFactory implements RDFTermFactory {
public RDF4JGraph asRDFTermGraph(Model model) {
return new GraphImpl(model);
}
+
+ /**
+ * Adapt an RDF4J {@link Repository} as a
+ * Commons RDF {@link Graph}.
+ * <p>
+ * Changes to the graph are reflected in the repository, and
+ * vice versa.
+ *
+ * @param model RDF4J {@link Repository} to connect to.
+ * @return Adapted {@link Graph}.
+ */
+ public RDF4JGraph asRDFTermGraph(Repository repository) {
+ return new RepositoryGraphImpl(repository);
+ }
+ public Statement asStatement(Quad quad) {
+ return valueFactory.createStatement(
+ (org.eclipse.rdf4j.model.Resource) asValue(quad.getSubject()),
+ (org.eclipse.rdf4j.model.IRI) asValue(quad.getPredicate()),
+ asValue(quad.getObject()),
+ (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null))
+ );
+ }
+
public Statement asStatement(Triple triple) {
if (triple instanceof RDF4JTripleLike) {
// This covers both RDF4JQuad and RDF4JTriple
@@ -161,16 +208,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
(org.eclipse.rdf4j.model.Resource) asValue(triple.getSubject()),
(org.eclipse.rdf4j.model.IRI) asValue(triple.getPredicate()),
asValue(triple.getObject()));
- }
-
- public Statement asStatement(Quad quad) {
- return valueFactory.createStatement(
- (org.eclipse.rdf4j.model.Resource) asValue(quad.getSubject()),
- (org.eclipse.rdf4j.model.IRI) asValue(quad.getPredicate()),
- asValue(quad.getObject()),
- (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null))
- );
- }
+ }
/**
* Adapt a RDF4J {@link Statement} as a Commons RDF
@@ -182,28 +220,6 @@ public class RDF4JTermFactory implements RDFTermFactory {
public RDF4JTriple asTriple(final Statement statement) {
return new TripleImpl(statement, salt);
}
-
- /**
- * Adapt a RDF4J {@link Statement} as a Commons RDF
- * {@link Quad}.
- *
- * @param statement
- * @return A {@link RDF4JQuad} that is equivalent to the statement
- */
- public RDF4JQuad asQuad(final Statement statement) {
- return new QuadImpl(statement, salt);
- }
-
- /**
- * Adapt a RDF4J {@link Statement} as a Commons RDF
- * {@link Triple}.
- *
- * @param statement
- * @return
- */
- public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
- return new TripleImpl(statement, salt);
- }
/**
* Adapt a Commons RDF {@link RDFTerm} as a RDF4J {@link Value}.
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
index 6921f45..625088a 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
@@ -29,8 +29,8 @@ public final class BlankNodeImpl extends AbstractRDFTerm<BNode>
implements RDF4JBlankNode {
private transient int hashCode = 0;
- private long saltUUIDmost;
private long saltUUIDleast;
+ private long saltUUIDmost;
public BlankNodeImpl(BNode bNode, UUID salt) {
super(bNode);
@@ -60,21 +60,6 @@ public final class BlankNodeImpl extends AbstractRDFTerm<BNode>
return hashCode = uniqueReference().hashCode();
}
- @Override
- public String ntriplesString() {
- if (isValidBlankNodeLabel(value.getID())) {
- return "_:" + value.getID();
- } else {
- return "_:" + UUID.nameUUIDFromBytes(value.getID().getBytes(StandardCharsets.UTF_8));
- }
- }
-
- @Override
- public String uniqueReference() {
- UUID uuid = new UUID(saltUUIDmost, saltUUIDleast);
- return "urn:uuid:" + uuid + "#" + value.getID();
- }
-
private boolean isValidBlankNodeLabel(String id) {
// FIXME: Replace with a regular expression?
if (id.isEmpty()) {
@@ -90,4 +75,19 @@ public final class BlankNodeImpl extends AbstractRDFTerm<BNode>
}
return true;
}
+
+ @Override
+ public String ntriplesString() {
+ if (isValidBlankNodeLabel(value.getID())) {
+ return "_:" + value.getID();
+ } else {
+ return "_:" + UUID.nameUUIDFromBytes(value.getID().getBytes(StandardCharsets.UTF_8));
+ }
+ }
+
+ @Override
+ public String uniqueReference() {
+ UUID uuid = new UUID(saltUUIDmost, saltUUIDleast);
+ return "urn:uuid:" + uuid + "#" + value.getID();
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
index 966ac32..bf3aad2 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
@@ -17,6 +17,7 @@
*/
package org.apache.commons.rdf.rdf4j.impl;
+import java.util.Optional;
import java.util.stream.Stream;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
@@ -27,6 +28,7 @@ import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
import org.apache.commons.rdf.rdf4j.RDF4JTriple;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.repository.Repository;
public final class GraphImpl implements RDF4JGraph {
@@ -56,11 +58,16 @@ public final class GraphImpl implements RDF4JGraph {
model.add(rdf4jTermFactory.asStatement(triple));
}
- public Model asModel() {
- return model;
+ public Optional<Model> asModel() {
+ return Optional.of(model);
}
@Override
+ public Optional<Repository> asRepository() {
+ return Optional.empty();
+ }
+
+ @Override
public void clear() {
model.clear();
}
@@ -79,26 +86,11 @@ public final class GraphImpl implements RDF4JGraph {
}
@Override
- public Stream<RDF4JTriple> stream() {
- return model.parallelStream().map(rdf4jTermFactory::asTriple);
- }
-
- @Override
- public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
- return model.filter(
- (Resource)rdf4jTermFactory.asValue(subject),
- (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object)).parallelStream()
- .map(rdf4jTermFactory::asTriple);
- }
-
- @Override
public void remove(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
model.remove(
(Resource)rdf4jTermFactory.asValue(subject),
(org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object));
-
+ rdf4jTermFactory.asValue(object));
}
@Override
@@ -112,8 +104,24 @@ public final class GraphImpl implements RDF4JGraph {
if (size < Integer.MAX_VALUE) {
return size;
} else {
+ // TODO: Check if this can really happen with RDF4J models
// Collection.size() can't help us, we'll have to count
return model.parallelStream().count();
}
}
+
+ @Override
+ public Stream<RDF4JTriple> stream() {
+ return model.parallelStream().map(rdf4jTermFactory::asTriple);
+ }
+
+ @Override
+ public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
+ return model.filter(
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object)).parallelStream()
+ .map(rdf4jTermFactory::asTriple);
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
index 0e11eb2..1d887a0 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
@@ -13,9 +13,9 @@ import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
import org.eclipse.rdf4j.model.Statement;
public final class QuadImpl implements Quad, RDF4JQuad {
- private final Statement statement;
+ private transient int hashCode = 0;
private UUID salt;
- private transient int hashCode = 0;
+ private final Statement statement;
public QuadImpl(Statement statement, UUID salt) {
this.statement = statement;
@@ -27,6 +27,11 @@ public final class QuadImpl implements Quad, RDF4JQuad {
}
@Override
+ public Triple asTriple() {
+ return new TripleImpl(statement, salt);
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof Triple) {
Triple triple = (Triple) obj;
@@ -38,6 +43,15 @@ public final class QuadImpl implements Quad, RDF4JQuad {
}
@Override
+ public Optional<BlankNodeOrIRI> getGraphName() {
+ if (statement.getContext() == null) {
+ return Optional.empty();
+ }
+ BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getContext(), salt);
+ return Optional.of(g);
+ }
+
+ @Override
public RDFTerm getObject() {
return RDF4JTermFactory.asRDFTerm(statement.getObject(), salt);
}
@@ -51,7 +65,7 @@ public final class QuadImpl implements Quad, RDF4JQuad {
public BlankNodeOrIRI getSubject() {
return (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getSubject(), salt);
}
-
+
@Override
public int hashCode() {
if (hashCode != 0) {
@@ -64,18 +78,4 @@ public final class QuadImpl implements Quad, RDF4JQuad {
public String toString() {
return statement.toString();
}
-
- @Override
- public Optional<BlankNodeOrIRI> getGraphName() {
- if (statement.getContext() == null) {
- return Optional.empty();
- }
- BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getContext(), salt);
- return Optional.of(g);
- }
-
- @Override
- public Triple asTriple() {
- return new TripleImpl(statement, salt);
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/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
new file mode 100644
index 0000000..50ee2ee
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/RepositoryGraphImpl.java
@@ -0,0 +1,153 @@
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+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.RDF4JGraph;
+import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
+import org.apache.commons.rdf.rdf4j.RDF4JTriple;
+import org.eclipse.rdf4j.common.iteration.Iterations;
+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.repository.Repository;
+import org.eclipse.rdf4j.repository.RepositoryConnection;
+import org.eclipse.rdf4j.repository.RepositoryResult;
+
+public class RepositoryGraphImpl implements Graph, RDF4JGraph {
+
+ private Repository repository;
+ private boolean includeInferred;
+ boolean shouldWeShutdown = false;
+ private RDF4JTermFactory rdf4jTermFactory;
+
+ public RepositoryGraphImpl(Repository repository) {
+ this(repository, false);
+ }
+
+ public RepositoryGraphImpl(Repository repository, boolean includeInferred) {
+ this.repository = repository;
+ this.includeInferred = includeInferred;
+ if (! repository.isInitialized()) {
+ repository.initialize();
+ shouldWeShutdown = true;
+ }
+ rdf4jTermFactory = new RDF4JTermFactory(repository.getValueFactory());
+ }
+
+
+ @Override
+ public void close() throws Exception {
+ if (shouldWeShutdown) {
+ repository.shutDown();
+ }
+ // else: repository was initialized outside, so we should not shut it down
+ }
+
+ @Override
+ public void add(Triple triple) {
+ Statement statement = rdf4jTermFactory.asStatement(triple);
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ conn.add(statement);
+ }
+ }
+
+ @Override
+ public void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+ Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
+ 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);
+ }
+ }
+
+ @Override
+ public boolean contains(Triple triple) {
+ Statement statement = rdf4jTermFactory.asStatement(triple);
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ return conn.hasStatement(statement, includeInferred );
+ }
+ }
+
+ @Override
+ public boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+ Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
+ 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);
+ }
+ }
+
+ @Override
+ public void remove(Triple triple) {
+ Statement statement = rdf4jTermFactory.asStatement(triple);
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ conn.remove(statement);
+ }
+ }
+
+ @Override
+ public void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+ Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
+ 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);
+ }
+ }
+
+ @Override
+ public void clear() {
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ conn.clear();
+ }
+ }
+
+ @Override
+ public long size() {
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ // FIXME: The below might contain duplicate statements across multiple contexts
+ return conn.size();
+ }
+
+ }
+
+ @Override
+ public Stream<RDF4JTriple> stream() {
+ return stream(null, null, null);
+ }
+
+ @Override
+ public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+ Resource subj = (Resource) rdf4jTermFactory.asValue(subject);
+ org.eclipse.rdf4j.model.IRI pred = (org.eclipse.rdf4j.model.IRI) rdf4jTermFactory.asValue(predicate);
+ Value obj = rdf4jTermFactory.asValue(object);
+ try (RepositoryConnection conn = getRepositoryConnection()) {
+ // FIXME: Will the above close too early? (e.g. when returning iterator)
+ RepositoryResult<Statement> statements = conn.getStatements(subj, pred, obj);
+ return Iterations.stream(statements).map(rdf4jTermFactory::asTriple);
+ }
+ }
+
+ private RepositoryConnection getRepositoryConnection() {
+ return repository.getConnection();
+ }
+
+ public Optional<Repository> asRepository() {
+ return Optional.of(repository);
+ }
+
+ @Override
+ public Optional<Model> asModel() {
+ return Optional.empty();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/99bd16f6/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
index 74564fb..c494006 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
@@ -11,8 +11,8 @@ import org.apache.commons.rdf.rdf4j.RDF4JTriple;
import org.eclipse.rdf4j.model.Statement;
public final class TripleImpl implements Triple, RDF4JTriple {
- private final Statement statement;
- private UUID salt;
+ private UUID salt;
+ private final Statement statement;
public TripleImpl(Statement statement, UUID salt) {
this.statement = statement;
[3/7] incubator-commonsrdf git commit: GraphImpl also static class
Posted by st...@apache.org.
GraphImpl also static class
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/ed0213dd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/ed0213dd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/ed0213dd
Branch: refs/heads/rdf4j
Commit: ed0213ddc6ae5990052a1f0a7f0824dcb66b32b6
Parents: 2cde4c9
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jun 2 18:09:27 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jun 2 18:09:27 2016 +0100
----------------------------------------------------------------------
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 45 +++++++++++---------
1 file changed, 26 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/ed0213dd/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 d8943db..b60c726 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
@@ -356,25 +356,32 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
}
- private final class GraphImpl implements RDF4JGraph {
+ private final static class GraphImpl implements RDF4JGraph {
private Model model;
+ private RDF4JTermFactory rdf4jTermFactory;
GraphImpl(Model model) {
- this.model = model;
+ this.model = model;
+ this.rdf4jTermFactory = new RDF4JTermFactory();
+ }
+
+ GraphImpl(Model model, RDF4JTermFactory rdf4jTermFactory) {
+ this.model = model;
+ this.rdf4jTermFactory = rdf4jTermFactory;
}
@Override
public void add(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
model.add(
- (Resource)asValue(subject),
- (org.eclipse.rdf4j.model.IRI)asValue(predicate),
- asValue(object));
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
}
@Override
public void add(Triple triple) {
- model.add(asStatement(triple));
+ model.add(rdf4jTermFactory.asStatement(triple));
}
public Model asModel() {
@@ -389,42 +396,42 @@ public class RDF4JTermFactory implements RDFTermFactory {
@Override
public boolean contains(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
return model.contains(
- (Resource)asValue(subject),
- (org.eclipse.rdf4j.model.IRI)asValue(predicate),
- asValue(object));
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
}
@Override
public boolean contains(Triple triple) {
- return model.contains(asStatement(triple));
+ return model.contains(rdf4jTermFactory.asStatement(triple));
}
@Override
public Stream<RDF4JTriple> stream() {
- return model.parallelStream().map(RDF4JTermFactory.this::asTriple);
+ return model.parallelStream().map(rdf4jTermFactory::asTriple);
}
@Override
public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
return model.filter(
- (Resource)asValue(subject),
- (org.eclipse.rdf4j.model.IRI)asValue(predicate),
- asValue(object)).parallelStream()
- .map(RDF4JTermFactory.this::asTriple);
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object)).parallelStream()
+ .map(rdf4jTermFactory::asTriple);
}
@Override
public void remove(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
model.remove(
- (Resource)asValue(subject),
- (org.eclipse.rdf4j.model.IRI)asValue(predicate),
- asValue(object));
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
}
@Override
public void remove(Triple triple) {
- model.remove(asStatement(triple));
+ model.remove(rdf4jTermFactory.asStatement(triple));
}
@Override
[4/7] incubator-commonsrdf git commit: Exctracted rdf4j
implementation classes
Posted by st...@apache.org.
Exctracted rdf4j implementation classes
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/16ff4466
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/16ff4466
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/16ff4466
Branch: refs/heads/rdf4j
Commit: 16ff4466cd5e01ec1d59dce55294a28d908e314c
Parents: ed0213d
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jun 2 18:43:46 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jun 2 18:43:46 2016 +0100
----------------------------------------------------------------------
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 346 +------------------
.../commons/rdf/rdf4j/impl/AbstractRDFTerm.java | 16 +
.../commons/rdf/rdf4j/impl/BlankNodeImpl.java | 93 +++++
.../commons/rdf/rdf4j/impl/GraphImpl.java | 119 +++++++
.../apache/commons/rdf/rdf4j/impl/IRIImpl.java | 61 ++++
.../commons/rdf/rdf4j/impl/LiteralImpl.java | 85 +++++
.../commons/rdf/rdf4j/impl/TripleImpl.java | 61 ++++
7 files changed, 446 insertions(+), 335 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/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 b60c726..e258497 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,12 +17,7 @@
*/
package org.apache.commons.rdf.rdf4j;
-import java.nio.charset.StandardCharsets;
-import java.util.Objects;
-import java.util.Optional;
import java.util.UUID;
-import java.util.stream.Stream;
-
// To avoid confusion, avoid importing
// classes that are in both
@@ -33,16 +28,18 @@ import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.RDFTermFactory;
import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.impl.BlankNodeImpl;
+import org.apache.commons.rdf.rdf4j.impl.GraphImpl;
+import org.apache.commons.rdf.rdf4j.impl.IRIImpl;
+import org.apache.commons.rdf.rdf4j.impl.LiteralImpl;
+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;
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
-import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
-import org.eclipse.rdf4j.rio.turtle.TurtleUtil;
/**
* RDF4J implementation of RDFTermFactory
@@ -236,15 +233,15 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
@Override
- public BlankNodeImpl createBlankNode() throws UnsupportedOperationException {
+ public RDF4JBlankNode createBlankNode() throws UnsupportedOperationException {
BNode bnode = valueFactory.createBNode();
- return (BlankNodeImpl)asRDFTerm(bnode);
+ return (RDF4JBlankNode)asRDFTerm(bnode);
}
@Override
- public BlankNodeImpl createBlankNode(String name) throws UnsupportedOperationException {
+ public RDF4JBlankNode createBlankNode(String name) throws UnsupportedOperationException {
BNode bnode = valueFactory.createBNode(name);
- return (BlankNodeImpl)asRDFTerm(bnode);
+ return (RDF4JBlankNode)asRDFTerm(bnode);
}
@Override
@@ -258,9 +255,9 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
@Override
- public LiteralImpl createLiteral(String lexicalForm) throws IllegalArgumentException, UnsupportedOperationException {
+ public RDF4JLiteral createLiteral(String lexicalForm) throws IllegalArgumentException, UnsupportedOperationException {
org.eclipse.rdf4j.model.Literal lit = valueFactory.createLiteral(lexicalForm);
- return (LiteralImpl)asRDFTerm(lit);
+ return (RDF4JLiteral)asRDFTerm(lit);
}
@Override
@@ -289,325 +286,4 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
- private static final class BlankNodeImpl extends RDFTermImpl<BNode>
- implements RDF4JBlankNode {
-
- private transient int hashCode = 0;
- private long saltUUIDmost;
- private long saltUUIDleast;
-
- BlankNodeImpl(BNode bNode, UUID salt) {
- super(bNode);
- // Space-efficient storage of salt UUID
- saltUUIDmost = salt.getMostSignificantBits();
- saltUUIDleast = salt.getLeastSignificantBits();
- }
-
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- }
- // NOTE: Do NOT use Bnode.equals() as it has a more generous
- // equality based only on the value.getID();
- if (obj instanceof BlankNode) {
- BlankNode blankNode = (BlankNode) obj;
- return uniqueReference().equals(blankNode.uniqueReference());
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- if (hashCode != 0) {
- return hashCode;
- }
- return hashCode = uniqueReference().hashCode();
- }
-
- @Override
- public String ntriplesString() {
- if (isValidBlankNodeLabel(value.getID())) {
- return "_:" + value.getID();
- } else {
- return "_:" + UUID.nameUUIDFromBytes(value.getID().getBytes(StandardCharsets.UTF_8));
- }
- }
-
- @Override
- public String uniqueReference() {
- UUID uuid = new UUID(saltUUIDmost, saltUUIDleast);
- return "urn:uuid:" + uuid + "#" + value.getID();
- }
-
- private boolean isValidBlankNodeLabel(String id) {
- // FIXME: Replace with a regular expression?
- if (id.isEmpty()) {
- return false;
- }
- if (! TurtleUtil.isBLANK_NODE_LABEL_StartChar(id.codePointAt(0))) {
- return false;
- }
- for (int i=1; i<id.length(); i++) {
- if (! TurtleUtil.isBLANK_NODE_LABEL_Char(id.codePointAt(i))) {
- return false;
- }
- }
- return true;
- }
- }
-
- private final static class GraphImpl implements RDF4JGraph {
-
- private Model model;
- private RDF4JTermFactory rdf4jTermFactory;
-
- GraphImpl(Model model) {
- this.model = model;
- this.rdf4jTermFactory = new RDF4JTermFactory();
- }
-
- GraphImpl(Model model, RDF4JTermFactory rdf4jTermFactory) {
- this.model = model;
- this.rdf4jTermFactory = rdf4jTermFactory;
- }
-
- @Override
- public void add(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
- model.add(
- (Resource)rdf4jTermFactory.asValue(subject),
- (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object));
- }
-
- @Override
- public void add(Triple triple) {
- model.add(rdf4jTermFactory.asStatement(triple));
- }
-
- public Model asModel() {
- return model;
- }
-
- @Override
- public void clear() {
- model.clear();
- }
-
- @Override
- public boolean contains(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
- return model.contains(
- (Resource)rdf4jTermFactory.asValue(subject),
- (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object));
- }
-
- @Override
- public boolean contains(Triple triple) {
- return model.contains(rdf4jTermFactory.asStatement(triple));
- }
-
- @Override
- public Stream<RDF4JTriple> stream() {
- return model.parallelStream().map(rdf4jTermFactory::asTriple);
- }
-
- @Override
- public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
- return model.filter(
- (Resource)rdf4jTermFactory.asValue(subject),
- (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object)).parallelStream()
- .map(rdf4jTermFactory::asTriple);
- }
-
- @Override
- public void remove(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
- model.remove(
- (Resource)rdf4jTermFactory.asValue(subject),
- (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
- rdf4jTermFactory.asValue(object));
-
- }
-
- @Override
- public void remove(Triple triple) {
- model.remove(rdf4jTermFactory.asStatement(triple));
- }
-
- @Override
- public long size() {
- int size = model.size();
- if (size < Integer.MAX_VALUE) {
- return size;
- } else {
- // Collection.size() can't help us, we'll have to count
- return model.parallelStream().count();
- }
- }
- }
-
- private final static class IRIImpl extends RDFTermImpl<org.eclipse.rdf4j.model.IRI>
- implements RDF4JIRI {
-
- IRIImpl(org.eclipse.rdf4j.model.IRI iri) {
- super(iri);
- }
- @Override
- public boolean equals(Object obj) {
- if (obj == this) { return true; }
- if (obj instanceof IRIImpl) {
- IRIImpl impl = (IRIImpl) obj;
- return asValue().equals(impl.asValue());
- }
- if (obj instanceof org.apache.commons.rdf.api.IRI) {
- org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) obj;
- return value.toString().equals(iri.getIRIString());
- }
- return false;
- }
-
- @Override
- public String getIRIString() {
- return value.toString();
- }
-
- public int hashCode() {
- // Same definition
- return value.hashCode();
- }
-
- @Override
- public String ntriplesString() {
- return "<" + value.toString() + ">";
- }
- @Override
- public String toString() {
- return value.toString();
- }
-
- }
-
- private final static class LiteralImpl
- extends RDFTermImpl<org.eclipse.rdf4j.model.Literal>
- implements RDF4JLiteral {
-
- private static final String QUOTE = "\"";
-
- LiteralImpl(org.eclipse.rdf4j.model.Literal literal) {
- super(literal);
- }
- @Override
- public boolean equals(Object obj) {
- if (obj == this) { return true; }
- if (obj instanceof org.apache.commons.rdf.api.Literal) {
- org.apache.commons.rdf.api.Literal other = (org.apache.commons.rdf.api.Literal) obj;
- return getLexicalForm().equals(other.getLexicalForm()) &&
- getDatatype().equals(other.getDatatype()) &&
- getLanguageTag().equals(other.getLanguageTag());
-
- }
- return false;
- }
-
- @Override
- public org.apache.commons.rdf.api.IRI getDatatype() {
- return new IRIImpl(value.getDatatype());
- }
-
- @Override
- public Optional<String> getLanguageTag() {
- return value.getLanguage();
- }
-
- @Override
- public String getLexicalForm() {
- return value.getLabel();
- }
-
- public int hashCode() {
- return Objects.hash(value.getLabel(), value.getDatatype(), value.getLanguage());
- }
-
- @Override
- public String ntriplesString() {
- // TODO: Use a more efficient StringBuffer
- String escaped = QUOTE + TurtleUtil.encodeString(value.getLabel()) + QUOTE;
- if (value.getLanguage().isPresent()) {
- return escaped + "@" + value.getLanguage().get();
- }
- if (value.getDatatype().equals(XMLSchema.STRING)) {
- return escaped;
- }
- return escaped + "^^<" + TurtleUtil.encodeURIString(value.getDatatype().toString()) + ">";
- }
-
- @Override
- public String toString() {
- return ntriplesString();
- }
- }
-
- private static abstract class RDFTermImpl<T extends Value> implements RDF4JTerm<T> {
- T value;
-
- RDFTermImpl(T value) {
- this.value = value;
- }
-
- public T asValue() {
- return value;
- }
- }
-
- private final static class TripleImpl implements Triple, RDF4JTriple {
- private final Statement statement;
- private UUID salt;
-
- TripleImpl(Statement statement, UUID salt) {
- this.statement = statement;
- this.salt = salt;
- }
-
- public Statement asStatement() {
- return statement;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof Triple) {
- Triple triple = (Triple) obj;
- return getSubject().equals(triple.getSubject()) &&
- getPredicate().equals(triple.getPredicate()) &&
- getObject().equals(triple.getObject());
- }
- return false;
- }
-
- @Override
- public RDFTerm getObject() {
- return asRDFTerm(statement.getObject(), salt);
- }
-
- @Override
- public org.apache.commons.rdf.api.IRI getPredicate() {
- return (org.apache.commons.rdf.api.IRI) asRDFTerm(statement.getPredicate(), null);
- }
-
- @Override
- public BlankNodeOrIRI getSubject() {
- return (BlankNodeOrIRI) asRDFTerm(statement.getSubject(), salt);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(getSubject(), getPredicate(), getObject());
- }
-
- @Override
- public String toString() {
- return statement.toString();
- }
-}
-
-
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
new file mode 100644
index 0000000..a5d5367
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRDFTerm.java
@@ -0,0 +1,16 @@
+package org.apache.commons.rdf.rdf4j.impl;
+
+import org.apache.commons.rdf.rdf4j.RDF4JTerm;
+import org.eclipse.rdf4j.model.Value;
+
+abstract class AbstractRDFTerm<T extends Value> implements RDF4JTerm<T> {
+ T value;
+
+ AbstractRDFTerm(T value) {
+ this.value = value;
+ }
+
+ public T asValue() {
+ return value;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
new file mode 100644
index 0000000..6921f45
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/BlankNodeImpl.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.nio.charset.StandardCharsets;
+import java.util.UUID;
+
+import org.apache.commons.rdf.api.BlankNode;
+import org.apache.commons.rdf.rdf4j.RDF4JBlankNode;
+import org.eclipse.rdf4j.model.BNode;
+import org.eclipse.rdf4j.rio.turtle.TurtleUtil;
+
+public final class BlankNodeImpl extends AbstractRDFTerm<BNode>
+ implements RDF4JBlankNode {
+
+ private transient int hashCode = 0;
+ private long saltUUIDmost;
+ private long saltUUIDleast;
+
+ public BlankNodeImpl(BNode bNode, UUID salt) {
+ super(bNode);
+ // Space-efficient storage of salt UUID
+ saltUUIDmost = salt.getMostSignificantBits();
+ saltUUIDleast = salt.getLeastSignificantBits();
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ // NOTE: Do NOT use Bnode.equals() as it has a more generous
+ // equality based only on the value.getID();
+ if (obj instanceof BlankNode) {
+ BlankNode blankNode = (BlankNode) obj;
+ return uniqueReference().equals(blankNode.uniqueReference());
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ if (hashCode != 0) {
+ return hashCode;
+ }
+ return hashCode = uniqueReference().hashCode();
+ }
+
+ @Override
+ public String ntriplesString() {
+ if (isValidBlankNodeLabel(value.getID())) {
+ return "_:" + value.getID();
+ } else {
+ return "_:" + UUID.nameUUIDFromBytes(value.getID().getBytes(StandardCharsets.UTF_8));
+ }
+ }
+
+ @Override
+ public String uniqueReference() {
+ UUID uuid = new UUID(saltUUIDmost, saltUUIDleast);
+ return "urn:uuid:" + uuid + "#" + value.getID();
+ }
+
+ private boolean isValidBlankNodeLabel(String id) {
+ // FIXME: Replace with a regular expression?
+ if (id.isEmpty()) {
+ return false;
+ }
+ if (! TurtleUtil.isBLANK_NODE_LABEL_StartChar(id.codePointAt(0))) {
+ return false;
+ }
+ for (int i=1; i<id.length(); i++) {
+ if (! TurtleUtil.isBLANK_NODE_LABEL_Char(id.codePointAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
new file mode 100644
index 0000000..966ac32
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/GraphImpl.java
@@ -0,0 +1,119 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j.impl;
+
+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.RDF4JGraph;
+import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
+import org.apache.commons.rdf.rdf4j.RDF4JTriple;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
+
+public final class GraphImpl implements RDF4JGraph {
+
+ private Model model;
+ private RDF4JTermFactory rdf4jTermFactory;
+
+ public GraphImpl(Model model) {
+ this.model = model;
+ this.rdf4jTermFactory = new RDF4JTermFactory();
+ }
+
+ public GraphImpl(Model model, RDF4JTermFactory rdf4jTermFactory) {
+ this.model = model;
+ this.rdf4jTermFactory = rdf4jTermFactory;
+ }
+
+ @Override
+ public void add(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
+ model.add(
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
+ }
+
+ @Override
+ public void add(Triple triple) {
+ model.add(rdf4jTermFactory.asStatement(triple));
+ }
+
+ public Model asModel() {
+ return model;
+ }
+
+ @Override
+ public void clear() {
+ model.clear();
+ }
+
+ @Override
+ public boolean contains(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
+ return model.contains(
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
+ }
+
+ @Override
+ public boolean contains(Triple triple) {
+ return model.contains(rdf4jTermFactory.asStatement(triple));
+ }
+
+ @Override
+ public Stream<RDF4JTriple> stream() {
+ return model.parallelStream().map(rdf4jTermFactory::asTriple);
+ }
+
+ @Override
+ public Stream<RDF4JTriple> stream(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
+ return model.filter(
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object)).parallelStream()
+ .map(rdf4jTermFactory::asTriple);
+ }
+
+ @Override
+ public void remove(BlankNodeOrIRI subject, org.apache.commons.rdf.api.IRI predicate, RDFTerm object) {
+ model.remove(
+ (Resource)rdf4jTermFactory.asValue(subject),
+ (org.eclipse.rdf4j.model.IRI)rdf4jTermFactory.asValue(predicate),
+ rdf4jTermFactory.asValue(object));
+
+ }
+
+ @Override
+ public void remove(Triple triple) {
+ model.remove(rdf4jTermFactory.asStatement(triple));
+ }
+
+ @Override
+ public long size() {
+ int size = model.size();
+ if (size < Integer.MAX_VALUE) {
+ return size;
+ } else {
+ // Collection.size() can't help us, we'll have to count
+ return model.parallelStream().count();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/IRIImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/IRIImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/IRIImpl.java
new file mode 100644
index 0000000..9ae6741
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/IRIImpl.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j.impl;
+
+import org.apache.commons.rdf.rdf4j.RDF4JIRI;
+
+public final class IRIImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.IRI>
+ implements RDF4JIRI {
+
+ public IRIImpl(org.eclipse.rdf4j.model.IRI iri) {
+ super(iri);
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) { return true; }
+ if (obj instanceof IRIImpl) {
+ IRIImpl impl = (IRIImpl) obj;
+ return asValue().equals(impl.asValue());
+ }
+ if (obj instanceof org.apache.commons.rdf.api.IRI) {
+ org.apache.commons.rdf.api.IRI iri = (org.apache.commons.rdf.api.IRI) obj;
+ return value.toString().equals(iri.getIRIString());
+ }
+ return false;
+ }
+
+ @Override
+ public String getIRIString() {
+ return value.toString();
+ }
+
+ public int hashCode() {
+ // Same definition
+ return value.hashCode();
+ }
+
+ @Override
+ public String ntriplesString() {
+ return "<" + value.toString() + ">";
+ }
+ @Override
+ public String toString() {
+ return value.toString();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
new file mode 100644
index 0000000..0305059
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.rdf.rdf4j.RDF4JLiteral;
+import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
+import org.eclipse.rdf4j.rio.turtle.TurtleUtil;
+
+public final class LiteralImpl
+ extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
+ implements RDF4JLiteral {
+
+ private static final String QUOTE = "\"";
+
+ public LiteralImpl(org.eclipse.rdf4j.model.Literal literal) {
+ super(literal);
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) { return true; }
+ if (obj instanceof org.apache.commons.rdf.api.Literal) {
+ org.apache.commons.rdf.api.Literal other = (org.apache.commons.rdf.api.Literal) obj;
+ return getLexicalForm().equals(other.getLexicalForm()) &&
+ getDatatype().equals(other.getDatatype()) &&
+ getLanguageTag().equals(other.getLanguageTag());
+
+ }
+ return false;
+ }
+
+ @Override
+ public org.apache.commons.rdf.api.IRI getDatatype() {
+ return new IRIImpl(value.getDatatype());
+ }
+
+ @Override
+ public Optional<String> getLanguageTag() {
+ return value.getLanguage();
+ }
+
+ @Override
+ public String getLexicalForm() {
+ return value.getLabel();
+ }
+
+ public int hashCode() {
+ return Objects.hash(value.getLabel(), value.getDatatype(), value.getLanguage());
+ }
+
+ @Override
+ public String ntriplesString() {
+ // TODO: Use a more efficient StringBuffer
+ String escaped = QUOTE + TurtleUtil.encodeString(value.getLabel()) + QUOTE;
+ if (value.getLanguage().isPresent()) {
+ return escaped + "@" + value.getLanguage().get();
+ }
+ if (value.getDatatype().equals(XMLSchema.STRING)) {
+ return escaped;
+ }
+ return escaped + "^^<" + TurtleUtil.encodeURIString(value.getDatatype().toString()) + ">";
+ }
+
+ @Override
+ public String toString() {
+ return ntriplesString();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/16ff4466/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
new file mode 100644
index 0000000..74564fb
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/TripleImpl.java
@@ -0,0 +1,61 @@
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.util.Objects;
+import java.util.UUID;
+
+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.RDF4JTermFactory;
+import org.apache.commons.rdf.rdf4j.RDF4JTriple;
+import org.eclipse.rdf4j.model.Statement;
+
+public final class TripleImpl implements Triple, RDF4JTriple {
+ private final Statement statement;
+ private UUID salt;
+
+ public TripleImpl(Statement statement, UUID salt) {
+ this.statement = statement;
+ this.salt = salt;
+ }
+
+ public Statement asStatement() {
+ return statement;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Triple) {
+ Triple triple = (Triple) obj;
+ return getSubject().equals(triple.getSubject()) &&
+ getPredicate().equals(triple.getPredicate()) &&
+ getObject().equals(triple.getObject());
+ }
+ return false;
+ }
+
+ @Override
+ public RDFTerm getObject() {
+ return RDF4JTermFactory.asRDFTerm(statement.getObject(), salt);
+ }
+
+ @Override
+ public org.apache.commons.rdf.api.IRI getPredicate() {
+ return (org.apache.commons.rdf.api.IRI) RDF4JTermFactory.asRDFTerm(statement.getPredicate(), null);
+ }
+
+ @Override
+ public BlankNodeOrIRI getSubject() {
+ return (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getSubject(), salt);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(getSubject(), getPredicate(), getObject());
+ }
+
+ @Override
+ public String toString() {
+ return statement.toString();
+ }
+}
\ No newline at end of file
[5/7] incubator-commonsrdf git commit: Added RDF4JQuad
Posted by st...@apache.org.
Added RDF4JQuad
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/b90f9fc1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/b90f9fc1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/b90f9fc1
Branch: refs/heads/rdf4j
Commit: b90f9fc122197b81b1af2235af03db780811a559
Parents: 16ff446
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 10:26:57 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 10:26:57 2016 +0100
----------------------------------------------------------------------
.../org/apache/commons/rdf/rdf4j/RDF4JQuad.java | 35 +++++++++
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 24 ++++++-
.../apache/commons/rdf/rdf4j/impl/QuadImpl.java | 76 ++++++++++++++++++++
3 files changed, 134 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b90f9fc1/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
new file mode 100644
index 0000000..acbcedc
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j;
+
+import org.apache.commons.rdf.api.Quad;
+import org.eclipse.rdf4j.model.Statement;
+
+/**
+ * Marker interface for RDF4J implementations of Quad.
+ *
+ */
+public interface RDF4JQuad extends Quad {
+
+ /**
+ * Return the corresponding RDF4J {@link Statement}.
+ *
+ * @return The corresponding RDF4J Statement.
+ */
+ public Statement asStatement();
+}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b90f9fc1/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 e258497..24d2d86 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
@@ -25,6 +25,7 @@ import java.util.UUID;
import org.apache.commons.rdf.api.BlankNode;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
import org.apache.commons.rdf.api.Graph;
+import org.apache.commons.rdf.api.Quad;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.RDFTermFactory;
import org.apache.commons.rdf.api.Triple;
@@ -32,6 +33,7 @@ import org.apache.commons.rdf.rdf4j.impl.BlankNodeImpl;
import org.apache.commons.rdf.rdf4j.impl.GraphImpl;
import org.apache.commons.rdf.rdf4j.impl.IRIImpl;
import org.apache.commons.rdf.rdf4j.impl.LiteralImpl;
+import org.apache.commons.rdf.rdf4j.impl.QuadImpl;
import org.apache.commons.rdf.rdf4j.impl.TripleImpl;
import org.eclipse.rdf4j.model.BNode;
import org.eclipse.rdf4j.model.Model;
@@ -155,13 +157,22 @@ public class RDF4JTermFactory implements RDFTermFactory {
(org.eclipse.rdf4j.model.IRI) asValue(triple.getPredicate()),
asValue(triple.getObject()));
}
+
+ public Statement asStatement(Quad quad) {
+ return valueFactory.createStatement(
+ (org.eclipse.rdf4j.model.Resource) asValue(quad.getSubject()),
+ (org.eclipse.rdf4j.model.IRI) asValue(quad.getPredicate()),
+ asValue(quad.getObject()),
+ (org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null))
+ );
+ }
/**
* Adapt a RDF4J {@link Statement} as a Commons RDF
* {@link Triple}.
*
* @param statement
- * @return
+ * @return A {@link RDF4JTriple} that is equivalent to the statement
*/
public RDF4JTriple asTriple(final Statement statement) {
return new TripleImpl(statement, salt);
@@ -169,6 +180,17 @@ public class RDF4JTermFactory implements RDFTermFactory {
/**
* Adapt a RDF4J {@link Statement} as a Commons RDF
+ * {@link Quad}.
+ *
+ * @param statement
+ * @return A {@link RDF4JQuad} that is equivalent to the statement
+ */
+ public RDF4JQuad asQuad(final Statement statement) {
+ return new QuadImpl(statement, salt);
+ }
+
+ /**
+ * Adapt a RDF4J {@link Statement} as a Commons RDF
* {@link Triple}.
*
* @param statement
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/b90f9fc1/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
new file mode 100644
index 0000000..7111fd2
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
@@ -0,0 +1,76 @@
+package org.apache.commons.rdf.rdf4j.impl;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.Quad;
+import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.api.Triple;
+import org.apache.commons.rdf.rdf4j.RDF4JQuad;
+import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
+import org.eclipse.rdf4j.model.Statement;
+
+public final class QuadImpl implements Quad, RDF4JQuad {
+ private final Statement statement;
+ private UUID salt;
+ private transient int hashCode = 0;
+
+ public QuadImpl(Statement statement, UUID salt) {
+ this.statement = statement;
+ this.salt = salt;
+ }
+
+ public Statement asStatement() {
+ return statement;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Triple) {
+ Triple triple = (Triple) obj;
+ return getSubject().equals(triple.getSubject()) &&
+ getPredicate().equals(triple.getPredicate()) &&
+ getObject().equals(triple.getObject());
+ }
+ return false;
+ }
+
+ @Override
+ public RDFTerm getObject() {
+ return RDF4JTermFactory.asRDFTerm(statement.getObject(), salt);
+ }
+
+ @Override
+ public org.apache.commons.rdf.api.IRI getPredicate() {
+ return (org.apache.commons.rdf.api.IRI) RDF4JTermFactory.asRDFTerm(statement.getPredicate(), null);
+ }
+
+ @Override
+ public BlankNodeOrIRI getSubject() {
+ return (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getSubject(), salt);
+ }
+
+ @Override
+ public int hashCode() {
+ if (hashCode != 0) {
+ return hashCode;
+ }
+ return hashCode = Objects.hash(getSubject(), getPredicate(), getObject(), getGraphName());
+ }
+
+ @Override
+ public String toString() {
+ return statement.toString();
+ }
+
+ @Override
+ public Optional<BlankNodeOrIRI> getGraphName() {
+ if (statement.getContext() == null) {
+ return Optional.empty();
+ }
+ BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getContext(), salt);
+ return Optional.of(g);
+ }
+}
\ No newline at end of file
[6/7] incubator-commonsrdf git commit: Add RDF4JTripleLike
Posted by st...@apache.org.
Add RDF4JTripleLike
recognized by asStatement to return original statement
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/712eec6f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/712eec6f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/712eec6f
Branch: refs/heads/rdf4j
Commit: 712eec6fa18bf779cc56d1296d539a350858da1f
Parents: b90f9fc
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jun 3 10:37:21 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jun 3 10:37:21 2016 +0100
----------------------------------------------------------------------
.../org/apache/commons/rdf/rdf4j/RDF4JQuad.java | 9 +----
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 9 ++++-
.../apache/commons/rdf/rdf4j/RDF4JTriple.java | 9 +----
.../commons/rdf/rdf4j/RDF4JTripleLike.java | 42 ++++++++++++++++++++
.../apache/commons/rdf/rdf4j/impl/QuadImpl.java | 5 +++
5 files changed, 56 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/712eec6f/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
index acbcedc..621d34f 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JQuad.java
@@ -18,18 +18,11 @@
package org.apache.commons.rdf.rdf4j;
import org.apache.commons.rdf.api.Quad;
-import org.eclipse.rdf4j.model.Statement;
/**
* Marker interface for RDF4J implementations of Quad.
*
*/
-public interface RDF4JQuad extends Quad {
+public interface RDF4JQuad extends Quad, RDF4JTripleLike {
- /**
- * Return the corresponding RDF4J {@link Statement}.
- *
- * @return The corresponding RDF4J Statement.
- */
- public Statement asStatement();
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/712eec6f/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 24d2d86..3df7de9 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
@@ -152,6 +152,11 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
public Statement asStatement(Triple triple) {
+ if (triple instanceof RDF4JTripleLike) {
+ // This covers both RDF4JQuad and RDF4JTriple
+ RDF4JTripleLike rdf4jTriple = (RDF4JTriple) triple;
+ return rdf4jTriple.asStatement();
+ }
return valueFactory.createStatement(
(org.eclipse.rdf4j.model.Resource) asValue(triple.getSubject()),
(org.eclipse.rdf4j.model.IRI) asValue(triple.getPredicate()),
@@ -162,7 +167,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
return valueFactory.createStatement(
(org.eclipse.rdf4j.model.Resource) asValue(quad.getSubject()),
(org.eclipse.rdf4j.model.IRI) asValue(quad.getPredicate()),
- asValue(quad.getObject()),
+ asValue(quad.getObject()),
(org.eclipse.rdf4j.model.Resource) asValue(quad.getGraphName().orElse(null))
);
}
@@ -248,7 +253,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
// This is where it gets tricky to support round trips!
BlankNode blankNode = (BlankNode) term;
// FIXME: The uniqueReference might not be a valid BlankNode identifier..
- // does it have to be?
+ // does it have to be in RDF4J?
return valueFactory.createBNode(blankNode.uniqueReference());
}
throw new IllegalArgumentException("RDFTerm was not an IRI, Literal or BlankNode: " + term.getClass());
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/712eec6f/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java
index ed0b4b0..4e09f19 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTriple.java
@@ -18,18 +18,11 @@
package org.apache.commons.rdf.rdf4j;
import org.apache.commons.rdf.api.Triple;
-import org.eclipse.rdf4j.model.Statement;
/**
* Marker interface for RDF4J implementations of Triple.
*
*/
-public interface RDF4JTriple extends Triple {
+public interface RDF4JTriple extends Triple, RDF4JTripleLike {
- /**
- * Return the corresponding RDF4J {@link Statement}.
- *
- * @return The corresponding RDF4J Statement.
- */
- public Statement asStatement();
}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/712eec6f/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java
new file mode 100644
index 0000000..36f4fa7
--- /dev/null
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.rdf4j;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.api.TripleLike;
+import org.eclipse.rdf4j.model.Statement;
+
+/**
+ * Marker interface for RDF4J implementations of TripleLike statements.
+ * <p>
+ * This is backed by a {@link Statement} retrievable with {@link #asStatement()}.
+ *
+ * @see RDF4JTriple
+ * @see RDF4JQuad
+ */
+public interface RDF4JTripleLike extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm> {
+
+ /**
+ * Return the corresponding RDF4J {@link Statement}.
+ *
+ * @return The corresponding RDF4J Statement.
+ */
+ public Statement asStatement();
+}
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/712eec6f/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
index 7111fd2..0e11eb2 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/QuadImpl.java
@@ -73,4 +73,9 @@ public final class QuadImpl implements Quad, RDF4JQuad {
BlankNodeOrIRI g = (BlankNodeOrIRI) RDF4JTermFactory.asRDFTerm(statement.getContext(), salt);
return Optional.of(g);
}
+
+ @Override
+ public Triple asTriple() {
+ return new TripleImpl(statement, salt);
+ }
}
\ No newline at end of file
[2/7] incubator-commonsrdf git commit: static classes, pass UUID salt
Posted by st...@apache.org.
static classes, pass UUID salt
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/2cde4c93
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/2cde4c93
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/2cde4c93
Branch: refs/heads/rdf4j
Commit: 2cde4c93d584059d0e1d1da91b136e3062809cb2
Parents: a82949f
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jun 2 18:04:02 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jun 2 18:04:02 2016 +0100
----------------------------------------------------------------------
.../commons/rdf/rdf4j/RDF4JTermFactory.java | 82 +++++++++++++++-----
1 file changed, 64 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/2cde4c93/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 dc8bd2d..d8943db 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
@@ -73,7 +73,7 @@ import org.eclipse.rdf4j.rio.turtle.TurtleUtil;
*/
public class RDF4JTermFactory implements RDFTermFactory {
- private String salt = "urn:uuid:" + UUID.randomUUID() + "#";
+ private UUID salt = UUID.randomUUID();
private ValueFactory valueFactory;
@@ -104,8 +104,30 @@ public class RDF4JTermFactory implements RDFTermFactory {
* @return
*/
public RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value) {
+ return asRDFTerm(value, salt);
+ }
+
+ /**
+ *
+ * Adapt a RDF4J {@link Value} as a Commons RDF
+ * {@link RDFTerm}.
+ * <p>
+ * <p>
+ * The value will be of the same kind as the term, e.g. a
+ * {@link org.eclipse.rdf4j.model.BNode} is converted to a
+ * {@link org.apache.commons.rdf.api.BlankNode},
+ * a {@link org.eclipse.rdf4j.model.IRI}
+ * is converted to a {@link org.apache.commons.rdf.api.IRI}
+ * and a {@link org.eclipse.rdf4j.model.Literal}.
+ * is converted to a
+ * {@link org.apache.commons.rdf.api.Literal}
+ *
+ * @param value
+ * @return
+ */
+ public static RDF4JTerm<?> asRDFTerm(final org.eclipse.rdf4j.model.Value value, UUID salt) {
if (value instanceof BNode) {
- return new BlankNodeImpl((BNode) value);
+ return new BlankNodeImpl((BNode) value, salt);
}
if (value instanceof org.eclipse.rdf4j.model.Literal) {
return new LiteralImpl((org.eclipse.rdf4j.model.Literal) value);
@@ -114,7 +136,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
return new IRIImpl((org.eclipse.rdf4j.model.IRI) value);
}
throw new IllegalArgumentException("Value is not a BNode, Literal or IRI: " + value.getClass());
- }
+ }
/**
* Adapt an RDF4J {@link Model} as a
@@ -145,10 +167,21 @@ public class RDF4JTermFactory implements RDFTermFactory {
* @return
*/
public RDF4JTriple asTriple(final Statement statement) {
- return new TripleImpl(statement);
+ return new TripleImpl(statement, salt);
}
/**
+ * Adapt a RDF4J {@link Statement} as a Commons RDF
+ * {@link Triple}.
+ *
+ * @param statement
+ * @return
+ */
+ public static RDF4JTriple asTriple(final Statement statement, UUID salt) {
+ return new TripleImpl(statement, salt);
+ }
+
+ /**
* Adapt a Commons RDF {@link RDFTerm} as a RDF4J {@link Value}.
* <p>
* The value will be of the same kind as the term, e.g. a
@@ -256,11 +289,18 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
- private final class BlankNodeImpl extends RDFTermImpl<BNode>
+ private static final class BlankNodeImpl extends RDFTermImpl<BNode>
implements RDF4JBlankNode {
- BlankNodeImpl(BNode bNode) {
+ private transient int hashCode = 0;
+ private long saltUUIDmost;
+ private long saltUUIDleast;
+
+ BlankNodeImpl(BNode bNode, UUID salt) {
super(bNode);
+ // Space-efficient storage of salt UUID
+ saltUUIDmost = salt.getMostSignificantBits();
+ saltUUIDleast = salt.getLeastSignificantBits();
}
public boolean equals(Object obj) {
@@ -278,7 +318,10 @@ public class RDF4JTermFactory implements RDFTermFactory {
@Override
public int hashCode() {
- return uniqueReference().hashCode();
+ if (hashCode != 0) {
+ return hashCode;
+ }
+ return hashCode = uniqueReference().hashCode();
}
@Override
@@ -292,7 +335,8 @@ public class RDF4JTermFactory implements RDFTermFactory {
@Override
public String uniqueReference() {
- return salt + value.getID();
+ UUID uuid = new UUID(saltUUIDmost, saltUUIDleast);
+ return "urn:uuid:" + uuid + "#" + value.getID();
}
private boolean isValidBlankNodeLabel(String id) {
@@ -395,7 +439,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
}
- private final class IRIImpl extends RDFTermImpl<org.eclipse.rdf4j.model.IRI>
+ private final static class IRIImpl extends RDFTermImpl<org.eclipse.rdf4j.model.IRI>
implements RDF4JIRI {
IRIImpl(org.eclipse.rdf4j.model.IRI iri) {
@@ -436,7 +480,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
- private final class LiteralImpl
+ private final static class LiteralImpl
extends RDFTermImpl<org.eclipse.rdf4j.model.Literal>
implements RDF4JLiteral {
@@ -460,7 +504,7 @@ public class RDF4JTermFactory implements RDFTermFactory {
@Override
public org.apache.commons.rdf.api.IRI getDatatype() {
- return (org.apache.commons.rdf.api.IRI) asRDFTerm(value.getDatatype());
+ return new IRIImpl(value.getDatatype());
}
@Override
@@ -508,11 +552,13 @@ public class RDF4JTermFactory implements RDFTermFactory {
}
}
- private final class TripleImpl implements Triple, RDF4JTriple {
- private final Statement statement;
-
- TripleImpl(Statement statement) {
+ private final static class TripleImpl implements Triple, RDF4JTriple {
+ private final Statement statement;
+ private UUID salt;
+
+ TripleImpl(Statement statement, UUID salt) {
this.statement = statement;
+ this.salt = salt;
}
public Statement asStatement() {
@@ -532,17 +578,17 @@ public class RDF4JTermFactory implements RDFTermFactory {
@Override
public RDFTerm getObject() {
- return asRDFTerm(statement.getObject());
+ return asRDFTerm(statement.getObject(), salt);
}
@Override
public org.apache.commons.rdf.api.IRI getPredicate() {
- return (org.apache.commons.rdf.api.IRI) asRDFTerm(statement.getPredicate());
+ return (org.apache.commons.rdf.api.IRI) asRDFTerm(statement.getPredicate(), null);
}
@Override
public BlankNodeOrIRI getSubject() {
- return (BlankNodeOrIRI) asRDFTerm(statement.getSubject());
+ return (BlankNodeOrIRI) asRDFTerm(statement.getSubject(), salt);
}
@Override