This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 255f75b78c8cca5c376b77aeda18f53ce028b08b
Author: Andy Seaborne <[email protected]>
AuthorDate: Thu Dec 4 15:09:55 2025 +0000

    Add Quad.matches. Prefer Quad.create.
---
 .../org/apache/jena/riot/system/StreamRDFLib.java  |   2 +-
 .../apache/jena/sparql/algebra/op/OpQuadBlock.java |   2 +-
 .../jena/sparql/algebra/op/OpQuadPattern.java      |   2 +-
 .../apache/jena/sparql/core/DatasetGraphBase.java  |   4 +-
 .../jena/sparql/core/DatasetGraphBaseFind.java     |  16 +--
 .../java/org/apache/jena/sparql/core/Quad.java     |  88 +++++++++----
 .../org/apache/jena/sparql/core/Substitute.java    |   2 +-
 .../jena/sparql/core/mem/DatasetGraphInMemory.java |   2 +-
 .../jena/sparql/core/mem/OrderedTupleTable.java    |   2 +-
 .../apache/jena/sparql/graph/NodeTransformLib.java |   2 +-
 .../org/apache/jena/sparql/modify/TemplateLib.java |   4 +-
 .../jena/sparql/modify/request/QuadAccSink.java    |   2 +-
 .../jena/sparql/modify/request/QuadDataAcc.java    |   2 +-
 .../jena/sparql/sse/builders/BuilderGraph.java     |   2 +-
 .../org/apache/jena/sparql/syntax/Template.java    |   2 +-
 .../src/main/java/org/apache/jena/system/G.java    |   2 +-
 .../apache/jena/riot/lang/TestCollectorStream.java |   2 +-
 .../apache/jena/riot/lang/TestParserFactory.java   |   4 +-
 .../sparql/core/AbstractDatasetGraphTests.java     |   2 +-
 .../jena/sparql/core/DatasetGraphSimpleMem.java    |  10 +-
 .../org/apache/jena/sparql/core/TS_SparqlCore.java |   3 +-
 .../java/org/apache/jena/sparql/core/TestQuad.java | 136 +++++++++++++++++++++
 .../core/assembler/TestInMemDatasetAssembler.java  |   2 +-
 .../sparql/modify/AbstractTestUpdateGraph.java     |   6 +-
 .../org/apache/jena/sparql/util/TestFmtUtils.java  |   4 +-
 .../example/streaming/StreamRDFToConnection.java   |   2 +-
 .../jena/arq/querybuilder/UpdateBuilder.java       |   4 +-
 .../arq/querybuilder/rewriters/OpRewriter.java     |   2 +-
 .../updatebuilder/CollectionQuadHolder.java        |   2 +-
 .../updatebuilder/ModelQuadHolder.java             |   2 +-
 .../updatebuilder/QuadCollectionHolder.java        |   2 +-
 .../updatebuilder/QuadIteratorBuilder.java         |   2 +-
 .../updatebuilder/SingleQuadHolder.java            |   8 +-
 .../arq/querybuilder/AbstractQueryBuilderTest.java |  14 +--
 .../jena/arq/querybuilder/ConvertersTest.java      |   4 +-
 .../jena/arq/querybuilder/UpdateBuilderTest.java   |  20 +--
 .../updatebuilder/CollectionQuadHolderTest.java    |  32 ++---
 .../updatebuilder/ModelQuadHolderTest.java         |   8 +-
 .../updatebuilder/QBQuadHolderTest.java            |  24 ++--
 .../updatebuilder/SingleQuadHolderTest.java        |  12 +-
 .../updatebuilder/WhereQuadHolderTest.java         |  24 ++--
 .../jena/query/text/changes/ChangesBatched.java    |   2 +-
 .../jena/query/text/changes/ChangesCapture.java    |   2 +-
 43 files changed, 321 insertions(+), 150 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java 
b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
index 4c71f3b70c..c0027b0963 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
@@ -147,7 +147,7 @@ public class StreamRDFLib
         { super(base); this.gn = gn; }
 
         @Override public void triple(Triple triple)
-        { other.quad(new Quad(gn, triple)); }
+        { other.quad(Quad.create(gn, triple)); }
     }
 
     private static class ParserOutputSinkTriples extends StreamRDFBase
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadBlock.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadBlock.java
index 59e614ebef..f1cf632996 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadBlock.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadBlock.java
@@ -61,7 +61,7 @@ public class OpQuadBlock extends Op0
     public static OpQuadBlock create(Node quadNode, BasicPattern triples) {
         QuadPattern qp = new QuadPattern();
         for ( Triple t : triples ) {
-            qp.add(new Quad(quadNode, t));
+            qp.add(Quad.create(quadNode, t));
         }
         return new OpQuadBlock(qp);
     }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadPattern.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadPattern.java
index 285eeab1bf..a62cfae32d 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadPattern.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpQuadPattern.java
@@ -60,7 +60,7 @@ public class OpQuadPattern extends Op0
         if ( quads == null ) {
             quads = new QuadPattern();
             for ( Triple t : triples )
-                quads.add(new Quad(graphNode, t));
+                quads.add(Quad.create(graphNode, t));
         }
     }
 
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBase.java
index 9a89e09c65..9cb98d41bc 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBase.java
@@ -91,9 +91,9 @@ abstract public class DatasetGraphBase implements DatasetGraph
     public void delete(Quad quad) { throw new 
UnsupportedOperationException("DatasetGraph.delete(Quad)") ; }
 
     @Override
-    public void add(Node g, Node s, Node p, Node o)     { add(new 
Quad(g,s,p,o)) ; }
+    public void add(Node g, Node s, Node p, Node o)     { 
add(Quad.create(g,s,p,o)) ; }
     @Override
-    public void delete(Node g, Node s, Node p, Node o)  { delete(new 
Quad(g,s,p,o)) ; }
+    public void delete(Node g, Node s, Node p, Node o)  { 
delete(Quad.create(g,s,p,o)) ; }
 
     @Override
     /** Simple implementation but done without assuming iterator.remove() */
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
index e58cf9e508..c004f9930d 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
@@ -27,19 +27,19 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.sparql.core.mem.DatasetGraphInMemory ;
 
-/** 
- * DatasetGraph framework.  
- * This class contains a convenience implementation of find that maps to a 
split between 
+/**
+ * DatasetGraph framework.
+ * This class contains a convenience implementation of find that maps to a 
split between
  * defaultGraph/named graphs.
  * @see DatasetGraphTriplesQuads
  * @see DatasetGraphCollection
  * @see DatasetGraphOne
  * @see DatasetGraphInMemory
  */
-abstract public class DatasetGraphBaseFind extends DatasetGraphBase 
+abstract public class DatasetGraphBaseFind extends DatasetGraphBase
 {
     protected DatasetGraphBaseFind() {}
-    
+
     /** Implementation of find based on splitting into triples (default graph) 
and quads (named graph) */
     @Override
     public Iterator<Quad> find(Node g, Node s, Node p, Node o) {
@@ -49,7 +49,7 @@ abstract public class DatasetGraphBaseFind extends 
DatasetGraphBase
             return findNG(g, s, p, o) ;
         return findAny(s, p, o) ;
     }
-    
+
     @Override
     public Iterator<Quad> findNG(Node g, Node s, Node p , Node o) {
         Iterator<Quad> qIter ;
@@ -104,7 +104,7 @@ abstract public class DatasetGraphBaseFind extends 
DatasetGraphBase
      * For example, it may be possible to avoid "distinct".
      */
     public Iterator<Quad> findQuadsInUnionGraph(Node s, Node p , Node o) {
-        return findUnionGraphTriples(s,p,o).map(t -> new Quad(Quad.unionGraph, 
t)).iterator() ;
+        return findUnionGraphTriples(s,p,o).map(t -> 
Quad.create(Quad.unionGraph, t)).iterator() ;
     }
 
     /** Find matches in the notional union of all named graphs - return as 
triples.
@@ -120,7 +120,7 @@ abstract public class DatasetGraphBaseFind extends 
DatasetGraphBase
 
     /** Find in a specific named graph - {@code g} is a ground term (IRI or 
bNode), not a wild card (or null). */
     protected abstract Iterator<Quad> findInSpecificNamedGraph(Node g, Node s, 
Node p , Node o) ;
-    
+
     /** Find in any named graph - return quads.
      * If a triple matches in two different graph, return a quad for each.
      * See {@link #findInUnionGraph} for matching without duplicate triples.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/Quad.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/Quad.java
index a04f2ed78c..9153035689 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/Quad.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/Quad.java
@@ -48,20 +48,22 @@ public class Quad implements Serializable
      *  (and the default graph when parsing N-Quads or TriG)
      *  Not for access to the default graph by name - use Quad.defaultGraphIRI.
      */
-    public static final Node tripleInQuad           =  null;
+    public static final Node tripleInQuad        =  null;
 
     /** A {@code Quad} that has a wildcard in all fields. */
     public static final Quad ANY = Quad.create( Node.ANY, Node.ANY, Node.ANY, 
Node.ANY );
 
     private final Node graph, subject, predicate, object;
 
-    public Quad(Node graph, Triple triple)
-    {
+    /** @deprecated Prefer {@link Quad#create(Node, Triple)}. */
+    @Deprecated
+    public Quad(Node graph, Triple triple) {
         this(graph, triple.getSubject(), triple.getPredicate(), 
triple.getObject());
     }
 
-    public Quad(Node g, Node s, Node p, Node o)
-    {
+    /** @deprecated Prefer {@link Quad#create(Node, Node, Node, Node)}. */
+    @Deprecated
+    public Quad(Node g, Node s, Node p, Node o) {
         // Null means it's a triple really.
 //        if ( g == null )
 //            throw new UnsupportedOperationException("Quad: graph cannot be 
null");
@@ -77,8 +79,40 @@ public class Quad implements Serializable
         this.object = o;
     }
 
-    public static Quad create(Node g, Node s, Node p, Node o)   { return new 
Quad(g,s,p,o); }
-    public static Quad create(Node g, Triple t)                 { return new 
Quad(g,t); }
+    /**
+     * Create a {@code Quad}. Nulls are not allowed for 
subject/predicate/object.
+     * <p>
+     * Null for graph means this is a triple, but for type checking reasons, 
it is
+     * being carried as a {@code Quad}.
+     */
+    public static Quad create(Node g, Node s, Node p, Node o) {
+        return new Quad(g, s, p, o);
+    }
+
+    /**
+     * Create a {@code Quad}. Nulls for for subject/predicate/object are 
converted to
+     * {@link Node#ANY}.
+     * <p>
+     * Null for graph means this is a triple, but for type checking
+     * reasons, it is being carried as a {@code Quad}.
+     */
+    public static Quad createMatch(Node g, Node s, Node p, Node o) {
+        return Quad.create(g, nullToAny(s), nullToAny(p), nullToAny(o));
+    }
+
+    public static Quad create(Node g, Triple t) {
+        Objects.requireNonNull(t);
+        return new Quad(g, t);
+    }
+
+    private static Node anyToNull( Node n )
+    { return Node.ANY.equals( n ) ? null : n; }
+
+    private static Node nullToAny( Node n )
+    { return n == null ? Node.ANY : n; }
+
+    private static boolean isAny(Node n)
+    { return n == null || Node.ANY.equals(n); }
 
     public final Node getGraph()      { return graph; }
     public final Node getSubject()    { return subject; }
@@ -86,13 +120,9 @@ public class Quad implements Serializable
     public final Node getObject()     { return object; }
 
     /**
-     * Get as a triple - useful because quads often come in blocks for the 
same graph
+     * Get the subject/predicate/object as a triple.
      */
     public Triple asTriple() {
-        // Should we keep the triple around esp from the Quad(n,triple) 
constructor.
-        // Still have s,p,o for quads.
-        // Cost : one slot.
-        // Saving - (re)creating triples.
         return Triple.create(subject, predicate, object);
     }
 
@@ -100,6 +130,30 @@ public class Quad implements Serializable
         return subject.isConcrete() && predicate.isConcrete() && 
object.isConcrete() && (graph == null || graph.isConcrete());
     }
 
+    /**
+     * Does this quad, match the other quad, allowing for wildcards.
+     * The wildcard node is {@link Node#ANY} and it matches any node, 
including a wildcard.
+     * Both this quad and the argument quad may contain wildcards,
+     * that is "matches" is symmetric:
+     * {@code this.matches(that) == that.matches(this)}.
+     */
+    public boolean matches(Quad other) {
+        return matches(other.getGraph(), other.getSubject(), 
other.getPredicate(), other.getObject());
+    }
+
+    public boolean matches(Node g, Node s, Node p, Node o) {
+        return matches(this.graph, g) && matches(this.subject, s) && 
matches(this.predicate, p) && matches(this.object, o);
+    }
+
+    /** Match with possible wildcards (Node.ANY) in either argument. */
+    private static boolean matches(Node patternNode, Node node) {
+        if ( isAny(patternNode) )
+            return true;
+        if ( isAny(node) )
+            return true;
+        return patternNode.sameTermAs(node);
+    }
+
     /**
      * Test whether this is a quad for the default graph (not the default 
graphs by
      * explicit name)
@@ -220,16 +274,6 @@ public class Quad implements Serializable
         return true;
     }
 
-    public boolean matches(Node g, Node s, Node p, Node o) {
-        return nodeMatches(getGraph(), g) && nodeMatches(getSubject(), s) &&
-               nodeMatches(getPredicate(), p) && nodeMatches(getObject(), o);
-    }
-
-    private static boolean nodeMatches(Node thisNode, Node otherNode) {
-        // otherNode may be Node.ANY, and this works out.
-        return otherNode.matches(thisNode);
-    }
-
     @Override
     public String toString() {
         String str = (graph==null)?"_":graph.toString();
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/Substitute.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/Substitute.java
index e0a71b7aab..1b5bc5b845 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/Substitute.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/Substitute.java
@@ -153,7 +153,7 @@ public class Substitute {
 
         Quad q = quad;
         if ( s1 != s || p1 != p || o1 != o || g1 != g )
-            q = new Quad(g1, s1, p1, o1);
+            q = Quad.create(g1, s1, p1, o1);
         return q;
     }
 
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
index 7d0dc6935b..dee92c584f 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
@@ -346,7 +346,7 @@ public class DatasetGraphInMemory extends 
DatasetGraphTriplesQuads implements Tr
     }
 
     private Consumer<Graph> addGraph(final Node name) {
-        return g -> g.find().mapWith(t -> new Quad(name, 
t)).forEach(this::add);
+        return g -> g.find().mapWith(t -> Quad.create(name, 
t)).forEach(this::add);
     }
 
     private final Consumer<Graph> removeGraph = g -> 
g.find().forEach(g::delete);
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/OrderedTupleTable.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/OrderedTupleTable.java
index c3c1bb20e6..7114cd5450 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/OrderedTupleTable.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/OrderedTupleTable.java
@@ -82,7 +82,7 @@ public abstract class OrderedTupleTable<TupleType, 
ConsumerType> implements Tupl
     }
 
     protected Quad unmap(final Node x1, final Node x2, final Node x3, final 
Node x4) {
-        return apply(reverse, x1, x2, x3, x4, Quad::new);
+        return apply(reverse, x1, x2, x3, x4, Quad::create);
     }
 
     protected Consumer<Triple> map(final TConsumer3<Node> consumer) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/graph/NodeTransformLib.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/graph/NodeTransformLib.java
index cd7435b6bd..dd5ef41203 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/graph/NodeTransformLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/graph/NodeTransformLib.java
@@ -150,7 +150,7 @@ public class NodeTransformLib {
 
         if ( !change )
             return quad;
-        return new Quad(g, s, p, o);
+        return Quad.create(g, s, p, o);
     }
 
     public static Table transform(Table table, NodeTransform transform) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/TemplateLib.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/TemplateLib.java
index bf2026174f..c89d959079 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/TemplateLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/TemplateLib.java
@@ -61,7 +61,7 @@ public class TemplateLib {
         if ( dftGraph == null || Quad.isDefaultGraph(dftGraph) )
             return quads ;
         Stream<Quad> remappedStream = quads.stream().map(q->
-            !q.isDefaultGraph() ? q : new Quad(dftGraph, q.getSubject(), 
q.getPredicate(), q.getObject())
+            !q.isDefaultGraph() ? q : Quad.create(dftGraph, q.getSubject(), 
q.getPredicate(), q.getObject())
         ) ;
         return remappedStream.toList();
     }
@@ -144,7 +144,7 @@ public class TemplateLib {
 
         Quad q = quad;
         if ( s1 != s || p1 != p || o1 != o || g1 != g )
-            q = new Quad(g1, s1, p1, o1);
+            q = Quad.create(g1, s1, p1, o1);
 
         Quad q2 = Substitute.substitute(q, b);
         return q2;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAccSink.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAccSink.java
index 52df7bac72..7be7cc4140 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAccSink.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAccSink.java
@@ -57,7 +57,7 @@ public class QuadAccSink implements TripleCollector, Closeable
     public void addTriple(Triple triple)
     {
         check(triple) ;
-        sink.send(new Quad(graphNode, triple)) ;
+        sink.send(Quad.create(graphNode, triple)) ;
     }
 
     @Override
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadDataAcc.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadDataAcc.java
index 4d992e1e14..8cf113401f 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadDataAcc.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadDataAcc.java
@@ -67,7 +67,7 @@ public class QuadDataAcc extends QuadDataAccSink implements 
TripleCollectorMark
     @Override
     public void addTriple(int index, Triple triple) {
         check(triple);
-        quads.add(index, new Quad(graphNode, triple));
+        quads.add(index, Quad.create(graphNode, triple));
     }
 
     @Override
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderGraph.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderGraph.java
index d25b79bf5c..6497ea0e8b 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderGraph.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/sse/builders/BuilderGraph.java
@@ -208,6 +208,6 @@ public class BuilderGraph {
         Node s = BuilderNode.buildNode(list.get(1));
         Node p = BuilderNode.buildNode(list.get(2));
         Node o = BuilderNode.buildNode(list.get(3));
-        return new Quad(g, s, p, o);
+        return Quad.create(g, s, p, o);
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index bc5ab33ff5..fc74e713a9 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -85,7 +85,7 @@ public class Template {
         if ( this.bgp != null ) {
             List<Quad> quads = new ArrayList<>();
             for ( Triple triple : this.bgp.getList() ) {
-                quads.add(new Quad(Quad.defaultGraphNodeGenerated, triple));
+                quads.add(Quad.create(Quad.defaultGraphNodeGenerated, triple));
             }
             return quads;
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/system/G.java 
b/jena-arq/src/main/java/org/apache/jena/system/G.java
index 5f774dd433..5f39ce193a 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/G.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/G.java
@@ -937,7 +937,7 @@ public class G {
 
     /** Convert an iterator of triples into quads for the specified graph 
name. */
     public static Iter<Quad> triples2quads(Node graphNode, Iterator<Triple> 
iter) {
-        return Iter.iter(iter).map(t -> new Quad(graphNode, t));
+        return Iter.iter(iter).map(t -> Quad.create(graphNode, t));
     }
 
     /**
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestCollectorStream.java 
b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestCollectorStream.java
index 0286c2a95a..a5601f8572 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestCollectorStream.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestCollectorStream.java
@@ -56,7 +56,7 @@ public class TestCollectorStream {
         List<Quad> results = new ArrayList<>();
         out.start();
         for ( int i = 1; i <= size; i++ ) {
-            Quad q = new Quad(NodeFactory.createURI("http://graph";), 
NodeFactory.createBlankNode(),
+            Quad q = Quad.create(NodeFactory.createURI("http://graph";), 
NodeFactory.createBlankNode(),
                               NodeFactory.createURI("http://predicate";), 
NodeFactoryExtra.intToNode(i));
             out.quad(q);
             results.add(q);
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java 
b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
index e49405269a..4d313c0600 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
@@ -112,7 +112,7 @@ public class TestParserFactory
         assertEquals(1, sink.quads.size());
 
         Triple t = SSE.parseTriple("(<x> <p> <q>)");
-        Quad q = new Quad(Quad.defaultGraphNodeGenerated, t);
+        Quad q = Quad.create(Quad.defaultGraphNodeGenerated, t);
         assertEquals(q, last(sink.quads));
     }
 
@@ -127,7 +127,7 @@ public class TestParserFactory
         assertEquals(1, sink.quads.size());
 
         Triple t = SSE.parseTriple("(<http://base/x> <http://base/p> 
<http://base/q>)");
-        Quad q = new Quad(Quad.defaultGraphNodeGenerated, t);
+        Quad q = Quad.create(Quad.defaultGraphNodeGenerated, t);
         assertEquals(q, last(sink.quads));
     }
 
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/AbstractDatasetGraphTests.java
 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/AbstractDatasetGraphTests.java
index d8ae116cc1..dd92e26e2e 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/AbstractDatasetGraphTests.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/AbstractDatasetGraphTests.java
@@ -296,7 +296,7 @@ public abstract class AbstractDatasetGraphTests
         Node subject = NodeFactory.createURI("http://example/s";);
         Node predicate = NodeFactory.createURI("http://example/p";);
         Node object = NodeFactory.createBlankNode();
-        dsg.add(new Quad(Quad.defaultGraphIRI, subject, predicate, object));
+        dsg.add(Quad.create(Quad.defaultGraphIRI, subject, predicate, object));
         dsg.deleteAny(Node.ANY, subject, null, null);
     }
 
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/DatasetGraphSimpleMem.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/DatasetGraphSimpleMem.java
index 88bd4557eb..827a5a0368 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/DatasetGraphSimpleMem.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/DatasetGraphSimpleMem.java
@@ -94,7 +94,7 @@ public class DatasetGraphSimpleMem extends 
DatasetGraphTriplesQuads implements T
             if ( matches(t, s, p, o) )
                 // ?? Quad.defaultGraphNodeGenerated
                 // Quad.defaultGraphIRI
-                results.add(new Quad(Quad.defaultGraphIRI, t));
+                results.add(Quad.create(Quad.defaultGraphIRI, t));
         return results.iterator();
     }
 
@@ -139,7 +139,7 @@ public class DatasetGraphSimpleMem extends 
DatasetGraphTriplesQuads implements T
 
     @Override
     protected void addToNamedGraph(Node g, Node s, Node p, Node o) {
-        Quad q = new Quad(g, s, p, o);
+        Quad q = Quad.create(g, s, p, o);
         quads.add(q);
     }
 
@@ -150,7 +150,7 @@ public class DatasetGraphSimpleMem extends 
DatasetGraphTriplesQuads implements T
 
     @Override
     protected void deleteFromNamedGraph(Node g, Node s, Node p, Node o) {
-        quads.remove(new Quad(g, s, p, o));
+        quads.remove(Quad.create(g, s, p, o));
     }
 
     class GraphDft extends GraphBase {
@@ -183,13 +183,13 @@ public class DatasetGraphSimpleMem extends 
DatasetGraphTriplesQuads implements T
 
         @Override
         public void performAdd(Triple t) {
-            Quad q = new Quad(graphName, t);
+            Quad q = Quad.create(graphName, t);
             quads.add(q);
         }
 
         @Override
         public void performDelete(Triple t) {
-            Quad q = new Quad(graphName, t);
+            Quad q = Quad.create(graphName, t);
             quads.remove(q);
         }
 
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/TS_SparqlCore.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/TS_SparqlCore.java
index 3ea561bfb4..836cb95a9e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/TS_SparqlCore.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/TS_SparqlCore.java
@@ -23,7 +23,8 @@ import org.junit.platform.suite.api.Suite;
 
 @Suite
 @SelectClasses({
-    TestContext.class
+    TestQuad.class
+    , TestContext.class
     , TestDatasetGraphMem.class
     , TestDatasetGraphMemTriplesQuads.class
     , TestDatasetGeneral.class
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/TestQuad.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestQuad.java
new file mode 100644
index 0000000000..746e627e6f
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestQuad.java
@@ -0,0 +1,136 @@
+/*
+ * 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.jena.sparql.core;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+import org.apache.jena.graph.Node;
+import org.apache.jena.sparql.sse.SSE;
+
+public class TestQuad {
+    private static Node g1 = SSE.parseNode(":g1");
+    private static Node s1 = SSE.parseNode(":s1");
+    private static Node p1 = SSE.parseNode(":p1");
+    private static Node o1 = SSE.parseNode(":o1");
+
+    private static Node g2 = SSE.parseNode(":g2");
+    private static Node s2 = SSE.parseNode(":s2");
+    private static Node p2 = SSE.parseNode(":p2");
+    private static Node o2 = SSE.parseNode(":o2");
+
+
+    @Test public void quad_01() {
+        Quad quad = Quad.create(g1, s1, p1, o1);
+        assertEquals(g1, quad.getGraph());
+        assertEquals(s1, quad.getSubject());
+        assertEquals(p1, quad.getPredicate());
+        assertEquals(o1, quad.getObject());
+    }
+
+    @Test public void quad_02() {
+        Quad quad = Quad.create(null, s1, p1, o1);
+        assertEquals(null, quad.getGraph());
+        assertThrows(UnsupportedOperationException.class, ()->Quad.create(g1, 
null, p1, o1));
+        assertThrows(UnsupportedOperationException.class, ()->Quad.create(g1, 
s1, null, o1));
+        assertThrows(UnsupportedOperationException.class, ()->Quad.create(g1, 
s1, p1, null));
+    }
+
+    @Test public void quad_03() {
+        Quad quad = Quad.createMatch(null, null, null, null);
+        assertEquals(null, quad.getGraph());
+        assertEquals(Node.ANY, quad.getSubject());
+        assertEquals(Node.ANY, quad.getPredicate());
+        assertEquals(Node.ANY, quad.getObject());
+    }
+
+    @Test public void quad_match_01() {
+        Quad quad = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g1, s1, p1, o1);
+        assertTrue(mq.matches(quad));
+        assertTrue(quad.matches(mq));
+    }
+
+    @Test public void quad_match_02() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g2, s2, p2, o2);
+        assertFalse(mq.matches(quad1));
+        assertFalse(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_10() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(Node.ANY, s1, p1, o1);
+        assertTrue(mq.matches(quad1));
+        assertTrue(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_11() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g1, Node.ANY, p1, o1);
+        assertTrue(mq.matches(quad1));
+        assertTrue(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_12() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g1, s1, Node.ANY, o1);
+        assertTrue(mq.matches(quad1));
+        assertTrue(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_13() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g1, s1, p1, Node.ANY);
+        assertTrue(mq.matches(quad1));
+        assertTrue(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_20() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(Node.ANY, s2, p1, o1);
+        assertFalse(mq.matches(quad1));
+        assertFalse(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_21() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g2, Node.ANY, p1, o1);
+        assertFalse(mq.matches(quad1));
+        assertFalse(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_22() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g1, s1, Node.ANY, o2);
+        assertFalse(mq.matches(quad1));
+        assertFalse(quad1.matches(mq));
+    }
+
+    @Test public void quad_match_23() {
+        Quad quad1 = Quad.create(g1, s1, p1, o1);
+        Quad mq = Quad.create(g2, s1, p1, Node.ANY);
+        assertFalse(mq.matches(quad1));
+        assertFalse(quad1.matches(mq));
+    }
+}
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
index 10e391084d..6aee12373c 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/sparql/core/assembler/TestInMemDatasetAssembler.java
@@ -140,7 +140,7 @@ public class TestInMemDatasetAssembler {
         final DatasetGraph dsg = DatasetGraphFactory.createTxnMem();
         model.listStatements()
             .mapWith(Statement::asTriple)
-            .mapWith(t -> new Quad(quadsURI.asNode(), t))
+            .mapWith(t -> Quad.create(quadsURI.asNode(), t))
             .forEachRemaining(dsg::add);
         try (OutputStream out = new FileOutputStream(quads)) {
             write(out, dsg, NQUADS);
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/modify/AbstractTestUpdateGraph.java
 
b/jena-arq/src/test/java/org/apache/jena/sparql/modify/AbstractTestUpdateGraph.java
index 0c4d8ff7ed..1dc49a782e 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/sparql/modify/AbstractTestUpdateGraph.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/sparql/modify/AbstractTestUpdateGraph.java
@@ -124,7 +124,7 @@ public abstract class AbstractTestUpdateGraph extends 
AbstractTestUpdateBase
         DatasetGraph gStore = getEmptyDatasetGraph();
         gStore.addGraph(graphIRI, GraphMemFactory.createDefaultGraph());
         UpdateModify insert = new UpdateModify();
-        insert.getInsertAcc().addQuad(new Quad(graphIRI, triple1));
+        insert.getInsertAcc().addQuad(Quad.create(graphIRI, triple1));
         UpdateAction.execute(insert, gStore);
         assertTrue(graphContains(gStore.getGraph(graphIRI), triple1));
     }
@@ -211,7 +211,7 @@ public abstract class AbstractTestUpdateGraph extends 
AbstractTestUpdateBase
         UpdateModify modify = new UpdateModify();
         Element element = QueryFactory.createElement("{ ?s <http://example/p> 
?o }");
         modify.setElement(element);
-        modify.getInsertAcc().addQuad(new Quad(graphIRI, triple1));
+        modify.getInsertAcc().addQuad(Quad.create(graphIRI, triple1));
         modify.getDeleteAcc().addTriple(SSE.parseTriple("(?s 
<http://example/p> ?o)"));
         modify.getDeleteAcc().addQuad(SSE.parseQuad("(<http://example/graph> 
?s <http://example/p> ?o)"));
         UpdateAction.execute(modify, gStore);
@@ -237,7 +237,7 @@ public abstract class AbstractTestUpdateGraph extends 
AbstractTestUpdateBase
         UpdateModify modify = new UpdateModify();
         Element element = QueryFactory.createElement("{ ?s <http://example/p> 
?o }");
         modify.setElement(element);
-        modify.getInsertAcc().addQuad(new Quad(graphIRI, triple1));
+        modify.getInsertAcc().addQuad(Quad.create(graphIRI, triple1));
         modify.getDeleteAcc().addTriple(SSE.parseTriple("(?s 
<http://example/p> ?o)"));
         modify.getDeleteAcc().addQuad(SSE.parseQuad("(<http://example/graph> 
?s <http://example/p> ?o)"));
         UpdateAction.execute(modify, gStore);
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestFmtUtils.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestFmtUtils.java
index 7ce515386c..8cb1be14cf 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestFmtUtils.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestFmtUtils.java
@@ -60,7 +60,7 @@ public class TestFmtUtils
     public void stringForQuadEncoding() {
         Node n1 = NodeFactory.createURI("q1");
 
-        Quad quad = new Quad(n1, getTriple());
+        Quad quad = Quad.create(n1, getTriple());
         assertEquals("<q1> <n1> <n2> \"l3\"", stringForQuad(quad));
 
     }
@@ -69,7 +69,7 @@ public class TestFmtUtils
     public void stringForQuad_WithPrefixMapping() {
         Node n1 = NodeFactory.createURI("q1");
 
-        Quad quad = new Quad(n1, getPrefixedTriple());
+        Quad quad = Quad.create(n1, getPrefixedTriple());
         assertEquals("<q1> zz:abs <n2> \"l3\"", stringForQuad(quad, 
getPrefixMapping()));
     }
 
diff --git 
a/jena-examples/src/main/java/org/apache/jena/example/streaming/StreamRDFToConnection.java
 
b/jena-examples/src/main/java/org/apache/jena/example/streaming/StreamRDFToConnection.java
index dcc2d14a2f..3dc50b29a6 100644
--- 
a/jena-examples/src/main/java/org/apache/jena/example/streaming/StreamRDFToConnection.java
+++ 
b/jena-examples/src/main/java/org/apache/jena/example/streaming/StreamRDFToConnection.java
@@ -136,7 +136,7 @@ public class StreamRDFToConnection implements StreamRDF {
         Statement stmt2 = new StatementImpl(s, RDF.type, t);
         stream.start();
         stream.triple(stmt1.asTriple());
-        stream.quad(new Quad(g.asNode(), stmt2.asTriple()));
+        stream.quad(Quad.create(g.asNode(), stmt2.asTriple()));
         stream.finish();
 
         System.out.println("Contains model 'g': " + 
dataset.containsNamedModel("g"));
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
index c572ab9dcc..9e3e821746 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
@@ -414,7 +414,7 @@ public class UpdateBuilder {
      * @return this builder for chaining.
      */
     public UpdateBuilder addInsert(Object g, Triple t) {
-        Quad q = new Quad(makeNode(g), t);
+        Quad q = Quad.create(makeNode(g), t);
         inserts.add(new SingleQuadHolder(q));
         return this;
     }
@@ -617,7 +617,7 @@ public class UpdateBuilder {
      * @return this builder for chaining.
      */
     public UpdateBuilder addDelete(Object g, Triple t) {
-        Quad q = new Quad(makeNode(g), t);
+        Quad q = Quad.create(makeNode(g), t);
         deletes.add(new SingleQuadHolder(q));
         return this;
     }
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
index eafdb85faf..b4fac4dd32 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/rewriters/OpRewriter.java
@@ -51,7 +51,7 @@ class OpRewriter extends AbstractRewriter<Op> implements 
OpVisitor {
     }
 
     private Quad rewrite(Quad q) {
-        return new Quad(changeNode(q.getGraph()), changeNode(q.getSubject()), 
changeNode(q.getPredicate()),
+        return Quad.create(changeNode(q.getGraph()), 
changeNode(q.getSubject()), changeNode(q.getPredicate()),
                 changeNode(q.getObject()));
     }
 
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
index 4511a0f73f..e9a9dd2682 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
@@ -94,7 +94,7 @@ public class CollectionQuadHolder implements QuadHolder {
         return WrappedIterator
                 .create(collection.iterator()).mapWith(triple -> 
Triple.create(valueMap(triple.getSubject()),
                         valueMap(triple.getPredicate()), 
valueMap(triple.getObject())))
-                .mapWith(triple -> new Quad(defaultGraphName, triple));
+                .mapWith(triple -> Quad.create(defaultGraphName, triple));
     }
 
     /**
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolder.java
index b5d9284bce..c33633e6d4 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolder.java
@@ -57,7 +57,7 @@ public class ModelQuadHolder implements QuadHolder {
 
     @Override
     public ExtendedIterator<Quad> getQuads() {
-        return model.listStatements().mapWith(stmt -> new 
Quad(defaultGraphName, stmt.asTriple()));
+        return model.listStatements().mapWith(stmt -> 
Quad.create(defaultGraphName, stmt.asTriple()));
     }
 
     /**
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadCollectionHolder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadCollectionHolder.java
index 5cf55acba6..7b1c79a668 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadCollectionHolder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadCollectionHolder.java
@@ -67,7 +67,7 @@ public class QuadCollectionHolder implements QuadHolder {
         ExtendedIterator<Quad> retval = 
WrappedIterator.create(collection.iterator());
 
         if (values != null) {
-            retval = retval.mapWith(q -> new Quad(valueMap(q.getGraph()), 
valueMap(q.getSubject()),
+            retval = retval.mapWith(q -> Quad.create(valueMap(q.getGraph()), 
valueMap(q.getSubject()),
                     valueMap(q.getPredicate()), valueMap(q.getObject())));
         }
         return retval;
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
index 98bb3a18b9..b2acda6b33 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
@@ -45,7 +45,7 @@ class QuadIteratorBuilder implements ElementVisitor {
 
         @Override
         public Quad apply(Triple triple) {
-            return new Quad(defaultGraph, 
Converters.checkVar(triple.getSubject()),
+            return Quad.create(defaultGraph, 
Converters.checkVar(triple.getSubject()),
                     Converters.checkVar(triple.getPredicate()), 
Converters.checkVar(triple.getObject()));
         }
     };
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
index 0e8aa8ec1c..9f91712329 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
@@ -43,7 +43,7 @@ public class SingleQuadHolder implements QuadHolder {
     public SingleQuadHolder(Quad quad) {
         if (quad.getGraph().isVariable() || quad.getSubject().isVariable() || 
quad.getPredicate().isVariable()
                 || quad.getObject().isVariable()) {
-            this.quad = new Quad(Converters.checkVar(quad.getGraph()), 
Converters.checkVar(quad.getSubject()),
+            this.quad = Quad.create(Converters.checkVar(quad.getGraph()), 
Converters.checkVar(quad.getSubject()),
                     Converters.checkVar(quad.getPredicate()), 
Converters.checkVar(quad.getObject()));
         } else {
             this.quad = quad;
@@ -58,7 +58,7 @@ public class SingleQuadHolder implements QuadHolder {
      * @param triple the triple to convert to a quad.
      */
     public SingleQuadHolder(Triple triple) {
-        this.quad = new Quad(Quad.defaultGraphNodeGenerated, 
Converters.checkVar(triple.getSubject()),
+        this.quad = Quad.create(Quad.defaultGraphNodeGenerated, 
Converters.checkVar(triple.getSubject()),
                 Converters.checkVar(triple.getPredicate()), 
Converters.checkVar(triple.getObject()));
     }
 
@@ -69,7 +69,7 @@ public class SingleQuadHolder implements QuadHolder {
      * @param triple the triple to convert to a quad.
      */
     public SingleQuadHolder(Node graph, Triple triple) {
-        this.quad = new Quad(graph, triple);
+        this.quad = Quad.create(graph, triple);
     }
 
     @Override
@@ -89,7 +89,7 @@ public class SingleQuadHolder implements QuadHolder {
 
     @Override
     public QuadHolder setValues(Map<Var, Node> values) {
-        updated = new Quad(mapValue(quad.getGraph(), values), 
mapValue(quad.getSubject(), values),
+        updated = Quad.create(mapValue(quad.getGraph(), values), 
mapValue(quad.getSubject(), values),
                 mapValue(quad.getPredicate(), values), 
mapValue(quad.getObject(), values));
         return this;
     }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
index 029018c04c..0c864c6f00 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
@@ -136,16 +136,6 @@ public class AbstractQueryBuilderTest {
 
     }
 
-    private void assertTripleMatch(Triple expected, Triple actual) {
-        if (!expected.matches(actual)) {
-            fail("expected: "+expected+" actual: "+actual);
-        }
-    }
-
-    private void assertTripleMatch(Triple expected, TriplePath actual) {
-        assertTripleMatch(expected, actual.asTriple());
-    }
-
     @Test
     public void testMakeTriplePaths() {
         List<Object> list = new ArrayList<Object>();
@@ -155,6 +145,7 @@ public class AbstractQueryBuilderTest {
         list.add("<one>");
         list.add(Integer.valueOf(5));
 
+        // ANY for the blank nodes.
         Triple[] expected = {
             Triple.create(Node.ANY, RDF.first.asNode(), RDF.type.asNode()),
             Triple.create(Node.ANY, RDF.rest.asNode(), Node.ANY),
@@ -171,8 +162,7 @@ public class AbstractQueryBuilderTest {
 
         assertEquals(expected.length, result.size());
         for (int i=0;i<expected.length;i++) {
-            assertTripleMatch( expected[i], result.get(i));
+            expected[i].matches(result.get(i).asTriple());
         }
     }
-
 }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
index 4e70db7973..71c8cb66eb 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
@@ -376,8 +376,8 @@ public class ConvertersTest {
         if (expected.isTriple()) {
             assertTrue(expected.asTriple().matches(asTriple(actual)), errMsg);
         } else {
-            
assertTrue(expected.getSubject().matches(asTriplePath(actual).getSubject()), 
errMsg);
-            
assertTrue(expected.getObject().matches(asTriplePath(actual).getObject()), 
errMsg);
+            
assertTrue(expected.getSubject().sameTermAs(asTriplePath(actual).getSubject()), 
errMsg);
+            
assertTrue(expected.getObject().sameTermAs(asTriplePath(actual).getObject()), 
errMsg);
             
assertTrue(expected.getPath().equalTo(asTriplePath(actual).getPath(), new 
NodeIsomorphismMap()), errMsg);
         }
     }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/UpdateBuilderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/UpdateBuilderTest.java
index 5e86ac3c2f..c7d9ae8d85 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/UpdateBuilderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/UpdateBuilderTest.java
@@ -131,7 +131,7 @@ public class UpdateBuilderTest {
     @Test
     public void testInsert_Quad() {
         UpdateBuilder builder = new UpdateBuilder();
-        builder.addInsert(new Quad(g, s, p, o));
+        builder.addInsert(Quad.create(g, s, p, o));
         Update update = builder.build();
         assertTrue(update instanceof UpdateDataInsert);
         UpdateDataInsert udi = (UpdateDataInsert) update;
@@ -149,14 +149,14 @@ public class UpdateBuilderTest {
         UpdateBuilder builder = new UpdateBuilder();
         Collection<Quad> quads = new ArrayList<Quad>();
 
-        quads.add(new Quad(g, s, p, o));
+        quads.add(Quad.create(g, s, p, o));
 
         Node g2 = NodeFactory.createURI("http://example.com/graph2";);
         Node s2 = NodeFactory.createURI("http://example.com/subject2";);
         Node p2 = NodeFactory.createURI("http://example.com/predicate2";);
         Node o2 = NodeFactory.createURI("http://example.com/object2";);
 
-        quads.add(new Quad(g2, s2, p2, o2));
+        quads.add(Quad.create(g2, s2, p2, o2));
 
         builder.addInsertQuads(quads);
         Update update = builder.build();
@@ -266,7 +266,7 @@ public class UpdateBuilderTest {
     public void testDelete_Quad() {
 
         UpdateBuilder builder = new UpdateBuilder();
-        builder.addDelete(new Quad(g, s, p, o));
+        builder.addDelete(Quad.create(g, s, p, o));
         Update update = builder.build();
         assertTrue(update instanceof UpdateDataDelete);
         UpdateDataDelete udd = (UpdateDataDelete) update;
@@ -284,14 +284,14 @@ public class UpdateBuilderTest {
         UpdateBuilder builder = new UpdateBuilder();
         Collection<Quad> quads = new ArrayList<Quad>();
 
-        quads.add(new Quad(g, s, p, o));
+        quads.add(Quad.create(g, s, p, o));
 
         Node g2 = NodeFactory.createURI("http://example.com/graph2";);
         Node s2 = NodeFactory.createURI("http://example.com/subject2";);
         Node p2 = NodeFactory.createURI("http://example.com/predicate2";);
         Node o2 = NodeFactory.createURI("http://example.com/object2";);
 
-        quads.add(new Quad(g2, s2, p2, o2));
+        quads.add(Quad.create(g2, s2, p2, o2));
 
         builder.addDeleteQuads(quads);
         Update update = builder.build();
@@ -333,7 +333,7 @@ public class UpdateBuilderTest {
     @Test
     public void testInsertAndDelete() {
         UpdateBuilder builder = new UpdateBuilder();
-        builder.addInsert(new Quad(g, s, p, o));
+        builder.addInsert(Quad.create(g, s, p, o));
         builder.addDelete(Triple.create(s, p, o));
         builder.addWhere(null, p, "foo");
         Update update = builder.build();
@@ -371,7 +371,7 @@ public class UpdateBuilderTest {
         UpdateBuilder builder = new UpdateBuilder();
         Var v = Var.alloc("v");
 
-        builder.addInsert(new Quad(g, s, v, o));
+        builder.addInsert(Quad.create(g, s, v, o));
         builder.addDelete(Triple.create(s, v, o));
         builder.addWhere(null, v, "foo");
         builder.setVar(v, p);
@@ -410,7 +410,7 @@ public class UpdateBuilderTest {
         UpdateBuilder builder = new UpdateBuilder();
         Node v = NodeFactory.createVariable("v");
 
-        builder.addInsert(new Quad(g, s, v, o));
+        builder.addInsert(Quad.create(g, s, v, o));
         builder.addDelete(Triple.create(s, v, o));
         builder.addWhere(null, v, "foo");
         builder.setVar(v, p);
@@ -449,7 +449,7 @@ public class UpdateBuilderTest {
         UpdateBuilder builder = new UpdateBuilder();
         Node v = NodeFactory.createVariable("v");
 
-        builder.addInsert(new Quad(g, s, v, o));
+        builder.addInsert(Quad.create(g, s, v, o));
         builder.addDelete(Triple.create(s, v, o));
         builder.addWhere(null, v, "foo");
 
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolderTest.java
index b43b738d98..b59b849da8 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolderTest.java
@@ -55,8 +55,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -85,8 +85,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, aLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, aLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, aLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, aLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -108,8 +108,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -139,8 +139,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, aLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, aLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, aLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, aLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -161,8 +161,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -189,8 +189,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, aLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, aLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, aLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, aLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -211,8 +211,8 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -239,7 +239,7 @@ public class CollectionQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, aLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, aLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, aLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, aLst.get(1)), 
lst.get(1));
     }
 }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolderTest.java
index 20fc65eaac..37d16c7810 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/ModelQuadHolderTest.java
@@ -57,10 +57,10 @@ public class ModelQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        Quad q = new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0));
+        Quad q = Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0));
         assertTrue(lst.contains(q), "missing " + q);
 
-        q = new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1));
+        q = Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1));
         assertTrue(lst.contains(q), "missing " + q);
     }
 
@@ -86,10 +86,10 @@ public class ModelQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        Quad q = new Quad(g, tLst.get(0));
+        Quad q = Quad.create(g, tLst.get(0));
         assertTrue(lst.contains(q), "missing " + q);
 
-        q = new Quad(g, tLst.get(1));
+        q = Quad.create(g, tLst.get(1));
         assertTrue(lst.contains(q), "missing " + q);
     }
 }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/QBQuadHolderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/QBQuadHolderTest.java
index 138bee41af..2351e9519f 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/QBQuadHolderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/QBQuadHolderTest.java
@@ -58,8 +58,8 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -87,8 +87,8 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -115,8 +115,8 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -147,8 +147,8 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -174,8 +174,8 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -205,7 +205,7 @@ public class QBQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 }
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolderTest.java
index 248dca25c5..71669b4ad7 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolderTest.java
@@ -41,7 +41,7 @@ public class SingleQuadHolderTest {
         Node s = NodeFactory.createURI("s");
         Node p = NodeFactory.createURI("p");
         Node o = NodeFactory.createURI("o");
-        Quad quad = new Quad(g, s, p, o);
+        Quad quad = Quad.create(g, s, p, o);
         holder = new SingleQuadHolder(quad);
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
@@ -54,7 +54,7 @@ public class SingleQuadHolderTest {
         Node s = NodeFactory.createURI("s");
         Node p = NodeFactory.createVariable("p");
         Node o = NodeFactory.createURI("o");
-        Quad quad = new Quad(g, s, p, o);
+        Quad quad = Quad.create(g, s, p, o);
         holder = new SingleQuadHolder(quad);
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
@@ -64,7 +64,7 @@ public class SingleQuadHolderTest {
         Node p2 = NodeFactory.createURI("p2");
         map.put(Var.alloc(p), p2);
         holder.setValues(map);
-        Quad quad2 = new Quad(g, s, p2, o);
+        Quad quad2 = Quad.create(g, s, p2, o);
         lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
         assertEquals(quad2, lst.get(0));
@@ -77,7 +77,7 @@ public class SingleQuadHolderTest {
         Node p = NodeFactory.createURI("p");
         Node o = NodeFactory.createURI("o");
         Triple triple = Triple.create(s, p, o);
-        Quad quad = new Quad(Quad.defaultGraphNodeGenerated, s, p, o);
+        Quad quad = Quad.create(Quad.defaultGraphNodeGenerated, s, p, o);
         holder = new SingleQuadHolder(triple);
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
@@ -90,7 +90,7 @@ public class SingleQuadHolderTest {
         Node p = NodeFactory.createVariable("p");
         Node o = NodeFactory.createURI("o");
         Triple triple = Triple.create(s, p, o);
-        Quad quad = new Quad(Quad.defaultGraphNodeGenerated, s, p, o);
+        Quad quad = Quad.create(Quad.defaultGraphNodeGenerated, s, p, o);
         holder = new SingleQuadHolder(triple);
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
@@ -100,7 +100,7 @@ public class SingleQuadHolderTest {
         Node p2 = NodeFactory.createURI("p2");
         map.put(Var.alloc(p), p2);
         holder.setValues(map);
-        Quad quad2 = new Quad(Quad.defaultGraphNodeGenerated, s, p2, o);
+        Quad quad2 = Quad.create(Quad.defaultGraphNodeGenerated, s, p2, o);
         lst = holder.getQuads().toList();
         assertEquals(1, lst.size());
         assertEquals(quad2, lst.get(0));
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolderTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolderTest.java
index f7142e32bb..8e0c0fa998 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolderTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolderTest.java
@@ -58,8 +58,8 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -85,8 +85,8 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(1)), 
lst.get(1));
     }
 
     @Test
@@ -114,8 +114,8 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -148,8 +148,8 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(g, tLst.get(0)), lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(g, tLst.get(0)), lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -174,8 +174,8 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 
     @Test
@@ -204,7 +204,7 @@ public class WhereQuadHolderTest {
 
         List<Quad> lst = holder.getQuads().toList();
         assertEquals(2, lst.size());
-        assertEquals(new Quad(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
-        assertEquals(new Quad(g, tLst.get(1)), lst.get(1));
+        assertEquals(Quad.create(Quad.defaultGraphNodeGenerated, tLst.get(0)), 
lst.get(0));
+        assertEquals(Quad.create(g, tLst.get(1)), lst.get(1));
     }
 }
diff --git 
a/jena-text/src/main/java/org/apache/jena/query/text/changes/ChangesBatched.java
 
b/jena-text/src/main/java/org/apache/jena/query/text/changes/ChangesBatched.java
index 73141aeb80..9040e476ce 100644
--- 
a/jena-text/src/main/java/org/apache/jena/query/text/changes/ChangesBatched.java
+++ 
b/jena-text/src/main/java/org/apache/jena/query/text/changes/ChangesBatched.java
@@ -78,7 +78,7 @@ public abstract class ChangesBatched implements 
TextDatasetChanges {
             currentSubject = s ;
         }
 
-        batchQuads.add(new Quad(g, s, p, o)) ;
+        batchQuads.add(Quad.create(g, s, p, o)) ;
     }
 
     private void startBatch() {
diff --git 
a/jena-text/src/test/java/org/apache/jena/query/text/changes/ChangesCapture.java
 
b/jena-text/src/test/java/org/apache/jena/query/text/changes/ChangesCapture.java
index a0ca09163e..68ad56ced4 100644
--- 
a/jena-text/src/test/java/org/apache/jena/query/text/changes/ChangesCapture.java
+++ 
b/jena-text/src/test/java/org/apache/jena/query/text/changes/ChangesCapture.java
@@ -82,7 +82,7 @@ public class ChangesCapture implements TextDatasetChanges {
 
     @Override
     public void change(TextQuadAction qaction, Node g, Node s, Node p, Node o) 
{
-        Quad q = new Quad(g, s, p, o) ;
+        Quad q = Quad.create(g, s, p, o) ;
         Pair<TextQuadAction, Quad> pair = Pair.create(qaction, q) ;
 
         switch (qaction) {

Reply via email to