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;
 
 /**
  *


Reply via email to