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 2012/12/08 14:20:09 UTC

svn commit: r1418671 - in /incubator/clerezza/trunk/rdf.core/src: main/java/org/apache/clerezza/rdf/core/sparql/query/ main/java/org/apache/clerezza/rdf/core/sparql/query/impl/ main/javacc/org/apache/clerezza/rdf/core/sparql/ test/java/org/apache/clere...

Author: hasan
Date: Sat Dec  8 13:20:03 2012
New Revision: 1418671

URL: http://svn.apache.org/viewvc?rev=1418671&view=rev
Log:
CLEREZZA-725: improved SPARQL query parsing and serialization with respect to preservation of pattern ordering

Added:
    incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QueryParserSerializerCombinationTest.java
Modified:
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/BasicGraphPattern.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/ConstructQuery.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/GroupGraphPattern.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleBasicGraphPattern.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java
    incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java
    incubator/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj
    incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/BasicGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/BasicGraphPattern.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/BasicGraphPattern.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/BasicGraphPattern.java Sat Dec  8 13:20:03 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.clerezza.rdf.core.sparql.query;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -30,9 +31,15 @@ import java.util.Set;
 public interface BasicGraphPattern extends GraphPattern {
 
 	/**
-	 *
+	 * @deprecated use getTriplePatternList instead and convert the result to a Set if needed
 	 * @return a set of all triple patterns to match.
 	 */
 	public Set<TriplePattern> getTriplePatterns();
 
+	/**
+	 *
+	 * @return a list of all triple patterns to match.
+	 */
+	public List<TriplePattern> getTriplePatternList();
+
 }

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/ConstructQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/ConstructQuery.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/ConstructQuery.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/ConstructQuery.java Sat Dec  8 13:20:03 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.clerezza.rdf.core.sparql.query;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -31,6 +32,8 @@ import java.util.Set;
 public interface ConstructQuery extends QueryWithSolutionModifier {
 
 	/**
+	 * @deprecated use getTemplate instead and convert the result to a Set if needed
+	 * 
 	 * <p>Gets the template for constructing triples in a CONSTRUCT query.</p>
 	 * @see <a href="http://www.w3.org/TR/rdf-sparql-query/#construct">
 	 * SPARQL Query Language: 10.2 CONSTRUCT</a>
@@ -38,4 +41,13 @@ public interface ConstructQuery extends 
 	 *         new triples.
 	 */
 	public Set<TriplePattern> getConstructTemplate();
+
+	/**
+	 * <p>Gets the template for constructing triples in a CONSTRUCT query.</p>
+	 * @see <a href="http://www.w3.org/TR/rdf-sparql-query/#construct">
+	 * SPARQL Query Language: 10.2 CONSTRUCT</a>
+	 * @return a template as a list of triple patterns for constructing
+	 *         new triples.
+	 */
+	public List<TriplePattern> getTemplate();
 }

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/GroupGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/GroupGraphPattern.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/GroupGraphPattern.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/GroupGraphPattern.java Sat Dec  8 13:20:03 2012
@@ -31,12 +31,19 @@ import java.util.Set;
 public interface GroupGraphPattern extends GraphPattern {
 
 	/**
+	 * @deprecated use getGraphPatternList instead and convert the result to a Set if needed
 	 *
 	 * @return a set of all patterns, ANDed together.
 	 */
 	public Set<GraphPattern> getGraphPatterns();
 
 	/**
+	 *
+	 * @return a list of all patterns, ANDed together.
+	 */
+	public List<GraphPattern> getGraphPatternList();
+
+	/**
 	 * @return 
 	 *		a list of filter expressions for all patterns in the group if any,
 	 *		otherwise an empty list is returned.

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleBasicGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleBasicGraphPattern.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleBasicGraphPattern.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleBasicGraphPattern.java Sat Dec  8 13:20:03 2012
@@ -18,7 +18,9 @@
  */
 package org.apache.clerezza.rdf.core.sparql.query.impl;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import org.apache.clerezza.rdf.core.sparql.query.BasicGraphPattern;
 import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
@@ -29,20 +31,36 @@ import org.apache.clerezza.rdf.core.spar
  */
 public class SimpleBasicGraphPattern implements BasicGraphPattern {
 
-	private Set<TriplePattern> triplePatterns;
+	private List<TriplePattern> triplePatterns = new ArrayList<TriplePattern>();
 
 	public SimpleBasicGraphPattern(Set<TriplePattern> triplePatterns) {
-		this.triplePatterns = (triplePatterns == null)
-				? new HashSet<TriplePattern>()
-				: triplePatterns;
+		if (triplePatterns != null) {
+			this.triplePatterns.addAll(triplePatterns);
+		}
+	}
+
+	public SimpleBasicGraphPattern(List<TriplePattern> triplePatterns) {
+		if (triplePatterns != null) {
+			this.triplePatterns = triplePatterns;
+		}
 	}
 
 	@Override
+	@Deprecated
 	public Set<TriplePattern> getTriplePatterns() {
+		return new HashSet(triplePatterns);
+	}
+
+	@Override
+	public List<TriplePattern> getTriplePatternList() {
 		return triplePatterns;
 	}
 
 	public void addTriplePatterns(Set<TriplePattern> triplePatterns) {
 		this.triplePatterns.addAll(triplePatterns);
 	}
+
+	public void addTriplePatterns(List<TriplePattern> triplePatterns) {
+		this.triplePatterns.addAll(triplePatterns);
+	}
 }

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java Sat Dec  8 13:20:03 2012
@@ -18,7 +18,9 @@
  */
 package org.apache.clerezza.rdf.core.sparql.query.impl;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
 import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
@@ -30,16 +32,28 @@ import org.apache.clerezza.rdf.core.spar
 public class SimpleConstructQuery extends SimpleQueryWithSolutionModifier
 		implements ConstructQuery {
 
-	private Set<TriplePattern> triplePatterns;
+	private List<TriplePattern> triplePatterns = new ArrayList<TriplePattern>();
 
 	public SimpleConstructQuery(Set<TriplePattern> triplePatterns) {
-		this.triplePatterns = (triplePatterns == null)
-				? new HashSet<TriplePattern>()
-				: triplePatterns;
+		if (triplePatterns != null) {
+			this.triplePatterns.addAll(triplePatterns);
+		}
+	}
+
+	public SimpleConstructQuery(List<TriplePattern> triplePatterns) {
+		if (triplePatterns != null) {
+			this.triplePatterns = triplePatterns;
+		}
 	}
 
 	@Override
+	@Deprecated
 	public Set<TriplePattern> getConstructTemplate() {
+		return new HashSet(triplePatterns);
+	}
+
+	@Override
+	public List<TriplePattern> getTemplate() {
 		return triplePatterns;
 	}
 

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java Sat Dec  8 13:20:03 2012
@@ -39,11 +39,17 @@ public class SimpleGroupGraphPattern imp
 	private List<GraphPattern> graphPatterns = new ArrayList<GraphPattern>();
 
 	@Override
+	@Deprecated
 	public Set<GraphPattern> getGraphPatterns() {
 		return new HashSet(graphPatterns);
 	}
 
 	@Override
+	public List<GraphPattern> getGraphPatternList() {
+		return graphPatterns;
+	}
+
+	@Override
 	public List<Expression> getFilter() {
 		return constraints;
 	}
@@ -80,6 +86,21 @@ public class SimpleGroupGraphPattern imp
 	 *		{@link SimpleBasicGraphPattern} of the group.
 	 */
 	public void addTriplePatterns(Set<TriplePattern> triplePatterns) {
+		addTriplePatterns(new ArrayList(triplePatterns));
+	}
+
+	/**
+	 * If the last {@link GraphPattern} added to the group is not a 
+	 * {@link SimpleBasicGraphPattern}, then creates one containing the 
+	 * specified {@link TriplePattern}s and adds it to the group.
+	 * Otherwise, adds the specified {@link TriplePattern}s to the last
+	 * added {@link SimpleBasicGraphPattern} in the group.
+	 * 
+	 * @param triplePatterns
+	 *		a list of {@link TriplePattern}s to be added into a 
+	 *		{@link SimpleBasicGraphPattern} of the group.
+	 */
+	public void addTriplePatterns(List<TriplePattern> triplePatterns) {
 		GraphPattern prevGraphPattern;
 		int size = graphPatterns.size();
 		if (size > 0) {

Modified: incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java Sat Dec  8 13:20:03 2012
@@ -19,7 +19,6 @@
 package org.apache.clerezza.rdf.core.sparql.query.impl;
 
 import java.util.List;
-import java.util.Set;
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.UriRef;
@@ -114,7 +113,7 @@ public class SimpleStringQuerySerializer
 			GroupGraphPattern groupGraphPattern) {
 
 		s.append("{ ");
-		for (GraphPattern graphPattern : groupGraphPattern.getGraphPatterns()) {
+		for (GraphPattern graphPattern : groupGraphPattern.getGraphPatternList()) {
 			appendGraphPattern(s, graphPattern);
 		}
 		for (Expression e : groupGraphPattern.getFilter()) {
@@ -136,7 +135,7 @@ public class SimpleStringQuerySerializer
 	private void appendGraphPattern(StringBuffer s, GraphPattern graphPattern) {
 		if (graphPattern instanceof BasicGraphPattern) {
 			appendTriplePatterns(s,
-					((BasicGraphPattern) graphPattern).getTriplePatterns());
+					((BasicGraphPattern) graphPattern).getTriplePatternList());
 		} else if (graphPattern instanceof GroupGraphPattern) {
 			appendGroupGraphPattern(s, (GroupGraphPattern) graphPattern);
 		} else if (graphPattern instanceof OptionalGraphPattern) {
@@ -170,7 +169,7 @@ public class SimpleStringQuerySerializer
 	}
 
 	private void appendTriplePatterns(StringBuffer s,
-			Set<TriplePattern> triplePatterns) {
+			List<TriplePattern> triplePatterns) {
 
 		for (TriplePattern p : triplePatterns) {
 			appendResourceOrVariable(s, p.getSubject());
@@ -271,7 +270,7 @@ public class SimpleStringQuerySerializer
 	@Override
 	public String serialize(ConstructQuery constructQuery) {
 		StringBuffer s = new StringBuffer("CONSTRUCT\n");
-		Set<TriplePattern> triplePatterns = constructQuery.getConstructTemplate();
+		List<TriplePattern> triplePatterns = constructQuery.getTemplate();
 		s.append("{ ");
 		if (triplePatterns != null && !triplePatterns.isEmpty()) {
 			appendTriplePatterns(s, triplePatterns);

Modified: incubator/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj (original)
+++ incubator/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj Sat Dec  8 13:20:03 2012
@@ -33,10 +33,8 @@ package org.apache.clerezza.rdf.core.spa
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.apache.clerezza.rdf.core.BNode;
@@ -145,10 +143,10 @@ class JavaCCGeneratedQueryParser {
 		return v;
 	}
 
-	private void addTriplePatterns(Set<TriplePattern> triplePatterns,
+	private void addTriplePatterns(List<TriplePattern> triplePatterns,
 			ResourceOrVariable subject,
 			UriRefOrVariable predicate,
-			Set<ResourceOrVariable> objects) {
+			List<ResourceOrVariable> objects) {
 
 		for (ResourceOrVariable object : objects) {
 			triplePatterns.add(
@@ -158,7 +156,7 @@ class JavaCCGeneratedQueryParser {
 
 	// nodes contain at least one element
 	private ResourceOrVariable addTriplePatterns(
-			Set<TriplePattern> triplePatterns,
+			List<TriplePattern> triplePatterns,
 			List<ResourceOrVariable> nodes) {
 
 		ResourceOrVariable head = null;
@@ -344,7 +342,7 @@ private void SelectQuery() : {
 
 /* [6]      ConstructQuery    ::=   'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier */
 private void ConstructQuery() : {
-	Set<TriplePattern> triplePatterns = null; } {
+	List<TriplePattern> triplePatterns = null; } {
 
 	<CONSTRUCT>
 	triplePatterns=ConstructTemplate() {
@@ -491,7 +489,7 @@ private GroupGraphPattern GroupGraphPatt
 
 /* [21]    TriplesBlock    ::=    TriplesSameSubject ( '.' TriplesBlock? )? */
 private void TriplesBlock(GroupGraphPattern groupGraphPattern) : {
-	Set<TriplePattern> triplePatterns; } {
+	List<TriplePattern> triplePatterns; } {
 
 	triplePatterns=TriplesSameSubject() {
 	((SimpleGroupGraphPattern) groupGraphPattern).addTriplePatterns(triplePatterns); }
@@ -604,8 +602,8 @@ private List<Expression> ArgList() : {
 }
 
 /* [30]    ConstructTemplate    ::=    '{' ConstructTriples? '}' */
-private Set<TriplePattern> ConstructTemplate() : {
-	Set<TriplePattern> triplePatterns = null; } {
+private List<TriplePattern> ConstructTemplate() : {
+	List<TriplePattern> triplePatterns = null; } {
 
 	"{" (
 	triplePatterns=ConstructTriples()
@@ -614,8 +612,8 @@ private Set<TriplePattern> ConstructTemp
 }
 
 /* [31]    ConstructTriples    ::=    TriplesSameSubject ( '.' ConstructTriples? )? */
-private Set<TriplePattern> ConstructTriples() : {
-	Set<TriplePattern> triplePatterns, t; } {
+private List<TriplePattern> ConstructTriples() : {
+	List<TriplePattern> triplePatterns, t; } {
 
 	triplePatterns=TriplesSameSubject()
 	( "."
@@ -628,8 +626,8 @@ private Set<TriplePattern> ConstructTrip
 }
 
 /* [32]    TriplesSameSubject    ::=    VarOrTerm PropertyListNotEmpty |  TriplesNode PropertyList */
-private Set<TriplePattern> TriplesSameSubject() : {
-	Set<TriplePattern> triplePatterns = new HashSet<TriplePattern>();
+private List<TriplePattern> TriplesSameSubject() : {
+	List<TriplePattern> triplePatterns = new ArrayList<TriplePattern>();
 	ResourceOrVariable subject; } {
 
 	( subject=VarOrTerm() PropertyListNotEmpty(subject, triplePatterns) {
@@ -643,9 +641,9 @@ private Set<TriplePattern> TriplesSameSu
 
 /* [33]    PropertyListNotEmpty    ::=    Verb ObjectList ( ';' ( Verb ObjectList )? )* */
 private void PropertyListNotEmpty(ResourceOrVariable subject,
-		Set<TriplePattern> triplePatterns) : {
+		List<TriplePattern> triplePatterns) : {
 	UriRefOrVariable predicate;
-	Set<ResourceOrVariable> objects; } {
+	List<ResourceOrVariable> objects; } {
 	predicate=Verb()
 	objects=ObjectList(triplePatterns) {
 	addTriplePatterns(triplePatterns, subject, predicate, objects); }
@@ -659,16 +657,16 @@ private void PropertyListNotEmpty(Resour
 
 /* [34]    PropertyList    ::=    PropertyListNotEmpty? */
 private void PropertyList(ResourceOrVariable subject,
-		Set<TriplePattern> triplePatterns) : { } {
+		List<TriplePattern> triplePatterns) : { } {
 	( PropertyListNotEmpty(subject, triplePatterns) )?
 }
 
 /* [35]    ObjectList    ::=    Object ( ',' Object )* */
-private Set<ResourceOrVariable> ObjectList(Set<TriplePattern> triplePatterns) : {
+private List<ResourceOrVariable> ObjectList(List<TriplePattern> triplePatterns) : {
 	ResourceOrVariable object; } {
 
 	{
-	Set<ResourceOrVariable> objects = new HashSet<ResourceOrVariable>();
+	List<ResourceOrVariable> objects = new ArrayList<ResourceOrVariable>();
 	}
 	object=Object(triplePatterns) {
 	objects.add(object); }
@@ -681,7 +679,7 @@ private Set<ResourceOrVariable> ObjectLi
 }
 
 /* [36]    Object    ::=    GraphNode */
-private ResourceOrVariable Object(Set<TriplePattern> triplePatterns) : {
+private ResourceOrVariable Object(List<TriplePattern> triplePatterns) : {
 	ResourceOrVariable object; } {
 
 	object=GraphNode(triplePatterns) {
@@ -698,9 +696,9 @@ private UriRefOrVariable Verb() : {
 	return new UriRefOrVariable(RDF_TYPE); }
 }
 
-// Fill in the specified set of TriplePattern and returns the subject node
+// Fill in the specified list of TriplePattern and returns the subject node
 /* [38]    TriplesNode    ::=    Collection |  BlankNodePropertyList */
-private ResourceOrVariable TriplesNode(Set<TriplePattern> triplePatterns) : {
+private ResourceOrVariable TriplesNode(List<TriplePattern> triplePatterns) : {
 	ResourceOrVariable subject; } {
 	(
 		subject=Collection(triplePatterns)
@@ -711,7 +709,7 @@ private ResourceOrVariable TriplesNode(S
 }
 
 /* [39]    BlankNodePropertyList    ::=    '[' PropertyListNotEmpty ']' */
-private ResourceOrVariable BlankNodePropertyList(Set<TriplePattern> triplePatterns) : { } {
+private ResourceOrVariable BlankNodePropertyList(List<TriplePattern> triplePatterns) : { } {
 	{
 	ResourceOrVariable subject = getNewBNode();
 	}
@@ -720,7 +718,7 @@ private ResourceOrVariable BlankNodeProp
 }
 
 /* [40]    Collection    ::=    '(' GraphNode+ ')' */
-private ResourceOrVariable Collection(Set<TriplePattern> triplePatterns) : {
+private ResourceOrVariable Collection(List<TriplePattern> triplePatterns) : {
 	ResourceOrVariable node;
 	List<ResourceOrVariable> nodes = new ArrayList<ResourceOrVariable>(); } {
 
@@ -734,7 +732,7 @@ private ResourceOrVariable Collection(Se
 }
 
 /* [41]    GraphNode    ::=    VarOrTerm |  TriplesNode */
-private ResourceOrVariable GraphNode(Set<TriplePattern> triplePatterns) : {
+private ResourceOrVariable GraphNode(List<TriplePattern> triplePatterns) : {
 	ResourceOrVariable node; } {
 
 	(

Added: incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QueryParserSerializerCombinationTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QueryParserSerializerCombinationTest.java?rev=1418671&view=auto
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QueryParserSerializerCombinationTest.java (added)
+++ incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QueryParserSerializerCombinationTest.java Sat Dec  8 13:20:03 2012
@@ -0,0 +1,140 @@
+/*
+ * 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;
+
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ * @author hasan
+ */
+public class QueryParserSerializerCombinationTest {
+	
+	public QueryParserSerializerCombinationTest() {
+	}
+	
+	@BeforeClass
+	public static void setUpClass() {
+	}
+	
+	@AfterClass
+	public static void tearDownClass() {
+	}
+	
+	@Before
+	public void setUp() {
+	}
+	
+	@After
+	public void tearDown() {
+	}
+
+	@Test
+    public void testPatternOrderPreservation() throws Exception {
+        String queryString =
+				"SELECT ?property ?range ?property_description ?subproperty ?subproperty_description \n"
+				+ "WHERE\n"
+				+ "{ ?property <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#ObjectProperty> .\n"
+				+ "{ { ?property <http://www.w3.org/2000/01/rdf-schema#domain> ?superclass .\n"
+				+ "<http://example.org/ontologies/market_ontology.owl#Company> <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?superclass .\n"
+				+ "}  UNION { ?property <http://www.w3.org/2000/01/rdf-schema#domain> ?dunion .\n"
+				+ "?dunion <http://www.w3.org/2002/07/owl#unionOf> ?dlist .\n"
+				+ "?dlist <http://jena.hpl.hp.com/ARQ/list#member> ?superclass .\n"
+				+ "<http://example.org/ontologies/market_ontology.owl#Company> <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?superclass .\n"
+				+ "} } { { ?property <http://www.w3.org/2000/01/rdf-schema#range> ?superrange .\n"
+				+ "?range <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?superrange .\n"
+				+ "FILTER (! (isBLANK(?range)))\n"
+				+ "}  UNION { ?property <http://www.w3.org/2000/01/rdf-schema#range> ?range .\n"
+				+ "FILTER (! (isBLANK(?range)))\n"
+				+ "} }  OPTIONAL { ?somesub <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?range .\n"
+				+ "FILTER (((?somesub) != (<http://www.w3.org/2002/07/owl#Nothing>)) && ((?somesub) != (?range)))\n"
+				+ "}  OPTIONAL { ?subproperty <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> ?property .\n"
+ 				+ " OPTIONAL { ?subproperty <http://purl.org/dc/elements/1.1/description> ?subproperty_description .\n"
+				+ "} FILTER (((?subproperty) != (<http://www.w3.org/2002/07/owl#bottomObjectProperty>)) && ((?subproperty) != (?property)))\n"
+				+ "}  OPTIONAL { ?property <http://purl.org/dc/elements/1.1/description> ?property_description .\n"
+				+ "} FILTER ((?property) != (<http://www.w3.org/2002/07/owl#bottomObjectProperty>))\n"
+				+ "FILTER ((?range) != (<http://www.w3.org/2002/07/owl#Nothing>))\n"
+				+ "FILTER (! (BOUND(?somesub)))\n"
+				+ "} \n";
+
+        Query query = QueryParser.getInstance().parse(queryString);
+        Assert.assertEquals(queryString.replaceAll("\\s", "").trim(), query.toString().replaceAll("\\s", "").trim());
+	}
+
+	@Test
+    public void testParsingAndSerializationStability() throws Exception {
+        String queryString =
+                "PREFIX mo: <http://example.org/ontologies/market_ontology.owl#>\n"
+                + "PREFIX list: <http://jena.hpl.hp.com/ARQ/list#>\n"
+                + "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
+                + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
+                + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"
+                + "PREFIX dc: <http://purl.org/dc/elements/1.1/>\n"
+                + "SELECT ?property ?range ?property_description ?subproperty ?subproperty_description\n"
+                + "WHERE {\n"
+                + "    ?property a owl:ObjectProperty .\n"
+                + "    FILTER (?property != owl:bottomObjectProperty) .\n"
+                + "    {\n"
+                + "        {\n"
+                + "            ?property rdfs:domain ?superclass .\n"
+                + "            mo:Company rdfs:subClassOf ?superclass .\n"
+                + "        }\n"
+                + "        UNION\n"
+                + "        {\n"
+                + "            ?property rdfs:domain ?dunion .\n"
+                + "            ?dunion owl:unionOf ?dlist .\n"
+                + "            ?dlist list:member ?superclass .\n"
+                + "            mo:Company rdfs:subClassOf ?superclass .\n"
+                + "        }\n"
+                + "    }\n"
+                + "    {\n"
+                + "        {\n"
+                + "            ?property rdfs:range ?superrange .\n"
+                + "            ?range rdfs:subClassOf ?superrange .\n"
+                + "            FILTER (!isBlank(?range)) .\n"
+                + "        }\n"
+                + "        UNION\n"
+                + "        {\n"
+                + "            ?property rdfs:range ?range .\n"
+                + "            FILTER (!isBlank(?range)) .\n"
+                + "        }\n"
+                + "    } .\n"
+                + "    FILTER (?range != owl:Nothing) .\n"
+                + "    OPTIONAL { ?somesub rdfs:subClassOf ?range . FILTER(?somesub != owl:Nothing && ?somesub != ?range)}\n"
+                + "    FILTER (!bound(?somesub)) .\n"
+                + "    OPTIONAL {\n"
+                + "        ?subproperty rdfs:subPropertyOf ?property .\n"
+                + "        FILTER(?subproperty != owl:bottomObjectProperty && ?subproperty != ?property)\n"
+                + "        OPTIONAL { ?subproperty dc:description ?subproperty_description . }\n"
+                + "    }\n"
+                + "    OPTIONAL { ?property dc:description ?property_description . }\n"
+                + "} ";
+
+        Query query1 = QueryParser.getInstance().parse(queryString);
+        Thread.sleep(5000l);
+        Query query2 = QueryParser.getInstance().parse(queryString);
+        Assert.assertEquals(query1.toString(), query2.toString());
+    }
+}

Modified: incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java?rev=1418671&r1=1418670&r2=1418671&view=diff
==============================================================================
--- incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java (original)
+++ incubator/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java Sat Dec  8 13:20:03 2012
@@ -22,8 +22,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.junit.Assert;
-import org.junit.Test;
 import org.apache.clerezza.rdf.core.LiteralFactory;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.sparql.query.BinaryOperation;
@@ -44,6 +42,8 @@ import org.apache.clerezza.rdf.core.spar
 import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleOrderCondition;
 import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleSelectQuery;
 import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleTriplePattern;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  *