You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by ha...@apache.org on 2013/10/03 05:58:18 UTC
svn commit: r1528709 - in /clerezza/trunk/rdf.core/src:
main/java/org/apache/clerezza/rdf/core/sparql/update/impl/
main/javacc/org/apache/clerezza/rdf/core/sparql/
test/java/org/apache/clerezza/rdf/core/sparql/
Author: hasan
Date: Thu Oct 3 03:58:17 2013
New Revision: 1528709
URL: http://svn.apache.org/r1528709
Log:
CLEREZZA-761: Fixed parsing of Quads that may contain more than one named graph, added support of DELETE WHERE update operation in SparqlPreParser, rearranged parsing of Prologue in update
Added:
clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteWhereOperation.java
clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/Quad.java
Modified:
clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteDataOperation.java
clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/InsertDataOperation.java
clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/UpdateOperationWithQuads.java
clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj
clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java
Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteDataOperation.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteDataOperation.java?rev=1528709&r1=1528708&r2=1528709&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteDataOperation.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteDataOperation.java Thu Oct 3 03:58:17 2013
@@ -18,20 +18,9 @@
*/
package org.apache.clerezza.rdf.core.sparql.update.impl;
-import java.util.Set;
-import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
-
/**
*
* @author hasan
*/
public class DeleteDataOperation extends UpdateOperationWithQuads {
-
- public DeleteDataOperation() {
- super(null);
- }
-
- public DeleteDataOperation(Set<TriplePattern> triplePatterns) {
- super(triplePatterns);
- }
}
Added: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteWhereOperation.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteWhereOperation.java?rev=1528709&view=auto
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteWhereOperation.java (added)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/DeleteWhereOperation.java Thu Oct 3 03:58:17 2013
@@ -0,0 +1,26 @@
+/*
+ * 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.clerezza.rdf.core.sparql.update.impl;
+
+/**
+ *
+ * @author hasan
+ */
+public class DeleteWhereOperation extends UpdateOperationWithQuads {
+}
Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/InsertDataOperation.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/InsertDataOperation.java?rev=1528709&r1=1528708&r2=1528709&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/InsertDataOperation.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/InsertDataOperation.java Thu Oct 3 03:58:17 2013
@@ -18,20 +18,9 @@
*/
package org.apache.clerezza.rdf.core.sparql.update.impl;
-import java.util.Set;
-import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
-
/**
*
* @author hasan
*/
public class InsertDataOperation extends UpdateOperationWithQuads {
-
- public InsertDataOperation() {
- super(null);
- }
-
- public InsertDataOperation(Set<TriplePattern> triplePatterns) {
- super(triplePatterns);
- }
}
Added: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/Quad.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/Quad.java?rev=1528709&view=auto
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/Quad.java (added)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/Quad.java Thu Oct 3 03:58:17 2013
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.core.sparql.update.impl;
+
+import java.util.Set;
+import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
+import org.apache.clerezza.rdf.core.sparql.query.UriRefOrVariable;
+import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleBasicGraphPattern;
+
+/**
+ *
+ * @author hasan
+ */
+public class Quad extends SimpleBasicGraphPattern {
+
+ private UriRefOrVariable graph = null;
+
+ public Quad(UriRefOrVariable graph, Set<TriplePattern> triplePatterns) {
+ super(triplePatterns);
+ this.graph = graph;
+ }
+
+ public UriRefOrVariable getGraph() {
+ return this.graph;
+ }
+}
Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/UpdateOperationWithQuads.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/UpdateOperationWithQuads.java?rev=1528709&r1=1528708&r2=1528709&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/UpdateOperationWithQuads.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/update/impl/UpdateOperationWithQuads.java Thu Oct 3 03:58:17 2013
@@ -18,29 +18,42 @@
*/
package org.apache.clerezza.rdf.core.sparql.update.impl;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.access.TcProvider;
import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
import org.apache.clerezza.rdf.core.sparql.query.UriRefOrVariable;
-import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleBasicGraphPattern;
import org.apache.clerezza.rdf.core.sparql.update.UpdateOperation;
/**
*
* @author hasan
*/
-public class UpdateOperationWithQuads extends SimpleBasicGraphPattern implements UpdateOperation {
+public class UpdateOperationWithQuads implements UpdateOperation {
- private UriRefOrVariable destinationGraph = null;
+ private Quad defaultQuad = null;
+ private List<Quad> quads = new ArrayList<Quad>();
- public UpdateOperationWithQuads(Set<TriplePattern> triplePatterns) {
- super(triplePatterns);
+ public UpdateOperationWithQuads() {
}
- public void setDestinationGraph(UriRefOrVariable destinationGraph) {
- this.destinationGraph = destinationGraph;
+ public void addQuad(Set<TriplePattern> triplePatterns) {
+ if (defaultQuad == null) {
+ defaultQuad = new Quad(null, triplePatterns);
+ } else {
+ defaultQuad.addTriplePatterns(triplePatterns);
+ }
+ }
+
+ public void addQuad(UriRefOrVariable graph, Set<TriplePattern> triplePatterns) {
+ if (graph == null) {
+ addQuad(triplePatterns);
+ } else {
+ quads.add(new Quad(graph, triplePatterns));
+ }
}
@Override
@@ -51,10 +64,14 @@ public class UpdateOperationWithQuads ex
@Override
public Set<UriRef> getDestinationGraphs(UriRef defaultGraph, TcProvider tcProvider) {
Set<UriRef> graphs = new HashSet<UriRef>();
- if (destinationGraph == null) {
+ if (defaultQuad != null) {
graphs.add(defaultGraph);
- } else if (!destinationGraph.isVariable()) {
- graphs.add(destinationGraph.getResource());
+ }
+ for (Quad quad : quads) {
+ UriRefOrVariable graph = quad.getGraph();
+ if (!graph.isVariable()) {
+ graphs.add(graph.getResource());
+ }
}
return graphs;
}
Modified: clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj?rev=1528709&r1=1528708&r2=1528709&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj (original)
+++ clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj Thu Oct 3 03:58:17 2013
@@ -96,6 +96,7 @@ import org.apache.clerezza.rdf.core.spar
import org.apache.clerezza.rdf.core.sparql.update.impl.CopyOperation;
import org.apache.clerezza.rdf.core.sparql.update.impl.CreateOperation;
import org.apache.clerezza.rdf.core.sparql.update.impl.DeleteDataOperation;
+import org.apache.clerezza.rdf.core.sparql.update.impl.DeleteWhereOperation;
import org.apache.clerezza.rdf.core.sparql.update.impl.DropOperation;
import org.apache.clerezza.rdf.core.sparql.update.impl.InsertDataOperation;
import org.apache.clerezza.rdf.core.sparql.update.impl.LoadOperation;
@@ -728,12 +729,13 @@ private void ValuesClause(Query query) :
}
/* [29] Update ::= Prologue ( Update1 ( ';' Update )? )? */
+/* [29] Update ::= ( Update1 ( ';' Prologue Update )? )? */
private void Update(Update update) : {} {
- Prologue()
(
Update1(update)
(
";"
+ Prologue()
Update(update)
)?
)?
@@ -760,7 +762,10 @@ private void Update1(Update update) : {
|
updateOperation = InsertData()
|
+ LOOKAHEAD(2)
updateOperation = DeleteData()
+ |
+ updateOperation = DeleteWhere()
) {
if (updateOperation != null) {
update.addOperation(updateOperation);
@@ -905,6 +910,14 @@ private UpdateOperation DeleteData() : {
}
/* [40] DeleteWhere ::= 'DELETE WHERE' QuadPattern */
+private UpdateOperation DeleteWhere() : {
+ DeleteWhereOperation operation; } {
+ <DELETE> <WHERE> {
+ operation = new DeleteWhereOperation(); }
+ QuadPattern(operation) {
+ return operation; }
+}
+
/* [41] Modify ::= ( 'WITH' iri )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern */
/* [42] DeleteClause ::= 'DELETE' QuadPattern */
/* [43] InsertClause ::= 'INSERT' QuadPattern */
@@ -958,6 +971,12 @@ private GraphRefAllSpec GraphRefAll() :
}
/* [48] QuadPattern ::= '{' Quads '}' */
+private void QuadPattern(UpdateOperationWithQuads operation) : {} {
+ "{"
+ Quads(operation)
+ "}"
+}
+
/* [49] QuadData ::= '{' Quads '}' */
private void QuadData(UpdateOperationWithQuads operation) : {} {
"{"
@@ -970,14 +989,14 @@ private void Quads(UpdateOperationWithQu
Set<TriplePattern> triplePatterns; } {
(
triplePatterns=TriplesTemplate() {
- operation.addTriplePatterns(triplePatterns); }
+ operation.addQuad(triplePatterns); }
)?
(
QuadsNotTriples(operation)
( "." )?
(
triplePatterns=TriplesTemplate() {
- operation.addTriplePatterns(triplePatterns); }
+ operation.addQuad(triplePatterns); }
)?
)*
}
@@ -985,17 +1004,16 @@ private void Quads(UpdateOperationWithQu
/* [51] QuadsNotTriples ::= 'GRAPH' VarOrIri '{' TriplesTemplate? '}' */
private void QuadsNotTriples(UpdateOperationWithQuads operation) : {
UriRefOrVariable graph;
- Set<TriplePattern> triplePatterns; } {
+ Set<TriplePattern> triplePatterns = null; } {
<GRAPH>
- graph=VarOrIri() {
- operation.setDestinationGraph(graph); }
+ graph=VarOrIri()
"{"
(
- triplePatterns=TriplesTemplate() {
- operation.addTriplePatterns(triplePatterns); }
+ triplePatterns=TriplesTemplate()
)?
- "}"
+ "}" {
+ operation.addQuad(graph, triplePatterns); }
}
/* [52] TriplesTemplate ::= TriplesSameSubject ( '.' TriplesTemplate? )? */
Modified: clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java?rev=1528709&r1=1528708&r2=1528709&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java (original)
+++ clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java Thu Oct 3 03:58:17 2013
@@ -335,4 +335,34 @@ public class SparqlPreParserTest {
expected.add(TEST_GRAPH);
Assert.assertTrue(referredGraphs.containsAll(expected));
}
+
+ @Test
+ public void testDeleteWhereInDefaultGraph() throws ParseException {
+
+ String queryStr = "PREFIX foaf: <http://xmlns.com/foaf/0.1/> " +
+ "DELETE WHERE { ?person foaf:givenName 'Fred'; ?property ?value }";
+
+ SparqlPreParser parser;
+ parser = new SparqlPreParser(TcManager.getInstance());
+ Set<UriRef> referredGraphs = parser.getReferredGraphs(queryStr, DEFAULT_GRAPH);
+
+ Assert.assertTrue(referredGraphs.toArray()[0].equals(DEFAULT_GRAPH));
+ }
+
+ @Test
+ public void testDeleteWhereInNamedGraphs() throws ParseException {
+
+ String queryStr = "PREFIX foaf: <http://xmlns.com/foaf/0.1/> DELETE WHERE " +
+ "{ GRAPH <http://example.com/names> { ?person foaf:givenName 'Fred' ; ?property1 ?value1 } " +
+ " GRAPH <http://example.com/addresses> { ?person ?property2 ?value2 } }";
+
+ SparqlPreParser parser;
+ parser = new SparqlPreParser(TcManager.getInstance());
+ Set<UriRef> referredGraphs = parser.getReferredGraphs(queryStr, DEFAULT_GRAPH);
+
+ Set<UriRef> expected = new HashSet<UriRef>();
+ expected.add(new UriRef("http://example.com/names"));
+ expected.add(new UriRef("http://example.com/addresses"));
+ Assert.assertTrue(referredGraphs.containsAll(expected));
+ }
}