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/14 12:17:51 UTC

[5/8] incubator-commonsrdf git commit: COMMONSRDF-42 Avoid generics in TripleLike

COMMONSRDF-42 Avoid generics in TripleLike

.. and almost avoid it in QuadLike


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

Branch: refs/heads/master
Commit: 6e694fce7ee092a66c0b8599d3193567d1ad989b
Parents: 8560610
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Oct 14 13:09:31 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Oct 14 13:09:31 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/commons/rdf/api/Dataset.java   |  2 +-
 .../java/org/apache/commons/rdf/api/Graph.java     |  2 +-
 .../java/org/apache/commons/rdf/api/GraphLike.java |  9 +--------
 .../main/java/org/apache/commons/rdf/api/Quad.java |  2 +-
 .../java/org/apache/commons/rdf/api/QuadLike.java  | 16 ++--------------
 .../java/org/apache/commons/rdf/api/Triple.java    |  2 +-
 .../org/apache/commons/rdf/api/TripleLike.java     | 17 +++++------------
 .../commons/rdf/jena/JenaGeneralizedQuadLike.java  |  2 +-
 .../rdf/jena/JenaGeneralizedTripleLike.java        |  2 +-
 .../java/org/apache/commons/rdf/jena/JenaQuad.java |  4 +---
 .../org/apache/commons/rdf/jena/JenaQuadLike.java  |  4 ++--
 .../commons/rdf/jena/JenaRDFTermFactory.java       |  8 ++++----
 .../org/apache/commons/rdf/jena/JenaTriple.java    |  6 +-----
 .../apache/commons/rdf/jena/JenaTripleLike.java    |  4 ++--
 .../rdf/jena/experimental/JenaRDFParser.java       |  8 ++++----
 .../commons/rdf/jena/impl/AbstractQuadLike.java    |  2 +-
 .../apache/commons/rdf/jsonldjava/JsonLdGraph.java |  4 ++--
 .../commons/rdf/jsonldjava/JsonLdGraphLike.java    | 10 ++++++----
 .../apache/commons/rdf/jsonldjava/JsonLdQuad.java  | 10 +---------
 .../commons/rdf/jsonldjava/JsonLdQuadLike.java     |  5 ++---
 .../commons/rdf/jsonldjava/JsonLdTriple.java       |  9 ++-------
 .../commons/rdf/jsonldjava/JsonLdTripleLike.java   | 16 ++++++++++++++++
 .../apache/commons/rdf/rdf4j/RDF4JGraphLike.java   |  7 ++-----
 .../apache/commons/rdf/rdf4j/RDF4JTermFactory.java |  2 +-
 .../apache/commons/rdf/rdf4j/RDF4JTripleLike.java  |  5 +----
 .../rdf4j/impl/AbstractRepositoryGraphLike.java    |  5 +----
 src/site/markdown/userguide.md                     | 13 +++++++++++++
 27 files changed, 76 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/Dataset.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Dataset.java b/api/src/main/java/org/apache/commons/rdf/api/Dataset.java
index c809bc9..3b602d3 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Dataset.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Dataset.java
@@ -28,7 +28,7 @@ import java.util.stream.Stream;
  * <a href="http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 Concepts and Abstract
  * Syntax</a>, a W3C Recommendation published on 25 February 2014.
  */
-public interface Dataset extends AutoCloseable, GraphLike<Quad, BlankNodeOrIRI, IRI, RDFTerm> {
+public interface Dataset extends AutoCloseable, GraphLike<Quad> {
 
 	/**
 	 * Add a quad to the dataset, possibly mapping any of the components of the

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/Graph.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Graph.java b/api/src/main/java/org/apache/commons/rdf/api/Graph.java
index 7340e86..ff78ec3 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Graph.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Graph.java
@@ -27,7 +27,7 @@ import java.util.stream.Stream;
  * href="http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 Concepts and Abstract
  * Syntax</a>, a W3C Recommendation published on 25 February 2014.
  */
-public interface Graph extends AutoCloseable,GraphLike<Triple, BlankNodeOrIRI, IRI, RDFTerm> {
+public interface Graph extends AutoCloseable,GraphLike<Triple> {
 
     /**
      * Add a triple to the graph, possibly mapping any of the components of the

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/GraphLike.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/GraphLike.java b/api/src/main/java/org/apache/commons/rdf/api/GraphLike.java
index f8d052f..0f73c4e 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/GraphLike.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/GraphLike.java
@@ -39,20 +39,13 @@ import java.util.stream.Stream;
  * @param <T>
  *            A {@link TripleLike} type used by the graph methods, typically
  *            {@link Triple} or {@link Quad}
- * @param <S>
- *            The type of subjects in the statements, typically
- *            {@link BlankNodeOrIRI}
- * @param <P>
- *            The type of predicates in the statements, typically {@link IRI}
- * @param <O>
- *            The type of objects in the statements, typically {@link RDFTerm}
  *            
  * @since 0.3.0-incubating
  * @see Graph
  * @see Dataset
  * @see TripleLike
  */
-public interface GraphLike<T extends TripleLike<S, P, O>, S extends RDFTerm, P extends RDFTerm, O extends RDFTerm> {
+public interface GraphLike<T extends TripleLike> {
 
 	/**
 	 * Add a statement.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/Quad.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Quad.java b/api/src/main/java/org/apache/commons/rdf/api/Quad.java
index d52a3c3..6ce9a95 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Quad.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Quad.java
@@ -35,7 +35,7 @@ import java.util.Optional;
  *      1.1: On Semantics of RDF Datasets</a>
  * @see <a href="http://www.w3.org/TR/rdf11-concepts/#section-dataset"> </a>
  */
-public interface Quad extends QuadLike<BlankNodeOrIRI,IRI,RDFTerm,BlankNodeOrIRI> {
+public interface Quad extends QuadLike<BlankNodeOrIRI> {
 
 	/**
 	 * The graph name (graph label) of this quad, if present.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/QuadLike.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/QuadLike.java b/api/src/main/java/org/apache/commons/rdf/api/QuadLike.java
index 8de180a..9eaa5dc 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/QuadLike.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/QuadLike.java
@@ -31,25 +31,13 @@ import java.util.Optional;
  * (e.g. a {@link BlankNode} as predicate).
  * <p>
  * Implementations should specialise which specific {@link RDFTerm} types they
- * return for {@link #getSubject()}, {@link #getPredicate()},
+ * return by overriding {@link #getSubject()}, {@link #getPredicate()},
  * {@link #getObject()} and {@link #getGraphName()}.
  *
- * @param <S>
- *            The type of subjects in the statements, typically
- *            {@link BlankNodeOrIRI}
- * @param <P>
- *            The type of predicates in the statements, typically {@link IRI}
- * @param <O>
- *            The type of objects in the statements, typically {@link RDFTerm}
- * @param <G>
- *            The type of graph names in the statements, typically
- *            {@link BlankNodeOrIRI}
- * 
  * @since 0.3.0-incubating
  * @see Quad
  */
-public interface QuadLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm>
-		extends TripleLike<S, P, O> {
+public interface QuadLike<G extends RDFTerm> extends TripleLike {
 
 	/**
 	 * The graph name (graph label) of this statement, if present.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/Triple.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Triple.java b/api/src/main/java/org/apache/commons/rdf/api/Triple.java
index 9375983..9e7f140 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Triple.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Triple.java
@@ -30,7 +30,7 @@ import java.util.Objects;
  * @see <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple" >RDF-1.1
  * Triple</a>
  */
-public interface Triple extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm> {
+public interface Triple extends TripleLike {
 
     /**
      * The subject of this triple, which may be either a {@link BlankNode} or an

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/api/src/main/java/org/apache/commons/rdf/api/TripleLike.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/TripleLike.java b/api/src/main/java/org/apache/commons/rdf/api/TripleLike.java
index 55d0380..30e303a 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/TripleLike.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/TripleLike.java
@@ -29,37 +29,30 @@ package org.apache.commons.rdf.api;
  * used for <em>generalised triples</em> (e.g. a {@link BlankNode} as predicate).
  * <p>
  * Implementations should specialise which specific {@link RDFTerm} types they
- * return for {@link #getSubject()}, {@link #getPredicate()} and
+ * return by overriding {@link #getSubject()}, {@link #getPredicate()} and
  * {@link #getObject()}.
  * 
- * @param <S>
- *            The type of subjects in the statements, typically
- *            {@link BlankNodeOrIRI}
- * @param <P>
- *            The type of predicates in the statements, typically {@link IRI}
- * @param <O>
- *            The type of objects in the statements, typically {@link RDFTerm}
  * 
  * @since 0.3.0-incubating
  * @see Triple
  * @see Quad
  * @see QuadLike
  */
-public interface TripleLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm> {
+public interface TripleLike {
 
 	/**
 	 * The subject of this statement.
 	 *
 	 * @return The subject, typically an {@link IRI} or {@link BlankNode}.
 	 */
-	S getSubject();
+	RDFTerm getSubject();
 
 	/**
 	 * The predicate of this statement.
 	 *
 	 * @return The predicate, typically an {@link IRI}.
 	 */
-	P getPredicate();
+	RDFTerm getPredicate();
 
 	/**
 	 * The object of this statement.
@@ -67,5 +60,5 @@ public interface TripleLike<S extends RDFTerm, P extends RDFTerm, O extends RDFT
 	 * @return The object, typically an {@link IRI}, {@link BlankNode} or
 	 *         {@link Literal}.
 	 */
-	O getObject();
+	RDFTerm getObject();
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedQuadLike.java
index 49e1fe9..a73d92c 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedQuadLike.java
@@ -34,5 +34,5 @@ import org.apache.commons.rdf.api.RDFTerm;
  * 
  * @see JenaGeneralizedTripleLike
  */
-public interface JenaGeneralizedQuadLike extends JenaQuadLike<RDFTerm, RDFTerm, RDFTerm, RDFTerm> {
+public interface JenaGeneralizedQuadLike extends JenaQuadLike<RDFTerm> {
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedTripleLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedTripleLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedTripleLike.java
index 546089f..634d05c 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedTripleLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaGeneralizedTripleLike.java
@@ -35,5 +35,5 @@ import org.apache.commons.rdf.api.Triple;
  * @see JenaGeneralizedQuadLike
  */
 public interface JenaGeneralizedTripleLike
-		extends JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> {	
+		extends JenaTripleLike {	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuad.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuad.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuad.java
index b593263..fffbef7 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuad.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuad.java
@@ -18,8 +18,6 @@
 package org.apache.commons.rdf.jena;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
-import org.apache.commons.rdf.api.IRI;
-import org.apache.commons.rdf.api.RDFTerm;
 
 /** 
  * A Jena-backed {@link org.apache.commons.rdf.api.Quad}.
@@ -28,5 +26,5 @@ import org.apache.commons.rdf.api.RDFTerm;
  * can be accessed with {@link #asJenaQuad()}.
  */
 public interface JenaQuad extends org.apache.commons.rdf.api.Quad, 
-	JenaQuadLike<BlankNodeOrIRI,IRI,RDFTerm,BlankNodeOrIRI> {	
+	JenaQuadLike<BlankNodeOrIRI> {	
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuadLike.java
index e21e670..2e869c3 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaQuadLike.java
@@ -32,8 +32,8 @@ import org.apache.jena.sparql.core.Quad;
  * @see JenaGeneralizedQuadLike
  * 
  */
-public interface JenaQuadLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> 
-	extends JenaTripleLike<S,P,O>, QuadLike<S,P,O,G> {
+public interface JenaQuadLike<G extends RDFTerm> 
+	extends JenaTripleLike, QuadLike<G> {
 
 	/**
 	 * Return the adapted Jena quad

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java
index 0cc84c0..a4db1bf 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java
@@ -303,7 +303,7 @@ public final class JenaRDFTermFactory implements RDFTermFactory {
 	 * @throws ConversionException
 	 *             if any of the triple's nodes are not concrete
 	 */
-	public JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> fromJenaGeneralized(org.apache.jena.graph.Triple triple) throws ConversionException {
+	public JenaTripleLike fromJenaGeneralized(org.apache.jena.graph.Triple triple) throws ConversionException {
 		return internalJenaFactory.fromJenaGeneralized(triple, getSalt());
 	}
 
@@ -333,7 +333,7 @@ public final class JenaRDFTermFactory implements RDFTermFactory {
 	 * @throws ConversionException
 	 *             if any of the quad nodes are not concrete
 	 */
-	public JenaQuadLike<RDFTerm, RDFTerm, RDFTerm, RDFTerm> fromJenaGeneralized(org.apache.jena.sparql.core.Quad quad) throws ConversionException {
+	public JenaQuadLike<RDFTerm> fromJenaGeneralized(org.apache.jena.sparql.core.Quad quad) throws ConversionException {
 		return internalJenaFactory.fromJenaGeneralized(quad, getSalt());
 	}
 	
@@ -567,7 +567,7 @@ public final class JenaRDFTermFactory implements RDFTermFactory {
 	 * @return A {@link StreamRDF} that will stream generalized triples to the
 	 *         consumer
 	 */
-	public StreamRDF streamJenaToGeneralizedTriple(Consumer<TripleLike<RDFTerm, RDFTerm, RDFTerm>> generalizedConsumer) {
+	public StreamRDF streamJenaToGeneralizedTriple(Consumer<TripleLike> generalizedConsumer) {
 		return new StreamRDFBase() {			
 			@Override
 			public void triple(org.apache.jena.graph.Triple triple) {
@@ -592,7 +592,7 @@ public final class JenaRDFTermFactory implements RDFTermFactory {
 	 * @return A {@link StreamRDF} that will stream generalized quads to the
 	 *         consumer
 	 */
-	public StreamRDF streamJenaToGeneralizedQuad(Consumer<QuadLike<RDFTerm, RDFTerm, RDFTerm, RDFTerm>> generalizedConsumer) {
+	public StreamRDF streamJenaToGeneralizedQuad(Consumer<QuadLike<RDFTerm>> generalizedConsumer) {
 		return new StreamRDFBase() {
 			@Override
 			public void quad(org.apache.jena.sparql.core.Quad quad) {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java
index d39bec7..09fe76d 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java
@@ -17,15 +17,11 @@
  */
 package org.apache.commons.rdf.jena;
 
-import org.apache.commons.rdf.api.BlankNodeOrIRI;
-import org.apache.commons.rdf.api.IRI;
-import org.apache.commons.rdf.api.RDFTerm;
-
 /** 
  * A Jena-backed {@link org.apache.commons.rdf.api.Triple}.
  * <p>
  * The underlying Jena {@link org.apache.jena.graph.Triple}
  * can be accessed with {@link #asJenaTriple()}.
  */
-public interface JenaTriple extends org.apache.commons.rdf.api.Triple, JenaTripleLike<BlankNodeOrIRI, IRI, RDFTerm> {
+public interface JenaTriple extends org.apache.commons.rdf.api.Triple, JenaTripleLike {
 }

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java
index 8821c51..abaec21 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java
@@ -35,8 +35,8 @@ import org.apache.jena.graph.Triple;
  * @see JenaGeneralizedQuadLike
  * 
  */
-public interface JenaTripleLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm> 
-	extends org.apache.commons.rdf.api.TripleLike<S,P,O> {
+public interface JenaTripleLike 
+	extends org.apache.commons.rdf.api.TripleLike {
 
 	/**
 	 * Return the adapted Jena triple

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/experimental/JenaRDFParser.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/experimental/JenaRDFParser.java b/jena/src/main/java/org/apache/commons/rdf/jena/experimental/JenaRDFParser.java
index 0ad12b9..89d2884 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/experimental/JenaRDFParser.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/experimental/JenaRDFParser.java
@@ -40,21 +40,21 @@ import org.apache.jena.riot.system.StreamRDFLib;
 
 public class JenaRDFParser extends AbstractRDFParser<JenaRDFParser> implements RDFParser {
 
-	private Consumer<TripleLike<RDFTerm, RDFTerm, RDFTerm>> generalizedConsumerTriple;
-	private Consumer<QuadLike<RDFTerm, RDFTerm, RDFTerm, RDFTerm>> generalizedConsumerQuad;
+	private Consumer<TripleLike> generalizedConsumerTriple;
+	private Consumer<QuadLike<RDFTerm>> generalizedConsumerQuad;
 
 	protected RDFTermFactory createRDFTermFactory() {
 		return new JenaRDFTermFactory();
 	}
 
-	public JenaRDFParser targetGeneralizedTriple(Consumer<TripleLike<RDFTerm,RDFTerm,RDFTerm>> consumer) {
+	public JenaRDFParser targetGeneralizedTriple(Consumer<TripleLike> consumer) {
 		JenaRDFParser c = this.clone();
 		c.resetTarget();		
 		c.generalizedConsumerTriple = consumer;
 		return c;
 	}
 
-	public JenaRDFParser targetGeneralizedQuad(Consumer<QuadLike<RDFTerm,RDFTerm,RDFTerm,RDFTerm>> consumer) {
+	public JenaRDFParser targetGeneralizedQuad(Consumer<QuadLike<RDFTerm>> consumer) {
 		JenaRDFParser c = this.clone();
 		c.resetTarget();		
 		c.generalizedConsumerQuad = consumer;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
index dd0d384..1846fc0 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
@@ -44,7 +44,7 @@ import org.apache.jena.sparql.core.Quad;
  * @see internalJenaFactory#createGeneralizedQuad(RDFTerm, RDFTerm, RDFTerm, RDFTerm)
  *
  */
-abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> implements JenaQuadLike<S,P,O,G> {
+abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> implements JenaQuadLike<G> {
 
 	private static InternalJenaFactory internalJenaFactory = new InternalJenaFactory(){};
 	

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
index 0a59cc3..1acba7d 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java
@@ -34,10 +34,10 @@ import com.github.jsonldjava.core.RDFDataset;
  * A {@link Graph} view of a JsonLd {@link RDFDataset}.
  * 
  */
-public interface JsonLdGraph extends JsonLdGraphLike<org.apache.commons.rdf.api.Triple>, Graph {
+public interface JsonLdGraph extends JsonLdGraphLike<Triple>, Graph {
 }
 
-class JsonLdGraphImpl extends AbstractJsonLdGraphLike<org.apache.commons.rdf.api.Triple> 
+class JsonLdGraphImpl extends AbstractJsonLdGraphLike<Triple> 
 	implements JsonLdGraph {
 
 	private final Optional<BlankNodeOrIRI> graphName;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
index 1e3df61..579a03a 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
@@ -46,8 +46,8 @@ import com.github.jsonldjava.core.RDFDataset.Node;
  *            specialisation of {@link TripleLike}, e.g. {@link Triple} or
  *            {@link org.apache.commons.rdf.api.Quad}
  */
-public interface JsonLdGraphLike <T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
-	extends GraphLike<T, BlankNodeOrIRI, IRI, RDFTerm> {
+public interface JsonLdGraphLike <T extends TripleLike>
+	extends GraphLike<T> {
 	/**
 	 * Return the underlying JSONLD-Java {@link RDFDataset}.
 	 * <p>
@@ -59,7 +59,7 @@ public interface JsonLdGraphLike <T extends TripleLike<BlankNodeOrIRI, IRI, RDFT
 	public RDFDataset getRdfDataSet();
 }
 
-abstract class AbstractJsonLdGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
+abstract class AbstractJsonLdGraphLike<T extends TripleLike>
 	implements JsonLdGraphLike<T> {
 	
 	/** 
@@ -104,7 +104,9 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI,
 			org.apache.commons.rdf.api.Quad q = (org.apache.commons.rdf.api.Quad)t;
 			graphName = q.getGraphName().orElse(null);
 		}
-		add(graphName, t.getSubject(), t.getPredicate(), t.getObject());
+		// FIXME: JSON-LD's rdfDataSet.addQuad method does not support 
+		// generalized RDF, so we have to do a naive cast here
+		add(graphName, (BlankNodeOrIRI)t.getSubject(), (IRI)t.getPredicate(), t.getObject());
 	}	
 
 	void add(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java
index d9a26b3..fcf71f1 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java
@@ -24,15 +24,7 @@ import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.RDFTerm;
 // Note: To avoid confusion - don't import either Quad
 
-public interface JsonLdQuad extends org.apache.commons.rdf.api.Quad {
-
-	
-	/**
-	 * Return the underlying JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
-	 * 
-	 * @return The JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
-	 */
-	public com.github.jsonldjava.core.RDFDataset.Quad asJsonLdQuad();
+public interface JsonLdQuad extends org.apache.commons.rdf.api.Quad, JsonLdTripleLike {
 
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
index 12fb95d..bd9d472 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
@@ -24,12 +24,11 @@ import org.apache.commons.rdf.api.RDFTerm;
 
 import com.github.jsonldjava.core.RDFDataset.Quad;
 
-public interface JsonLdQuadLike<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> extends QuadLike<S,P,O,G> {
+public interface JsonLdQuadLike<G extends RDFTerm> extends QuadLike<G>, JsonLdTripleLike {
 	
-	public Quad asJsonLdQuad();
 }
 	
-	class JsonLdQuadLikeImpl<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> implements JsonLdQuadLike<S,P,O,G> {
+	class JsonLdQuadLikeImpl<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm, G extends RDFTerm> implements JsonLdQuadLike<G> {
 		
 		// Note: We always pass the blankNodePrefix and don't rely on the internal
 		// blankNodePrefix in this static factory

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
index 68fe9c0..906e240 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
@@ -26,14 +26,9 @@ import org.apache.commons.rdf.api.Triple;
 
 import com.github.jsonldjava.core.RDFDataset.Quad;
 
-public interface JsonLdTriple extends Triple {
+public interface JsonLdTriple extends Triple, JsonLdTripleLike {
+
 
-	/**
-	 * Return the underlying JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
-	 * 
-	 * @return The JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
-	 */
-	public com.github.jsonldjava.core.RDFDataset.Quad asJsonLdQuad();
 }
 	
 	final class JsonLdTripleImpl extends JsonLdQuadLikeImpl<BlankNodeOrIRI, IRI, RDFTerm, RDFTerm>

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTripleLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTripleLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTripleLike.java
new file mode 100644
index 0000000..1b606b0
--- /dev/null
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTripleLike.java
@@ -0,0 +1,16 @@
+package org.apache.commons.rdf.jsonldjava;
+
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.TripleLike;
+
+public interface JsonLdTripleLike extends TripleLike {
+
+	/**
+	 * Return the underlying JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
+	 * 
+	 * @return The JsonLD {@link com.github.jsonldjava.core.RDFDataset.Quad}
+	 */
+	public com.github.jsonldjava.core.RDFDataset.Quad asJsonLdQuad();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
index 3b781e0..430369a 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JGraphLike.java
@@ -19,10 +19,7 @@ package org.apache.commons.rdf.rdf4j;
 
 import java.util.Optional;
 
-import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.GraphLike;
-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.Model;
 import org.eclipse.rdf4j.repository.Repository;
@@ -40,8 +37,8 @@ import org.eclipse.rdf4j.repository.Repository;
  * @see RDF4JDataset
  * @see RDF4JGraph
  */
-public interface RDF4JGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
-		extends GraphLike<T, BlankNodeOrIRI, IRI, RDFTerm>, AutoCloseable {
+public interface RDF4JGraphLike<T extends TripleLike>
+		extends GraphLike<T>, AutoCloseable {
 
 	/**
 	 * Return the corresponding RDF4J {@link Model}, if present.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/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 c29b0c4..c503077 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
@@ -408,7 +408,7 @@ public final class RDF4JTermFactory implements RDFTermFactory {
 	 *            A {@link Triple} or {@link Quad} to adapt
 	 * @return A corresponding {@link Statement}
 	 */
-	public Statement asStatement(TripleLike<BlankNodeOrIRI, org.apache.commons.rdf.api.IRI, RDFTerm> tripleLike) {
+	public Statement asStatement(TripleLike tripleLike) {
 		if (tripleLike instanceof RDF4JTripleLike) {
 			// Return original statement - this covers both RDF4JQuad and
 			// RDF4JTriple

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/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
index a4e40c9..e204e77 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTripleLike.java
@@ -17,9 +17,6 @@
  */
 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;
 
@@ -34,7 +31,7 @@ import org.eclipse.rdf4j.model.Statement;
  * @see RDF4JTriple
  * @see RDF4JQuad
  */
-public interface RDF4JTripleLike extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm> {
+public interface RDF4JTripleLike extends TripleLike {
 	
 	/**
 	 * Return the corresponding RDF4J {@link Statement}.

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
index 6a1aae6..00388b9 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/AbstractRepositoryGraphLike.java
@@ -20,9 +20,6 @@ package org.apache.commons.rdf.rdf4j.impl;
 import java.util.Optional;
 import java.util.UUID;
 
-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.apache.commons.rdf.rdf4j.RDF4JGraphLike;
 import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
@@ -31,7 +28,7 @@ import org.eclipse.rdf4j.model.Statement;
 import org.eclipse.rdf4j.repository.Repository;
 import org.eclipse.rdf4j.repository.RepositoryConnection;
 
-abstract class AbstractRepositoryGraphLike<T extends TripleLike<BlankNodeOrIRI, IRI, RDFTerm>>
+abstract class AbstractRepositoryGraphLike<T extends TripleLike>
 		implements RDF4JGraphLike<T> {
 
 	protected final Repository repository;

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/6e694fce/src/site/markdown/userguide.md
----------------------------------------------------------------------
diff --git a/src/site/markdown/userguide.md b/src/site/markdown/userguide.md
index ab59292..33ca66a 100644
--- a/src/site/markdown/userguide.md
+++ b/src/site/markdown/userguide.md
@@ -40,6 +40,7 @@ Commons RDF [API](apidocs/).
             * [Types](#Types)
         * [Language](#Language)
 * [Triple](#Triple)
+* [Quad](#Quad)
 * [Graph](#Graph)
     * [Adding triples](#Adding_triples)
     * [Finding triples](#Finding_triples)
@@ -685,6 +686,18 @@ specified _equality semantics_ for
 [Literals](apidocs/org/apache/commons/rdf/api/Literal.html#equals-java.lang.Object-)
 and even [BlankNodes](apidocs/org/apache/commons/rdf/api/BlankNode.html#equals-java.lang.Object-).
 
+## Quad
+A _quad_ is a triple with an associated _graph name_, and can be a statement in a
+[dataset](http://www.w3.org/TR/rdf11-concepts/#section-dataset).
+
+Commons RDF represents such statements using the class [Quad](apidocs/org/apache/commons/rdf/api/Quad.html), which consists of:
+
+* The [subject](apidocs/org/apache/commons/rdf/api/Quad.html#getSubject--), which is an [IRI](apidocs/org/apache/commons/rdf/api/IRI.html) or a [BlankNode](apidocs/org/apache/commons/rdf/api/BlankNode.html)
+* The [predicate](apidocs/org/apache/commons/rdf/api/Quad.html#getPredicate--), which is an [IRI](apidocs/org/apache/commons/rdf/api/IRI.html)
+* The [object](apidocs/org/apache/commons/rdf/api/Quad.html#getObject--), which is an [IRI](apidocs/org/apache/commons/rdf/api/IRI.html), a [BlankNode](apidocs/org/apache/commons/rdf/api/BlankNode.html) or a [Literal](apidocs/org/apache/commons/rdf/api/Literal.html)
+* The [graph name](apidocs/org/apache/commons/rdf/api/Quad.html#getGraphName--), which is an [IRI](apidocs/org/apache/commons/rdf/api/IRI.html) or a [BlankNode](apidocs/org/apache/commons/rdf/api/BlankNode.html); wrapped as an `java.util.Optional`
+
+The graph name is represented as an [Optional](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true), where `Optional.empty()` indicates that the quad is in the [default graph](https://www.w3.org/TR/rdf11-concepts/#dfn-default-graph)
 
 ## Graph