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 9a97004f0d8ddada6ae18700d445efdaf4f1b0d0 Author: Andy Seaborne <[email protected]> AuthorDate: Mon Dec 1 20:54:18 2025 +0000 Deprecate Triple.getMatchSubject/getMatchPredicate/getMatchObject --- .../org/apache/jena/sparql/core/GraphView.java | 6 ++--- .../jena/sparql/expr/nodevalue/NodeFunctions.java | 27 ++++++++++++++++++++++ .../jena/sparql/graph/GraphSPARQLService.java | 6 ++--- .../src/main/java/org/apache/jena/system/G.java | 9 ++++++++ .../jena/system/buffering/BufferingGraph.java | 2 +- .../sparql/api/TestQueryExecutionTimeout2.java | 5 +++- .../jena/sparql/core/DatasetGraphSimpleMem.java | 4 ++-- .../src/main/java/org/apache/jena/graph/Node.java | 14 +++++++---- .../main/java/org/apache/jena/graph/Node_ANY.java | 2 +- .../main/java/org/apache/jena/graph/Triple.java | 25 +++++++++++++++----- .../org/apache/jena/reasoner/BaseInfGraph.java | 4 +--- .../jena/reasoner/rulesys/impl/SafeGraph.java | 8 +++---- .../rulesys/impl/TestLPBRuleEngineLeak.java | 2 +- .../GenericGeometryPropertyFunction.java | 6 +---- 14 files changed, 85 insertions(+), 35 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/GraphView.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/GraphView.java index d9c95d0169..ed504153ca 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/core/GraphView.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/GraphView.java @@ -107,9 +107,9 @@ public class GraphView extends GraphBase implements NamedGraph, Sync @Override protected ExtendedIterator<Triple> graphBaseFind(Triple m) { if ( m == null ) m = Triple.ANY ; - Node s = m.getMatchSubject() ; - Node p = m.getMatchPredicate() ; - Node o = m.getMatchObject() ; + Node s = m.getSubject() ; + Node p = m.getPredicate() ; + Node o = m.getObject() ; return graphBaseFind(s, p, o) ; } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/NodeFunctions.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/NodeFunctions.java index ffc9e6cc2e..b1592ce414 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/NodeFunctions.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/NodeFunctions.java @@ -92,10 +92,37 @@ public class NodeFunctions { // && sameTerm(t1.getObject(), t2.getObject()); // } + // -------- sameValue + + public static boolean sameValue(NodeValue nv1, NodeValue nv2) { + return NodeValue.sameValueAs(nv1, nv2); + } + + public static boolean sameValue(Node node1, Node node2) { + NodeValue nv1 = NodeValue.makeNode(node1); + NodeValue nv2 = NodeValue.makeNode(node2); + return NodeValue.sameValueAs(nv1, nv2); + } + + public static boolean notSameValue(NodeValue nv1, NodeValue nv2) { + return NodeValue.notSameValueAs(nv1, nv2); + } + + public static boolean notSameValue(Node node1, Node node2) { + NodeValue nv1 = NodeValue.makeNode(node1); + NodeValue nv2 = NodeValue.makeNode(node2); + return NodeValue.notSameValueAs(nv1, nv2); + } + // -------- RDFterm-equals -- raises an exception on "don't know" for literals. // Exact as defined by SPARQL spec, when there are no value extensions. // Exception for two literals that might be equal but we don't know because of language tags. + + // THIS IS NOT: + // SPARQL 1.1 = RDFterm-equals + // SPARQL 1.2 = sameValue + public static boolean rdfTermEquals(Node n1, Node n2) { if ( n1.equals(n2) ) return true; diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphSPARQLService.java b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphSPARQLService.java index 4f66bd46c0..f57b310572 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphSPARQLService.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphSPARQLService.java @@ -68,7 +68,7 @@ public class GraphSPARQLService extends GraphBase implements Graph @Override protected ExtendedIterator<Triple> graphBaseFind(Triple m) { - Node s = m.getMatchSubject() ; + Node s = m.getSubject() ; Var sVar = null ; if ( s == null ) { @@ -76,7 +76,7 @@ public class GraphSPARQLService extends GraphBase implements Graph s = sVar ; } - Node p = m.getMatchPredicate() ; + Node p = m.getPredicate() ; Var pVar = null ; if ( p == null ) { @@ -84,7 +84,7 @@ public class GraphSPARQLService extends GraphBase implements Graph p = pVar ; } - Node o = m.getMatchObject() ; + Node o = m.getObject() ; Var oVar = null ; if ( o == null ) { 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 3e6ca18fa0..5f774dd433 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 @@ -75,6 +75,7 @@ public class G { public static boolean isResource(Node n) { return n != null && (n.isURI()||n.isBlank()); } public static boolean isNodeTriple(Node n) { return n != null && n.isTripleTerm(); } public static boolean isNodeGraph(Node n) { return n != null && n.isNodeGraph(); } + public static boolean isAny(Node n) { return Node.ANY.equals(n); } public static boolean isNullOrAny(Node n) { return n == null || Node.ANY.equals(n); } /** @@ -101,6 +102,14 @@ public class G { return Boolean.TRUE.equals(n.getLiteralValue()); } + /** + * Convert {@code Node.ANY} to {@code null}, otherwise return the original node so that + * {@code ==} may be used to test whether any change has occurred. + */ + public static Node anyAsNull(Node x) { + return isAny(x) ? null : x; + } + /** * Convert null to Node.ANY, otherwise return the original node so that * {@code ==} may be used to test whether any change has occurred. diff --git a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java index 96731d16e5..25a7b6cc17 100644 --- a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java +++ b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java @@ -183,7 +183,7 @@ public class BufferingGraph extends GraphWrapper implements BufferingCtl { @Override public ExtendedIterator<Triple> find(Triple m) { - return find(m.getMatchSubject(), m.getMatchPredicate(), m.getMatchObject()); + return find(m.getSubject(), m.getPredicate(), m.getObject()); } @Override diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java index 5403cb9b08..3d5e9c6f0e 100644 --- a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java +++ b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestQueryExecutionTimeout2.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.Timeout; import org.apache.jena.base.Sys; import org.apache.jena.graph.Graph; +import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; import org.apache.jena.graph.Triple; import org.apache.jena.graph.impl.GraphBase; @@ -180,7 +181,7 @@ public class TestQueryExecutionTimeout2 Graph graph = new GraphBase() { @Override protected ExtendedIterator<Triple> graphBaseFind(Triple t) { - if (t.getMatchSubject() != null && t.getMatchSubject().isConcrete()) { + if (t.getSubject() != null && t.getSubject().isConcrete()) { // Don't match any concrete subject return NiceIterator.emptyIterator(); } else { @@ -204,5 +205,7 @@ public class TestQueryExecutionTimeout2 assertThrows(QueryCancelledException.class, ()-> RowSetOps.count(qe.select())); } } + + public boolean isWildcard(Node n) { return n == null || n == Node.ANY; } } 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 6c7a3b7631..88bd4557eb 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 @@ -168,7 +168,7 @@ public class DatasetGraphSimpleMem extends DatasetGraphTriplesQuads implements T protected ExtendedIterator<Triple> graphBaseFind(Triple m) { List<Triple> results = new ArrayList<>(); for ( Triple t : triples ) - if ( m.matches(t.getMatchSubject(), t.getMatchPredicate(), t.getMatchObject()) ) + if ( m.matches(t.getSubject(), t.getPredicate(), t.getObject()) ) results.add(t); return WrappedIterator.create(results.iterator()); } @@ -197,7 +197,7 @@ public class DatasetGraphSimpleMem extends DatasetGraphTriplesQuads implements T protected ExtendedIterator<Triple> graphBaseFind(Triple m) { List<Triple> results = new ArrayList<>(); - Iterator<Quad> iter = findNG(graphName, m.getMatchSubject(), m.getMatchPredicate(), m.getMatchObject()); + Iterator<Quad> iter = findNG(graphName, m.getSubject(), m.getPredicate(), m.getObject()); for (; iter.hasNext(); ) results.add(iter.next().asTriple()); return WrappedIterator.create(results.iterator()); diff --git a/jena-core/src/main/java/org/apache/jena/graph/Node.java b/jena-core/src/main/java/org/apache/jena/graph/Node.java index e249cb4c59..ce51927902 100644 --- a/jena-core/src/main/java/org/apache/jena/graph/Node.java +++ b/jena-core/src/main/java/org/apache/jena/graph/Node.java @@ -21,6 +21,7 @@ package org.apache.jena.graph; import java.io.IOException; import java.io.ObjectStreamException; import java.io.Serializable; +import java.util.Objects; import java.util.function.Function; import org.apache.jena.datatypes.RDFDatatype ; @@ -239,7 +240,8 @@ public abstract class Node implements Serializable { /** * Java rules for equals. See also {#sameTermAs} and {#sameValueAs}. - * Nodes only equal other Nodes that have equal labels. + * {@code .equals} is "same RDF Term" with all the rules of + * Java equality such as "null" handling. */ @Override public abstract boolean equals(Object o); @@ -247,8 +249,10 @@ public abstract class Node implements Serializable { /** * RDF term equality. */ - public boolean sameTermAs(Object o) - { return equals( o ); } + public boolean sameTermAs(Object o) { + Objects.requireNonNull(o); + return equals(o); + } /** * Test that two nodes are semantically equivalent. @@ -256,8 +260,8 @@ public abstract class Node implements Serializable { * equals is stricter. For example, two xsd:int literals with * the same value but different lexical form are semantically * equivalent but distinguished by the java equals function. - * <p>Default implementation is to use equals, subclasses should - * override this.</p> + * <p>Default implementation is to use {@link #equals} + * subclasses should override this.</p> */ public boolean sameValueAs(Object o) { return equals( o ); } diff --git a/jena-core/src/main/java/org/apache/jena/graph/Node_ANY.java b/jena-core/src/main/java/org/apache/jena/graph/Node_ANY.java index 3b4cf36d75..2472616eb6 100644 --- a/jena-core/src/main/java/org/apache/jena/graph/Node_ANY.java +++ b/jena-core/src/main/java/org/apache/jena/graph/Node_ANY.java @@ -41,7 +41,7 @@ public class Node_ANY extends Node { @Override public boolean equals(Object other) { - // This is only one such object. + // There is only one such object. if ( this == other ) return true; return false; diff --git a/jena-core/src/main/java/org/apache/jena/graph/Triple.java b/jena-core/src/main/java/org/apache/jena/graph/Triple.java index b8c47f4a07..8111c0824e 100644 --- a/jena-core/src/main/java/org/apache/jena/graph/Triple.java +++ b/jena-core/src/main/java/org/apache/jena/graph/Triple.java @@ -91,21 +91,34 @@ public class Triple implements Serializable public final Node getObject() { return obj; } - /** Return subject or null, not Node.ANY */ + /** + * Return subject or null, not Node.ANY + * @deprecated Use {@link #getSubject()}. + */ + @Deprecated(forRemoval = true) public Node getMatchSubject() - { return anyToNull( subj ); } + { return anyToNull( getSubject() ); } - /** Return predicate or null, not Node.ANY */ + /** + * Return predicate or null, not Node.ANY. + * @deprecated Use {@link #getPredicate()}. + */ + @Deprecated(forRemoval = true) public Node getMatchPredicate() - { return anyToNull( pred ); } + { return anyToNull( getPredicate() ); } - /** Return object or null, not Node.ANY */ + /** Return object or null, not Node.ANY. + * @deprecated Use {@link #getObject()}. + */ + @Deprecated(forRemoval = true) public Node getMatchObject() - { return anyToNull( obj ); } + { return anyToNull( getObject() ); } + @Deprecated(forRemoval = true) private static Node anyToNull( Node n ) { return Node.ANY.equals( n ) ? null : n; } + @Deprecated(forRemoval = true) private static Node nullToAny( Node n ) { return n == null ? Node.ANY : n; } diff --git a/jena-core/src/main/java/org/apache/jena/reasoner/BaseInfGraph.java b/jena-core/src/main/java/org/apache/jena/reasoner/BaseInfGraph.java index 82d0c105d9..9ec677c1ae 100644 --- a/jena-core/src/main/java/org/apache/jena/reasoner/BaseInfGraph.java +++ b/jena-core/src/main/java/org/apache/jena/reasoner/BaseInfGraph.java @@ -283,9 +283,7 @@ public abstract class BaseInfGraph extends GraphBase implements InfGraph { */ @Override protected ExtendedIterator<Triple> graphBaseFind(Triple triple) { - return graphBaseFind(triple.getMatchSubject(), triple.getMatchPredicate(), triple.getMatchObject()) - // .filterKeep(new TripleMatchFilter(m.asTriple())) - ; + return graphBaseFind(triple.getSubject(), triple.getPredicate(), triple.getObject()); } /** diff --git a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/SafeGraph.java b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/SafeGraph.java index cc055615b8..33c26ce05f 100644 --- a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/SafeGraph.java +++ b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/SafeGraph.java @@ -39,12 +39,12 @@ public class SafeGraph extends WrappedGraph implements Graph { @Override public ExtendedIterator<Triple> find( Triple triple ) { - return find(triple.getMatchSubject(), triple.getMatchPredicate(), triple.getMatchObject()); + return find(triple.getSubject(), triple.getPredicate(), triple.getObject()); } - + @Override public ExtendedIterator<Triple> find( Node s, Node p, Node o ) { - return SimpleEventManager.notifyingRemove( this, + return SimpleEventManager.notifyingRemove( this, base.find( s, p, o ).filterDrop( t -> t.getSubject().isLiteral() || t.getPredicate().isBlank() || t.getPredicate().isLiteral() ) ); } @@ -55,5 +55,5 @@ public class SafeGraph extends WrappedGraph implements Graph { public Graph getRawGraph() { return base; } - + } diff --git a/jena-core/src/test/java/org/apache/jena/reasoner/rulesys/impl/TestLPBRuleEngineLeak.java b/jena-core/src/test/java/org/apache/jena/reasoner/rulesys/impl/TestLPBRuleEngineLeak.java index aa8578f0be..fb184eaa24 100644 --- a/jena-core/src/test/java/org/apache/jena/reasoner/rulesys/impl/TestLPBRuleEngineLeak.java +++ b/jena-core/src/test/java/org/apache/jena/reasoner/rulesys/impl/TestLPBRuleEngineLeak.java @@ -98,7 +98,7 @@ public class TestLPBRuleEngineLeak extends TestCase { ExtendedIterator<Triple> it3 = infgraph.find(a, ty, C1); assertTrue(it3.hasNext()); - assertEquals(a, it3.next().getMatchSubject()); + assertEquals(a, it3.next().getSubject()); // .. and what if we forget to call next() to consume b? // (e.g. return from a method with the first hit) diff --git a/jena-geosparql/src/main/java/org/apache/jena/geosparql/geo/topological/GenericGeometryPropertyFunction.java b/jena-geosparql/src/main/java/org/apache/jena/geosparql/geo/topological/GenericGeometryPropertyFunction.java index dbce73a631..418056ffe3 100644 --- a/jena-geosparql/src/main/java/org/apache/jena/geosparql/geo/topological/GenericGeometryPropertyFunction.java +++ b/jena-geosparql/src/main/java/org/apache/jena/geosparql/geo/topological/GenericGeometryPropertyFunction.java @@ -40,10 +40,6 @@ import org.apache.jena.sparql.pfunction.PFuncSimple; import org.apache.jena.system.G; import org.apache.jena.util.iterator.ExtendedIterator; -/** - * - * - */ public abstract class GenericGeometryPropertyFunction extends PFuncSimple { protected abstract NodeValue applyPredicate(GeometryWrapper geometryWrapper); @@ -95,7 +91,7 @@ public abstract class GenericGeometryPropertyFunction extends PFuncSimple { Node geometryLiteral = getGeometryLiteral(subject, predicate, graph); if (geometryLiteral != null) { - if (object.matches(geometryLiteral)) { + if (object.sameTermAs(geometryLiteral)) { return QueryIterSingleton.create(binding, execCxt); } }
