You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/06/26 23:54:46 UTC
svn commit: r1497125 - in /jena/trunk/jena-arq/src: main/java/arq/
main/java/com/hp/hpl/jena/sparql/algebra/op/
main/java/com/hp/hpl/jena/sparql/core/
main/java/com/hp/hpl/jena/sparql/modify/
main/java/com/hp/hpl/jena/sparql/modify/request/ main/java/c...
Author: andy
Date: Wed Jun 26 21:54:45 2013
New Revision: 1497125
URL: http://svn.apache.org/r1497125
Log:
Add Updaterequest isomorphism via .equalTo.
Refactor isomorphism support into class Iso.
Tests.
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateCompare.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Iso.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateCompare.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateWriter.java
Modified:
jena/trunk/jena-arq/src/main/java/arq/uparse.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpPath.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuad.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpTriple.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/PathBlock.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/Prologue.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/Target.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateAdd.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateBinaryOp.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateCreate.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateData.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDeleteWhere.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDropClear.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateLoad.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateModify.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWithUsing.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWriter.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_Link.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_ReverseLink.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Element.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Template.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/Update.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateRequest.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TS_Update.java
Modified: jena/trunk/jena-arq/src/main/java/arq/uparse.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/arq/uparse.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/arq/uparse.java (original)
+++ jena/trunk/jena-arq/src/main/java/arq/uparse.java Wed Jun 26 21:54:45 2013
@@ -126,16 +126,9 @@ public class uparse extends CmdARQ
System.err.println("Can not reparse update after serialization") ;
System.err.println(updateString2) ;
}
- // Currently, UpdateRequest do not implement value-based .equals
-// if ( req.hashCode() != req2.hashCode() )
-// {
-// System.err.println("Reparsed update hash code does not equal original parsed request hash code") ;
-// }
-// else
-// {
-// if ( ! req.equals(req2) )
-// System.err.println("Reparsed update does not .equals original parsed request") ;
-// }
+
+ if ( ! req.equalTo(req2) )
+ System.err.println("Reparsed update does not .equalTo original parsed request") ;
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpPath.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpPath.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpPath.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpPath.java Wed Jun 26 21:54:45 2013
@@ -23,8 +23,8 @@ import com.hp.hpl.jena.sparql.algebra.Op
import com.hp.hpl.jena.sparql.algebra.Transform ;
import com.hp.hpl.jena.sparql.core.TriplePath ;
import com.hp.hpl.jena.sparql.sse.Tags ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
public class OpPath extends Op0
{
@@ -59,7 +59,7 @@ public class OpPath extends Op0
{
if ( ! (other instanceof OpPath) ) return false ;
OpPath p = (OpPath)other ;
- return Utils.triplePathIso(triplePath, p.triplePath, isoMap) ;
+ return Iso.triplePathIso(triplePath, p.triplePath, isoMap) ;
}
@Override
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuad.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuad.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuad.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuad.java Wed Jun 26 21:54:45 2013
@@ -25,8 +25,8 @@ import com.hp.hpl.jena.sparql.core.Basic
import com.hp.hpl.jena.sparql.core.Quad ;
import com.hp.hpl.jena.sparql.core.QuadPattern ;
import com.hp.hpl.jena.sparql.sse.Tags ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
/** Algebra operation for a single quad.
* @see OpTriple
@@ -71,7 +71,7 @@ public class OpQuad extends Op0
if ( ! (other instanceof OpQuad) )
return false ;
OpQuad opQuad = (OpQuad)other ;
- return Utils.quadIso(getQuad(), opQuad.getQuad(), labelMap) ;
+ return Iso.quadIso(getQuad(), opQuad.getQuad(), labelMap) ;
}
@Override
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpTriple.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpTriple.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpTriple.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpTriple.java Wed Jun 26 21:54:45 2013
@@ -24,8 +24,8 @@ import com.hp.hpl.jena.sparql.algebra.Op
import com.hp.hpl.jena.sparql.algebra.Transform ;
import com.hp.hpl.jena.sparql.core.BasicPattern ;
import com.hp.hpl.jena.sparql.sse.Tags ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
/** Algebra operation for a single triple. Not normally used - triples are
* contained in basic graph patterns (which is the unit of extension in SPARQL,
@@ -73,7 +73,7 @@ public class OpTriple extends Op0
if ( ! (other instanceof OpTriple) )
return false ;
OpTriple opTriple = (OpTriple)other ;
- return Utils.tripleIso(getTriple(), opTriple.getTriple(), labelMap) ;
+ return Iso.tripleIso(getTriple(), opTriple.getTriple(), labelMap) ;
}
@Override
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java Wed Jun 26 21:54:45 2013
@@ -28,8 +28,8 @@ import com.hp.hpl.jena.graph.Triple ;
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
import com.hp.hpl.jena.sparql.sse.SSE ;
import com.hp.hpl.jena.sparql.sse.writers.WriterNode ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
/** A class whose purpose is to give a name to a collection of triples.
* Reduces the use of bland "List" in APIs (Java 1.4)
@@ -90,7 +90,7 @@ public class BasicPattern implements Ite
Triple t1 = get(i) ;
Triple t2 = other.get(i) ;
- if ( ! Utils.tripleIso(t1, t2, isoMap) )
+ if ( ! Iso.tripleIso(t1, t2, isoMap) )
return false ;
}
return true ;
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/PathBlock.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/PathBlock.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/PathBlock.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/PathBlock.java Wed Jun 26 21:54:45 2013
@@ -22,8 +22,8 @@ import java.util.ArrayList ;
import java.util.List ;
import java.util.ListIterator ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
/** A class whose purpose is to give a name to a collection of triple paths. */
@@ -69,7 +69,7 @@ public class PathBlock implements Iterab
TriplePath tp1 = get(i) ;
TriplePath tp2 = other.get(i) ;
- if ( ! Utils.triplePathIso(tp1, tp2, isoMap) )
+ if ( ! Iso.triplePathIso(tp1, tp2, isoMap) )
return false ;
}
return true ;
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/Prologue.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/Prologue.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/Prologue.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/Prologue.java Wed Jun 26 21:54:45 2013
@@ -197,4 +197,18 @@ public class Prologue
{
return prefixMap.shortForm(uri) ;
}
+
+ /** Test whether a Prologue wil perform the same as this one. */
+ public boolean samePrologue(Prologue other) {
+ // Prologue are mutable and superclasses so .equals is left as the default.
+ String base1 = explicitlySetBaseURI() ? getBaseURI() : null ;
+ String base2 = other.explicitlySetBaseURI() ? other.getBaseURI() : null ;
+ if (! Lib.equal(base1, base2) )
+ return false ;
+ if ( getPrefixMapping() == null && other.getPrefixMapping() == null )
+ return true ;
+ if ( getPrefixMapping() == null )
+ return false ;
+ return getPrefixMapping().samePrefixMappingAs(other.getPrefixMapping()) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java Wed Jun 26 21:54:45 2013
@@ -65,17 +65,7 @@ public class QueryCompare implements Que
@Override
public void visitPrologue(Prologue query1)
{
- // This is after parsing so all IRIs in the query have been made absolute.
- // For two queries to be equal, their explicitly set base URIs must be the same.
-
- String b1 = query1.explicitlySetBaseURI() ? query1.getBaseURI() : null ;
- String b2 = query2.explicitlySetBaseURI() ? query2.getBaseURI() : null ;
- check("Base URIs", b1, b2) ;
-
- if ( query1.getPrefixMapping() == null &&
- query2.getPrefixMapping() == null )
- return ;
- check("Prefixes", query1.getPrefixMapping().samePrefixMappingAs(query2.getPrefixMapping())) ;
+ check("Prefixes/Base", query1.samePrologue(query2) ) ;
}
@Override
Added: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateCompare.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateCompare.java?rev=1497125&view=auto
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateCompare.java (added)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateCompare.java Wed Jun 26 21:54:45 2013
@@ -0,0 +1,57 @@
+/**
+ * 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 com.hp.hpl.jena.sparql.modify;
+
+import java.util.List ;
+
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
+import com.hp.hpl.jena.update.Update ;
+import com.hp.hpl.jena.update.UpdateRequest ;
+
+public class UpdateCompare {
+
+ public static boolean isomorphic(UpdateRequest req1, UpdateRequest req2) {
+ if ( req1 == req2 )
+ return true ;
+ if ( ! req1.samePrologue(req2) )
+ return false ;
+ List<Update> updates1 = req1.getOperations() ;
+ List<Update> updates2 = req2.getOperations() ;
+ if ( updates1.size() != updates2.size() )
+ return false ;
+
+ NodeIsomorphismMap isomap = new NodeIsomorphismMap() ;
+ for ( int i = 0 ; i < updates1.size() ; i++ ) {
+ Update upd1 = updates1.get(i) ;
+ Update upd2 = updates2.get(i) ;
+ if ( !isomorphic(upd1, upd2, isomap) )
+ return false ;
+ }
+ return true ;
+ }
+
+ public static boolean isomorphic(Update req1, Update req2) {
+ return isomorphic(req1, req2, new NodeIsomorphismMap()) ;
+ }
+
+ private static boolean isomorphic(Update upd1, Update upd2, NodeIsomorphismMap isomap) {
+ return upd1.equalTo(upd2, isomap) ;
+ }
+}
+
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/Target.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/Target.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/Target.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/Target.java Wed Jun 26 21:54:45 2013
@@ -18,11 +18,15 @@
package com.hp.hpl.jena.sparql.modify.request;
-import static com.hp.hpl.jena.sparql.modify.request.Target.Decl.* ;
+import static com.hp.hpl.jena.sparql.modify.request.Target.Decl.ALL$ ;
+import static com.hp.hpl.jena.sparql.modify.request.Target.Decl.DEFAULT$ ;
+import static com.hp.hpl.jena.sparql.modify.request.Target.Decl.IRI$ ;
+import static com.hp.hpl.jena.sparql.modify.request.Target.Decl.NAMED$ ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.NodeFactory ;
import com.hp.hpl.jena.sparql.util.FmtUtils ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
public class Target
{
@@ -60,12 +64,17 @@ public class Target
return decl.toString() ;
}
+ public boolean equalTo(Target other, NodeIsomorphismMap isoMap) {
+ return equals(other) ;
+ }
+
@Override
public int hashCode()
{
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((decl == null) ? 0 : decl.hashCode()) ;
+ // OK since a URI.
result = prime * result + ((graphIRI == null) ? 0 : graphIRI.hashCode()) ;
return result ;
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateAdd.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateAdd.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateAdd.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateAdd.java Wed Jun 26 21:54:45 2013
@@ -18,6 +18,7 @@
package com.hp.hpl.jena.sparql.modify.request;
+
public class UpdateAdd extends UpdateBinaryOp
{
public UpdateAdd(Target src, Target dest) { super(src, dest, true) ; }
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateBinaryOp.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateBinaryOp.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateBinaryOp.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateBinaryOp.java Wed Jun 26 21:54:45 2013
@@ -19,6 +19,7 @@
package com.hp.hpl.jena.sparql.modify.request;
import com.hp.hpl.jena.sparql.ARQException ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public abstract class UpdateBinaryOp extends Update
@@ -47,4 +48,19 @@ public abstract class UpdateBinaryOp ext
public Target getDest() { return dest ; }
public boolean getSilent() { return silent ; }
+
+ @Override
+ final
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateBinaryOp other = (UpdateBinaryOp)obj ;
+ if (silent != other.silent)
+ return false ;
+
+ return dest.equalTo(other.dest, isoMap) &&
+ src.equalTo(other.src, isoMap) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateCreate.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateCreate.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateCreate.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateCreate.java Wed Jun 26 21:54:45 2013
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.sparql.modify.re
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.NodeFactory ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
@@ -57,4 +58,17 @@ public class UpdateCreate extends Update
@Override
public void visit(UpdateVisitor visitor)
{ visitor.visit(this) ; }
+
+ @Override
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (obj == null)
+ return false ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateCreate other = (UpdateCreate)obj ;
+ return silent == other.silent &&
+ isoMap.makeIsomorphic(graphRef, other.graphRef) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateData.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateData.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateData.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateData.java Wed Jun 26 21:54:45 2013
@@ -21,6 +21,8 @@ package com.hp.hpl.jena.sparql.modify.re
import java.util.List ;
import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public abstract class UpdateData extends Update
@@ -30,4 +32,18 @@ public abstract class UpdateData extends
public UpdateData(QuadDataAcc quadData) { this.quadData = quadData ; }
public List<Quad> getQuads() { return quadData.getQuads() ; }
+
+ @Override
+ final
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateData other = (UpdateData)obj ;
+ List<Quad> quads1 = getQuads() ;
+ List<Quad> quads2 = other.getQuads() ;
+ return Iso.isomorphicQuads(quads1, quads2, isoMap) ;
+ }
+
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDeleteWhere.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDeleteWhere.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDeleteWhere.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDeleteWhere.java Wed Jun 26 21:54:45 2013
@@ -21,6 +21,8 @@ package com.hp.hpl.jena.sparql.modify.re
import java.util.List ;
import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public class UpdateDeleteWhere extends Update
@@ -34,4 +36,16 @@ public class UpdateDeleteWhere extends U
@Override
public void visit(UpdateVisitor visitor)
{ visitor.visit(this) ; }
+
+ @Override
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (obj == null)
+ return false ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateDeleteWhere other = (UpdateDeleteWhere)obj ;
+ return Iso.isomorphicQuads(getQuads(), other.getQuads(), isoMap) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDropClear.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDropClear.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDropClear.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateDropClear.java Wed Jun 26 21:54:45 2013
@@ -19,6 +19,7 @@
package com.hp.hpl.jena.sparql.modify.request;
import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public abstract class UpdateDropClear extends Update
@@ -45,4 +46,18 @@ public abstract class UpdateDropClear ex
//public String getGraphIRI() { return target.getGraphIRI() ; }
public Node getGraph() { return target.getGraph() ; }
+
+ @Override
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (obj == null)
+ return false ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateDropClear other = (UpdateDropClear)obj ;
+ if ( silent != other.silent )
+ return false ;
+ return target.equalTo(other.target, isoMap) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateLoad.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateLoad.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateLoad.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateLoad.java Wed Jun 26 21:54:45 2013
@@ -18,8 +18,12 @@
package com.hp.hpl.jena.sparql.modify.request;
+import org.apache.jena.atlas.lib.Lib ;
+
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.NodeFactory ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public class UpdateLoad extends Update
@@ -58,4 +62,19 @@ public class UpdateLoad extends Update
@Override
public void visit(UpdateVisitor visitor)
{ visitor.visit(this) ; }
+
+ @Override
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (obj == null)
+ return false ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateLoad other = (UpdateLoad)obj ;
+ return
+ silent == other.silent &&
+ Lib.equal(source, other.source) &&
+ Iso.nodeIso(dest, other.dest, isoMap) ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateModify.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateModify.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateModify.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateModify.java Wed Jun 26 21:54:45 2013
@@ -22,6 +22,9 @@ import java.util.List ;
import com.hp.hpl.jena.sparql.core.Quad ;
import com.hp.hpl.jena.sparql.syntax.Element ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
+import com.hp.hpl.jena.update.Update ;
public class UpdateModify extends UpdateWithUsing
{
@@ -95,4 +98,28 @@ public class UpdateModify extends Update
@Override
public void visit(UpdateVisitor visitor)
{ visitor.visit(this) ; }
+
+ @Override
+ public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) {
+ if (this == obj)
+ return true ;
+ if (obj == null)
+ return false ;
+ if (getClass() != obj.getClass())
+ return false ;
+ UpdateModify other = (UpdateModify)obj ;
+ if ( hasDelete != other.hasDelete )
+ return false ;
+ if ( hasInsert != other.hasInsert )
+ return false ;
+ if ( ! equalIso(other, isoMap))
+ return false ;
+ if ( ! Iso.isomorphicQuads(getDeleteQuads(), other.getDeleteQuads(), isoMap) )
+ return false ;
+ if ( ! Iso.isomorphicQuads(getInsertQuads(), other.getInsertQuads(), isoMap) )
+ return false ;
+ if ( ! wherePattern.equalTo(other.wherePattern, isoMap) )
+ return false ;
+ return true ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWithUsing.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWithUsing.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWithUsing.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWithUsing.java Wed Jun 26 21:54:45 2013
@@ -23,6 +23,8 @@ import java.util.Collections ;
import java.util.List ;
import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.update.Update ;
public abstract class UpdateWithUsing extends Update
@@ -43,5 +45,22 @@ public abstract class UpdateWithUsing ex
public List<Node> getUsingNamed() { return usingNamedView ; }
public Node getWithIRI() { return withIRI ; }
- public void setWithIRI(Node node) { this.withIRI = node ; }
+ public void setWithIRI(Node node) { this.withIRI = node ; }
+
+ protected boolean equalIso(UpdateWithUsing other, NodeIsomorphismMap isoMap) {
+ // Assumes IRIs
+ if ( withIRI == null && other.withIRI != null )
+ return false ;
+ if ( withIRI != null && other.withIRI == null )
+ return false ;
+ if ( withIRI != null && other.withIRI != null ) {
+ if ( ! Iso.nodeIso(withIRI, other.withIRI, isoMap) )
+ return false ;
+ }
+ if ( ! Iso.isomorphicNodes(using, other.using, isoMap) )
+ return false ;
+ if ( ! Iso.isomorphicNodes(usingNamed, other.usingNamed, isoMap) )
+ return false ;
+ return true ;
+ }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWriter.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWriter.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWriter.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/request/UpdateWriter.java Wed Jun 26 21:54:45 2013
@@ -235,7 +235,8 @@ public class UpdateWriter implements Clo
public static void output(UpdateRequest request, IndentedWriter out)
{
- output(request, out, null);
+ SerializationContext sCxt = new SerializationContext(request, new NodeToLabelMapBNode()) ;
+ output(request, out, sCxt);
}
public static void output(UpdateRequest request, IndentedWriter out, SerializationContext sCxt)
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_Link.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_Link.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_Link.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_Link.java Wed Jun 26 21:54:45 2013
@@ -19,8 +19,8 @@
package com.hp.hpl.jena.sparql.path;
import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
public class P_Link extends P_Path0
{
@@ -41,7 +41,7 @@ public class P_Link extends P_Path0
{
if ( ! ( path2 instanceof P_Link ) ) return false ;
P_Link other = (P_Link)path2 ;
- return Utils.nodeIso(node, other.node, isoMap) ;
+ return Iso.nodeIso(node, other.node, isoMap) ;
}
@Override
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_ReverseLink.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_ReverseLink.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_ReverseLink.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/path/P_ReverseLink.java Wed Jun 26 21:54:45 2013
@@ -19,8 +19,8 @@
package com.hp.hpl.jena.sparql.path;
import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
public class P_ReverseLink extends P_Path0
{
@@ -41,7 +41,7 @@ public class P_ReverseLink extends P_Pat
{
if ( ! ( path2 instanceof P_ReverseLink ) ) return false ;
P_ReverseLink other = (P_ReverseLink)path2 ;
- return Utils.nodeIso(node, other.node, isoMap) ;
+ return Iso.nodeIso(node, other.node, isoMap) ;
}
@Override
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Element.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Element.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Element.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Element.java Wed Jun 26 21:54:45 2013
@@ -29,7 +29,7 @@ public abstract class Element
@Override
public abstract int hashCode() ;
- // If the labeMap is null, do .equals() on nodes, else map from
+ // If the labelMap is null, do .equals() on nodes, else map from
// bNode varables in one to bNodes variables in the other
public abstract boolean equalTo(Element el2, NodeIsomorphismMap isoMap) ;
@@ -43,7 +43,6 @@ public abstract class Element
return equalTo((Element)el2, null) ;
}
-
@Override
public String toString()
{
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Template.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Template.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Template.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/syntax/Template.java Wed Jun 26 21:54:45 2013
@@ -28,8 +28,8 @@ import com.hp.hpl.jena.sparql.core.Basic
import com.hp.hpl.jena.sparql.engine.binding.Binding ;
import com.hp.hpl.jena.sparql.modify.TemplateLib ;
import com.hp.hpl.jena.sparql.serializer.FormatterTemplate ;
+import com.hp.hpl.jena.sparql.util.Iso ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
-import com.hp.hpl.jena.sparql.util.Utils ;
/** Triples template. */
@@ -104,7 +104,7 @@ public class Template
{
Triple t1 = list1.get(i) ;
Triple t2 = list2.get(i) ;
- Utils.tripleIso(t1, t2, labelMap) ;
+ Iso.tripleIso(t1, t2, labelMap) ;
}
return true ;
}
Added: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Iso.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Iso.java?rev=1497125&view=auto
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Iso.java (added)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Iso.java Wed Jun 26 21:54:45 2013
@@ -0,0 +1,137 @@
+/**
+ * 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 com.hp.hpl.jena.sparql.util;
+
+import java.util.List ;
+
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.core.TriplePath ;
+import com.hp.hpl.jena.sparql.core.Var ;
+
+/** Isomorphism utilities */
+public class Iso {
+ // See also IsoMatcher
+
+ public static boolean isomorphicTriples(List<Triple> triples1, List<Triple> triples2, NodeIsomorphismMap isoMap) {
+ if ( triples1.size() != triples2.size() )
+ return false ;
+ for ( int i = 0 ; i < triples1.size() ; i++ ) {
+ Triple t1 = triples1.get(i) ;
+ Triple t2 = triples2.get(i) ;
+ if ( ! tripleIso(t1, t2, isoMap))
+ return false ;
+ }
+ return true ;
+ }
+
+ public static boolean isomorphicQuads(List<Quad> quads1, List<Quad> quads2, NodeIsomorphismMap isoMap) {
+ if ( quads1.size() != quads2.size() )
+ return false ;
+ for ( int i = 0 ; i < quads1.size() ; i++ ) {
+ Quad q1 = quads1.get(i) ;
+ Quad q2 = quads2.get(i) ;
+ if ( ! quadIso(q1, q2, isoMap))
+ return false ;
+ }
+ return true ;
+ }
+
+ public static boolean isomorphicNodes(List<Node> nodes1, List<Node> nodes2, NodeIsomorphismMap isoMap) {
+ if ( nodes1.size() != nodes2.size() )
+ return false ;
+ for ( int i = 0 ; i < nodes1.size() ; i++ ) {
+ Node n1 = nodes1.get(i) ;
+ Node n2 = nodes2.get(i) ;
+ if ( ! nodeIso(n1, n2, isoMap))
+ return false ;
+ }
+ return true ;
+ }
+
+ public static boolean triplePathIso(TriplePath tp1, TriplePath tp2, NodeIsomorphismMap isoMap)
+ {
+ if ( tp1.isTriple() ^ tp2.isTriple() )
+ return false ;
+
+ if ( tp1.isTriple() )
+ return Iso.tripleIso(tp1.asTriple(), tp2.asTriple(), isoMap) ;
+ else
+ return Iso.nodeIso(tp1.getSubject(), tp2.getSubject(), isoMap) &&
+ Iso.nodeIso(tp1.getObject(), tp2.getObject(), isoMap) &&
+ tp1.getPath().equalTo(tp2.getPath(), isoMap) ;
+ }
+
+ public static boolean tripleIso(Triple t1, Triple t2, NodeIsomorphismMap labelMap)
+ {
+ Node s1 = t1.getSubject() ;
+ Node p1 = t1.getPredicate() ;
+ Node o1 = t1.getObject() ;
+
+ Node s2 = t2.getSubject() ;
+ Node p2 = t2.getPredicate() ;
+ Node o2 = t2.getObject() ;
+
+ if ( ! nodeIso(s1, s2, labelMap) )
+ return false ;
+ if ( ! nodeIso(p1, p2, labelMap) )
+ return false ;
+ if ( ! nodeIso(o1, o2, labelMap) )
+ return false ;
+
+ return true ;
+ }
+
+ public static boolean quadIso(Quad t1, Quad t2, NodeIsomorphismMap labelMap)
+ {
+ Node g1 = t1.getGraph() ;
+ Node s1 = t1.getSubject() ;
+ Node p1 = t1.getPredicate() ;
+ Node o1 = t1.getObject() ;
+
+ Node g2 = t2.getGraph() ;
+ Node s2 = t2.getSubject() ;
+ Node p2 = t2.getPredicate() ;
+ Node o2 = t2.getObject() ;
+
+ if ( ! nodeIso(g1, g2, labelMap) )
+ return false ;
+ if ( ! nodeIso(s1, s2, labelMap) )
+ return false ;
+ if ( ! nodeIso(p1, p2, labelMap) )
+ return false ;
+ if ( ! nodeIso(o1, o2, labelMap) )
+ return false ;
+
+ return true ;
+ }
+
+ public static boolean nodeIso(Node n1, Node n2, NodeIsomorphismMap isoMap)
+ {
+ if ( isoMap != null ) {
+ if ( n1.isBlank() && n2.isBlank() )
+ return isoMap.makeIsomorphic(n1, n2) ;
+ if ( Var.isBlankNodeVar(n1) && Var.isBlankNodeVar(n2) )
+ return isoMap.makeIsomorphic(n1, n2) ;
+ }
+ return n1.equals(n2) ;
+ }
+}
+
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java Wed Jun 26 21:54:45 2013
@@ -27,11 +27,6 @@ import java.util.GregorianCalendar ;
import java.util.TimeZone ;
import com.hp.hpl.jena.datatypes.xsd.XSDDateTime ;
-import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.graph.Triple ;
-import com.hp.hpl.jena.sparql.core.Quad ;
-import com.hp.hpl.jena.sparql.core.TriplePath ;
-import com.hp.hpl.jena.sparql.core.Var ;
/** Miscellaneous operations - not query specific */
@@ -173,68 +168,4 @@ public class Utils
// No SPARQL short form.
return Float.toString(f) ;
}
-
- public static boolean triplePathIso(TriplePath tp1, TriplePath tp2, NodeIsomorphismMap isoMap)
- {
- if ( tp1.isTriple() ^ tp2.isTriple() )
- return false ;
-
- if ( tp1.isTriple() )
- return Utils.tripleIso(tp1.asTriple(), tp2.asTriple(), isoMap) ;
- else
- return Utils.nodeIso(tp1.getSubject(), tp2.getSubject(), isoMap) &&
- Utils.nodeIso(tp1.getObject(), tp2.getObject(), isoMap) &&
- tp1.getPath().equalTo(tp2.getPath(), isoMap) ;
- }
-
- public static boolean tripleIso(Triple t1, Triple t2, NodeIsomorphismMap labelMap)
- {
- Node s1 = t1.getSubject() ;
- Node p1 = t1.getPredicate() ;
- Node o1 = t1.getObject() ;
-
- Node s2 = t2.getSubject() ;
- Node p2 = t2.getPredicate() ;
- Node o2 = t2.getObject() ;
-
- if ( ! nodeIso(s1, s2, labelMap) )
- return false ;
- if ( ! nodeIso(p1, p2, labelMap) )
- return false ;
- if ( ! nodeIso(o1, o2, labelMap) )
- return false ;
-
- return true ;
- }
-
- public static boolean quadIso(Quad t1, Quad t2, NodeIsomorphismMap labelMap)
- {
- Node g1 = t1.getGraph() ;
- Node s1 = t1.getSubject() ;
- Node p1 = t1.getPredicate() ;
- Node o1 = t1.getObject() ;
-
- Node g2 = t2.getGraph() ;
- Node s2 = t2.getSubject() ;
- Node p2 = t2.getPredicate() ;
- Node o2 = t2.getObject() ;
-
- if ( ! nodeIso(g1, g2, labelMap) )
- return false ;
- if ( ! nodeIso(s1, s2, labelMap) )
- return false ;
- if ( ! nodeIso(p1, p2, labelMap) )
- return false ;
- if ( ! nodeIso(o1, o2, labelMap) )
- return false ;
-
- return true ;
- }
-
- public static boolean nodeIso(Node n1, Node n2, NodeIsomorphismMap isoMap)
- {
- if ( isoMap != null && Var.isBlankNodeVar(n1) && Var.isBlankNodeVar(n2) )
- return isoMap.makeIsomorphic(n1, n2) ;
- return n1.equals(n2) ;
- }
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/Update.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/Update.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/Update.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/Update.java Wed Jun 26 21:54:45 2013
@@ -25,6 +25,7 @@ import com.hp.hpl.jena.shared.PrefixMapp
import com.hp.hpl.jena.sparql.modify.request.UpdateVisitor ;
import com.hp.hpl.jena.sparql.modify.request.UpdateWriter ;
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
import com.hp.hpl.jena.sparql.util.PrintSerializable ;
import com.hp.hpl.jena.sparql.util.QueryOutputUtils ;
@@ -51,4 +52,32 @@ public abstract class Update implements
@Override
public String toString()
{ return PrintUtils.toString(this) ; }
+
+ /** Compare by isomorphism - if the isomorphism map is null, compare nodes by .equals */
+ public abstract boolean equalTo(Update other, NodeIsomorphismMap isoMap) ;
+
+// @Override
+// public boolean equals(Object other) {
+// if ( ! ( other instanceof Update ) )
+// return false ;
+// return equalTo((Update)other, null) ;
+// }
+//
+// @Override
+// public abstract int hashCode() ;
+
+ protected static final int hashAdd = 0x1000 ;
+ protected static final int hashCopy = 0x1001 ;
+ protected static final int hashMove = 0x1002 ;
+ protected static final int hashCreate = 0x1003 ;
+ protected static final int hashInsertData = 0x1004 ;
+ protected static final int hashDeleteData = 0x1005 ;
+ protected static final int hashDeleteWhere = 0x1006 ;
+
+ protected static final int hashClear = 0x1007 ;
+ protected static final int hashDrop = 0x1008 ;
+
+ protected static final int hashLoad = 0x1009 ;
+ protected static final int hashDeleteInsert = 0x100A ;
+
}
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateRequest.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateRequest.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateRequest.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateRequest.java Wed Jun 26 21:54:45 2013
@@ -28,6 +28,7 @@ import org.apache.jena.atlas.io.PrintUti
import org.apache.jena.atlas.io.Printable ;
import com.hp.hpl.jena.sparql.core.Prologue ;
+import com.hp.hpl.jena.sparql.modify.UpdateCompare ;
import com.hp.hpl.jena.sparql.modify.request.UpdateWriter ;
/** A SPARQL Update consists of a number of operations (e.g. INSERT, CLEAR).
@@ -67,4 +68,9 @@ public class UpdateRequest extends Prolo
@Override
public void output(IndentedWriter out)
{ UpdateWriter.output(this, out) ; }
+
+ public boolean equalTo(UpdateRequest other) {
+ return UpdateCompare.isomorphic(this, other) ;
+ }
+
}
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TS_Update.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TS_Update.java?rev=1497125&r1=1497124&r2=1497125&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TS_Update.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TS_Update.java Wed Jun 26 21:54:45 2013
@@ -24,9 +24,11 @@ import org.junit.runners.Suite.SuiteClas
@RunWith(Suite.class)
@SuiteClasses( {
- TestUpdateGraphMem.class ,
- TestUpdateGraphMgtMem.class ,
- TestUpdateOperations.class
+ TestUpdateGraphMem.class
+ , TestUpdateGraphMgtMem.class
+ , TestUpdateOperations.class
+ , TestUpdateCompare.class
+ //, TestUpdateWriter.class
})
public class TS_Update
{
Added: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateCompare.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateCompare.java?rev=1497125&view=auto
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateCompare.java (added)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateCompare.java Wed Jun 26 21:54:45 2013
@@ -0,0 +1,99 @@
+/**
+ * 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 com.hp.hpl.jena.sparql.modify;
+
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.StrUtils ;
+import org.junit.Test ;
+
+import com.hp.hpl.jena.update.UpdateFactory ;
+import com.hp.hpl.jena.update.UpdateRequest ;
+
+public class TestUpdateCompare extends BaseTest {
+ @Test public void updateCompare01() { test("INSERT DATA {}") ; }
+ @Test public void updateCompare02() { test("INSERT DATA {<s> <p> <o>}") ; }
+ @Test public void updateCompare03() { test("INSERT DATA {<s> <p> _:a}", "INSERT DATA {<s> <p> _:b}") ; }
+ @Test public void updateCompare04() { test("INSERT DATA {<s> <p> _:a ; <p> 123 }", "INSERT DATA {<s> <p> _:b . <s> <p> 123 }") ; }
+ @Test public void updateCompare05() { test("INSERT DATA {<s> <p> _:a ; <p> 123 }", "INSERT DATA {<s> <p> 123 . <s> <p> _:b . }", false) ; }
+
+ @Test public void updateCompare06() { test("DELETE DATA {}", "INSERT DATA {}", false) ; }
+ @Test public void updateCompare07() { test("DELETE DATA {<s> <p> <o>}", "DELETE DATA {<s> <p> <o>}") ; }
+
+ @Test public void updateCompare08() { test("DELETE {} INSERT {} WHERE {}") ; }
+ @Test public void updateCompare09() { test("DELETE {<s> <p> ?v} INSERT {<s> <t> _:a } WHERE { <s> <p> _:a }") ; }
+
+ @Test public void updateCompare10() { test("PREFIX : <http://example/> INSERT DATA { :s :p :o }") ; }
+ @Test public void updateCompare11() { test("PREFIX : <http://example/> INSERT DATA { :s :p :o }",
+ "PREFIX ex: <http://example/> INSERT DATA { ex:s ex:p ex:o }",
+ false) ; }
+
+ @Test public void updateCompare20() {
+ String u1 = StrUtils.strjoinNL("PREFIX : <http://example/>",
+ "WITH :g1 INSERT { :s :p :o } WHERE {}") ;
+ test(u1) ;
+ }
+
+ @Test public void updateCompare21() {
+ String u1 = "PREFIX : <http://example/> WITH :AAA INSERT { } WHERE {}" ;
+ String u2 = "PREFIX : <http://example/> WITH :ZZZ INSERT { } WHERE {}" ;
+ test(u1, u2, false) ;
+ }
+
+ @Test public void updateCompare22() {
+ String u1 = "PREFIX : <http://example/> DELETE { } USING :G WHERE {}" ;
+ test(u1) ;
+ }
+
+ @Test public void updateCompare23() {
+ String u1 = "PREFIX : <http://example/> DELETE { } USING :G WHERE {}" ;
+ String u2 = "PREFIX : <http://example/> DELETE { } USING :X WHERE {}" ;
+ test(u1, u2, false) ;
+ }
+
+ @Test public void updateCompare24() {
+ String u1 = "PREFIX : <http://example/> DELETE { } USING NAMED :G WHERE {}" ;
+ test(u1) ;
+ }
+
+ @Test public void updateCompare25() {
+ String u1 = "PREFIX : <http://example/> DELETE { } USING NAMED :G WHERE {}" ;
+ String u2 = "PREFIX : <http://example/> DELETE { } USING :G WHERE {}" ;
+ test(u1, u2, false) ;
+ }
+
+ private void test(String updateString) {
+ test(updateString, updateString, true) ;
+ }
+
+ private void test(String updateString1, String updateString2) {
+ test(updateString1, updateString2, true) ;
+ }
+
+ private void test(String updateString1, String updateString2, boolean isomorphic) {
+ UpdateRequest update1 = UpdateFactory.create(updateString1);
+ UpdateRequest update2 = UpdateFactory.create(updateString2);
+ test(update1, update2, isomorphic) ;
+ }
+
+ private void test(UpdateRequest update1, UpdateRequest update2, boolean isomorphic) {
+ boolean b = UpdateCompare.isomorphic(update1, update2) ;
+ assertEquals(update1.toString(), b, isomorphic) ;
+ }
+}
+
Added: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateWriter.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateWriter.java?rev=1497125&view=auto
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateWriter.java (added)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/TestUpdateWriter.java Wed Jun 26 21:54:45 2013
@@ -0,0 +1,53 @@
+/**
+ * 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 com.hp.hpl.jena.sparql.modify;
+
+import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.junit.Test ;
+
+import com.hp.hpl.jena.sparql.modify.request.UpdateWriter ;
+import com.hp.hpl.jena.update.UpdateFactory ;
+import com.hp.hpl.jena.update.UpdateRequest ;
+
+public class TestUpdateWriter extends BaseTest {
+ @Test public void updateWrite01() { test("INSERT DATA {}") ; }
+ @Test public void updateWrite02() { test("PREFIX : <http://example/> INSERT DATA { <s> :p 123 }") ; }
+ @Test public void updateWrite03() { test("PREFIX : <http://example/> INSERT DATA { _:a :p 123 , 456 }") ; }
+ @Test public void updateWrite04() { test("PREFIX : <http://example/> INSERT DATA { _:a :p 123 ; :q 456 }") ; }
+ @Test public void updateWrite05() { test("DELETE {} INSERT {} WHERE {}") ; }
+
+ // WITH
+ // USING / USING NAMED
+
+ @Test public void updateWrite06() { test("INSERT DATA {}") ; }
+ @Test public void updateWrite07() { test("INSERT DATA {}") ; }
+ @Test public void updateWrite08() { test("INSERT DATA {}") ; }
+ @Test public void updateWrite09() { test("INSERT DATA {}") ; }
+
+ private void test(String updateString) {
+ UpdateRequest update1 = UpdateFactory.create(updateString);
+ IndentedLineBuffer w = new IndentedLineBuffer() ;
+ UpdateWriter.output(update1, w) ;
+ String s = w.asString() ;
+ UpdateRequest update2 = UpdateFactory.create(s);
+ assertTrue(update1.equalTo(update2)) ;
+ }
+}
+