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 2009/12/14 18:55:43 UTC
svn commit: r890414 - in /incubator/clerezza/issues/CLEREZZA-15: ./
org.apache.clerezza.rdf.core/
org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/
org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sp...
Author: hasan
Date: Mon Dec 14 17:55:41 2009
New Revision: 890414
URL: http://svn.apache.org/viewvc?rev=890414&view=rev
Log:
CLEREZZA-15: fixed bug in serializer
Added:
incubator/clerezza/issues/CLEREZZA-15/
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/
- copied from r890277, incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/
Modified:
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/StringQuerySerializer.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleAskQuery.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleDescribeQuery.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleOptionalGraphPattern.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleSelectQuery.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java
incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/StringQuerySerializer.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/StringQuerySerializer.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/StringQuerySerializer.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/StringQuerySerializer.java Mon Dec 14 17:55:41 2009
@@ -25,11 +25,21 @@
import org.apache.clerezza.rdf.core.sparql.query.SelectQuery;
/**
+ * This abstract class provides a method to generate a {@link String}
+ * representation of a {@link Query}.
*
* @author hasan
*/
public abstract class StringQuerySerializer {
+ /**
+ * Serializes a {@link Query} object to a {@link String}.
+ *
+ * @param query
+ * the Query object to be serialized
+ * @return
+ * a String representation of the specified Query object.
+ */
public String serialize(Query query) {
if (query instanceof SelectQuery) {
return serialize((SelectQuery) query);
@@ -42,11 +52,43 @@
}
}
+ /**
+ * Serializes a {@link SelectQuery} object to a {@link String}.
+ *
+ * @param selectQuery
+ * the SelectQuery object to be serialized
+ * @return
+ * a String representation of the specified SelectQuery object.
+ */
public abstract String serialize(SelectQuery selectQuery);
+ /**
+ * Serializes a {@link ConstructQuery} object to a {@link String}.
+ *
+ * @param constructQuery
+ * the ConstructQuery object to be serialized
+ * @return
+ * a String representation of the specified ConstructQuery object.
+ */
public abstract String serialize(ConstructQuery constructQuery);
+ /**
+ * Serializes a {@link DescribeQuery} object to a {@link String}.
+ *
+ * @param describeQuery
+ * the DescribeQuery object to be serialized
+ * @return
+ * a String representation of the specified DescribeQuery object.
+ */
public abstract String serialize(DescribeQuery describeQuery);
+ /**
+ * Serializes an {@link AskQuery} object to a {@link String}.
+ *
+ * @param askQuery
+ * the AskQuery object to be serialized
+ * @return
+ * a String representation of the specified AskQuery object.
+ */
public abstract String serialize(AskQuery askQuery);
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleAskQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleAskQuery.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleAskQuery.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleAskQuery.java Mon Dec 14 17:55:41 2009
@@ -28,6 +28,6 @@
@Override
public String toString() {
- return SimpleStringQuerySerializer.getInstance().serialize(this);
+ return (new SimpleStringQuerySerializer()).serialize(this);
}
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleConstructQuery.java Mon Dec 14 17:55:41 2009
@@ -45,6 +45,6 @@
@Override
public String toString() {
- return SimpleStringQuerySerializer.getInstance().serialize(this);
+ return (new SimpleStringQuerySerializer()).serialize(this);
}
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleDescribeQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleDescribeQuery.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleDescribeQuery.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleDescribeQuery.java Mon Dec 14 17:55:41 2009
@@ -55,6 +55,6 @@
@Override
public String toString() {
- return SimpleStringQuerySerializer.getInstance().serialize(this);
+ return (new SimpleStringQuerySerializer()).serialize(this);
}
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleGroupGraphPattern.java Mon Dec 14 17:55:41 2009
@@ -25,9 +25,11 @@
import org.apache.clerezza.rdf.core.sparql.query.Expression;
import org.apache.clerezza.rdf.core.sparql.query.GraphPattern;
import org.apache.clerezza.rdf.core.sparql.query.GroupGraphPattern;
+import org.apache.clerezza.rdf.core.sparql.query.OptionalGraphPattern;
import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
/**
+ * This class implements {@link GroupGraphPattern}.
*
* @author hasan
*/
@@ -46,14 +48,37 @@
return constraints;
}
+ /**
+ * Adds a {@link GraphPattern} to the group.
+ *
+ * @param graphPattern
+ * the GraphPattern to be added.
+ */
public void addGraphPattern(GraphPattern graphPattern) {
graphPatterns.add(graphPattern);
}
+ /**
+ * Adds a constraint to the {@link GroupGraphPattern}.
+ *
+ * @param constraint
+ * an {@link Expression} as the constraint to be added.
+ */
public void addConstraint(Expression constraint) {
constraints.add(constraint);
}
+ /**
+ * 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 set of {@link TriplePattern}s to be added into a
+ * {@link SimpleBasicGraphPattern} of the group.
+ */
public void addTriplePatterns(Set<TriplePattern> triplePatterns) {
GraphPattern prevGraphPattern;
int size = graphPatterns.size();
@@ -68,6 +93,17 @@
graphPatterns.add(new SimpleBasicGraphPattern(triplePatterns));
}
+ /**
+ * Adds an {@link OptionalGraphPattern} to the group consisting of
+ * a main graph pattern and the specified {@link GroupGraphPattern} as
+ * the optional pattern.
+ * The main graph pattern is taken from the last added {@link GraphPattern}
+ * in the group, if it exists. Otherwise, the main graph pattern is null.
+ *
+ * @param optional
+ * a {@link GroupGraphPattern} as the optional pattern of
+ * an {@link OptionalGraphPattern}.
+ */
public void addOptionalGraphPattern(GroupGraphPattern optional) {
GraphPattern prevGraphPattern = null;
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleOptionalGraphPattern.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleOptionalGraphPattern.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleOptionalGraphPattern.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleOptionalGraphPattern.java Mon Dec 14 17:55:41 2009
@@ -23,7 +23,8 @@
import org.apache.clerezza.rdf.core.sparql.query.OptionalGraphPattern;
/**
- *
+ * This class implements {@link OptionalGraphPattern}.
+ *
* @author hasan
*/
public class SimpleOptionalGraphPattern implements OptionalGraphPattern {
@@ -31,15 +32,26 @@
private GraphPattern mainGraphPattern;
private GroupGraphPattern optionalGraphPattern;
+ /**
+ * Constructs an {@link OptionalGraphPattern} out of a {@link GraphPattern}
+ * as the main graph pattern and a {@link GroupGraphPattern} as the
+ * optional pattern.
+ *
+ * @param mainGraphPattern
+ * a {@link GraphPattern} specifying the main pattern.
+ * @param optionalGraphPattern
+ * a {@link GroupGraphPattern} specifying the optional pattern.
+ */
public SimpleOptionalGraphPattern(GraphPattern mainGraphPattern,
GroupGraphPattern optionalGraphPattern) {
- if (mainGraphPattern == null) {
- throw new IllegalArgumentException("Main graph pattern may not be null");
- }
if (optionalGraphPattern == null) {
throw new IllegalArgumentException("Optional graph pattern may not be null");
}
- this.mainGraphPattern = mainGraphPattern;
+ if (mainGraphPattern == null) {
+ this.mainGraphPattern = new SimpleGroupGraphPattern();
+ } else {
+ this.mainGraphPattern = mainGraphPattern;
+ }
this.optionalGraphPattern = optionalGraphPattern;
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleSelectQuery.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleSelectQuery.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleSelectQuery.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleSelectQuery.java Mon Dec 14 17:55:41 2009
@@ -74,6 +74,6 @@
@Override
public String toString() {
- return SimpleStringQuerySerializer.getInstance().serialize(this);
+ return (new SimpleStringQuerySerializer()).serialize(this);
}
}
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/query/impl/SimpleStringQuerySerializer.java Mon Dec 14 17:55:41 2009
@@ -45,21 +45,18 @@
import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
import org.apache.clerezza.rdf.core.sparql.query.UnaryOperation;
import org.apache.clerezza.rdf.core.sparql.query.Variable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
+ * This class implements abstract methods of {@link StringQuerySerializer}
+ * to serialize specific {@link Query} types.
*
* @author hasan
*/
public class SimpleStringQuerySerializer extends StringQuerySerializer {
- static final SimpleStringQuerySerializer instance = new SimpleStringQuerySerializer();
-
- private SimpleStringQuerySerializer() {
- }
-
- public static StringQuerySerializer getInstance() {
- return instance;
- }
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public String serialize(SelectQuery selectQuery) {
@@ -108,50 +105,20 @@
if (queryPattern == null) {
return;
}
- s.append("WHERE\n{\n");
- appendQueryPattern(s, q.getQueryPattern());
- s.append("\n}\n");
- }
-
- private void appendQueryPattern(StringBuffer s, GroupGraphPattern g) {
-
- for (GraphPattern p : g.getGraphPatterns()) {
- if (p instanceof BasicGraphPattern) {
- appendTriplePatterns(s,
- ((BasicGraphPattern) p).getTriplePatterns());
- } else if (p instanceof GroupGraphPattern) {
- s.append(" {");
- appendQueryPattern(s, (GroupGraphPattern) p);
- s.append("} ");
- } else if (p instanceof OptionalGraphPattern) {
- appendQueryPattern(s,
- (GroupGraphPattern) ((OptionalGraphPattern) p).getMainGraphPattern());
- s.append(" OPTIONAL ");
- appendQueryPattern(s,
- ((OptionalGraphPattern) p).getOptionalGraphPattern());
- } else if (p instanceof AlternativeGraphPattern) {
- List<GroupGraphPattern> alternativeGraphPatterns =
- ((AlternativeGraphPattern) p).getAlternativeGraphPatterns();
- if ((alternativeGraphPatterns != null) &&
- (!alternativeGraphPatterns.isEmpty())) {
- appendQueryPattern(s, alternativeGraphPatterns.get(0));
- int size = alternativeGraphPatterns.size();
- int i = 1;
- while (i < size) {
- s.append(" UNION ");
- appendQueryPattern(s, alternativeGraphPatterns.get(i));
- i++;
- }
- }
- } else if (p instanceof GraphGraphPattern) {
- s.append("GRAPH ");
- appendResourceOrVariable(s, ((GraphGraphPattern) p).getGraph());
- s.append(" ");
- appendQueryPattern(s, ((GraphGraphPattern) p).getGroupGraphPattern());
- }
+ s.append("WHERE\n");
+ appendGroupGraphPattern(s, q.getQueryPattern());
+ }
+
+ private void appendGroupGraphPattern(StringBuffer s,
+ GroupGraphPattern groupGraphPattern) {
+
+ s.append("{ ");
+ for (GraphPattern graphPattern : groupGraphPattern.getGraphPatterns()) {
+ appendGraphPattern(s, graphPattern);
}
- for (Expression e : g.getFilter()) {
- boolean brackettedExpr = !((e instanceof BuiltInCall) || (e instanceof FunctionCall));
+ for (Expression e : groupGraphPattern.getFilter()) {
+ boolean brackettedExpr = !((e instanceof BuiltInCall)
+ || (e instanceof FunctionCall));
s.append("FILTER ");
if (brackettedExpr) {
s.append("(");
@@ -162,6 +129,43 @@
}
s.append("\n");
}
+ s.append("} ");
+ }
+
+ private void appendGraphPattern(StringBuffer s, GraphPattern graphPattern) {
+ if (graphPattern instanceof BasicGraphPattern) {
+ appendTriplePatterns(s,
+ ((BasicGraphPattern) graphPattern).getTriplePatterns());
+ } else if (graphPattern instanceof GroupGraphPattern) {
+ appendGroupGraphPattern(s, (GroupGraphPattern) graphPattern);
+ } else if (graphPattern instanceof OptionalGraphPattern) {
+ appendGraphPattern(s,
+ ((OptionalGraphPattern) graphPattern).getMainGraphPattern());
+ s.append(" OPTIONAL ");
+ appendGroupGraphPattern(s,
+ ((OptionalGraphPattern) graphPattern).getOptionalGraphPattern());
+ } else if (graphPattern instanceof AlternativeGraphPattern) {
+ List<GroupGraphPattern> alternativeGraphPatterns =
+ ((AlternativeGraphPattern) graphPattern).getAlternativeGraphPatterns();
+ if ((alternativeGraphPatterns != null) &&
+ (!alternativeGraphPatterns.isEmpty())) {
+ appendGroupGraphPattern(s, alternativeGraphPatterns.get(0));
+ int size = alternativeGraphPatterns.size();
+ int i = 1;
+ while (i < size) {
+ s.append(" UNION ");
+ appendGroupGraphPattern(s, alternativeGraphPatterns.get(i));
+ i++;
+ }
+ }
+ } else if (graphPattern instanceof GraphGraphPattern) {
+ s.append("GRAPH ");
+ appendResourceOrVariable(s, ((GraphGraphPattern) graphPattern).getGraph());
+ s.append(" ");
+ appendGroupGraphPattern(s, ((GraphGraphPattern) graphPattern).getGroupGraphPattern());
+ } else {
+ logger.warn("Unsupported GraphPattern {}", graphPattern.getClass());
+ }
}
private void appendTriplePatterns(StringBuffer s,
Modified: incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java?rev=890414&r1=890277&r2=890414&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java (original)
+++ incubator/clerezza/issues/CLEREZZA-15/org.apache.clerezza.rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/QuerySerializerTest.java Mon Dec 14 17:55:41 2009
@@ -35,6 +35,7 @@
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleConstructQuery;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleDescribeQuery;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleGroupGraphPattern;
+import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleOptionalGraphPattern;
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;
@@ -202,4 +203,45 @@
Assert.assertTrue(selectQuery.toString()
.replaceAll("( |\n)+", " ").trim().equals(queryString));
}
+
+ @Test
+ public void testOptional() {
+
+ final String queryString = "SELECT ?title ?price WHERE { " +
+ "?x <http://purl.org/dc/elements/1.1/title> ?title . " +
+ "OPTIONAL { ?x <http://example.org/ns#price> ?price . } " +
+ "}";
+
+ Variable title = new Variable("title");
+ Variable price = new Variable("price");
+ SimpleSelectQuery selectQuery = new SimpleSelectQuery();
+ selectQuery.addSelection(title);
+ selectQuery.addSelection(price);
+
+ Variable x = new Variable("x");
+ Set<TriplePattern> triplePatterns = new HashSet<TriplePattern>();
+ triplePatterns.add(new SimpleTriplePattern(x,
+ new UriRef("http://purl.org/dc/elements/1.1/title"), title));
+
+ SimpleBasicGraphPattern bgp = new SimpleBasicGraphPattern(triplePatterns);
+
+ Set<TriplePattern> triplePatternsOpt = new HashSet<TriplePattern>();
+ triplePatternsOpt.add(new SimpleTriplePattern(x,
+ new UriRef("http://example.org/ns#price"), price));
+
+ SimpleBasicGraphPattern bgpOpt =
+ new SimpleBasicGraphPattern(triplePatternsOpt);
+
+ SimpleGroupGraphPattern ggpOpt = new SimpleGroupGraphPattern();
+ ggpOpt.addGraphPattern(bgpOpt);
+
+ SimpleOptionalGraphPattern ogp = new SimpleOptionalGraphPattern(bgp, ggpOpt);
+
+ SimpleGroupGraphPattern queryPattern = new SimpleGroupGraphPattern();
+ queryPattern.addGraphPattern(ogp);
+ selectQuery.setQueryPattern(queryPattern);
+
+ Assert.assertTrue(selectQuery.toString()
+ .replaceAll("( |\n)+", " ").trim().equals(queryString));
+ }
}