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/03/25 06:05:11 UTC
svn commit: r1460522 [2/2] - in /clerezza/trunk/rdf.core/src:
main/java/org/apache/clerezza/rdf/core/sparql/
main/java/org/apache/clerezza/rdf/core/sparql/query/
main/java/org/apache/clerezza/rdf/core/sparql/query/impl/
main/java/org/apache/clerezza/rd...
Copied: clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj (from r1454966, clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj)
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj?p2=clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj&p1=clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj&r1=1454966&r2=1460522&rev=1460522&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedQueryParser.jj (original)
+++ clerezza/trunk/rdf.core/src/main/javacc/org/apache/clerezza/rdf/core/sparql/JavaCCGeneratedSparqlPreParser.jj Mon Mar 25 05:05:11 2013
@@ -19,7 +19,6 @@
options
{
STATIC=false;
- SUPPORT_CLASS_VISIBILITY_PUBLIC=false;
UNICODE_INPUT=true;
IGNORE_CASE=false;
JAVA_UNICODE_ESCAPE=false;
@@ -27,7 +26,7 @@ options
JDK_VERSION="1.6";
}
-PARSER_BEGIN(JavaCCGeneratedQueryParser)
+PARSER_BEGIN(JavaCCGeneratedSparqlPreParser)
package org.apache.clerezza.rdf.core.sparql;
@@ -48,31 +47,37 @@ import org.apache.clerezza.rdf.core.Type
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
import org.apache.clerezza.rdf.core.impl.TypedLiteralImpl;
-import org.apache.clerezza.rdf.core.sparql.query.GroupGraphPattern;
-import org.apache.clerezza.rdf.core.sparql.query.BinaryOperation;
-import org.apache.clerezza.rdf.core.sparql.query.Variable;
-import org.apache.clerezza.rdf.core.sparql.query.ResourceOrVariable;
-import org.apache.clerezza.rdf.core.sparql.query.UriRefOrVariable;
-import org.apache.clerezza.rdf.core.sparql.query.FunctionCall;
-import org.apache.clerezza.rdf.core.sparql.query.TriplePattern;
-import org.apache.clerezza.rdf.core.sparql.query.Query;
-import org.apache.clerezza.rdf.core.sparql.query.LiteralExpression;
import org.apache.clerezza.rdf.core.sparql.query.AlternativeGraphPattern;
+import org.apache.clerezza.rdf.core.sparql.query.BinaryOperation;
import org.apache.clerezza.rdf.core.sparql.query.BuiltInCall;
import org.apache.clerezza.rdf.core.sparql.query.Expression;
-import org.apache.clerezza.rdf.core.sparql.query.UriRefExpression;
+import org.apache.clerezza.rdf.core.sparql.query.FunctionCall;
+import org.apache.clerezza.rdf.core.sparql.query.GroupGraphPattern;
+import org.apache.clerezza.rdf.core.sparql.query.InlineData;
+import org.apache.clerezza.rdf.core.sparql.query.LiteralExpression;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.apache.clerezza.rdf.core.sparql.query.ResourceOrVariable;
+import org.apache.clerezza.rdf.core.sparql.query.RhsListBinaryOperation;
+import org.apache.clerezza.rdf.core.sparql.query.SparqlUnit;
+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.UriRefExpression;
+import org.apache.clerezza.rdf.core.sparql.query.UriRefOrVariable;
+import org.apache.clerezza.rdf.core.sparql.query.Variable;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleAlternativeGraphPattern;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleAskQuery;
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.SimpleGraphGraphPattern;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleGroupGraphPattern;
+import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleInlineData;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleOrderCondition;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleQuery;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleQueryWithSolutionModifier;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleSelectQuery;
+import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleSparqlUnit;
import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleTriplePattern;
+import org.apache.clerezza.rdf.core.sparql.update.Update;
/**
*
@@ -80,163 +85,159 @@ import org.apache.clerezza.rdf.core.spar
* - for initial grammar of this file (available in mulgara project).
* Modified by: Hasan <ha...@trialox.org>
*/
-class JavaCCGeneratedQueryParser {
+class JavaCCGeneratedSparqlPreParser {
- private static final UriRef RDF_TYPE =
- new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
- private static final UriRef RDF_FIRST =
- new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#first");
- private static final UriRef RDF_REST =
- new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#rest");
- private static final UriRef RDF_NIL =
- new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil");
-
- /** A RegEx pattern for separating out a namespace from a prefixed name. */
- private static final Pattern pfxNamePattern = Pattern.compile("([^:]*):(.*)");
-
- private Query query;
- private String base;
- private Map<String, String> prefixes;
- private Map<String, ResourceOrVariable> bNodes;
- private int count;
- private Map<String, Variable> vars;
-
- void initialize() {
- query = null;
- base = null;
- prefixes = new HashMap<String, String>();
- bNodes = new HashMap<String, ResourceOrVariable>();
- count = 0;
- vars = new HashMap<String, Variable>();
- }
-
- Query parse() throws ParseException {
- initialize();
- this.Query();
- return this.query;
- }
-
- private static String unquote(String s) {
- return s.substring(1, s.length() - 1);
- }
-
- private static String unTripleQuote(String s) {
- return s.substring(3, s.length() - 3);
- }
-
- private Variable getVariable(String name) {
- name = name.substring(1);
- Variable v = vars.get(name);
- if (v == null) {
- v = new Variable(name);
- vars.put(name, v);
- if (query instanceof SimpleSelectQuery) {
- SimpleSelectQuery sq = (SimpleSelectQuery) query;
- if (sq.isSelectAll()) {
- sq.addSelection(v);
- }
- } else if (query instanceof SimpleDescribeQuery) {
- SimpleDescribeQuery dq = (SimpleDescribeQuery) query;
- if (dq.isDescribeAll()) {
- dq.addResourceToDescribe(new ResourceOrVariable(v));
- }
- }
- }
- return v;
- }
-
- private void addTriplePatterns(Set<TriplePattern> triplePatterns,
- ResourceOrVariable subject,
- UriRefOrVariable predicate,
- Set<ResourceOrVariable> objects) {
-
- for (ResourceOrVariable object : objects) {
- triplePatterns.add(
- new SimpleTriplePattern(subject, predicate, object));
- }
- }
-
- // nodes contain at least one element
- private ResourceOrVariable addTriplePatterns(
- Set<TriplePattern> triplePatterns,
- List<ResourceOrVariable> nodes) {
-
- ResourceOrVariable head = null;
- UriRefOrVariable rdfFirst = new UriRefOrVariable(RDF_FIRST);
- UriRefOrVariable rdfRest = new UriRefOrVariable(RDF_REST);
- UriRefOrVariable rdfNil = new UriRefOrVariable(RDF_NIL);
-
- ResourceOrVariable prevSubject = null;
- for (ResourceOrVariable node : nodes) {
- ResourceOrVariable currentSubject = getNewBNode();
- if (prevSubject != null) {
- triplePatterns.add(
- new SimpleTriplePattern(prevSubject, rdfRest, currentSubject));
- } else {
- head = currentSubject;
- }
- triplePatterns.add(
- new SimpleTriplePattern(currentSubject, rdfFirst, node));
- prevSubject = currentSubject;
- }
- if (prevSubject != null) {
- triplePatterns.add(
- new SimpleTriplePattern(prevSubject, rdfRest, rdfNil));
- }
- return head;
- }
-
- private ResourceOrVariable getNewBNode() {
- ResourceOrVariable bNode = new ResourceOrVariable(new BNode());
- bNodes.put("*" + count++, bNode);
- return bNode;
- }
-
- private ResourceOrVariable getBNode(String label) {
- ResourceOrVariable bNode = bNodes.get(label);
- if (bNode == null) {
- bNode = new ResourceOrVariable(new BNode());
- bNodes.put(label, bNode);
- }
- return bNode;
- }
-
- private UriRef createUriRef(String r) throws ParseException {
- // Create an IRI directly if the string does not start with a prefix
- Matcher m = pfxNamePattern.matcher(r);
- if (!m.matches()) {
- // either a normal IRI, or one with a BASE
- return isRelative(r) ? new UriRef(base + r) : new UriRef(r);
- }
- // extract the prefix, and attempt to convert to a URI before creating the reference
- String ns = prefixes.get(m.group(1));
- return ns == null ? new UriRef(r) : new UriRef(ns + m.group(2));
- }
-
- /**
- * Tests if the string for a URI is relative or absolute. The test is based on a scheme existing
- * in the string, which in turn expects a : character to follow it. If there is no colon, then
- * it is presumed to be relative. Otherwise, if there are special characters preceding the first
- * colon these are presumed to not be in a scheme.
- * @param u A string for a URI.
- * @return <code>true</code> if the URI appears to be relative, <code>false</code> otherwise.
- */
- private static boolean isRelative(String u) {
- int colon = u.indexOf(':');
- if (colon < 0) {
- return true;
- }
- for (int c = 0; c < colon; c++) {
- // if there a non-alphanum characters then this is not a scheme, so the URI is relative
- if (!Character.isLetterOrDigit(u.charAt(c))) {
- return true;
- }
- }
- // found a (probably) valid scheme, so the URI is absolute
- return false;
- }
+ private static final UriRef RDF_TYPE =
+ new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
+ private static final UriRef RDF_FIRST =
+ new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#first");
+ private static final UriRef RDF_REST =
+ new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#rest");
+ private static final UriRef RDF_NIL =
+ new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil");
+
+ /** A RegEx pattern for separating out a namespace from a prefixed name. */
+ private static final Pattern pfxNamePattern = Pattern.compile("([^:]*):(.*)");
+
+ private String base;
+ private Map<String, String> prefixes;
+ private Map<String, ResourceOrVariable> bNodes;
+ private int count;
+
+ void initialize() {
+ base = null;
+ prefixes = new HashMap<String, String>();
+ bNodes = new HashMap<String, ResourceOrVariable>();
+ count = 0;
+ }
+
+ SparqlUnit parse() throws ParseException {
+ SparqlUnit sparqlUnit;
+ initialize();
+ sparqlUnit = this.SparqlUnit();
+ return sparqlUnit;
+ }
+
+ Query parseQuery() throws ParseException {
+ Query query;
+ initialize();
+ query = this.QueryUnit();
+ return query;
+ }
+
+ Update parseUpdate() throws ParseException {
+ Update update;
+ initialize();
+ update = this.UpdateUnit();
+ return update;
+ }
+
+ private static String unquote(String s) {
+ return s.substring(1, s.length() - 1);
+ }
+
+ private static String unTripleQuote(String s) {
+ return s.substring(3, s.length() - 3);
+ }
+
+ private Variable createVariable(String name) {
+ name = name.substring(1);
+ Variable v = new Variable(name);
+ return v;
+ }
+
+ private void addTriplePatterns(Set<TriplePattern> triplePatterns,
+ ResourceOrVariable subject,
+ UriRefOrVariable predicate,
+ Set<ResourceOrVariable> objects) {
+
+ for (ResourceOrVariable object : objects) {
+ triplePatterns.add(
+ new SimpleTriplePattern(subject, predicate, object));
+ }
+ }
+
+ // nodes contain at least one element
+ private ResourceOrVariable addTriplePatterns(
+ Set<TriplePattern> triplePatterns,
+ List<ResourceOrVariable> nodes) {
+
+ ResourceOrVariable head = null;
+ UriRefOrVariable rdfFirst = new UriRefOrVariable(RDF_FIRST);
+ UriRefOrVariable rdfRest = new UriRefOrVariable(RDF_REST);
+ UriRefOrVariable rdfNil = new UriRefOrVariable(RDF_NIL);
+
+ ResourceOrVariable prevSubject = null;
+ for (ResourceOrVariable node : nodes) {
+ ResourceOrVariable currentSubject = getNewBNode();
+ if (prevSubject != null) {
+ triplePatterns.add(
+ new SimpleTriplePattern(prevSubject, rdfRest, currentSubject));
+ } else {
+ head = currentSubject;
+ }
+ triplePatterns.add(
+ new SimpleTriplePattern(currentSubject, rdfFirst, node));
+ prevSubject = currentSubject;
+ }
+ if (prevSubject != null) {
+ triplePatterns.add(
+ new SimpleTriplePattern(prevSubject, rdfRest, rdfNil));
+ }
+ return head;
+ }
+
+ private ResourceOrVariable getNewBNode() {
+ ResourceOrVariable bNode = new ResourceOrVariable(new BNode());
+ bNodes.put("*" + count++, bNode);
+ return bNode;
+ }
+
+ private ResourceOrVariable getBNode(String label) {
+ ResourceOrVariable bNode = bNodes.get(label);
+ if (bNode == null) {
+ bNode = new ResourceOrVariable(new BNode());
+ bNodes.put(label, bNode);
+ }
+ return bNode;
+ }
+
+ private UriRef createUriRef(String r) throws ParseException {
+ // Create an IRI directly if the string does not start with a prefix
+ Matcher m = pfxNamePattern.matcher(r);
+ if (!m.matches()) {
+ // either a normal IRI, or one with a BASE
+ return isRelative(r) ? new UriRef(base + r) : new UriRef(r);
+ }
+ // extract the prefix, and attempt to convert to a URI before creating the reference
+ String ns = prefixes.get(m.group(1));
+ return ns == null ? new UriRef(r) : new UriRef(ns + m.group(2));
+ }
+
+ /**
+ * Tests if the string for a URI is relative or absolute. The test is based on a scheme existing
+ * in the string, which in turn expects a : character to follow it. If there is no colon, then
+ * it is presumed to be relative. Otherwise, if there are special characters preceding the first
+ * colon these are presumed to not be in a scheme.
+ * @param u A string for a URI.
+ * @return <code>true</code> if the URI appears to be relative, <code>false</code> otherwise.
+ */
+ private static boolean isRelative(String u) {
+ int colon = u.indexOf(':');
+ if (colon < 0) {
+ return true;
+ }
+ for (int c = 0; c < colon; c++) {
+ // if there a non-alphanum characters then this is not a scheme, so the URI is relative
+ if (!Character.isLetterOrDigit(u.charAt(c))) {
+ return true;
+ }
+ }
+ // found a (probably) valid scheme, so the URI is absolute
+ return false;
+ }
}
-PARSER_END(JavaCCGeneratedQueryParser)
+PARSER_END(JavaCCGeneratedSparqlPreParser)
SKIP :
{
@@ -262,939 +263,1120 @@ TOKEN [IGNORE_CASE] :
| < BY : "BY" >
| < FROM : "FROM" >
| < GRAPH : "GRAPH" >
-| < STR : "STR" >
-| < IS_URI : "isURI" >
| < PREFIX : "PREFIX" >
| < CONSTRUCT : "CONSTRUCT" >
| < LIMIT : "LIMIT" >
| < NAMED : "NAMED" >
| < OPTIONAL : "OPTIONAL" >
-| < LANG : "lang" >
-| < IS_IRI : "isIRI" >
| < DESCRIBE : "DESCRIBE" >
| < OFFSET : "OFFSET" >
| < WHERE : "WHERE" >
| < UNION : "UNION" >
-| < LANGMATCHES : "langMatches" >
-| < IS_BLANK : "isBlank" >
-| < IS_LITERAL : "isLiteral" >
| < ASK : "ASK" >
| < DISTINCT : "DISTINCT" >
| < FILTER : "FILTER" >
-| < DATATYPE : "datatype" >
-| < REGEX : "regex" >
| < REDUCED : "REDUCED" >
+| < GROUP_CONCAT : "GROUP_CONCAT" >
| < BOUND : "bound" >
| < TRUE : "TRUE" >
-| < SAME_TERM : "sameTerm" >
| < FALSE : "FALSE" >
+| < VALUES : "VALUES" >
+| < UNDEF : "UNDEF" >
+| < AS : "AS" >
+| < GROUP : "GROUP" >
+| < HAVING : "HAVING" >
+| < LOAD : "LOAD" >
+| < SILENT : "SILENT" >
+| < INTO : "INTO" >
+| < CLEAR : "CLEAR" >
+| < DROP : "DROP" >
+| < CREATE : "CREATE" >
+| < ADD : "ADD" >
+| < TO : "TO" >
+| < MOVE : "MOVE" >
+| < COPY : "COPY" >
+| < INSERT_DATA : "INSERT DATA" >
+| < DELETE_DATA : "DELETE DATA" >
+| < DELETE_WHERE : "DELETE WHERE" >
+| < WITH : "WITH" >
+| < DELETE : "DELETE" >
+| < INSERT : "INSERT" >
+| < USING : "USING" >
+| < DEFAULT_T : "DEFAULT" >
+| < ALL : "ALL" >
+| < IN : "IN" >
+| < NOT : "NOT" >
+| < BNODE : "BNODE" >
+| < RAND : "RAND" >
+| < CONCAT : "CONCAT" >
+| < NOW : "NOW" >
+| < UUID : "UUID" >
+| < STRUUID : "STRUUID" >
+| < COALESCE : "COALESCE" >
+| < SEPARATOR : "SEPARATOR" >
+}
+
+/* SparqlUnit ::= Prologue ( Query | Update ) */
+private SparqlUnit SparqlUnit() : {
+ Query query;
+ Update update; } {
+ Prologue()
+ (
+ query=Query() {
+ return new SimpleSparqlUnit(query); }
+ |
+ update=Update() {
+ return new SimpleSparqlUnit(update); }
+ )
+}
+
+/* [1] QueryUnit ::= Query */
+/* [1] QueryUnit ::= Prologue Query */
+private Query QueryUnit() : {
+ Query query; } {
+ Prologue()
+ query=Query() {
+ return query; }
+}
+
+/* [2] Query ::= Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause */
+/* [2] Query ::= ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause */
+private Query Query() : {
+ Query query; } {
+ (
+ query = SelectQuery()
+ |
+ query = ConstructQuery()
+ |
+ query = DescribeQuery()
+ |
+ query = AskQuery()
+ ) {
+ return query;
+ }
+}
+
+/* [3] UpdateUnit ::= Update */
+/* [3] UpdateUnit ::= Prologue Update */
+private Update UpdateUnit() : {
+ Update update; } {
+ Prologue()
+ update=Update() {
+ return update; }
}
-
-/* [1] Query ::= Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) */
-private void Query() : {} {
- Prologue() ( SelectQuery() | ConstructQuery() | DescribeQuery() | AskQuery() ) <EOF>
-}
-
-/* [2] Prologue ::= BaseDecl? PrefixDecl* */
+/* [4] Prologue ::= ( BaseDecl | PrefixDecl )* */
private void Prologue() : {} {
- ( BaseDecl() )? ( PrefixDecl() )*
+ ( BaseDecl() | PrefixDecl() )*
}
-/* [3] BaseDecl ::= 'BASE' IRI_REF */
+/* [5] BaseDecl ::= 'BASE' IRIREF */
private void BaseDecl() : {
- Token iriRef; } {
+ Token iriRef; } {
- <BASE> iriRef=<IRI_REF> { base = unquote(iriRef.image); }
+ <BASE> iriRef=<IRIREF> { base = unquote(iriRef.image); }
}
-/* [4] PrefixDecl ::= 'PREFIX' PNAME_NS IRI_REF */
+/* [6] PrefixDecl ::= 'PREFIX' PNAME_NS IRIREF */
private void PrefixDecl() : {
- Token ns, iriRef; } {
+ Token ns, iriRef; } {
- <PREFIX> ns=<PNAME_NS> iriRef=<IRI_REF> {
- String pfx = ns.image;
- prefixes.put(pfx.substring(0, pfx.length() - 1), unquote(iriRef.image)); }
-}
-
-/* [5] SelectQuery ::= 'SELECT' ( 'DISTINCT' | 'REDUCED' )? ( Var+ | '*' ) DatasetClause* WhereClause SolutionModifier */
-private void SelectQuery() : {
- Variable v; } {
-
- <SELECT> {
- query = new SimpleSelectQuery(); }
- (
- <DISTINCT> {
- ((SimpleSelectQuery) query).setDistinct(); }
- |
- <REDUCED> {
- ((SimpleSelectQuery) query).setReduced(); }
- )?
- (
- ( v=Var() {
- ((SimpleSelectQuery) query).addSelection(v); } )+
- |
- "*" {
- ((SimpleSelectQuery) query).setSelectAll(); }
- )
- ( DatasetClause() )*
- WhereClause()
- SolutionModifier()
-}
-
-/* [6] ConstructQuery ::= 'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier */
-private void ConstructQuery() : {
- Set<TriplePattern> triplePatterns = null; } {
-
- <CONSTRUCT>
- triplePatterns=ConstructTemplate() {
- query = new SimpleConstructQuery(triplePatterns); }
- ( DatasetClause() )*
- WhereClause()
- SolutionModifier()
-}
-
-/* [7] DescribeQuery ::= 'DESCRIBE' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier */
-private void DescribeQuery() : {
- UriRefOrVariable node; } {
-
- <DESCRIBE> {
- query = new SimpleDescribeQuery(); }
- (
- ( node=VarOrIRIref() {
- ((SimpleDescribeQuery) query).addResourceToDescribe(node); } )+
- |
- "*" {
- ((SimpleDescribeQuery) query).setDescribeAll(); }
- )
- ( DatasetClause() )*
- ( WhereClause() )?
- SolutionModifier()
-}
-
-/* [8] AskQuery ::= 'ASK' DatasetClause* WhereClause */
-private void AskQuery() : {} {
- <ASK> {
- query = new SimpleAskQuery(); }
- ( DatasetClause() )*
- WhereClause()
-}
-
-/* [9] DatasetClause ::= 'FROM' ( DefaultGraphClause | NamedGraphClause ) */
-private void DatasetClause() : {} {
- <FROM> (DefaultGraphClause() | NamedGraphClause())
-}
-
-/* [10] DefaultGraphClause ::= SourceSelector */
-private void DefaultGraphClause() : {
- UriRef defaultGraph; } {
-
- defaultGraph=SourceSelector() {
- ((SimpleQuery) query).addDefaultGraph(defaultGraph); }
-}
-
-/* [11] NamedGraphClause ::= 'NAMED' SourceSelector */
-private void NamedGraphClause() : {
- UriRef namedGraph; } {
-
- <NAMED> namedGraph=SourceSelector() {
- ((SimpleQuery) query).addNamedGraph(namedGraph); }
+ <PREFIX> ns=<PNAME_NS> iriRef=<IRIREF> {
+ String pfx = ns.image;
+ prefixes.put(pfx.substring(0, pfx.length() - 1), unquote(iriRef.image)); }
}
-/* [12] SourceSelector ::= IRIref */
-private UriRef SourceSelector() : {
- UriRef graph; } {
-
- graph=IRIref() {
- return graph; }
-}
-
-/* [13] WhereClause ::= 'WHERE'? GroupGraphPattern */
-private void WhereClause() : {
- GroupGraphPattern queryPattern; } {
-
- (<WHERE>)? queryPattern=GroupGraphPattern() {
- ((SimpleQuery) query).setQueryPattern(queryPattern); }
-}
-
-/* [14] SolutionModifier ::= OrderClause? LimitOffsetClauses? */
-private void SolutionModifier() : {} {
- ( OrderClause() )?
- ( LimitOffsetClauses() )?
-}
-
-/* [15] LimitOffsetClauses ::= ( LimitClause OffsetClause? | OffsetClause LimitClause? ) */
-private void LimitOffsetClauses() : {} {
- ( LimitClause() (OffsetClause())? )
- |
- ( OffsetClause() (LimitClause())? )
-}
-
-/* [16] OrderClause ::= 'ORDER' 'BY' OrderCondition+ */
-private void OrderClause() : {} {
- <ORDER> <BY> ( OrderCondition() )+
-}
-
-/* [17] OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression ) | ( Constraint | Var ) */
-private void OrderCondition() : {
- boolean asc = true;
- Expression e; } {
-
- (
- ( ( "ASC" | "DESC" { asc = false; } ) e=BrackettedExpression() )
- |
- ( e=Constraint() | e=Var() )
- ) {
- ((SimpleQueryWithSolutionModifier) query).addOrderCondition(new SimpleOrderCondition(e, asc)); }
-}
-
-/* [18] LimitClause ::= 'LIMIT' INTEGER */
-private void LimitClause() : {
- Token t; } {
-
- <LIMIT> t=<INTEGER> {
- ((SimpleQueryWithSolutionModifier) query).setLimit(Integer.parseInt(t.image)); }
-}
-
-/* [19] OffsetClause ::= 'OFFSET' INTEGER */
-private void OffsetClause() : {
- Token t; } {
-
- <OFFSET> t=<INTEGER> {
- ((SimpleQueryWithSolutionModifier) query).setOffset(Integer.parseInt(t.image)); }
-}
-
-/* [20] GroupGraphPattern ::= '{' TriplesBlock? ( ( GraphPatternNotTriples | Filter ) '.'? TriplesBlock? )* '}' */
-private GroupGraphPattern GroupGraphPattern() : {
- GroupGraphPattern groupGraphPattern = new SimpleGroupGraphPattern();
- Expression constraint; } {
-
- "{"
- ( TriplesBlock(groupGraphPattern) )?
- (
- (
- GraphPatternNotTriples(groupGraphPattern)
- |
- constraint=Filter() {
- ((SimpleGroupGraphPattern) groupGraphPattern).addConstraint(constraint); }
- )
-
- (".")?
-
- (
- TriplesBlock(groupGraphPattern)
- )?
- )*
- "}" {
- return groupGraphPattern; }
+/* [7] SelectQuery ::= SelectClause DatasetClause* WhereClause SolutionModifier */
+private Query SelectQuery() : {
+ Query query; } {
+ query = SelectClause()
+ ( DatasetClause(query) )* {
+ return query; }
}
-/* [21] TriplesBlock ::= TriplesSameSubject ( '.' TriplesBlock? )? */
-private void TriplesBlock(GroupGraphPattern groupGraphPattern) : {
- Set<TriplePattern> triplePatterns; } {
+/* [8] SubSelect ::= SelectClause WhereClause SolutionModifier ValuesClause */
- triplePatterns=TriplesSameSubject() {
- ((SimpleGroupGraphPattern) groupGraphPattern).addTriplePatterns(triplePatterns); }
+/* [9] SelectClause ::= 'SELECT' ( 'DISTINCT' | 'REDUCED' )? ( ( Var | ( '(' Expression 'AS' Var ')' ) )+ | '*' ) */
+private Query SelectClause() : {
+ Query query;
+ Variable v;
+ Expression e; } {
- ( "." (TriplesBlock(groupGraphPattern) )?
- )?
-}
+ <SELECT> {
+ query = new SimpleSelectQuery(); }
+ (
+ <DISTINCT> {
+ ((SimpleSelectQuery) query).setDistinct(); }
+ |
+ <REDUCED> {
+ ((SimpleSelectQuery) query).setReduced(); }
+ )?
+ (
+ (
+ v=Var() {
+ ((SimpleSelectQuery) query).addSelection(v); }
+ |
+ (
+ "("
+ e=Expression()
+ <AS>
+ v=Var() {
+ v.setBoundExpression(e);
+ ((SimpleSelectQuery) query).addSelection(v); }
+ ")"
+ )
+ )+
+ |
+ "*" {
+ ((SimpleSelectQuery) query).setSelectAll(); }
+ ) {
+ return query; }
+}
+
+/* [10] ConstructQuery ::= 'CONSTRUCT' ( ConstructTemplate DatasetClause* WhereClause SolutionModifier | DatasetClause* 'WHERE' '{' TriplesTemplate? '}' SolutionModifier ) */
+private Query ConstructQuery() : {
+ Query query;
+ Set<TriplePattern> triplePatterns = null; } {
-/* [22] GraphPatternNotTriples ::= OptionalGraphPattern | GroupOrUnionGraphPattern | GraphGraphPattern */
-private void GraphPatternNotTriples(GroupGraphPattern groupGraphPattern) : {} {
+ <CONSTRUCT>
+ (
+ triplePatterns=ConstructTemplate() {
+ query = new SimpleConstructQuery(triplePatterns); }
+ ( DatasetClause(query) )*
+ |
+ {
+ query = new SimpleConstructQuery(triplePatterns); }
+ ( DatasetClause(query) )*
+ ) {
+ return query; }
+}
+
+/* [11] DescribeQuery ::= 'DESCRIBE' ( VarOrIri+ | '*' ) DatasetClause* WhereClause? SolutionModifier */
+private Query DescribeQuery() : {
+ Query query;
+ UriRefOrVariable node; } {
- (
- OptionalGraphPattern(groupGraphPattern)
- |
- GroupOrUnionGraphPattern(groupGraphPattern)
- |
- GraphGraphPattern(groupGraphPattern)
- )
+ <DESCRIBE> {
+ query = new SimpleDescribeQuery(); }
+ (
+ ( node=VarOrIri() {
+ ((SimpleDescribeQuery) query).addResourceToDescribe(node); } )+
+ |
+ "*" {
+ ((SimpleDescribeQuery) query).setDescribeAll(); }
+ )
+ ( DatasetClause(query) )* {
+ return query; }
}
-/* [23] OptionalGraphPattern ::= 'OPTIONAL' GroupGraphPattern */
-private void OptionalGraphPattern(GroupGraphPattern groupGraphPattern) : {
- GroupGraphPattern optional; } {
+/* [12] AskQuery ::= 'ASK' DatasetClause* WhereClause SolutionModifier */
+private Query AskQuery() : {
+ Query query; } {
- <OPTIONAL>
- optional=GroupGraphPattern() {
- ((SimpleGroupGraphPattern) groupGraphPattern).addOptionalGraphPattern(optional); }
+ <ASK> {
+ query = new SimpleAskQuery(); }
+ ( DatasetClause(query) )* {
+ return query; }
}
-/* [24] GraphGraphPattern ::= 'GRAPH' VarOrIRIref GroupGraphPattern */
-private void GraphGraphPattern(GroupGraphPattern groupGraphPattern) : {
- UriRefOrVariable graph;
- GroupGraphPattern g; } {
-
- <GRAPH>
- graph=VarOrIRIref()
- g=GroupGraphPattern() {
- ((SimpleGroupGraphPattern) groupGraphPattern).addGraphPattern(
- new SimpleGraphGraphPattern(graph, g)); }
+/* [13] DatasetClause ::= 'FROM' ( DefaultGraphClause | NamedGraphClause ) */
+private void DatasetClause(Query query) : {} {
+ <FROM> (DefaultGraphClause(query) | NamedGraphClause(query))
}
-/* [25] GroupOrUnionGraphPattern ::= GroupGraphPattern ( 'UNION' GroupGraphPattern )* */
-private void GroupOrUnionGraphPattern(GroupGraphPattern groupGraphPattern) : {
- GroupGraphPattern g;
- AlternativeGraphPattern unionGraphPattern = null; } {
+/* [14] DefaultGraphClause ::= SourceSelector */
+private void DefaultGraphClause(Query query) : {
+ UriRef defaultGraph; } {
- g=GroupGraphPattern()
- (
- <UNION> {
- if (unionGraphPattern == null) {
- unionGraphPattern = new SimpleAlternativeGraphPattern(g);
- } }
- g=GroupGraphPattern() {
- ((SimpleAlternativeGraphPattern) unionGraphPattern).addAlternativeGraphPattern(g); }
- )* {
- if (unionGraphPattern != null) {
- ((SimpleGroupGraphPattern) groupGraphPattern).addGraphPattern(unionGraphPattern);
- } else {
- ((SimpleGroupGraphPattern) groupGraphPattern).addGraphPattern(g);
- } }
+ defaultGraph=SourceSelector() {
+ ((SimpleQuery) query).addDefaultGraph(defaultGraph); }
}
-/* [26] Filter ::= 'FILTER' Constraint */
-private Expression Filter() : {
- Expression c; } {
+/* [15] NamedGraphClause ::= 'NAMED' SourceSelector */
+private void NamedGraphClause(Query query) : {
+ UriRef namedGraph; } {
- <FILTER>
- c=Constraint() {
- return c; }
+ <NAMED> namedGraph=SourceSelector() {
+ ((SimpleQuery) query).addNamedGraph(namedGraph); }
}
-/* [27] Constraint ::= BrackettedExpression | BuiltInCall | FunctionCall */
-private Expression Constraint() : {
- Expression c; } {
+/* [16] SourceSelector ::= iri */
+private UriRef SourceSelector() : {
+ UriRef graph; } {
- ( c=BrackettedExpression() | c=BuiltInCall() | c=FunctionCall() ) {
- return c; }
+ graph=Iri() {
+ return graph; }
}
-/* [28] FunctionCall ::= IRIref ArgList */
-private FunctionCall FunctionCall() : {
- UriRef name;
- List<Expression> arguments;} {
-
- name=IRIref()
- arguments=ArgList() {
- return new FunctionCall(name, arguments); }
-}
+/*
+[17] WhereClause ::= 'WHERE'? GroupGraphPattern
+[18] SolutionModifier ::= GroupClause? HavingClause? OrderClause? LimitOffsetClauses?
+[19] GroupClause ::= 'GROUP' 'BY' GroupCondition+
+[20] GroupCondition ::= BuiltInCall | FunctionCall | '(' Expression ( 'AS' Var )? ')' | Var
+[21] HavingClause ::= 'HAVING' HavingCondition+
+[22] HavingCondition ::= Constraint
+[23] OrderClause ::= 'ORDER' 'BY' OrderCondition+
+[24] OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression ) | ( Constraint | Var )
+[25] LimitOffsetClauses ::= LimitClause OffsetClause? | OffsetClause LimitClause?
+[26] LimitClause ::= 'LIMIT' INTEGER
+[27] OffsetClause ::= 'OFFSET' INTEGER
+[28] ValuesClause ::= ( 'VALUES' DataBlock )?
+*/
+
+/* [29] Update ::= Prologue ( Update1 ( ';' Update )? )? */
+/* [29] Update ::= ( Update1 ( ';' UpdateUnit )? )? */
+private Update Update() : {
+ Update update; } {
+ <LOAD> {
+ return null; }
+}
+
+/* [30] Update1 ::= Load | Clear | Drop | Add | Move | Copy | Create | InsertData | DeleteData | DeleteWhere | Modify */
+/* [31] Load ::= 'LOAD' 'SILENT'? iri ( 'INTO' GraphRef )? */
+/* [32] Clear ::= 'CLEAR' 'SILENT'? GraphRefAll */
+/* [33] Drop ::= 'DROP' 'SILENT'? GraphRefAll */
+/* [34] Create ::= 'CREATE' 'SILENT'? GraphRef */
+/* [35] Add ::= 'ADD' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault */
+/* [36] Move ::= 'MOVE' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault */
+/* [37] Copy ::= 'COPY' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault */
+/* [38] InsertData ::= 'INSERT DATA' QuadData */
+/* [39] DeleteData ::= 'DELETE DATA' QuadData */
+/* [40] DeleteWhere ::= 'DELETE WHERE' QuadPattern */
+/* [41] Modify ::= ( 'WITH' iri )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern */
+/* [42] DeleteClause ::= 'DELETE' QuadPattern */
+/* [43] InsertClause ::= 'INSERT' QuadPattern */
+/* [44] UsingClause ::= 'USING' ( iri | 'NAMED' iri ) */
+/* [45] GraphOrDefault ::= 'DEFAULT_T' | 'GRAPH'? iri */
+/* [46] GraphRef ::= 'GRAPH' iri */
+/* [47] GraphRefAll ::= GraphRef | 'DEFAULT_T' | 'NAMED' | 'ALL' */
+/* [48] QuadPattern ::= '{' Quads '}' */
+/* [49] QuadData ::= '{' Quads '}' */
+/* [50] Quads ::= TriplesTemplate? ( QuadsNotTriples '.'? TriplesTemplate? )* */
+/* [51] QuadsNotTriples ::= 'GRAPH' VarOrIri '{' TriplesTemplate? '}' */
+/* [52] TriplesTemplate ::= TriplesSameSubject ( '.' TriplesTemplate? )? */
+
+/* [53] GroupGraphPattern ::= '{' ( SubSelect | GroupGraphPatternSub ) '}' */
+/* [54] GroupGraphPatternSub ::= TriplesBlock? ( GraphPatternNotTriples '.'? TriplesBlock? )* */
+/* [55] TriplesBlock ::= TriplesSameSubjectPath ( '.' TriplesBlock? )? */
+/* [56] GraphPatternNotTriples ::= GroupOrUnionGraphPattern | OptionalGraphPattern | MinusGraphPattern | GraphGraphPattern | ServiceGraphPattern | Filter | Bind | InlineData */
+/* [57] OptionalGraphPattern ::= 'OPTIONAL' GroupGraphPattern */
+/* [58] GraphGraphPattern ::= 'GRAPH' VarOrIri GroupGraphPattern */
+/* [59] ServiceGraphPattern ::= 'SERVICE' 'SILENT'? VarOrIri GroupGraphPattern */
+/* [60] Bind ::= 'BIND' '(' Expression 'AS' Var ')' */
+/* [61] InlineData ::= 'VALUES' DataBlock */
+/* [62] DataBlock ::= InlineDataOneVar | InlineDataFull */
+/* [63] InlineDataOneVar ::= Var '{' DataBlockValue* '}' */
+/* [64] InlineDataFull ::= ( NIL | '(' Var* ')' ) '{' ( '(' DataBlockValue* ')' | NIL )* '}' */
+/* [65] DataBlockValue ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF' */
+/* [66] MinusGraphPattern ::= 'MINUS' GroupGraphPattern */
+/* [67] GroupOrUnionGraphPattern ::= GroupGraphPattern ( 'UNION' GroupGraphPattern )* */
+/* [68] Filter ::= 'FILTER' Constraint */
+/* [69] Constraint ::= BrackettedExpression | BuiltInCall | FunctionCall */
+/* [70] FunctionCall ::= iri ArgList */
-/* [29] ArgList ::= ( NIL | '(' Expression ( ',' Expression )* ')' ) */
+/* [71] ArgList ::= NIL | '(' 'DISTINCT'? Expression ( ',' Expression )* ')' */
private List<Expression> ArgList() : {
- List<Expression> args = new ArrayList<Expression>();
- Expression e; } {
+ List<Expression> args = new ArrayList<Expression>();
+ Expression e; } {
- (
- <NIL>
- |
- (
- "("
- e=Expression() {
- args.add(e); }
- ( ","
- e=Expression() {
- args.add(e); }
- )*
- ")"
- )
- ) {
- return args; }
+ (
+ <NIL>
+ |
+ (
+ "("
+ (
+ <DISTINCT>
+ )?
+ e=Expression() {
+ args.add(e); }
+ (
+ ","
+ e=Expression() {
+ args.add(e); }
+ )*
+ ")"
+ )
+ ) {
+ return args; }
+}
+
+/* [72] ExpressionList ::= NIL | '(' Expression ( ',' Expression )* ')' */
+private List<Expression> ExpressionList() : {
+ List<Expression> args = new ArrayList<Expression>();
+ Expression e; } {
+
+ (
+ <NIL>
+ |
+ (
+ "("
+ e=Expression() {
+ args.add(e); }
+ (
+ ","
+ e=Expression() {
+ args.add(e); }
+ )*
+ ")"
+ )
+ ) {
+ return args; }
}
-/* [30] ConstructTemplate ::= '{' ConstructTriples? '}' */
+/* [73] ConstructTemplate ::= '{' ConstructTriples? '}' */
private Set<TriplePattern> ConstructTemplate() : {
- Set<TriplePattern> triplePatterns = null; } {
+ Set<TriplePattern> triplePatterns = null; } {
- "{" (
- triplePatterns=ConstructTriples()
- )? "}" {
- return triplePatterns; }
+ "{" (
+ triplePatterns=ConstructTriples()
+ )? "}" {
+ return triplePatterns; }
}
-/* [31] ConstructTriples ::= TriplesSameSubject ( '.' ConstructTriples? )? */
+/* [74] ConstructTriples ::= TriplesSameSubject ( '.' ConstructTriples? )? */
private Set<TriplePattern> ConstructTriples() : {
- Set<TriplePattern> triplePatterns, t; } {
+ Set<TriplePattern> triplePatterns, t; } {
- triplePatterns=TriplesSameSubject()
- ( "."
- (
- t=ConstructTriples() {
- triplePatterns.addAll(t); }
- )?
- )? {
- return triplePatterns; }
+ triplePatterns=TriplesSameSubject()
+ ( "."
+ (
+ t=ConstructTriples() {
+ triplePatterns.addAll(t); }
+ )?
+ )? {
+ return triplePatterns; }
}
-/* [32] TriplesSameSubject ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList */
+/* [75] TriplesSameSubject ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList */
private Set<TriplePattern> TriplesSameSubject() : {
- Set<TriplePattern> triplePatterns = new LinkedHashSet<TriplePattern>();
- ResourceOrVariable subject; } {
+ Set<TriplePattern> triplePatterns = new LinkedHashSet<TriplePattern>();
+ ResourceOrVariable subject; } {
- ( subject=VarOrTerm() PropertyListNotEmpty(subject, triplePatterns) {
- return triplePatterns; }
- )
- |
- ( subject=TriplesNode(triplePatterns) PropertyList(subject, triplePatterns) {
- return triplePatterns; }
- )
-}
-
-/* [33] PropertyListNotEmpty ::= Verb ObjectList ( ';' ( Verb ObjectList )? )* */
-private void PropertyListNotEmpty(ResourceOrVariable subject,
- Set<TriplePattern> triplePatterns) : {
- UriRefOrVariable predicate;
- Set<ResourceOrVariable> objects; } {
- predicate=Verb()
- objects=ObjectList(triplePatterns) {
- addTriplePatterns(triplePatterns, subject, predicate, objects); }
-
- ( ";"
- ( predicate=Verb() objects=ObjectList(triplePatterns) {
- addTriplePatterns(triplePatterns, subject, predicate, objects); }
- )?
- )*
-}
-
-/* [34] PropertyList ::= PropertyListNotEmpty? */
-private void PropertyList(ResourceOrVariable subject,
- Set<TriplePattern> triplePatterns) : { } {
- ( PropertyListNotEmpty(subject, triplePatterns) )?
+ ( subject=VarOrTerm() PropertyListNotEmpty(subject, triplePatterns) {
+ return triplePatterns; }
+ )
+ |
+ ( subject=TriplesNode(triplePatterns) PropertyList(subject, triplePatterns) {
+ return triplePatterns; }
+ )
+}
+
+/* [76] PropertyList ::= PropertyListNotEmpty? */
+private void PropertyList(ResourceOrVariable subject, Set<TriplePattern> triplePatterns) : { } {
+ ( PropertyListNotEmpty(subject, triplePatterns) )?
+}
+
+/* [77] PropertyListNotEmpty ::= Verb ObjectList ( ';' ( Verb ObjectList )? )* */
+private void PropertyListNotEmpty(ResourceOrVariable subject, Set<TriplePattern> triplePatterns) : {
+ UriRefOrVariable predicate;
+ Set<ResourceOrVariable> objects; } {
+ predicate=Verb()
+ objects=ObjectList(triplePatterns) {
+ addTriplePatterns(triplePatterns, subject, predicate, objects); }
+
+ ( ";"
+ ( predicate=Verb() objects=ObjectList(triplePatterns) {
+ addTriplePatterns(triplePatterns, subject, predicate, objects); }
+ )?
+ )*
}
-/* [35] ObjectList ::= Object ( ',' Object )* */
-private Set<ResourceOrVariable> ObjectList(Set<TriplePattern> triplePatterns) : {
- ResourceOrVariable object; } {
+/* [78] Verb ::= VarOrIri | 'a' */
+private UriRefOrVariable Verb() : {
+ UriRefOrVariable predicate; } {
- {
- Set<ResourceOrVariable> objects = new LinkedHashSet<ResourceOrVariable>();
- }
- object=Object(triplePatterns) {
- objects.add(object); }
-
- ( ","
- object=Object(triplePatterns) {
- objects.add(object); }
- )* {
- return objects; }
+ predicate=VarOrIri() {
+ return predicate; }
+ | "a" {
+ return new UriRefOrVariable(RDF_TYPE); }
}
-/* [36] Object ::= GraphNode */
-private ResourceOrVariable Object(Set<TriplePattern> triplePatterns) : {
- ResourceOrVariable object; } {
+/* [79] ObjectList ::= Object ( ',' Object )* */
+private Set<ResourceOrVariable> ObjectList(Set<TriplePattern> triplePatterns) : {
+ ResourceOrVariable object; } {
- object=GraphNode(triplePatterns) {
- return object; }
+ {
+ Set<ResourceOrVariable> objects = new LinkedHashSet<ResourceOrVariable>();
+ }
+ object=Object(triplePatterns) {
+ objects.add(object); }
+
+ ( ","
+ object=Object(triplePatterns) {
+ objects.add(object); }
+ )* {
+ return objects; }
}
-/* [37] Verb ::= VarOrIRIref | 'a' */
-private UriRefOrVariable Verb() : {
- UriRefOrVariable predicate; } {
+/* [80] Object ::= GraphNode */
+private ResourceOrVariable Object(Set<TriplePattern> triplePatterns) : {
+ ResourceOrVariable object; } {
- predicate=VarOrIRIref() {
- return predicate; }
- | "a" {
- return new UriRefOrVariable(RDF_TYPE); }
+ object=GraphNode(triplePatterns) {
+ return object; }
}
+/*
+[81] TriplesSameSubjectPath ::= VarOrTerm PropertyListPathNotEmpty | TriplesNodePath PropertyListPath
+[82] PropertyListPath ::= PropertyListPathNotEmpty?
+[83] PropertyListPathNotEmpty ::= ( VerbPath | VerbSimple ) ObjectListPath ( ';' ( ( VerbPath | VerbSimple ) ObjectList )? )*
+[84] VerbPath ::= Path
+[85] VerbSimple ::= Var
+[86] ObjectListPath ::= ObjectPath ( ',' ObjectPath )*
+[87] ObjectPath ::= GraphNodePath
+[88] Path ::= PathAlternative
+[89] PathAlternative ::= PathSequence ( '|' PathSequence )*
+[90] PathSequence ::= PathEltOrInverse ( '/' PathEltOrInverse )*
+[91] PathElt ::= PathPrimary PathMod?
+[92] PathEltOrInverse ::= PathElt | '^' PathElt
+[93] PathMod ::= '?' | '*' | '+'
+[94] PathPrimary ::= iri | 'a' | '!' PathNegatedPropertySet | '(' Path ')'
+[95] PathNegatedPropertySet ::= PathOneInPropertySet | '(' ( PathOneInPropertySet ( '|' PathOneInPropertySet )* )? ')'
+[96] PathOneInPropertySet ::= iri | 'a' | '^' ( iri | 'a' )
+[97] Integer ::= INTEGER
+*/
+
// Fill in the specified set of TriplePattern and returns the subject node
-/* [38] TriplesNode ::= Collection | BlankNodePropertyList */
+/* [98] TriplesNode ::= Collection | BlankNodePropertyList */
private ResourceOrVariable TriplesNode(Set<TriplePattern> triplePatterns) : {
- ResourceOrVariable subject; } {
- (
- subject=Collection(triplePatterns)
- |
- subject=BlankNodePropertyList(triplePatterns)
- ) {
- return subject; }
+ ResourceOrVariable subject; } {
+ (
+ subject=Collection(triplePatterns)
+ |
+ subject=BlankNodePropertyList(triplePatterns)
+ ) {
+ return subject; }
}
-/* [39] BlankNodePropertyList ::= '[' PropertyListNotEmpty ']' */
+/* [99] BlankNodePropertyList ::= '[' PropertyListNotEmpty ']' */
private ResourceOrVariable BlankNodePropertyList(Set<TriplePattern> triplePatterns) : { } {
- {
- ResourceOrVariable subject = getNewBNode();
- }
- "[" PropertyListNotEmpty(subject, triplePatterns) "]" {
- return subject; }
+ {
+ ResourceOrVariable subject = getNewBNode();
+ }
+ "[" PropertyListNotEmpty(subject, triplePatterns) "]" {
+ return subject; }
}
-/* [40] Collection ::= '(' GraphNode+ ')' */
+/*
+[100] TriplesNodePath ::= CollectionPath | BlankNodePropertyListPath
+[101] BlankNodePropertyListPath ::= '[' PropertyListPathNotEmpty ']'
+*/
+
+/* [102] Collection ::= '(' GraphNode+ ')' */
private ResourceOrVariable Collection(Set<TriplePattern> triplePatterns) : {
- ResourceOrVariable node;
- List<ResourceOrVariable> nodes = new ArrayList<ResourceOrVariable>(); } {
+ ResourceOrVariable node;
+ List<ResourceOrVariable> nodes = new ArrayList<ResourceOrVariable>(); } {
- "("
- (
- node=GraphNode(triplePatterns) {
- nodes.add(node); }
- )+
- ")" {
- return addTriplePatterns(triplePatterns, nodes); }
+ "("
+ (
+ node=GraphNode(triplePatterns) {
+ nodes.add(node); }
+ )+
+ ")" {
+ return addTriplePatterns(triplePatterns, nodes); }
}
-/* [41] GraphNode ::= VarOrTerm | TriplesNode */
+/* [103] CollectionPath ::= '(' GraphNodePath+ ')' */
+
+
+/* [104] GraphNode ::= VarOrTerm | TriplesNode */
private ResourceOrVariable GraphNode(Set<TriplePattern> triplePatterns) : {
- ResourceOrVariable node; } {
+ ResourceOrVariable node; } {
- (
- node=VarOrTerm()
- |
- node=TriplesNode(triplePatterns)
- ) {
- return node; }
+ (
+ node=VarOrTerm()
+ |
+ node=TriplesNode(triplePatterns)
+ ) {
+ return node; }
}
-/* [42] VarOrTerm ::= Var | GraphTerm */
+/* [105] GraphNodePath ::= VarOrTerm | TriplesNodePath */
+
+/* [106] VarOrTerm ::= Var | GraphTerm */
private ResourceOrVariable VarOrTerm() : {
- ResourceOrVariable r;
- Variable v; } {
+ ResourceOrVariable r;
+ Variable v; } {
(
- v=Var() {
- return new ResourceOrVariable(v); }
- |
- r=GraphTerm() {
- return r; }
- )
+ v=Var() {
+ return new ResourceOrVariable(v); }
+ |
+ r=GraphTerm() {
+ return r; }
+ )
}
-/* [43] VarOrIRIref ::= Var | IRIref */
-private UriRefOrVariable VarOrIRIref() : {
- Variable var;
- UriRef uriRef; } {
+/* [107] VarOrIri ::= Var | iri */
+private UriRefOrVariable VarOrIri() : {
+ Variable var;
+ UriRef uriRef; } {
- (
- var=Var() {
- return new UriRefOrVariable(var); }
- |
- uriRef=IRIref() {
- return new UriRefOrVariable(uriRef); }
- )
+ (
+ var=Var() {
+ return new UriRefOrVariable(var); }
+ |
+ uriRef=Iri() {
+ return new UriRefOrVariable(uriRef); }
+ )
}
-/* [44] Var ::= VAR1 | VAR2 */
+/* [108] Var ::= VAR1 | VAR2 */
private Variable Var() : {
- Token t;} {
+ Token t;} {
- (t=<VAR1> | t=<VAR2>) {
- return getVariable(t.image); }
+ (t=<VAR1> | t=<VAR2>) {
+ return createVariable(t.image); }
}
-/* [45] GraphTerm ::= IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL */
+private String BuiltInCallName() : {
+ Token t;} {
+
+ t=<BUILT_IN_CALL_NAME> {
+ return t.image; }
+}
+
+/* [109] GraphTerm ::= Iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL */
private ResourceOrVariable GraphTerm() : {
- ResourceOrVariable bNode = null;
- Resource r = null; } {
+ ResourceOrVariable bNode = null;
+ Resource r = null; } {
- (r=IRIref() | r=RDFLiteral() | r=NumericLiteral() | r=BooleanLiteral() | bNode=BlankNode() | <NIL> {
- r = RDF_NIL; }) {
- if (bNode == null) {
- return new ResourceOrVariable(r);
- }
- return bNode; }
+ (r=Iri() | r=RDFLiteral() | r=NumericLiteral() | r=BooleanLiteral() | bNode=BlankNode() | <NIL> {
+ r = RDF_NIL; }) {
+ if (bNode == null) {
+ return new ResourceOrVariable(r);
+ }
+ return bNode; }
}
-/* [46] Expression ::= ConditionalOrExpression */
+/* [110] Expression ::= ConditionalOrExpression */
private Expression Expression() : {
- Expression e; } {
+ Expression e; } {
- e=ConditionalOrExpression() {
- return e; }
+ e=ConditionalOrExpression() {
+ return e; }
}
-/* [47] ConditionalOrExpression ::= ConditionalAndExpression ( '||' ConditionalAndExpression )* */
+/* [111] ConditionalOrExpression ::= ConditionalAndExpression ( '||' ConditionalAndExpression )* */
private Expression ConditionalOrExpression() : {
- Expression e, ae; } {
+ Expression e, ae; } {
- e=ConditionalAndExpression()
- ( "||"
- ae=ConditionalAndExpression() {
- e = new BinaryOperation("||", e, ae); }
- )* {
- return e; }
+ e=ConditionalAndExpression()
+ (
+ "||" ae=ConditionalAndExpression() {
+ e = new BinaryOperation("||", e, ae); }
+ )* {
+ return e; }
}
-/* [48] ConditionalAndExpression ::= ValueLogical ( '&&' ValueLogical )* */
+/* [112] ConditionalAndExpression ::= ValueLogical ( '&&' ValueLogical )* */
private Expression ConditionalAndExpression() : {
- Expression e, e2; } {
+ Expression e, e2; } {
- e=ValueLogical()
- ( "&&"
- e2=ValueLogical() {
- e = new BinaryOperation("&&", e, e2); }
- )* {
- return e; }
+ e=ValueLogical()
+ (
+ "&&" e2=ValueLogical() {
+ e = new BinaryOperation("&&", e, e2); }
+ )* {
+ return e; }
}
-/* [49] ValueLogical ::= RelationalExpression */
+/* [113] ValueLogical ::= RelationalExpression */
private Expression ValueLogical() : {
- Expression e; } {
+ Expression e; } {
- e=RelationalExpression() {
- return e; }
+ e=RelationalExpression() {
+ return e; }
}
-/* [50] RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression )? */
+/* [114] RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT' 'IN' ExpressionList )? */
private Expression RelationalExpression() : {
- Expression e, e2; } {
+ Expression e, e2;
+ List<Expression> l; } {
- e=NumericExpression()
- (
- "=" e2=NumericExpression() {
- e = new BinaryOperation("=", e, e2); }
- | "!=" e2=NumericExpression() {
- e = new BinaryOperation("!=", e, e2); }
- | "<" e2=NumericExpression() {
- e = new BinaryOperation("<", e, e2); }
- | ">" e2=NumericExpression() {
- e = new BinaryOperation(">", e, e2); }
- | "<=" e2=NumericExpression() {
- e = new BinaryOperation("<=", e, e2); }
- | ">=" e2=NumericExpression() {
- e = new BinaryOperation(">=", e, e2); }
- )? {
- return e; }
+ e=NumericExpression()
+ (
+ "=" e2=NumericExpression() {
+ e = new BinaryOperation("=", e, e2); }
+ |
+ "!=" e2=NumericExpression() {
+ e = new BinaryOperation("!=", e, e2); }
+ |
+ "<" e2=NumericExpression() {
+ e = new BinaryOperation("<", e, e2); }
+ |
+ ">" e2=NumericExpression() {
+ e = new BinaryOperation(">", e, e2); }
+ |
+ "<=" e2=NumericExpression() {
+ e = new BinaryOperation("<=", e, e2); }
+ |
+ ">=" e2=NumericExpression() {
+ e = new BinaryOperation(">=", e, e2); }
+ |
+ <IN> l=ExpressionList() {
+ e = new RhsListBinaryOperation("IN", e, l); }
+ |
+ <NOT> <IN> l=ExpressionList() {
+ e = new RhsListBinaryOperation("NOT IN", e, l); }
+ )? {
+ return e; }
}
-/* [51] NumericExpression ::= AdditiveExpression */
+/* [115] NumericExpression ::= AdditiveExpression */
private Expression NumericExpression() : {
- Expression e; } {
+ Expression e; } {
- e=AdditiveExpression() {
- return e; }
+ e=AdditiveExpression() {
+ return e; }
}
-/* [52] AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | NumericLiteralPositive | NumericLiteralNegative )* */
+/* [116] AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( '*' UnaryExpression ) | ( '/' UnaryExpression ) )* )* */
private Expression AdditiveExpression() : {
- Expression e, e2;
- TypedLiteral l; } {
+ Expression e, e2, u;
+ TypedLiteral l; } {
- e=MultiplicativeExpression()
- (
- "+" e2=MultiplicativeExpression() {
- e = new BinaryOperation("+", e, e2); }
- | "-" e2=MultiplicativeExpression() {
- e = new BinaryOperation("-", e, e2); }
- | l=NumericLiteralPositive() {
- e = new BinaryOperation("+", e, new LiteralExpression(l)); }
- | l=NumericLiteralNegative() {
- e = new BinaryOperation("-", e, new LiteralExpression(l)); }
- )* {
- return e; }
+ e=MultiplicativeExpression()
+ (
+ "+" e2=MultiplicativeExpression() {
+ e = new BinaryOperation("+", e, e2); }
+ |
+ "-" e2=MultiplicativeExpression() {
+ e = new BinaryOperation("-", e, e2); }
+ |
+ (
+ (
+ l=NumericLiteralPositive()
+ |
+ l=NumericLiteralNegative()
+ ) {
+ e2 = new LiteralExpression(l); }
+ (
+ "*" u=UnaryExpression() {
+ e2 = new BinaryOperation("*", e2, u); }
+ |
+ "/" u=UnaryExpression() {
+ e2 = new BinaryOperation("/", e2, u); }
+ )*
+ ) {
+ e = new BinaryOperation("+", e, e2); }
+ )* {
+ return e; }
}
-/* [53] MultiplicativeExpression ::= UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* */
+/* [117] MultiplicativeExpression ::= UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* */
private Expression MultiplicativeExpression() : {
- Expression e, e2; } {
+ Expression e, e2; } {
- e=UnaryExpression()
- (
- "*" e2=UnaryExpression() {
- e = new BinaryOperation("*", e, e2); }
- | "/" e2=UnaryExpression() {
- e = new BinaryOperation("/", e, e2); }
- )* {
- return e; }
+ e=UnaryExpression()
+ (
+ "*" e2=UnaryExpression() {
+ e = new BinaryOperation("*", e, e2); }
+ |
+ "/" e2=UnaryExpression() {
+ e = new BinaryOperation("/", e, e2); }
+ )* {
+ return e; }
}
-/* [54] UnaryExpression ::= '!' PrimaryExpression | '+' PrimaryExpression | '-' PrimaryExpression | PrimaryExpression */
+/* [118] UnaryExpression ::= '!' PrimaryExpression | '+' PrimaryExpression | '-' PrimaryExpression | PrimaryExpression */
private Expression UnaryExpression() : {
- Expression e; } {
+ Expression e; } {
- "!" e=PrimaryExpression() {
- return new UnaryOperation("!", e); }
- | "+" e=PrimaryExpression() {
- return new UnaryOperation("+", e); }
- | "-" e=PrimaryExpression() {
- return new UnaryOperation("-", e); }
- | e=PrimaryExpression() {
- return e; }
+ "!" e=PrimaryExpression() {
+ return new UnaryOperation("!", e); }
+ |
+ "+" e=PrimaryExpression() {
+ return new UnaryOperation("+", e); }
+ |
+ "-" e=PrimaryExpression() {
+ return new UnaryOperation("-", e); }
+ |
+ e=PrimaryExpression() {
+ return e; }
}
-/* [55] PrimaryExpression ::= BrackettedExpression | BuiltInCall | IRIrefOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var */
+/* [119] PrimaryExpression ::= BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var */
private Expression PrimaryExpression() : {
- Expression e = null;
- Literal l = null; } {
+ Expression e = null;
+ Literal l = null; } {
- (
- e=BrackettedExpression() | e=BuiltInCall() | e=IRIrefOrFunction() | l=RDFLiteral() | l=NumericLiteral() | l=BooleanLiteral() | e=Var()
- ) {
- if (l != null) {
- return new LiteralExpression(l);
- }
- return e; }
+ (
+ e=BrackettedExpression()
+/* There is a capture all names in BuiltInCall, so put it last
+ |
+ e=BuiltInCall()
+*/
+ |
+ e=IriOrFunction()
+ |
+ l=RDFLiteral()
+ |
+ l=NumericLiteral()
+ |
+ l=BooleanLiteral()
+ |
+ e=Var()
+ |
+ e=BuiltInCall()
+ ) {
+ if (l != null) {
+ return new LiteralExpression(l);
+ }
+ return e; }
}
-/* [56] BrackettedExpression ::= '(' Expression ')' */
+/* [120] BrackettedExpression ::= '(' Expression ')' */
private Expression BrackettedExpression() : {
- Expression e; } {
+ Expression e; } {
+
+ "("
+ e=Expression()
+ ")" {
+ return e; }
+}
+
+/* [121] BuiltInCall ::= Aggregate
+| 'STR' '(' Expression ')'
+| 'LANG' '(' Expression ')'
+| 'LANGMATCHES' '(' Expression ',' Expression ')'
+| 'DATATYPE' '(' Expression ')'
+| 'BOUND' '(' Var ')'
+| 'IRI' '(' Expression ')'
+| 'URI' '(' Expression ')'
+| 'BNODE' ( '(' Expression ')' | NIL )
+| 'RAND' NIL
+| 'ABS' '(' Expression ')'
+| 'CEIL' '(' Expression ')'
+| 'FLOOR' '(' Expression ')'
+| 'ROUND' '(' Expression ')'
+| 'CONCAT' ExpressionList
+| SubstringExpression
+| 'STRLEN' '(' Expression ')'
+| StrReplaceExpression
+| 'UCASE' '(' Expression ')'
+| 'LCASE' '(' Expression ')'
+| 'ENCODE_FOR_URI' '(' Expression ')'
+| 'CONTAINS' '(' Expression ',' Expression ')'
+| 'STRSTARTS' '(' Expression ',' Expression ')'
+| 'STRENDS' '(' Expression ',' Expression ')'
+| 'STRBEFORE' '(' Expression ',' Expression ')'
+| 'STRAFTER' '(' Expression ',' Expression ')'
+| 'YEAR' '(' Expression ')'
+| 'MONTH' '(' Expression ')'
+| 'DAY' '(' Expression ')'
+| 'HOURS' '(' Expression ')'
+| 'MINUTES' '(' Expression ')'
+| 'SECONDS' '(' Expression ')'
+| 'TIMEZONE' '(' Expression ')'
+| 'TZ' '(' Expression ')'
+| 'NOW' NIL
+| 'UUID' NIL
+| 'STRUUID' NIL
+| 'MD5' '(' Expression ')'
+| 'SHA1' '(' Expression ')'
+| 'SHA256' '(' Expression ')'
+| 'SHA384' '(' Expression ')'
+| 'SHA512' '(' Expression ')'
+| 'COALESCE' ExpressionList
+| 'IF' '(' Expression ',' Expression ',' Expression ')'
+| 'STRLANG' '(' Expression ',' Expression ')'
+| 'STRDT' '(' Expression ',' Expression ')'
+| 'sameTerm' '(' Expression ',' Expression ')'
+| 'isIRI' '(' Expression ')'
+| 'isURI' '(' Expression ')'
+| 'isBLANK' '(' Expression ')'
+| 'isLITERAL' '(' Expression ')'
+| 'isNUMERIC' '(' Expression ')'
+| RegexExpression
+| ExistsFunc
+| NotExistsFunc
+
+[122] RegexExpression ::= 'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')'
+[123] SubstringExpression ::= 'SUBSTR' '(' Expression ',' Expression ( ',' Expression )? ')'
+[124] StrReplaceExpression ::= 'REPLACE' '(' Expression ',' Expression ',' Expression ( ',' Expression )? ')'
+
+[127] Aggregate ::= 'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')'
+| 'SUM' '(' 'DISTINCT'? Expression ')'
+| 'MIN' '(' 'DISTINCT'? Expression ')'
+| 'MAX' '(' 'DISTINCT'? Expression ')'
+| 'AVG' '(' 'DISTINCT'? Expression ')'
+| 'SAMPLE' '(' 'DISTINCT'? Expression ')'
+| 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')'
+
+*/
- "("
- e=Expression()
- ")" {
- return e; }
-}
-
-/* [57] BuiltInCall ::= 'STR' '(' Expression ')' */
-/* | 'LANG' '(' Expression ')' */
-/* | 'LANGMATCHES' '(' Expression ',' Expression ')' */
-/* | 'DATATYPE' '(' Expression ')' */
-/* | 'BOUND' '(' Var ')' */
-/* | 'sameTerm' '(' Expression ',' Expression ')' */
-/* | 'isIRI' '(' Expression ')' */
-/* | 'isURI' '(' Expression ')' */
-/* | 'isBLANK' '(' Expression ')' */
-/* | 'isLITERAL' '(' Expression ')' */
-/* | RegexExpression */
private BuiltInCall BuiltInCall() : {
- List<Expression> args = new ArrayList<Expression>();
- String name;
- Expression e; } {
- (
- <STR> {
- name = "STR"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <LANG> {
- name = "LANG"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <LANGMATCHES> {
- name = "LANGMATCHES"; }
- "("
- e=Expression() {
- args.add(e); }
- ","
- e=Expression() {
- args.add(e); }
- ")"
- | <DATATYPE> {
- name = "DATATYPE"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <BOUND> {
- name = "BOUND"; }
- "("
- e=Var() {
- args.add(e); }
- ")"
- | <SAME_TERM> {
- name = "sameTerm"; }
- "("
- e=Expression() {
- args.add(e); }
- ","
- e=Expression() {
- args.add(e); }
- ")"
- | <IS_IRI> {
- name = "isIRI"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <IS_URI> {
- name = "isURI"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <IS_BLANK> {
- name = "isBLANK"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | <IS_LITERAL> {
- name = "isLITERAL"; }
- "("
- e=Expression() {
- args.add(e); }
- ")"
- | e=RegexExpression() {
- return (BuiltInCall) e; }
- ) {
- return new BuiltInCall(name, args);
- }
-}
-
-/* [58] RegexExpression ::= 'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')' */
-private BuiltInCall RegexExpression() : {
- List<Expression> args = new ArrayList<Expression>();
- Expression e = null; } {
-
- <REGEX>
- "("
- e=Expression() {
- args.add(e); }
- ","
- e=Expression() {
- args.add(e); }
- (
- ","
- e=Expression() {
- args.add(e); }
- )?
- ")" {
- return new BuiltInCall("REGEX", args); }
-}
-
-/* [59] IRIrefOrFunction ::= IRIref ArgList? */
-private Expression IRIrefOrFunction() : {
- UriRef uriRef;
- List<Expression> args; } {
-
- uriRef=IRIref()
- (
- args=ArgList() {
- return new FunctionCall(uriRef, args); }
- )? {
- return new UriRefExpression(uriRef); }
+ List<Expression> args = new ArrayList<Expression>();
+ String name, s;
+ Expression e; } {
+ (
+ <GROUP_CONCAT> {
+ name = "GROUP_CONCAT"; }
+ "("
+ (
+ <DISTINCT>
+ )?
+ (
+ e=Expression() {
+ args.add(e); }
+ (
+ ";"
+ <SEPARATOR>
+ "="
+ s = String()
+ )?
+ )
+ ")"
+ |
+ <BOUND> {
+ name = "BOUND"; }
+ "("
+ e=Var() {
+ args.add(e); }
+ ")"
+ |
+ <BNODE> {
+ name = "BNODE"; }
+ (
+ (
+ "("
+ e=Expression() {
+ args.add(e); }
+ ")"
+ )
+ |
+ <NIL>
+ )
+ |
+ <RAND> {
+ name = "RAND"; }
+ <NIL>
+ |
+ <CONCAT> {
+ name = "CONCAT"; }
+ args=ExpressionList()
+ |
+ <NOW> {
+ name = "NOW"; }
+ <NIL>
+ |
+ <UUID> {
+ name = "UUID"; }
+ <NIL>
+ |
+ <STRUUID> {
+ name = "STRUUID"; }
+ <NIL>
+ |
+ <COALESCE> {
+ name = "COALESCE"; }
+ args=ExpressionList()
+/*
+ |
+ e=NotExistsFunc() {
+ return (BuiltInCall) e; }
+*/
+ |
+ name=BuiltInCallName()
+ "("
+ (
+ <DISTINCT>
+ )?
+ (
+ "*"
+ |
+ (
+ e=Expression() {
+ args.add(e); }
+ (
+ ","
+ e=Expression() {
+ args.add(e); }
+ )*
+ )
+ )
+ ")"
+ ) {
+ return new BuiltInCall(name, args); }
+}
+
+/*
+[125] ExistsFunc ::= 'EXISTS' GroupGraphPattern
+[126] NotExistsFunc ::= 'NOT' 'EXISTS' GroupGraphPattern
+*/
+
+/* [128] IriOrFunction ::= iri ArgList? */
+private Expression IriOrFunction() : {
+ UriRef uriRef;
+ List<Expression> args; } {
+
+ uriRef=Iri()
+ (
+ args=ArgList() {
+ return new FunctionCall(uriRef, args); }
+ )? {
+ return new UriRefExpression(uriRef); }
}
-/* [60] RDFLiteral ::= String ( LANGTAG | ( '^^' IRIref ) )? */
+/* [129] RDFLiteral ::= String ( LANGTAG | ( '^^' iri ) )? */
private Literal RDFLiteral() : {
- Token t;
- String s;
- UriRef type; } {
-
- s = String()
- (
- t=<LANGTAG> {
- return new PlainLiteralImpl(s, new Language(t.image.substring(1))); }
- |
- ( "^^"
- type=IRIref() {
- return new TypedLiteralImpl(s, type); }
- )
- )? {
- return new PlainLiteralImpl(s); }
+ Token t;
+ String s;
+ UriRef type; } {
+
+ s = String()
+ (
+ t=<LANGTAG> {
+ return new PlainLiteralImpl(s, new Language(t.image.substring(1))); }
+ |
+ (
+ "^^"
+ type=Iri() {
+ return new TypedLiteralImpl(s, type); }
+ )
+ )? {
+ return new PlainLiteralImpl(s); }
}
-/* [61] NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative */
+/* [130] NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative */
private TypedLiteral NumericLiteral() : {
- TypedLiteral l; } {
+ TypedLiteral l; } {
- ( l=NumericLiteralUnsigned() | l=NumericLiteralPositive() | l=NumericLiteralNegative() ) {
- return l; }
+ (
+ l=NumericLiteralUnsigned()
+ |
+ l=NumericLiteralPositive()
+ |
+ l=NumericLiteralNegative()
+ ) {
+ return l; }
}
-/* [62] NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE */
+/* [131] NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE */
private TypedLiteral NumericLiteralUnsigned() : {
- Token t; } {
+ Token t; } {
- t=<INTEGER> {
- return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
- | t=<DECIMAL> {
- return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
- | t=<DOUBLE> {
- return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
+ t=<INTEGER> {
+ return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
+ |
+ t=<DECIMAL> {
+ return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
+ |
+ t=<DOUBLE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
}
-/* [63] NumericLiteralPositive ::= INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE */
+/* [132] NumericLiteralPositive ::= INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE */
private TypedLiteral NumericLiteralPositive() : {
- Token t; } {
+ Token t; } {
- t=<INTEGER_POSITIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
- | t=<DECIMAL_POSITIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
- | t=<DOUBLE_POSITIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
+ t=<INTEGER_POSITIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
+ |
+ t=<DECIMAL_POSITIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
+ |
+ t=<DOUBLE_POSITIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
}
-/* [64] NumericLiteralNegative ::= INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE */
+/* [133] NumericLiteralNegative ::= INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE */
private TypedLiteral NumericLiteralNegative() : {
- Token t; } {
+ Token t; } {
- t=<INTEGER_NEGATIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
- | t=<DECIMAL_NEGATIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
- | t=<DOUBLE_NEGATIVE> {
- return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
+ t=<INTEGER_NEGATIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Long.valueOf(t.image)); }
+ |
+ t=<DECIMAL_NEGATIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Float.valueOf(t.image)); }
+ |
+ t=<DOUBLE_NEGATIVE> {
+ return LiteralFactory.getInstance().createTypedLiteral(Double.valueOf(t.image)); }
}
-/* [65] BooleanLiteral ::= 'true' | 'false' */
+/* [134] BooleanLiteral ::= 'true' | 'false' */
private TypedLiteral BooleanLiteral() : {} {
- <TRUE> {
- return LiteralFactory.getInstance().createTypedLiteral(true); }
- | <FALSE> {
- return LiteralFactory.getInstance().createTypedLiteral(false); }
+ <TRUE> {
+ return LiteralFactory.getInstance().createTypedLiteral(true); }
+ |
+ <FALSE> {
+ return LiteralFactory.getInstance().createTypedLiteral(false); }
}
-/* [66] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 */
+/* [135] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 */
private String String() : {
- Token t; } {
- t=<STRING_LITERAL1> {
- return unquote(t.image) ; }
- | t=<STRING_LITERAL2> {
- return unquote(t.image) ; }
- | t=<STRING_LITERAL_LONG1> {
- return unTripleQuote(t.image) ; }
- | t=<STRING_LITERAL_LONG2> {
- return unTripleQuote(t.image) ; }
-}
-
-/* [67] IRIref ::= IRI_REF | PrefixedName */
-private UriRef IRIref() : {
- UriRef uriRef;
- Token t; } {
-
- t=<IRI_REF> {
- return createUriRef(unquote(t.image)); }
- |
- uriRef=PrefixedName() {
- return uriRef; }
+ Token t; } {
+
+ t=<STRING_LITERAL1> {
+ return unquote(t.image) ; }
+ |
+ t=<STRING_LITERAL2> {
+ return unquote(t.image) ; }
+ |
+ t=<STRING_LITERAL_LONG1> {
+ return unTripleQuote(t.image) ; }
+ |
+ t=<STRING_LITERAL_LONG2> {
+ return unTripleQuote(t.image) ; }
+}
+
+/* [136] iri ::= IRIREF | PrefixedName */
+private UriRef Iri() : {
+ UriRef uriRef;
+ Token t; } {
+
+ t=<IRIREF> {
+ return createUriRef(unquote(t.image)); }
+ |
+ uriRef=PrefixedName() {
+ return uriRef; }
}
-/* [68] PrefixedName ::= PNAME_LN | PNAME_NS */
+/* [137] PrefixedName ::= PNAME_LN | PNAME_NS */
private UriRef PrefixedName() : {
- Token t; } {
+ Token t; } {
- ( t=<PNAME_LN> | t=<PNAME_NS> ) {
- return createUriRef(t.image); }
+ ( t=<PNAME_LN> | t=<PNAME_NS> ) {
+ return createUriRef(t.image); }
}
-/* [69] BlankNode ::= BLANK_NODE_LABEL | ANON */
+/* [138] BlankNode ::= BLANK_NODE_LABEL | ANON */
private ResourceOrVariable BlankNode() : {
- Token t; } {
+ Token t; } {
- t=<BLANK_NODE_LABEL> {
- return getBNode(t.image); }
- | <ANON> {
- return getNewBNode(); }
+ t=<BLANK_NODE_LABEL> {
+ return getBNode(t.image); }
+ |
+ <ANON> {
+ return getNewBNode(); }
}
TOKEN : {
- /* [70] IRI_REF ::= '<' ([^<>"{}|^`\]-[#x00-#x20])* '>' */
- < IRI_REF : "<" ( ~["<", ">", "\"", "{", "}", "|", "^", "`", "\\", "\u0000"-"\u0020"] )* ">" >
+ /* [139] IRIREF ::= '<' ([^<>"{}|^`\]-[#x00-#x20])* '>' */
+ < IRIREF : "<" ( ~["<", ">", "\"", "{", "}", "|", "^", "`", "\\", "\u0000"-"\u0020"] )* ">" >
|
- /* [71] PNAME_NS ::= PN_PREFIX? ':' */
+ /* [140] PNAME_NS ::= PN_PREFIX? ':' */
< PNAME_NS : (<PN_PREFIX>)? ":" >
|
- /* [72] PNAME_LN ::= PNAME_NS PN_LOCAL */
+ /* [141] PNAME_LN ::= PNAME_NS PN_LOCAL */
< PNAME_LN : <PNAME_NS> <PN_LOCAL> >
|
- /* [73] BLANK_NODE_LABEL ::= '_:' PN_LOCAL */
- < BLANK_NODE_LABEL : "_:" <PN_LOCAL> >
+ /* [142] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)? */
+ < BLANK_NODE_LABEL : "_:" ( <PN_CHARS_U> | ["0"-"9"] ) ( ( <PN_CHARS> | "." )* <PN_CHARS> )? >
|
- /* [74] VAR1 ::= '?' VARNAME */
+ /* [143] VAR1 ::= '?' VARNAME */
< VAR1 : "?" <VARNAME> >
|
- /* [75] VAR2 ::= '$' VARNAME */
+ /* [144] VAR2 ::= '$' VARNAME */
< VAR2 : "$" <VARNAME> >
|
- /* [76] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* */
+ /* [145] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* */
< LANGTAG : "@" (["a"-"z", "A"-"Z"])+ ( "-" (["a"-"z", "A"-"Z", "0"-"9"])+ )* >
+ |
+ < BUILT_IN_CALL_NAME : ["a"-"z", "A"-"Z", "_"] (["a"-"z", "A"-"Z", "0"-"9", "_"])* >
}
TOKEN : {
@@ -1202,84 +1384,96 @@ TOKEN : {
|
< #Z_9r : (<Z_9>)+ >
|
- < #Z_9o : (<Z_9>)* >
+ < #Z_9o : (<Z_9>)* >
|
- /* [77] INTEGER ::= [0-9]+ */
+ /* [146] INTEGER ::= [0-9]+ */
< INTEGER : <Z_9r> >
|
- /* [78] DECIMAL ::= [0-9]+ '.' [0-9]* | '.' [0-9]+ */
- < DECIMAL : ( <Z_9r> "." <Z_9o> ) | ( "." <Z_9r> ) >
+ /* [147] DECIMAL ::= [0-9]* '.' [0-9]+ */
+ < DECIMAL : <Z_9o> "." <Z_9r> >
|
- /* [79] DOUBLE ::= [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT */
+ /* [148] DOUBLE ::= [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT */
< DOUBLE : ( <Z_9r> "." <Z_9o> <EXPONENT> ) | ( "." <Z_9r> <EXPONENT> ) | ( <Z_9r> <EXPONENT> ) >
|
- /* [80] INTEGER_POSITIVE ::= '+' INTEGER */
+ /* [149] INTEGER_POSITIVE ::= '+' INTEGER */
< INTEGER_POSITIVE : "+" <INTEGER> >
|
- /* [81] DECIMAL_POSITIVE ::= '+' DECIMAL */
+ /* [150] DECIMAL_POSITIVE ::= '+' DECIMAL */
< DECIMAL_POSITIVE : "+" <DECIMAL> >
|
- /* [82] DOUBLE_POSITIVE ::= '+' DOUBLE */
+ /* [151] DOUBLE_POSITIVE ::= '+' DOUBLE */
< DOUBLE_POSITIVE : "+" <DOUBLE> >
|
- /* [83] INTEGER_NEGATIVE ::= '-' INTEGER */
+ /* [152] INTEGER_NEGATIVE ::= '-' INTEGER */
< INTEGER_NEGATIVE : "-" <INTEGER> >
|
- /* [84] DECIMAL_NEGATIVE ::= '-' DECIMAL */
+ /* [153] DECIMAL_NEGATIVE ::= '-' DECIMAL */
< DECIMAL_NEGATIVE : "-" <DECIMAL> >
|
- /* [85] DOUBLE_NEGATIVE ::= '-' DOUBLE */
+ /* [154] DOUBLE_NEGATIVE ::= '-' DOUBLE */
< DOUBLE_NEGATIVE : "-" <DOUBLE> >
|
- /* [86] EXPONENT ::= [eE] [+-]? [0-9]+ */
+ /* [155] EXPONENT ::= [eE] [+-]? [0-9]+ */
< #EXPONENT : ["e","E"] (["+","-"])? <Z_9r> >
}
TOKEN : {
- /* [87] STRING_LITERAL1 ::= "'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'" */
+ /* [156] STRING_LITERAL1 ::= "'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'" */
< STRING_LITERAL1 : "'" ( ~["'", "\\", "\r", "\n"] | <ECHAR> )* "'" >
|
- /* [88] STRING_LITERAL2 ::= '"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"' */
+ /* [157] STRING_LITERAL2 ::= '"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"' */
< STRING_LITERAL2 : "\"" ( ~["\"", "\\", "\r", "\n"] | <ECHAR> )* "\"" >
|
- /* [89] STRING_LITERAL_LONG1 ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''" */
+ /* [158] STRING_LITERAL_LONG1 ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''" */
< STRING_LITERAL_LONG1 : "'''" ( ( "'" | "''" )? ( ~["'","\\"] | <ECHAR> ) )* "'''" >
|
- /* [90] STRING_LITERAL_LONG2 ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""' */
+ /* [159] STRING_LITERAL_LONG2 ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""' */
< STRING_LITERAL_LONG2 : "\"\"\"" ( ( "\"" | "\"\"" )? ( ~["\"","\\"] | <ECHAR> ) )* "\"\"\"" >
|
- /* [91] #ECHAR ::= '\' [tbnrf\"'] */
+ /* [160] #ECHAR ::= '\' [tbnrf\"'] */
< #ECHAR : "\\" ["t","b","n","r","f","\\","\"","'"] >
}
TOKEN : {
- /* [92] NIL ::= '(' WS* ')' */
+ /* [161] NIL ::= '(' WS* ')' */
< NIL : "(" (<WS>)* ")" >
|
- /* [93] WS ::= #x20 | #x9 | #xD | #xA */
+ /* [162] WS ::= #x20 | #x9 | #xD | #xA */
< #WS : " " | "\t" | "\n" | "\r" >
|
- /* [94] ANON ::= '[' WS* ']' */
+ /* [163] ANON ::= '[' WS* ']' */
< ANON : "[" (<WS>)* "]" >
}
TOKEN : {
- /* [95] #PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] */
+ /* [164] #PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] */
< #PN_CHARS_BASE : ["A"-"Z", "a"-"z", "\u00C0"-"\u00D6", "\u00D8"-"\u00F6", "\u00F8"-"\u02FF", "\u0370"-"\u037D", "\u037F"-"\u1FFF", "\u200C"-"\u200D", "\u2070"-"\u218F", "\u2C00"-"\u2FEF", "\u3001"-"\uD7FF", "\uF900"-"\uFDCF", "\uFDF0"-"\uFFFD"] >
|
- /* [96] #PN_CHARS_U ::= PN_CHARS_BASE | '_' */
+ /* [165] #PN_CHARS_U ::= PN_CHARS_BASE | '_' */
< #PN_CHARS_U : <PN_CHARS_BASE> | "_" >
|
- /* [97] #VARNAME ::= ( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )* */
- < #VARNAME : (<PN_CHARS_U> | <Z_9>) ( <PN_CHARS_U> | <Z_9> | "\u00b7" | ["\u0300"-"\u036f"] | ["\u203f"-"\u2040"] )* >
+ /* [166] #VARNAME ::= ( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )* */
+ < #VARNAME : (<PN_CHARS_U> | <Z_9>) (<PN_CHARS_U> | <Z_9> | "\u00b7" | ["\u0300"-"\u036f"] | ["\u203f"-"\u2040"])* >
|
- /* [98] #PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] */
+ /* [167] #PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] */
< #PN_CHARS : <PN_CHARS_U> | "-" | <Z_9> | "\u00b7" | ["\u0300"-"\u036f"] | ["\u203f"-"\u2040"] >
|
- /* [99] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)? */
- < PN_PREFIX : <PN_CHARS_BASE> (( <PN_CHARS> | "." )* <PN_CHARS>)? >
+ /* [168] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)? */
+ < PN_PREFIX : <PN_CHARS_BASE> ((<PN_CHARS> | "." )* <PN_CHARS>)? >
|
- /* [100] PN_LOCAL ::= ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)? */
+ /* [169] PN_LOCAL ::= ( PN_CHARS_U | ':' | [0-9] | PLX ) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX) )? */
/* Note that SPARQL local names allow leading digits while XML local names do not. */
- < PN_LOCAL : ( <PN_CHARS_U> | <Z_9> ) (( <PN_CHARS> | "." )* <PN_CHARS>)? >
+ < PN_LOCAL : (<PN_CHARS_U> | ":" | <Z_9> | <PLX>) ((<PN_CHARS> | "." | ":" | <PLX>)* (<PN_CHARS> | ":" | <PLX>) )? >
+ |
+ /* [170] PLX ::= PERCENT | PN_LOCAL_ESC */
+ < PLX : <PERCENT> | <PN_LOCAL_ESC> >
+ |
+ /* [171] PERCENT ::= '%' HEX HEX */
+ < PERCENT : "%" <HEX> <HEX> >
+ |
+ /* [172] HEX ::= [0-9] | [A-F] | [a-f] */
+ < #HEX : <Z_9> | ["A"-"F", "a"-"f"] >
+ |
+ /* [173] PN_LOCAL_ESC ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' ) */
+ < PN_LOCAL_ESC : "\\" ( "_" | "~" | "." | "-" | "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "=" | "/" | "?" | "#" | "@" | "%" ) >
}
Added: 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=1460522&view=auto
==============================================================================
--- clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java (added)
+++ clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/sparql/SparqlPreParserTest.java Mon Mar 25 05:05:11 2013
@@ -0,0 +1,67 @@
+/*
+ * 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 java.util.Set;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.sparql.update.Update;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author hasan
+ */
+public class SparqlPreParserTest {
+
+ @Test
+ public void testDefaultGraphInSelectQuery() throws ParseException {
+
+ StringBuilder queryStrBuilder = new StringBuilder();
+ queryStrBuilder.append(
+ "PREFIX : <http://example/>\n" +
+ "SELECT ?x \n" +
+ "{\n" +
+ ":order :item/:price ?x\n" +
+ "}\n");
+
+ UriRef defaultGraph = new UriRef("http://example.org/default");
+ SparqlPreParser parser = new SparqlPreParser();
+ Set<UriRef> referredGraphs = parser.getReferredGraphs(queryStrBuilder.toString(), defaultGraph);
+ Assert.assertTrue(referredGraphs.toArray()[0].equals(defaultGraph));
+ }
+
+ @Test
+ public void testSelectQuery() throws ParseException {
+
+ StringBuilder queryStrBuilder = new StringBuilder();
+ queryStrBuilder.append(
+ "PREFIX : <http://example/>\n" +
+ "SELECT ?x (foo(2*3, ?x < ?y) AS ?f) (GROUP_CONCAT(?x ; separator=\"|\") AS ?gc) (sum(distinct *) AS ?total)\n" +
+ "FROM <http://example.org/test>\n" +
+ "{\n" +
+ ":order :item/:price ?x\n" +
+ "}\n");
+
+ UriRef defaultGraph = new UriRef("http://example.org/default");
+ SparqlPreParser parser = new SparqlPreParser();
+ Set<UriRef> referredGraphs = parser.getReferredGraphs(queryStrBuilder.toString(), defaultGraph);
+ Assert.assertTrue(referredGraphs.toArray()[0].equals(new UriRef("http://example.org/test")));
+ }
+}