You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ki...@apache.org on 2018/04/27 11:08:12 UTC

[1/5] jena git commit: JENA-632: Generate JSON from SPARQL directly

Repository: jena
Updated Branches:
  refs/heads/master e5cbf13e3 -> 4bf5e3c0a


http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/lib/RDFTerm2Json.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lib/RDFTerm2Json.java b/jena-arq/src/main/java/org/apache/jena/sparql/lib/RDFTerm2Json.java
index 5f0184c..bcf1fd1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lib/RDFTerm2Json.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lib/RDFTerm2Json.java
@@ -64,7 +64,7 @@ public class RDFTerm2Json {
             return new JsonString(node.getURI());
         if ( node.isBlank() ) {
             Node node2 = RiotLib.blankNodeToIri(node);
-            return new JsonString(node.getURI());
+            return new JsonString(node2.getURI());
         }
         if ( node.isVariable() ) 
             return new JsonString("?"+node.getName());

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
index 77c7ae2..2633d8d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/SPARQLResult.java
@@ -18,6 +18,9 @@
 
 package org.apache.jena.sparql.resultset;
 
+import java.util.Iterator;
+
+import org.apache.jena.atlas.json.JsonObject;
 import org.apache.jena.query.Dataset;
 import org.apache.jena.query.ResultSet;
 import org.apache.jena.rdf.model.Model;
@@ -34,6 +37,7 @@ public class SPARQLResult {
     private Boolean   booleanResult = null;
     private Model     model         = null;
     private Dataset   dataset       = null;
+    private Iterator<JsonObject> jsonItems = null;
 
     // Delayed choice of result type.
     protected SPARQLResult() {}
@@ -54,6 +58,10 @@ public class SPARQLResult {
         set(dataset);
     }
 
+    public SPARQLResult(Iterator<JsonObject> jsonItems) {
+        set(jsonItems); 
+    }
+
     public boolean isResultSet() {
         if ( !hasBeenSet )
             throw new ResultSetException("Not set");
@@ -83,6 +91,13 @@ public class SPARQLResult {
         return booleanResult != null;
     }
 
+    public boolean isJson()
+    {
+        if ( !hasBeenSet )
+            throw new ResultSetException("Not set");
+        return jsonItems != null;
+    }
+
     public ResultSet getResultSet() {
         if ( !hasBeenSet )
             throw new ResultSetException("Not set");
@@ -115,6 +130,15 @@ public class SPARQLResult {
         return dataset;
     }
 
+    public Iterator<JsonObject> getJsonItems()
+    {
+        if ( !hasBeenSet )
+            throw new ResultSetException("Not set");
+        if ( !isJson() )
+            throw new ResultSetException("Not a JSON result");
+        return jsonItems;
+    }
+
     public boolean isHasBeenSet() {
         return hasBeenSet;
     }
@@ -142,4 +166,10 @@ public class SPARQLResult {
         booleanResult = r;
         hasBeenSet = true;
     }
+
+    protected void set(Iterator<JsonObject> jsonItems) {
+        this.jsonItems = jsonItems; 
+        hasBeenSet = true;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/serializer/QuerySerializer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/QuerySerializer.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/QuerySerializer.java
index e77e5e3..4429b82 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/QuerySerializer.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/QuerySerializer.java
@@ -20,6 +20,7 @@ package org.apache.jena.sparql.serializer;
 
 import java.io.OutputStream ;
 import java.util.List ;
+import java.util.Map;
 
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.graph.Node ;
@@ -45,6 +46,7 @@ public class QuerySerializer implements QueryVisitor
     protected FormatterElement fmtElement ;
     protected FmtExprSPARQL fmtExpr ;
     protected IndentedWriter out = null ;
+    protected Prologue prologue = null ;
 
     QuerySerializer(OutputStream        _out,
                     FormatterElement    formatterElement, 
@@ -75,6 +77,7 @@ public class QuerySerializer implements QueryVisitor
     @Override
     public void visitPrologue(Prologue prologue)
     { 
+        this.prologue = prologue ;
         int row1 = out.getRow() ;
         PrologueSerializer.output(out, prologue) ;
         int row2 = out.getRow() ;
@@ -142,7 +145,30 @@ public class QuerySerializer implements QueryVisitor
         out.print("ASK") ;
         out.newline() ;
     }
-    
+
+    @Override
+    public void visitJsonResultForm(Query query) {
+        out.println("JSON {");
+        out.incIndent(BLOCK_INDENT);
+        out.incIndent(BLOCK_INDENT);
+        boolean first = true;
+        for (Map.Entry<String, Node> entry : query.getJsonMapping().entrySet()) {
+            String field = entry.getKey();
+            Node value = entry.getValue();
+            if ( ! first )
+                out.println(" ,");
+            first = false;
+            out.print('"'); out.print(field); out.print('"');
+            out.print(" : ");
+            out.pad(15);
+            out.print(FmtUtils.stringForNode(value, prologue));
+        }
+        out.decIndent(BLOCK_INDENT);
+        out.decIndent(BLOCK_INDENT);
+        out.print(" }");
+        out.newline();
+    }
+
     @Override
     public void visitDatasetDecl(Query query)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
index 8c7b712..c7d05b4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
@@ -218,6 +218,11 @@ public class QueryTransformOps {
         }
 
         @Override
+        public void visitJsonResultForm(Query query) {
+            newQuery.setQueryJsonType();
+        }
+
+        @Override
         public void visitDatasetDecl(Query query) {
         }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/query/TS_ResultSetFormatter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/TS_ResultSetFormatter.java b/jena-arq/src/test/java/org/apache/jena/query/TS_ResultSetFormatter.java
new file mode 100644
index 0000000..44947fb
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/query/TS_ResultSetFormatter.java
@@ -0,0 +1,30 @@
+/**
+ * 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.jena.query;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+    TestResultSetFormatter.class
+})
+public class TS_ResultSetFormatter {
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/query/TestResultSetFormatter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/TestResultSetFormatter.java b/jena-arq/src/test/java/org/apache/jena/query/TestResultSetFormatter.java
new file mode 100644
index 0000000..0d9519a
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/query/TestResultSetFormatter.java
@@ -0,0 +1,84 @@
+/**
+ * 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.jena.query;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.jena.datatypes.xsd.XSDDatatype;
+import org.apache.jena.rdf.model.AnonId;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Property;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.ResourceFactory;
+import org.apache.jena.sparql.engine.JsonIterator;
+import org.junit.Test;
+
+/**
+ * Tests for the {@link ResultSetFormatter}.
+ */
+public class TestResultSetFormatter {
+
+    @Test
+    public void testIterator() throws IOException {
+        Model model = ModelFactory.createDefaultModel();
+        {
+            Resource r = model.createResource(AnonId.create("first"));
+            Property p = model.getProperty("");
+            RDFNode node = ResourceFactory.createTypedLiteral("123", XSDDatatype.XSDdecimal);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("second"));
+            p = model.getProperty("");
+            node = ResourceFactory.createTypedLiteral("abc", XSDDatatype.XSDstring);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("third"));
+            p = model.getProperty("");
+            node = ResourceFactory.createLangLiteral("def", "en");
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("fourth"));
+            p = model.getProperty("");
+            node = ResourceFactory.createTypedLiteral("true", XSDDatatype.XSDboolean);
+            model.add(r, p, node);
+        }
+        Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
+        try ( QueryExecution qexec = QueryExecutionFactory.create(query, model) ) {
+            JsonIterator execJsonItems = (JsonIterator) qexec.execJsonItems();
+            try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+                ResultSetFormatter.output(baos, execJsonItems);
+                String output = baos.toString(Charset.forName("UTF-8"));
+                assertTrue(output.contains("\"_:first\""));
+                assertTrue(output.contains("\"_:second\""));
+                assertTrue(output.contains("\"_:third\""));
+                assertTrue(output.contains("\"_:fourth\""));
+                assertFalse(output.contains("\"true\""));
+                assertTrue(output.contains("true"));
+                assertTrue(output.contains("123"));
+                assertFalse(output.contains("\"123\""));
+                assertTrue(output.contains("\"abc\""));
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
index 74c27a8..7942a5e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
@@ -22,12 +22,35 @@ import java.util.Iterator;
 import java.util.Set ;
 
 import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.json.JsonArray;
+import org.apache.jena.atlas.json.JsonObject;
 import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.datatypes.xsd.XSDDatatype;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.* ;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QueryExecutionFactory;
+import org.apache.jena.query.QueryFactory;
+import org.apache.jena.query.QueryParseException;
+import org.apache.jena.query.QuerySolution;
+import org.apache.jena.query.QuerySolutionMap;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.query.ResultSetCloseable;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.rdf.model.AnonId;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Property;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.ResourceFactory;
+import org.apache.jena.rdf.model.Statement;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.core.Quad;
@@ -553,9 +576,9 @@ public class TestAPI extends BaseTest
     @Test public void testARQConstructQuad_ShortForm_bad() {
         String queryString = "CONSTRUCT WHERE { GRAPH ?g {?s ?p ?o. FILTER isIRI(?o)}  }";
         try {
-        	QueryFactory.create(queryString, Syntax.syntaxARQ);
+            QueryFactory.create(queryString, Syntax.syntaxARQ);
         }catch (QueryParseException e){
-        	return;
+            return;
         }
         fail("Short form of construct quad MUST be simple graph patterns!");
     }
@@ -601,4 +624,60 @@ public class TestAPI extends BaseTest
             qExec.close();
         }
     }
+
+    /**
+     * Test that a JSON query returns an array with the correct size, given a pre-populated model.
+     */
+    @Test public void testExecJson() {
+        // JENA-632
+        Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
+        
+        try ( QueryExecution qexec = QueryExecutionFactory.create(query, m) ) {
+            JsonArray jsonArray = qexec.execJson();
+            assertNotNull( jsonArray );
+            assertEquals(3, jsonArray.size());
+        }
+    }
+
+    /**
+     * Test that a JSON query returns an array with the correct data values, given a pre-populated
+     * model.
+     */
+    @Test public void testExecJsonItems() {
+        // JENA-632
+        Model model = ModelFactory.createDefaultModel();
+        {
+            Resource r = model.createResource(AnonId.create("first"));
+            Property p = model.getProperty("");
+            RDFNode node = ResourceFactory.createTypedLiteral("123", XSDDatatype.XSDdecimal);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("second"));
+            p = model.getProperty("");
+            node = ResourceFactory.createTypedLiteral("abc", XSDDatatype.XSDstring);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("third"));
+            p = model.getProperty("");
+            node = ResourceFactory.createLangLiteral("def", "en");
+            model.add(r, p, node);
+        }
+        Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
+        try ( QueryExecution qexec = QueryExecutionFactory.create(query, model) ) {
+            Iterator<JsonObject> execJsonItems = qexec.execJsonItems();
+            int size = 0;
+            while(execJsonItems.hasNext()) {
+                JsonObject next = execJsonItems.next();
+                if (next.get("s").toString().contains("first")) {
+                    assertEquals(123, next.get("o").getAsNumber().value().intValue());
+                } else if (next.get("s").toString().contains("second")) {
+                    assertEquals("abc", next.get("o").getAsString().value());
+                } else if (next.get("s").toString().contains("third")) {
+                    assertEquals("def", next.get("o").getAsString().value());
+                }
+                size++;
+            }
+            assertEquals(3, size);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
index d7b386c..c1ff26f 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
@@ -34,6 +34,8 @@ import org.junit.runners.Suite ;
       , TestService.class
       , TestQueryEngineHTTP.class
       , TestQueryEngineMultiThreaded.class
+      , TestJsonIterator.class
+      , TestJsonEval.class
 })
 
 public class TS_Engine {}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonEval.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonEval.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonEval.java
new file mode 100644
index 0000000..47c8548
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonEval.java
@@ -0,0 +1,77 @@
+/*
+ * 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.jena.sparql.engine;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.jena.atlas.json.JSON;
+import org.apache.jena.atlas.json.JsonValue;
+import org.apache.jena.query.*;
+import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.DatasetGraphZero;
+import org.junit.Test;
+
+public class TestJsonEval {
+
+    @Test public void json_eval_01() {
+        test("JSON { 'x' : ?x } WHERE { VALUES ?x { 'X' } }",
+             "[ { 'x' : 'X' } ]"); 
+    }
+
+    @Test public void json_eval_02() {
+        test("JSON { 'x' : ?x } WHERE { VALUES ?x { 'X' 'Y' } }",
+             "[ { 'x' : 'X' } , {'x' : 'Y' }]"); 
+    }
+
+    @Test public void json_eval_03() {
+        test("JSON { 's' : 'FOO' } WHERE { }",
+             "[ { 's' : 'FOO' } ]"); 
+    }
+
+    @Test public void json_eval_04() {
+        test("JSON { 'F' : 'string' } WHERE { }",
+             "[ { 'F' : 'string' } ]"); 
+    }
+
+    @Test public void json_eval_05() {
+        test("JSON { 'x' : 123 } WHERE { }",
+             "[ { 'x' : 123 }]"); 
+    }
+
+    @Test public void json_eval_06() {
+        test("JSON { 'x' : 123.5 } WHERE { }",
+             "[ { 'x' : 123.5 }]"); 
+    }
+
+    @Test public void json_eval_07() {
+        test("JSON { 'x' : -10 } WHERE { }",
+             "[ { 'x' : -10 }]"); 
+    }
+
+    private void test(String queryString, String jsonExpected) {
+        Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        DatasetGraph dsg = new DatasetGraphZero();
+        Dataset ds = DatasetFactory.wrap(dsg);
+        try ( QueryExecution qExec = QueryExecutionFactory.create(query, ds) ) {
+            JsonValue jvGot = qExec.execJson() ;
+            JsonValue jvExpected = JSON.parseAny(jsonExpected) ;
+            assertEquals(jvExpected, jvGot);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonIterator.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonIterator.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonIterator.java
new file mode 100644
index 0000000..82a733b
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TestJsonIterator.java
@@ -0,0 +1,86 @@
+/**
+ * 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.jena.sparql.engine;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collections;
+import java.util.NoSuchElementException;
+
+import org.apache.jena.datatypes.xsd.XSDDatatype;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QueryExecutionFactory;
+import org.apache.jena.query.QueryFactory;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.rdf.model.AnonId;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.Property;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.ResourceFactory;
+import org.junit.Test;
+
+/**
+ * Tests for {@link JsonIterator}.
+ */
+public class TestJsonIterator {
+
+    @Test
+    public void testIterator() {
+        Model model = ModelFactory.createDefaultModel();
+        {
+            Resource r = model.createResource(AnonId.create("first"));
+            Property p = model.getProperty("");
+            RDFNode node = ResourceFactory.createTypedLiteral("123", XSDDatatype.XSDdecimal);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("second"));
+            p = model.getProperty("");
+            node = ResourceFactory.createTypedLiteral("abc", XSDDatatype.XSDstring);
+            model.add(r, p, node);
+            r = model.createResource(AnonId.create("third"));
+            p = model.getProperty("");
+            node = ResourceFactory.createLangLiteral("def", "en");
+            model.add(r, p, node);
+        }
+        Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
+        try ( QueryExecution qexec = QueryExecutionFactory.create(query, model) ) {
+            JsonIterator execJsonItems = (JsonIterator) qexec.execJsonItems();
+            assertTrue(execJsonItems.hasNext());
+            assertNotNull(execJsonItems.next());
+        }
+    }
+
+    @Test(expected = NoSuchElementException.class)
+    public void testInitialStates() {
+        JsonIterator iterator = new JsonIterator(null, Collections.emptyList());
+        assertFalse(iterator.hasNext());
+        iterator.next();
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testRemoveNotImplemented() {
+        JsonIterator iterator = new JsonIterator(null, Collections.emptyList());
+        iterator.remove();
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseJson.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseJson.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseJson.java
new file mode 100644
index 0000000..c0be5db
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseJson.java
@@ -0,0 +1,150 @@
+/*
+ * 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.jena.fuseki.servlets;
+
+import static java.lang.String.format;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.jena.atlas.json.JsonObject;
+import org.apache.jena.fuseki.FusekiException;
+import org.apache.jena.fuseki.servlets.ResponseResultSet.OutputContent;
+import org.apache.jena.query.QueryCancelledException;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.riot.WebContent;
+import org.apache.jena.web.HttpSC;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Responsible for handling JSON response output.
+ */
+public class ResponseJson 
+{
+
+    // Loggers
+    private static Logger xlog = LoggerFactory.getLogger(ResponseJson.class) ;
+
+    /**
+     * Outputs a JSON query result
+     *
+     * @param action HTTP action
+     * @param jsonItem a ResultSetJsonStream instance
+     */
+    public static void doResponseJson(HttpAction action, Iterator<JsonObject> jsonItem)
+    {
+        if ( jsonItem == null)
+        {
+            xlog.warn("doResponseJson: Result set is null") ; 
+            throw new FusekiException("Result set is null") ;
+        }
+
+        jsonOutput(action, jsonItem) ;
+    }
+
+    private static void jsonOutput(HttpAction action, final Iterator<JsonObject> jsonItems)
+    {
+        OutputContent proc = new OutputContent()
+        {
+            @Override
+            public void output(ServletOutputStream out)
+            {
+                if (jsonItems != null)
+                    ResultSetFormatter.output(out, jsonItems) ;
+            }
+        } ;
+
+        try
+        {
+            String callback = ResponseOps.paramCallback(action.request) ;
+            ServletOutputStream out = action.response.getOutputStream() ;
+
+            if ( callback != null )
+            {
+                callback = StringUtils.replaceChars(callback, "\r", "") ;
+                callback = StringUtils.replaceChars(callback, "\n", "") ;
+                out.print(callback) ;
+                out.println("(") ;
+            }
+
+            output(action, "application/json", WebContent.charsetUTF8, proc) ;
+
+            if ( callback != null )
+                out.println(")") ;
+        } catch (IOException ex) { ServletOps.errorOccurred(ex) ; }
+    }
+
+    private static void output(HttpAction action, String contentType, String charset, OutputContent proc) 
+    {
+        try
+        {
+            setHttpResponse(action.request, action.response, contentType, charset) ; 
+            action.response.setStatus(HttpSC.OK_200) ;
+            ServletOutputStream out = action.response.getOutputStream() ;
+            try
+            {
+                proc.output(out) ;
+                out.flush() ;
+            }
+            catch (QueryCancelledException ex)
+            {
+                // Bother.  Status code 200 already sent.
+                xlog.info(format("[%d] Query Cancelled - results truncated (but 200 already sent)", action.id)) ;
+                out.println() ;
+                out.println("##  Query cancelled due to timeout during execution   ##") ;
+                out.println("##  ****          Incomplete results           ****   ##") ;
+                out.flush() ;
+                // No point raising an exception - 200 was sent already.  
+                //errorOccurred(ex) ;
+            }
+        // Includes client gone.
+        } catch (IOException ex) 
+        { ServletOps.errorOccurred(ex) ; }
+        // Do not call httpResponse.flushBuffer(); here - Jetty closes the stream if it is a gzip stream
+        // then the JSON callback closing details can't be added. 
+    }
+
+    public static void setHttpResponse(HttpServletRequest httpRequest,
+            HttpServletResponse httpResponse,
+            String contentType, String charset) 
+    {
+        // ---- Set up HTTP Response
+        // Stop caching (not that ?queryString URLs are cached anyway)
+        if ( true )
+        {
+            httpResponse.setHeader("Cache-Control", "no-cache") ;
+            httpResponse.setHeader("Pragma", "no-cache") ;
+        }
+        // See: http://www.w3.org/International/O-HTTP-charset.html
+        if ( contentType != null )
+        {
+            if ( charset != null )
+                contentType = contentType+"; charset="+charset ;
+            xlog.trace("Content-Type for response: "+contentType) ;
+            httpResponse.setContentType(contentType) ;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
index 278b904..d88a51c 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
@@ -45,6 +45,7 @@ import javax.servlet.http.HttpServletResponse ;
 
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.json.JsonObject;
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiException ;
@@ -345,6 +346,14 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
             return new SPARQLResult(b) ;
         }
 
+        if ( query.isJsonType() )
+        {
+            Iterator<JsonObject> jsonIterator = queryExecution.execJsonItems();
+            //JsonArray jsonArray = queryExecution.execJson();
+            action.log.info(format("[%d] exec/json", action.id));
+            return new SPARQLResult(jsonIterator);
+        }
+
         ServletOps.errorBadRequest("Unknown query type - " + queryStringLog) ;
         return null ;
     }
@@ -399,6 +408,8 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
             ResponseDataset.doResponseModel(action, result.getModel());
         else if ( result.isBoolean() )
             ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
+        else if ( result.isJson() )
+            ResponseJson.doResponseJson(action, result.getJsonItems()) ;
         else
             ServletOps.errorOccurred("Unknown or invalid result type") ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
index 624c56e..a06bc35 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
@@ -24,12 +24,18 @@ import static org.apache.jena.fuseki.ServerTest.* ;
 import static org.apache.jena.fuseki.ServerTest.model1 ;
 import static org.apache.jena.fuseki.ServerTest.model2 ;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
 import java.io.IOException ;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.HttpURLConnection ;
 import java.net.URL ;
 import java.util.Iterator ;
 
 import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.jena.atlas.json.JsonArray;
+import org.apache.jena.atlas.lib.NotImplemented;
 import org.apache.jena.atlas.web.AcceptList ;
 import org.apache.jena.atlas.web.MediaType;
 import org.apache.jena.graph.Node ;
@@ -264,6 +270,44 @@ public class TestQuery extends AbstractFusekiTest {
         }
     }
 
+    @Test(expected = NotImplemented.class)
+    public void query_json_01() throws IOException {
+        Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
+        query.toString();
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery(), query) ) {
+            JsonArray result = qExec.execJson();
+            assertEquals(1, result.size());
+        }
+    }
+
+    @Test
+    public void query_json_02() throws IOException {
+        String qs = Convert.encWWWForm("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+                + "WHERE { ?s ?p ?o }") ;
+        URL u = new URL(serviceQuery() + "?query=" + qs) ;
+        HttpURLConnection conn = (HttpURLConnection)u.openConnection() ;
+        String result = null;
+        StringBuffer sb = new StringBuffer();
+        InputStream is = null;
+        try {
+            is = new BufferedInputStream(conn.getInputStream());
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String inputLine = "";
+            while ((inputLine = br.readLine()) != null) {
+                sb.append(inputLine);
+            }
+            result = sb.toString();
+        }
+        finally {
+            if (is != null) {
+                is.close(); 
+            }   
+        }
+        Assert.assertNotNull(result);
+        Assert.assertTrue(result.contains("http://example/x"));
+    }
+
     private static void execQuery(String queryString, int exceptedRowCount) {
         try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery(), queryString) ) {
             ResultSet rs = qExec.execSelect() ;


[2/5] jena git commit: JENA-632: Generate JSON from SPARQL directly

Posted by ki...@apache.org.
http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
index cce1b21..ba1ad66 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserTokenManager.java
@@ -46,160 +46,164 @@ private int jjMoveStringLiteralDfa0_0()
          jjmatchedKind = 1;
          return jjMoveNfa_0(0, 0);
       case 33:
-         jjmatchedKind = 185;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x10000000000000L, 0x0L);
+         jjmatchedKind = 186;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x20000000000000L, 0x0L);
       case 38:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x2000000000000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x4000000000000000L, 0x0L);
       case 40:
-         jjmatchedKind = 168;
+         jjmatchedKind = 169;
          return jjMoveNfa_0(0, 0);
       case 41:
-         jjmatchedKind = 169;
+         jjmatchedKind = 170;
          return jjMoveNfa_0(0, 0);
       case 42:
-         jjmatchedKind = 192;
+         jjmatchedKind = 193;
          return jjMoveNfa_0(0, 0);
       case 43:
-         jjmatchedKind = 190;
+         jjmatchedKind = 191;
          return jjMoveNfa_0(0, 0);
       case 44:
-         jjmatchedKind = 177;
+         jjmatchedKind = 178;
          return jjMoveNfa_0(0, 0);
       case 45:
-         jjmatchedKind = 191;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x80L);
+         jjmatchedKind = 192;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x100L);
       case 46:
-         jjmatchedKind = 178;
+         jjmatchedKind = 179;
          return jjMoveNfa_0(0, 0);
       case 47:
-         jjmatchedKind = 193;
+         jjmatchedKind = 194;
          return jjMoveNfa_0(0, 0);
       case 58:
-         jjmatchedKind = 187;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x10L);
+         jjmatchedKind = 188;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x20L);
       case 59:
-         jjmatchedKind = 176;
+         jjmatchedKind = 177;
          return jjMoveNfa_0(0, 0);
       case 60:
-         jjmatchedKind = 182;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x80000000000000L, 0x100L);
+         jjmatchedKind = 183;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x100000000000000L, 0x200L);
       case 61:
-         jjmatchedKind = 179;
+         jjmatchedKind = 180;
          return jjMoveNfa_0(0, 0);
       case 62:
-         jjmatchedKind = 181;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x100000000000000L, 0x0L);
+         jjmatchedKind = 182;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x200000000000000L, 0x0L);
       case 63:
-         jjmatchedKind = 201;
+         jjmatchedKind = 202;
          return jjMoveNfa_0(0, 0);
       case 64:
-         jjmatchedKind = 195;
+         jjmatchedKind = 196;
          return jjMoveNfa_0(0, 0);
       case 65:
-         return jjMoveStringLiteralDfa1_0(0x422008408000000L, 0x20000000L, 0x80400L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x844010810000000L, 0x40000000L, 0x100800L, 0x0L);
       case 66:
-         return jjMoveStringLiteralDfa1_0(0x100080100000L, 0x110L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x220L, 0x0L, 0x0L);
       case 67:
-         return jjMoveStringLiteralDfa1_0(0x40000004000000L, 0x10240001820L, 0x1300L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80000008000000L, 0x20480003040L, 0x2600L, 0x0L);
       case 68:
-         return jjMoveStringLiteralDfa1_0(0x802800000L, 0x800000040000L, 0x4800aL, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x1000000080000L, 0x90014L, 0x0L);
       case 69:
-         return jjMoveStringLiteralDfa1_0(0x800000000000L, 0x8000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0x10000000000L, 0x0L, 0x0L);
       case 70:
-         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x80000008L, 0x1L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x100000010L, 0x2L, 0x0L);
       case 71:
-         return jjMoveStringLiteralDfa1_0(0x4010000000000L, 0x4L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8020000000000L, 0x8L, 0x0L, 0x0L);
       case 72:
-         return jjMoveStringLiteralDfa1_0(0x8000000000000L, 0x1000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10000000000000L, 0x2000000000000L, 0x0L, 0x0L);
       case 73:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x3e002c0L, 0x10004L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x7c00580L, 0x20008L, 0x0L);
+      case 74:
+         return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 76:
-         return jjMoveStringLiteralDfa1_0(0x400010000000L, 0x4000180000L, 0x80L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x8000300000L, 0x100L, 0x0L);
       case 77:
-         return jjMoveStringLiteralDfa1_0(0x180080000000000L, 0x202400000002000L, 0x2800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x300100000000000L, 0x404800000004000L, 0x5000L, 0x0L);
       case 78:
-         return jjMoveStringLiteralDfa1_0(0x1001000000000L, 0x20000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2002000000000L, 0x40000000000000L, 0x0L, 0x0L);
       case 79:
-         return jjMoveStringLiteralDfa1_0(0x20060000000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x400c0000000L, 0x0L, 0x0L, 0x0L);
       case 80:
          return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
       case 82:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x1114000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x2228000000L, 0x0L, 0x0L);
       case 83:
-         return jjMoveStringLiteralDfa1_0(0x3a10200000400000L, 0x7c841e0c0803c002L, 0x4000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x7420400000400000L, 0xf9083c1810078004L, 0x8000L, 0x0L);
       case 84:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x8018000000000000L, 0x20000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x30000000000000L, 0x40001L, 0x0L);
       case 85:
-         return jjMoveStringLiteralDfa1_0(0x40200000000L, 0x40002000000400L, 0x200000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x80004000000800L, 0x400000L, 0x0L);
       case 86:
-         return jjMoveStringLiteralDfa1_0(0xc000000100000000L, 0x100000000000001L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000200000000L, 0x200000000000003L, 0x0L, 0x0L);
       case 87:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x0L, 0x100000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x200000L, 0x0L);
       case 89:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x200000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x400000000000L, 0x0L, 0x0L);
       case 91:
-         jjmatchedKind = 173;
+         jjmatchedKind = 174;
          return jjMoveNfa_0(0, 0);
       case 93:
-         jjmatchedKind = 174;
+         jjmatchedKind = 175;
          return jjMoveNfa_0(0, 0);
       case 94:
-         jjmatchedKind = 198;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x4L);
+         jjmatchedKind = 199;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8L);
       case 97:
          jjmatchedKind = 19;
-         return jjMoveStringLiteralDfa1_0(0x422008408000000L, 0x20000000L, 0x80400L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x844010810000000L, 0x40000000L, 0x100800L, 0x0L);
       case 98:
-         return jjMoveStringLiteralDfa1_0(0x100080100000L, 0x110L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200100100000L, 0x220L, 0x0L, 0x0L);
       case 99:
-         return jjMoveStringLiteralDfa1_0(0x40000004000000L, 0x10240001820L, 0x1300L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80000008000000L, 0x20480003040L, 0x2600L, 0x0L);
       case 100:
-         return jjMoveStringLiteralDfa1_0(0x802800000L, 0x800000040000L, 0x4800aL, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1004800000L, 0x1000000080000L, 0x90014L, 0x0L);
       case 101:
-         return jjMoveStringLiteralDfa1_0(0x800000000000L, 0x8000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0x10000000000L, 0x0L, 0x0L);
       case 102:
-         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x80000008L, 0x1L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x100000010L, 0x2L, 0x0L);
       case 103:
-         return jjMoveStringLiteralDfa1_0(0x4010000000000L, 0x4L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8020000000000L, 0x8L, 0x0L, 0x0L);
       case 104:
-         return jjMoveStringLiteralDfa1_0(0x8000000000000L, 0x1000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x10000000000000L, 0x2000000000000L, 0x0L, 0x0L);
       case 105:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x3e002c0L, 0x10004L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x7c00580L, 0x20008L, 0x0L);
+      case 106:
+         return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L, 0x0L, 0x0L);
       case 108:
-         return jjMoveStringLiteralDfa1_0(0x400010000000L, 0x4000180000L, 0x80L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x800020000000L, 0x8000300000L, 0x100L, 0x0L);
       case 109:
-         return jjMoveStringLiteralDfa1_0(0x180080000000000L, 0x202400000002000L, 0x2800L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x300100000000000L, 0x404800000004000L, 0x5000L, 0x0L);
       case 110:
-         return jjMoveStringLiteralDfa1_0(0x1001000000000L, 0x20000000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x2002000000000L, 0x40000000000000L, 0x0L, 0x0L);
       case 111:
-         return jjMoveStringLiteralDfa1_0(0x20060000000L, 0x0L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x400c0000000L, 0x0L, 0x0L, 0x0L);
       case 112:
          return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
       case 114:
-         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x1114000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x2228000000L, 0x0L, 0x0L);
       case 115:
-         return jjMoveStringLiteralDfa1_0(0x3a10200000400000L, 0x7c841e0c0803c002L, 0x4000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x7420400000400000L, 0xf9083c1810078004L, 0x8000L, 0x0L);
       case 116:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x8018000000000000L, 0x20000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x30000000000000L, 0x40001L, 0x0L);
       case 117:
-         return jjMoveStringLiteralDfa1_0(0x40200000000L, 0x40002000000400L, 0x200000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x80400000000L, 0x80004000000800L, 0x400000L, 0x0L);
       case 118:
-         return jjMoveStringLiteralDfa1_0(0xc000000100000000L, 0x100000000000001L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000200000000L, 0x200000000000003L, 0x0L, 0x0L);
       case 119:
-         return jjMoveStringLiteralDfa1_0(0x4000000000L, 0x0L, 0x100000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x8000000000L, 0x0L, 0x200000L, 0x0L);
       case 121:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x200000000000L, 0x0L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x400000000000L, 0x0L, 0x0L);
       case 123:
-         jjmatchedKind = 171;
+         jjmatchedKind = 172;
          return jjMoveNfa_0(0, 0);
       case 124:
-         jjmatchedKind = 197;
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1000000000000000L, 0x0L);
+         jjmatchedKind = 198;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x2000000000000000L, 0x0L);
       case 125:
-         jjmatchedKind = 172;
+         jjmatchedKind = 173;
          return jjMoveNfa_0(0, 0);
       case 126:
-         jjmatchedKind = 186;
+         jjmatchedKind = 187;
          return jjMoveNfa_0(0, 0);
       case 65279:
          jjmatchedKind = 9;
@@ -217,203 +221,203 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2,
    switch(curChar)
    {
       case 38:
-         if ((active2 & 0x2000000000000000L) != 0L)
+         if ((active2 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 189;
+            jjmatchedKind = 190;
             jjmatchedPos = 1;
          }
          break;
       case 45:
-         if ((active3 & 0x100L) != 0L)
+         if ((active3 & 0x200L) != 0L)
          {
-            jjmatchedKind = 200;
+            jjmatchedKind = 201;
             jjmatchedPos = 1;
          }
          break;
       case 61:
-         if ((active2 & 0x10000000000000L) != 0L)
+         if ((active2 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 180;
+            jjmatchedKind = 181;
             jjmatchedPos = 1;
          }
-         else if ((active2 & 0x80000000000000L) != 0L)
+         else if ((active2 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 183;
+            jjmatchedKind = 184;
             jjmatchedPos = 1;
          }
-         else if ((active2 & 0x100000000000000L) != 0L)
+         else if ((active2 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 184;
+            jjmatchedKind = 185;
             jjmatchedPos = 1;
          }
-         else if ((active3 & 0x10L) != 0L)
+         else if ((active3 & 0x20L) != 0L)
          {
-            jjmatchedKind = 196;
+            jjmatchedKind = 197;
             jjmatchedPos = 1;
          }
          break;
       case 62:
-         if ((active3 & 0x80L) != 0L)
+         if ((active3 & 0x100L) != 0L)
          {
-            jjmatchedKind = 199;
+            jjmatchedKind = 200;
             jjmatchedPos = 1;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa2_0(active0, 0xc108001100100000L, active1, 0x8000181c1803L, active2, 0x3L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8210002200100000L, active1, 0x1000030383007L, active2, 0x6L, active3, 0L);
       case 66:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x20000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000L, active2, 0L, active3, 0L);
       case 67:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x6000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xc000000000L, active2, 0L, active3, 0L);
       case 68:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000000000L, active2, 0x400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000000000L, active2, 0x800L, active3, 0L);
       case 69:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10600803400000L, active1, 0x104201044000000L, active2, 0x42008L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x20c01005400000L, active1, 0x208402088000000L, active2, 0x84010L, active3, 0L);
       case 70:
-         if ((active1 & 0x80L) != 0L)
+         if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 71;
+            jjmatchedKind = 72;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
       case 71:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 72:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L, active1, 0x7c00000000004000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xf800000000008000L, active2, 0L, active3, 0L);
       case 73:
-         return jjMoveStringLiteralDfa2_0(active0, 0x80180010800000L, active1, 0xa000000000008L, active2, 0x104000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x100300020800000L, active1, 0x14000000000010L, active2, 0x208000L, active3, 0L);
       case 76:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000000L, active2, 0x80100L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x100000000L, active2, 0x100200L, active3, 0L);
       case 78:
-         if ((active1 & 0x40L) != 0L)
+         if ((active1 & 0x80L) != 0L)
          {
-            jjmatchedKind = 70;
+            jjmatchedKind = 71;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x48200000000L, active1, 0x8000000100L, active2, 0x10004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x10000000200L, active2, 0x20008L, active3, 0L);
       case 79:
-         if ((active2 & 0x20000L) != 0L)
+         if ((active2 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 145;
+            jjmatchedKind = 146;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x41000004000000L, active1, 0x21410300000030L, active2, 0x1880L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x82000008000000L, active1, 0x42820600000060L, active2, 0x3100L, active3, 0L);
       case 80:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 82:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4012040200000L, active1, 0x8000000000000604L, active2, 0x8200L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8024080200000L, active1, 0xc08L, active2, 0x10401L, active3, 0L);
       case 83:
-         if ((active0 & 0x2000000000000L) != 0L)
+         if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x408000000L, active1, 0x3e00000L, active2, 0x200000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x7c00000L, active2, 0x400000L, active3, 0L);
       case 84:
-         return jjMoveStringLiteralDfa2_0(active0, 0x3800000000000000L, active1, 0x801e0800038000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x7000000000000000L, active1, 0x1003c1000070000L, active2, 0L, active3, 0L);
       case 85:
-         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0x40000400002000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0x80000800004000L, active2, 0L, active3, 0L);
       case 86:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 88:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 89:
-         if ((active0 & 0x80000000L) != 0L)
+         if ((active0 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 31;
+            jjmatchedKind = 32;
             jjmatchedPos = 1;
          }
          break;
       case 90:
-         if ((active1 & 0x10000000000000L) != 0L)
+         if ((active1 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 116;
+            jjmatchedKind = 117;
             jjmatchedPos = 1;
          }
          break;
       case 94:
-         if ((active3 & 0x4L) != 0L)
+         if ((active3 & 0x8L) != 0L)
          {
-            jjmatchedKind = 194;
+            jjmatchedKind = 195;
             jjmatchedPos = 1;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa2_0(active0, 0xc108001100100000L, active1, 0x8000181c1803L, active2, 0x3L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8210002200100000L, active1, 0x1000030383007L, active2, 0x6L, active3, 0L);
       case 98:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x20000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000L, active2, 0L, active3, 0L);
       case 99:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x6000000000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xc000000000L, active2, 0L, active3, 0L);
       case 100:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000000000L, active2, 0x400L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x400000000000000L, active2, 0x800L, active3, 0L);
       case 101:
-         return jjMoveStringLiteralDfa2_0(active0, 0x10600803400000L, active1, 0x104201044000000L, active2, 0x42008L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x20c01005400000L, active1, 0x208402088000000L, active2, 0x84010L, active3, 0L);
       case 102:
-         if ((active1 & 0x80L) != 0L)
+         if ((active1 & 0x100L) != 0L)
          {
-            jjmatchedKind = 71;
+            jjmatchedKind = 72;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L, active2, 0L, active3, 0L);
       case 103:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 104:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L, active1, 0x7c00000000004000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L, active1, 0xf800000000008000L, active2, 0L, active3, 0L);
       case 105:
-         return jjMoveStringLiteralDfa2_0(active0, 0x80180010800000L, active1, 0xa000000000008L, active2, 0x104000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x100300020800000L, active1, 0x14000000000010L, active2, 0x208000L, active3, 0L);
       case 108:
-         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000000L, active2, 0x80100L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x100000000L, active2, 0x100200L, active3, 0L);
       case 110:
-         if ((active1 & 0x40L) != 0L)
+         if ((active1 & 0x80L) != 0L)
          {
-            jjmatchedKind = 70;
+            jjmatchedKind = 71;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x48200000000L, active1, 0x8000000100L, active2, 0x10004L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x90400000000L, active1, 0x10000000200L, active2, 0x20008L, active3, 0L);
       case 111:
-         if ((active2 & 0x20000L) != 0L)
+         if ((active2 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 145;
+            jjmatchedKind = 146;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x41000004000000L, active1, 0x21410300000030L, active2, 0x1880L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x82000008000000L, active1, 0x42820600000060L, active2, 0x3100L, active3, 0L);
       case 112:
-         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 114:
-         return jjMoveStringLiteralDfa2_0(active0, 0x4012040200000L, active1, 0x8000000000000604L, active2, 0x8200L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x8024080200000L, active1, 0xc08L, active2, 0x10401L, active3, 0L);
       case 115:
-         if ((active0 & 0x2000000000000L) != 0L)
+         if ((active0 & 0x4000000000000L) != 0L)
          {
-            jjmatchedKind = 49;
+            jjmatchedKind = 50;
             jjmatchedPos = 1;
          }
-         return jjMoveStringLiteralDfa2_0(active0, 0x408000000L, active1, 0x3e00000L, active2, 0x200000L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x812000000L, active1, 0x7c00000L, active2, 0x400000L, active3, 0L);
       case 116:
-         return jjMoveStringLiteralDfa2_0(active0, 0x3800000000000000L, active1, 0x801e0800038000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x7000000000000000L, active1, 0x1003c1000070000L, active2, 0L, active3, 0L);
       case 117:
-         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0x40000400002000L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0x80000800004000L, active2, 0L, active3, 0L);
       case 118:
-         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 120:
-         return jjMoveStringLiteralDfa2_0(active0, 0x800000000000L, active1, 0L, active2, 0L, active3, 0L);
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000L, active1, 0L, active2, 0L, active3, 0L);
       case 121:
-         if ((active0 & 0x80000000L) != 0L)
+         if ((active0 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 31;
+            jjmatchedKind = 32;
             jjmatchedPos = 1;
          }
          break;
       case 122:
-         if ((active1 & 0x10000000000000L) != 0L)
+         if ((active1 & 0x20000000000000L) != 0L)
          {
-            jjmatchedKind = 116;
+            jjmatchedKind = 117;
             jjmatchedPos = 1;
          }
          break;
       case 124:
-         if ((active2 & 0x1000000000000000L) != 0L)
+         if ((active2 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 188;
+            jjmatchedKind = 189;
             jjmatchedPos = 1;
          }
          break;
@@ -433,277 +437,277 @@ private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long a
    switch(curChar)
    {
       case 53:
-         if ((active1 & 0x200000000000000L) != 0L)
+         if ((active1 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 121;
+            jjmatchedKind = 122;
             jjmatchedPos = 2;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0x7c00206000000020L, active2, 0x80L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xf80040c000000040L, active2, 0x100L);
       case 66:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400800000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x801000000L, active2, 0L);
       case 67:
-         if ((active0 & 0x400000000L) != 0L)
+         if ((active0 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 34;
+            jjmatchedKind = 35;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4008000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x8010000000000L, active2, 0L);
       case 68:
-         if ((active0 & 0x8000000000L) != 0L)
+         if ((active0 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 39;
+            jjmatchedKind = 40;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x400L) != 0L)
+         else if ((active2 & 0x800L) != 0L)
          {
-            jjmatchedKind = 138;
+            jjmatchedKind = 139;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x3800000241000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x7000000481000000L, active1, 0L, active2, 0L);
       case 69:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000200000L, active1, 0L, active2, 0x300L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x600L);
       case 70:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L, active1, 0L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x80000L);
       case 71:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 54;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x400000000000000L) != 0L)
+         else if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x8000000L, active2, 0L);
       case 73:
-         if ((active1 & 0x200L) != 0L)
+         if ((active1 & 0x400L) != 0L)
          {
-            jjmatchedKind = 73;
+            jjmatchedKind = 74;
             jjmatchedPos = 2;
          }
-         else if ((active1 & 0x400L) != 0L)
+         else if ((active1 & 0x800L) != 0L)
          {
-            jjmatchedKind = 74;
+            jjmatchedKind = 75;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x840000000000L, active1, 0x40000040400000L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1080000000000L, active1, 0x80000080800000L, active2, 0x400000L);
       case 75:
-         if ((active0 & 0x8000000L) != 0L)
+         if ((active0 & 0x10000000L) != 0L)
          {
-            jjmatchedKind = 27;
+            jjmatchedKind = 28;
             jjmatchedPos = 2;
          }
          break;
       case 76:
-         if ((active2 & 0x80000L) != 0L)
+         if ((active2 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 147;
+            jjmatchedKind = 148;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x100400000L, active1, 0x1003008L, active2, 0x4009L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x2006010L, active2, 0x8012L);
       case 77:
-         if ((active0 & 0x200000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 57;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000L, active1, 0x8000008000002L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x10000010000004L, active2, 0L);
       case 78:
-         if ((active0 & 0x80000000000000L) != 0L)
+         if ((active0 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 56;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x180004000000L, active1, 0x2410212180000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x300008000000L, active1, 0x4820424300000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4002000000000L, active1, 0x80004104L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8004002000000L, active1, 0x100008208L, active2, 0x10000L);
       case 80:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0x1000000000L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x2000000000L, active2, 0x2000L);
       case 82:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 80;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xc000200000000000L, active1, 0x1801e0800030001L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000400000000000L, active1, 0x3003c1000060003L, active2, 0L);
       case 83:
-         if ((active1 & 0x20000000L) != 0L)
+         if ((active1 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 93;
+            jjmatchedKind = 94;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x802900000L, active1, 0x800L, active2, 0x4L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x1000L, active2, 0x8L);
       case 84:
-         if ((active0 & 0x400000000000L) != 0L)
+         if ((active0 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 46;
+            jjmatchedKind = 47;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x1000000000000L) != 0L)
+         else if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x40000L, active2, 0x112002L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x80000L, active2, 0x224004L);
       case 85:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0x8001000100200010L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x2000200400020L, active2, 0x1L);
       case 86:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0L, active2, 0x800L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x1000L);
       case 87:
-         if ((active1 & 0x20000000000000L) != 0L)
+         if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 117;
+            jjmatchedKind = 118;
             jjmatchedPos = 2;
          }
          break;
       case 88:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 57;
             jjmatchedPos = 2;
          }
          break;
       case 89:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 112;
             jjmatchedPos = 2;
          }
          break;
       case 97:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0x7c00206000000020L, active2, 0x80L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0xf80040c000000040L, active2, 0x100L);
       case 98:
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400800000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x801000000L, active2, 0L);
       case 99:
-         if ((active0 & 0x400000000L) != 0L)
+         if ((active0 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 34;
+            jjmatchedKind = 35;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4008000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x8010000000000L, active2, 0L);
       case 100:
-         if ((active0 & 0x8000000000L) != 0L)
+         if ((active0 & 0x10000000000L) != 0L)
          {
-            jjmatchedKind = 39;
+            jjmatchedKind = 40;
             jjmatchedPos = 2;
          }
-         else if ((active2 & 0x400L) != 0L)
+         else if ((active2 & 0x800L) != 0L)
          {
-            jjmatchedKind = 138;
+            jjmatchedKind = 139;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x3800000241000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x7000000481000000L, active1, 0L, active2, 0L);
       case 101:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4000200000L, active1, 0L, active2, 0x300L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000200000L, active1, 0L, active2, 0x600L);
       case 102:
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L, active1, 0L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0L, active2, 0x80000L);
       case 103:
-         if ((active0 & 0x20000000000000L) != 0L)
+         if ((active0 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 53;
+            jjmatchedKind = 54;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x400000000000000L) != 0L)
+         else if ((active0 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 59;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x4000000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x8000000L, active2, 0L);
       case 105:
-         if ((active1 & 0x200L) != 0L)
+         if ((active1 & 0x400L) != 0L)
          {
-            jjmatchedKind = 73;
+            jjmatchedKind = 74;
             jjmatchedPos = 2;
          }
-         else if ((active1 & 0x400L) != 0L)
+         else if ((active1 & 0x800L) != 0L)
          {
-            jjmatchedKind = 74;
+            jjmatchedKind = 75;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x840000000000L, active1, 0x40000040400000L, active2, 0x200000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1080000000000L, active1, 0x80000080800000L, active2, 0x400000L);
       case 107:
-         if ((active0 & 0x8000000L) != 0L)
+         if ((active0 & 0x10000000L) != 0L)
          {
-            jjmatchedKind = 27;
+            jjmatchedKind = 28;
             jjmatchedPos = 2;
          }
          break;
       case 108:
-         if ((active2 & 0x80000L) != 0L)
+         if ((active2 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 147;
+            jjmatchedKind = 148;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x100400000L, active1, 0x1003008L, active2, 0x4009L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0x2006010L, active2, 0x8012L);
       case 109:
-         if ((active0 & 0x200000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 57;
+            jjmatchedKind = 58;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000L, active1, 0x8000008000002L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x2020000000L, active1, 0x10000010000004L, active2, 0L);
       case 110:
-         if ((active0 & 0x80000000000000L) != 0L)
+         if ((active0 & 0x100000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 56;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x180004000000L, active1, 0x2410212180000L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x300008000000L, active1, 0x4820424300000L, active2, 0L);
       case 111:
-         return jjMoveStringLiteralDfa3_0(active0, 0x4002000000000L, active1, 0x80004104L, active2, 0x8000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8004002000000L, active1, 0x100008208L, active2, 0x10000L);
       case 112:
-         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0x1000000000L, active2, 0x1000L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0x2000000000L, active2, 0x2000L);
       case 114:
-         if ((active1 & 0x8000L) != 0L)
+         if ((active1 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 79;
+            jjmatchedKind = 80;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0xc000200000000000L, active1, 0x1801e0800030001L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000400000000000L, active1, 0x3003c1000060003L, active2, 0L);
       case 115:
-         if ((active1 & 0x20000000L) != 0L)
+         if ((active1 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 93;
+            jjmatchedKind = 94;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x802900000L, active1, 0x800L, active2, 0x4L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x1004900000L, active1, 0x1000L, active2, 0x8L);
       case 116:
-         if ((active0 & 0x400000000000L) != 0L)
+         if ((active0 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 46;
+            jjmatchedKind = 47;
             jjmatchedPos = 2;
          }
-         else if ((active0 & 0x1000000000000L) != 0L)
+         else if ((active0 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 48;
+            jjmatchedKind = 49;
             jjmatchedPos = 2;
          }
-         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x40000L, active2, 0x112002L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0x80000L, active2, 0x224004L);
       case 117:
-         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0x8001000100200010L, active2, 0L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x2000200400020L, active2, 0x1L);
       case 118:
-         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0L, active2, 0x800L);
+         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000000L, active1, 0L, active2, 0x1000L);
       case 119:
-         if ((active1 & 0x20000000000000L) != 0L)
+         if ((active1 & 0x40000000000000L) != 0L)
          {
-            jjmatchedKind = 117;
+            jjmatchedKind = 118;
             jjmatchedPos = 2;
          }
          break;
       case 120:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 57;
             jjmatchedPos = 2;
          }
          break;
       case 121:
-         if ((active1 & 0x800000000000L) != 0L)
+         if ((active1 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 111;
+            jjmatchedKind = 112;
             jjmatchedPos = 2;
          }
          break;
@@ -723,297 +727,307 @@ private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long a
    switch(curChar)
    {
       case 49:
-         if ((active1 & 0x400000000000000L) != 0L)
+         if ((active1 & 0x800000000000000L) != 0L)
          {
-            jjmatchedKind = 122;
+            jjmatchedKind = 123;
             jjmatchedPos = 3;
          }
          break;
       case 50:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1800000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x3000000000000000L, active2, 0L);
       case 51:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x2000000000000000L, active2, 0L);
-      case 53:
          return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4000000000000000L, active2, 0L);
+      case 53:
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
       case 65:
-         if ((active2 & 0x2L) != 0L)
+         if ((active2 & 0x4L) != 0L)
          {
-            jjmatchedKind = 129;
+            jjmatchedKind = 130;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x2000L) != 0L)
+         else if ((active2 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 141;
+            jjmatchedKind = 142;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x100000040000L, active2, 0x40300L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x200000080000L, active2, 0x80600L);
       case 66:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
       case 67:
-         if ((active0 & 0x800000000L) != 0L)
+         if ((active0 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 35;
+            jjmatchedKind = 36;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000L, active1, 0x200000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x400000000L, active2, 0L);
       case 68:
-         if ((active0 & 0x100000000000L) != 0L)
+         if ((active0 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 44;
+            jjmatchedKind = 45;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x10000000L) != 0L)
+         else if ((active1 & 0x20000000L) != 0L)
          {
-            jjmatchedKind = 92;
+            jjmatchedKind = 93;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x40000000000000L) != 0L)
+         else if ((active1 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 118;
+            jjmatchedKind = 119;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x80L) != 0L)
+         else if ((active2 & 0x100L) != 0L)
          {
-            jjmatchedKind = 135;
+            jjmatchedKind = 136;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20100L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40200L, active2, 0L);
       case 69:
          if ((active0 & 0x100000L) != 0L)
          {
             jjmatchedKind = 20;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x8000000000000000L) != 0L)
+         else if ((active2 & 0x1L) != 0L)
          {
-            jjmatchedKind = 127;
+            jjmatchedKind = 128;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x800L) != 0L)
+         else if ((active2 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 140;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x3800001240400000L, active1, 0x804000c000000L, active2, 0x400cL);
+         return jjMoveStringLiteralDfa4_0(active0, 0x7000002480400000L, active1, 0x10080018000000L, active2, 0x8018L);
       case 70:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 71:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 84;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000L, active2, 0L);
       case 72:
-         if ((active2 & 0x100000L) != 0L)
+         if ((active2 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 148;
+            jjmatchedKind = 149;
             jjmatchedPos = 3;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4008020010000000L, active1, 0x1000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8010040020000000L, active1, 0x2000000L, active2, 0L);
       case 76:
-         if ((active1 & 0x1000L) != 0L)
+         if ((active1 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 76;
+            jjmatchedKind = 77;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x40000000L) != 0L)
+         else if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 94;
+            jjmatchedKind = 95;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1800810020L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x3001020040L, active2, 0L);
       case 77:
-         if ((active0 & 0x2000000000L) != 0L)
+         if ((active0 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 37;
+            jjmatchedKind = 38;
             jjmatchedPos = 3;
          }
          break;
       case 78:
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0x100000010L, active2, 0x200000L);
-      case 79:
-         if ((active2 & 0x10000L) != 0L)
+         if ((active0 & 0x2000000L) != 0L)
          {
-            jjmatchedKind = 144;
+            jjmatchedKind = 25;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000L, active1, 0x4008080000000L, active2, 0L);
-      case 80:
-         if ((active2 & 0x8000L) != 0L)
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x200000020L, active2, 0x400000L);
+      case 79:
+         if ((active2 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 143;
+            jjmatchedKind = 145;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x2L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x8010100000000L, active2, 0L);
+      case 80:
+         if ((active2 & 0x10000L) != 0L)
+         {
+            jjmatchedKind = 144;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x4L, active2, 0L);
       case 82:
-         if ((active1 & 0x200000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 109;
+            jjmatchedKind = 110;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000L, active1, 0x1000000604000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x2000000c08000L, active2, 0L);
       case 83:
-         return jjMoveStringLiteralDfa4_0(active0, 0x800024000000L, active1, 0x100026400000000L, active2, 0x1L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000048000000L, active1, 0x20004c800000000L, active2, 0x2L);
       case 84:
-         if ((active1 & 0x800L) != 0L)
+         if ((active1 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 75;
+            jjmatchedKind = 76;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x410000002008L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x820000004010L, active2, 0L);
       case 85:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4080101000000L, active1, 0x82000002000004L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8100201000000L, active1, 0x104000004000008L, active2, 0L);
       case 86:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 89:
-         if ((active2 & 0x1000L) != 0L)
+         if ((active2 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 141;
             jjmatchedPos = 3;
          }
          break;
       case 95:
-         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000000L, active1, 0x1L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x3L, active2, 0L);
       case 97:
-         if ((active2 & 0x2L) != 0L)
+         if ((active2 & 0x4L) != 0L)
          {
-            jjmatchedKind = 129;
+            jjmatchedKind = 130;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x2000L) != 0L)
+         else if ((active2 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 141;
+            jjmatchedKind = 142;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x100000040000L, active2, 0x40300L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0x200000080000L, active2, 0x80600L);
       case 98:
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
       case 99:
-         if ((active0 & 0x800000000L) != 0L)
+         if ((active0 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 35;
+            jjmatchedKind = 36;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x2000000L, active1, 0x200000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L, active1, 0x400000000L, active2, 0L);
       case 100:
-         if ((active0 & 0x100000000000L) != 0L)
+         if ((active0 & 0x200000000000L) != 0L)
          {
-            jjmatchedKind = 44;
+            jjmatchedKind = 45;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x10000000L) != 0L)
+         else if ((active1 & 0x20000000L) != 0L)
          {
-            jjmatchedKind = 92;
+            jjmatchedKind = 93;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x40000000000000L) != 0L)
+         else if ((active1 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 118;
+            jjmatchedKind = 119;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x80L) != 0L)
+         else if ((active2 & 0x100L) != 0L)
          {
-            jjmatchedKind = 135;
+            jjmatchedKind = 136;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20100L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40200L, active2, 0L);
       case 101:
          if ((active0 & 0x100000L) != 0L)
          {
             jjmatchedKind = 20;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x8000000000000000L) != 0L)
+         else if ((active2 & 0x1L) != 0L)
          {
-            jjmatchedKind = 127;
+            jjmatchedKind = 128;
             jjmatchedPos = 3;
          }
-         else if ((active2 & 0x800L) != 0L)
+         else if ((active2 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 139;
+            jjmatchedKind = 140;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x3800001240400000L, active1, 0x804000c000000L, active2, 0x400cL);
+         return jjMoveStringLiteralDfa4_0(active0, 0x7000002480400000L, active1, 0x10080018000000L, active2, 0x8018L);
       case 102:
          return jjMoveStringLiteralDfa4_0(active0, 0x200000L, active1, 0L, active2, 0L);
       case 103:
-         if ((active1 & 0x80000L) != 0L)
+         if ((active1 & 0x100000L) != 0L)
          {
-            jjmatchedKind = 83;
+            jjmatchedKind = 84;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000L, active2, 0L);
       case 104:
-         if ((active2 & 0x100000L) != 0L)
+         if ((active2 & 0x200000L) != 0L)
          {
-            jjmatchedKind = 148;
+            jjmatchedKind = 149;
             jjmatchedPos = 3;
          }
          break;
       case 105:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4008020010000000L, active1, 0x1000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8010040020000000L, active1, 0x2000000L, active2, 0L);
       case 108:
-         if ((active1 & 0x1000L) != 0L)
+         if ((active1 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 76;
+            jjmatchedKind = 77;
             jjmatchedPos = 3;
          }
-         else if ((active1 & 0x40000000L) != 0L)
+         else if ((active1 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 94;
+            jjmatchedKind = 95;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1800810020L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x3001020040L, active2, 0L);
       case 109:
-         if ((active0 & 0x2000000000L) != 0L)
+         if ((active0 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 37;
+            jjmatchedKind = 38;
             jjmatchedPos = 3;
          }
          break;
       case 110:
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000000L, active1, 0x100000010L, active2, 0x200000L);
+         if ((active0 & 0x2000000L) != 0L)
+         {
+            jjmatchedKind = 25;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x200000020L, active2, 0x400000L);
       case 111:
-         if ((active2 & 0x10000L) != 0L)
+         if ((active2 & 0x20000L) != 0L)
          {
-            jjmatchedKind = 144;
+            jjmatchedKind = 145;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x40000000000L, active1, 0x4008080000000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L, active1, 0x8010100000000L, active2, 0L);
       case 112:
-         if ((active2 & 0x8000L) != 0L)
+         if ((active2 & 0x10000L) != 0L)
          {
-            jjmatchedKind = 143;
+            jjmatchedKind = 144;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x2L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L, active1, 0x4L, active2, 0L);
       case 114:
-         if ((active1 & 0x200000000000L) != 0L)
+         if ((active1 & 0x400000000000L) != 0L)
          {
-            jjmatchedKind = 109;
+            jjmatchedKind = 110;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000L, active1, 0x1000000604000L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L, active1, 0x2000000c08000L, active2, 0L);
       case 115:
-         return jjMoveStringLiteralDfa4_0(active0, 0x800024000000L, active1, 0x100026400000000L, active2, 0x1L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000048000000L, active1, 0x20004c800000000L, active2, 0x2L);
       case 116:
-         if ((active1 & 0x800L) != 0L)
+         if ((active1 & 0x1000L) != 0L)
          {
-            jjmatchedKind = 75;
+            jjmatchedKind = 76;
             jjmatchedPos = 3;
          }
-         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x410000002008L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000L, active1, 0x820000004010L, active2, 0L);
       case 117:
-         return jjMoveStringLiteralDfa4_0(active0, 0x4080101000000L, active1, 0x82000002000004L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8100201000000L, active1, 0x104000004000008L, active2, 0L);
       case 118:
-         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa4_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
       case 121:
-         if ((active2 & 0x1000L) != 0L)
+         if ((active2 & 0x2000L) != 0L)
          {
-            jjmatchedKind = 140;
+            jjmatchedKind = 141;
             jjmatchedPos = 3;
          }
          break;
@@ -1033,363 +1047,363 @@ private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long a
    switch(curChar)
    {
       case 49:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
       case 50:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000000L, active2, 0L);
-      case 53:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1000000000000000L, active2, 0L);
-      case 56:
+      case 53:
          return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000000000000L, active2, 0L);
+      case 56:
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4000000000000000L, active2, 0L);
       case 65:
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0x11200810000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x22401020000L, active2, 0L);
       case 67:
          return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
       case 68:
-         if ((active0 & 0x1000000000L) != 0L)
+         if ((active0 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 36;
+            jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x10L) != 0L)
+         else if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 69;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000000L) != 0L)
+         else if ((active1 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 97;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10000000000L, active2, 0L);
       case 69:
-         if ((active0 & 0x4000000000L) != 0L)
+         if ((active0 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 38;
+            jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100L) != 0L)
+         else if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 72;
+            jjmatchedKind = 73;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x2000000000L) != 0L)
+         else if ((active1 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 101;
+            jjmatchedKind = 102;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x4000000000L) != 0L)
+         else if ((active1 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 102;
+            jjmatchedKind = 103;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x1L) != 0L)
+         else if ((active2 & 0x2L) != 0L)
          {
-            jjmatchedKind = 128;
+            jjmatchedKind = 129;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x120000000L, active1, 0x80800000028L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x101000000050L, active2, 0L);
       case 70:
-         if ((active0 & 0x200000000L) != 0L)
+         if ((active0 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 33;
+            jjmatchedKind = 34;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x200000000000L, active2, 0L);
       case 71:
-         if ((active2 & 0x200000L) != 0L)
+         if ((active2 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 149;
+            jjmatchedKind = 150;
             jjmatchedPos = 4;
          }
          break;
       case 72:
-         if ((active0 & 0x10000000000L) != 0L)
+         if ((active0 & 0x20000000000L) != 0L)
          {
-            jjmatchedKind = 40;
+            jjmatchedKind = 41;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000000L) != 0L)
+         else if ((active1 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 110;
+            jjmatchedKind = 111;
             jjmatchedPos = 4;
          }
          break;
       case 73:
-         if ((active1 & 0x2000L) != 0L)
+         if ((active1 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 77;
+            jjmatchedKind = 78;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x200000L) != 0L)
+         else if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 86;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000L) != 0L)
+         else if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 87;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x200000a00000L, active1, 0x100000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x200000000000000L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 77:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2100000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4200000L, active2, 0L);
       case 78:
-         if ((active0 & 0x40000000000L) != 0L)
+         if ((active0 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 42;
+            jjmatchedKind = 43;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000L, active1, 0x4040000000000L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L, active1, 0x8080000000000L, active2, 0x8000L);
       case 79:
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000000000L, active1, 0L, active2, 0L);
       case 80:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x5L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0xaL, active2, 0L);
       case 82:
-         if ((active0 & 0x40000000L) != 0L)
+         if ((active0 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 30;
+            jjmatchedKind = 31;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active1 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 96;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x100L) != 0L)
+         else if ((active2 & 0x200L) != 0L)
          {
-            jjmatchedKind = 136;
+            jjmatchedKind = 137;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000002000000L, active1, 0L, active2, 0x4L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000004000000L, active1, 0L, active2, 0x8L);
       case 83:
-         if ((active0 & 0x80000000000L) != 0L)
+         if ((active0 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 43;
+            jjmatchedKind = 44;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x1000000000000L) != 0L)
+         else if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 113;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1L, active2, 0L);
       case 84:
-         if ((active0 & 0x10000000L) != 0L)
+         if ((active0 & 0x20000000L) != 0L)
          {
-            jjmatchedKind = 28;
+            jjmatchedKind = 29;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x40000000000000L) != 0L)
+         else if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 55;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 82;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x800004000000L, active1, 0x2020409044000L, active2, 0x208L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000008000000L, active1, 0x4040812088000L, active2, 0x410L);
       case 85:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000000L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000000L, active2, 0x80000L);
       case 86:
-         if ((active0 & 0x800000000000000L) != 0L)
+         if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 60;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x3000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x6000000000000000L, active1, 0L, active2, 0L);
       case 88:
-         if ((active1 & 0x4000000L) != 0L)
+         if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 90;
+            jjmatchedKind = 91;
             jjmatchedPos = 4;
          }
          break;
       case 90:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10000000000000L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0x11200810000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x22401020000L, active2, 0L);
       case 99:
          return jjMoveStringLiteralDfa5_0(active0, 0x1400000L, active1, 0L, active2, 0L);
       case 100:
-         if ((active0 & 0x1000000000L) != 0L)
+         if ((active0 & 0x2000000000L) != 0L)
          {
-            jjmatchedKind = 36;
+            jjmatchedKind = 37;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x10L) != 0L)
+         else if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 68;
+            jjmatchedKind = 69;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100000000L) != 0L)
+         else if ((active1 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 96;
+            jjmatchedKind = 97;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10000000000L, active2, 0L);
       case 101:
-         if ((active0 & 0x4000000000L) != 0L)
+         if ((active0 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 38;
+            jjmatchedKind = 39;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x100L) != 0L)
+         else if ((active1 & 0x200L) != 0L)
          {
-            jjmatchedKind = 72;
+            jjmatchedKind = 73;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x2000000000L) != 0L)
+         else if ((active1 & 0x4000000000L) != 0L)
          {
-            jjmatchedKind = 101;
+            jjmatchedKind = 102;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x4000000000L) != 0L)
+         else if ((active1 & 0x8000000000L) != 0L)
          {
-            jjmatchedKind = 102;
+            jjmatchedKind = 103;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x1L) != 0L)
+         else if ((active2 & 0x2L) != 0L)
          {
-            jjmatchedKind = 128;
+            jjmatchedKind = 129;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x120000000L, active1, 0x80800000028L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x240000000L, active1, 0x101000000050L, active2, 0L);
       case 102:
-         if ((active0 & 0x200000000L) != 0L)
+         if ((active0 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 33;
+            jjmatchedKind = 34;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x200000000000L, active2, 0L);
       case 103:
-         if ((active2 & 0x200000L) != 0L)
+         if ((active2 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 149;
+            jjmatchedKind = 150;
             jjmatchedPos = 4;
          }
          break;
       case 104:
-         if ((active0 & 0x10000000000L) != 0L)
+         if ((active0 & 0x20000000000L) != 0L)
          {
-            jjmatchedKind = 40;
+            jjmatchedKind = 41;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000000000L) != 0L)
+         else if ((active1 & 0x800000000000L) != 0L)
          {
-            jjmatchedKind = 110;
+            jjmatchedKind = 111;
             jjmatchedPos = 4;
          }
          break;
       case 105:
-         if ((active1 & 0x2000L) != 0L)
+         if ((active1 & 0x4000L) != 0L)
          {
-            jjmatchedKind = 77;
+            jjmatchedKind = 78;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x200000L) != 0L)
+         else if ((active1 & 0x400000L) != 0L)
          {
-            jjmatchedKind = 85;
+            jjmatchedKind = 86;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x400000L) != 0L)
+         else if ((active1 & 0x800000L) != 0L)
          {
-            jjmatchedKind = 86;
+            jjmatchedKind = 87;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x200000a00000L, active1, 0x100000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000a00000L, active1, 0x200000000000000L, active2, 0L);
       case 108:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0L);
       case 109:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2100000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4200000L, active2, 0L);
       case 110:
-         if ((active0 & 0x40000000000L) != 0L)
+         if ((active0 & 0x80000000000L) != 0L)
          {
-            jjmatchedKind = 42;
+            jjmatchedKind = 43;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000L, active1, 0x4040000000000L, active2, 0x4000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L, active1, 0x8080000000000L, active2, 0x8000L);
       case 111:
-         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000000000L, active1, 0L, active2, 0L);
       case 112:
-         if ((active0 & 0x4000000000000L) != 0L)
+         if ((active0 & 0x8000000000000L) != 0L)
          {
-            jjmatchedKind = 50;
+            jjmatchedKind = 51;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x5L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0xaL, active2, 0L);
       case 114:
-         if ((active0 & 0x40000000L) != 0L)
+         if ((active0 & 0x80000000L) != 0L)
          {
-            jjmatchedKind = 30;
+            jjmatchedKind = 31;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x80000000L) != 0L)
+         else if ((active1 & 0x100000000L) != 0L)
          {
-            jjmatchedKind = 95;
+            jjmatchedKind = 96;
             jjmatchedPos = 4;
          }
-         else if ((active2 & 0x100L) != 0L)
+         else if ((active2 & 0x200L) != 0L)
          {
-            jjmatchedKind = 136;
+            jjmatchedKind = 137;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x10000002000000L, active1, 0L, active2, 0x4L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000004000000L, active1, 0L, active2, 0x8L);
       case 115:
-         if ((active0 & 0x80000000000L) != 0L)
+         if ((active0 & 0x100000000000L) != 0L)
          {
-            jjmatchedKind = 43;
+            jjmatchedKind = 44;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x1000000000000L) != 0L)
+         else if ((active1 & 0x2000000000000L) != 0L)
          {
-            jjmatchedKind = 112;
+            jjmatchedKind = 113;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1L, active2, 0L);
       case 116:
-         if ((active0 & 0x10000000L) != 0L)
+         if ((active0 & 0x20000000L) != 0L)
          {
-            jjmatchedKind = 28;
+            jjmatchedKind = 29;
             jjmatchedPos = 4;
          }
-         else if ((active0 & 0x40000000000000L) != 0L)
+         else if ((active0 & 0x80000000000000L) != 0L)
          {
-            jjmatchedKind = 54;
+            jjmatchedKind = 55;
             jjmatchedPos = 4;
          }
-         else if ((active1 & 0x20000L) != 0L)
+         else if ((active1 & 0x40000L) != 0L)
          {
-            jjmatchedKind = 81;
+            jjmatchedKind = 82;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x800004000000L, active1, 0x2020409044000L, active2, 0x208L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000008000000L, active1, 0x4040812088000L, active2, 0x410L);
       case 117:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x80000000000000L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000000L, active2, 0x80000L);
       case 118:
-         if ((active0 & 0x800000000000000L) != 0L)
+         if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 59;
+            jjmatchedKind = 60;
             jjmatchedPos = 4;
          }
-         return jjMoveStringLiteralDfa5_0(active0, 0x3000000000000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0x6000000000000000L, active1, 0L, active2, 0L);
       case 120:
-         if ((active1 & 0x4000000L) != 0L)
+         if ((active1 & 0x8000000L) != 0L)
          {
-            jjmatchedKind = 90;
+            jjmatchedKind = 91;
             jjmatchedPos = 4;
          }
          break;
       case 122:
-         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10000000000000L, active2, 0L);
       default :
          break;
    }
@@ -1406,127 +1420,127 @@ private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long a
    switch(curChar)
    {
       case 50:
-         if ((active1 & 0x4000000000000000L) != 0L)
+         if ((active1 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 126;
+            jjmatchedKind = 127;
             jjmatchedPos = 5;
          }
          break;
       case 52:
-         if ((active1 & 0x800000000000000L) != 0L)
+         if ((active1 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 123;
+            jjmatchedKind = 124;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x2000000000000000L) != 0L)
+         else if ((active1 & 0x4000000000000000L) != 0L)
          {
-            jjmatchedKind = 125;
+            jjmatchedKind = 126;
             jjmatchedPos = 5;
          }
          break;
       case 54:
-         if ((active1 & 0x1000000000000000L) != 0L)
+         if ((active1 & 0x2000000000000000L) != 0L)
          {
-            jjmatchedKind = 124;
+            jjmatchedKind = 125;
             jjmatchedPos = 5;
          }
          break;
       case 65:
-         return jjMoveStringLiteralDfa6_0(active0, 0x8010000000000000L, active1, 0x20000100000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000000L, active1, 0x40000200001L, active2, 0L);
       case 67:
-         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000L, active1, 0x1000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x2000000000L, active2, 0L);
       case 68:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4040000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8080000000000L, active2, 0L);
       case 69:
-         if ((active1 & 0x2L) != 0L)
+         if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 66;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x8L) != 0L)
+         else if ((active2 & 0x10L) != 0L)
          {
-            jjmatchedKind = 131;
+            jjmatchedKind = 132;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x200L) != 0L)
+         else if ((active2 & 0x400L) != 0L)
          {
-            jjmatchedKind = 137;
+            jjmatchedKind = 138;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x200800b004000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x4010016008000L, active2, 0L);
       case 70:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
       case 71:
-         if ((active0 & 0x8000000000000L) != 0L)
+         if ((active0 & 0x10000000000000L) != 0L)
          {
-            jjmatchedKind = 51;
+            jjmatchedKind = 52;
             jjmatchedPos = 5;
          }
          break;
       case 73:
-         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L, active1, 0x80010000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0x100020000000000L, active2, 0L);
       case 76:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x40000L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x80000L);
       case 78:
-         if ((active1 & 0x800000000L) != 0L)
+         if ((active1 & 0x1000000000L) != 0L)
          {
-            jjmatchedKind = 99;
+            jjmatchedKind = 100;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000020000800000L, active1, 0x810000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x8000040000800000L, active1, 0x1020000L, active2, 0L);
       case 79:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x108000000000001L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x210000000000002L, active2, 0L);
       case 82:
-         if ((active1 & 0x8L) != 0L)
+         if ((active1 & 0x10L) != 0L)
          {
-            jjmatchedKind = 67;
+            jjmatchedKind = 68;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x400000000L) != 0L)
+         else if ((active1 & 0x800000000L) != 0L)
          {
-            jjmatchedKind = 98;
+            jjmatchedKind = 99;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0x4000000L, active1, 0L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x8000000L, active1, 0L, active2, 0L);
       case 83:
-         if ((active0 & 0x100000000L) != 0L)
+         if ((active0 & 0x200000000L) != 0L)
          {
-            jjmatchedKind = 32;
+            jjmatchedKind = 33;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x800000000000L) != 0L)
+         else if ((active0 & 0x1000000000000L) != 0L)
          {
-            jjmatchedKind = 47;
+            jjmatchedKind = 48;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x20L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40L, active2, 0L);
       case 84:
          if ((active0 & 0x400000L) != 0L)
          {
             jjmatchedKind = 22;
             jjmatchedPos = 5;
          }
-         else if ((active0 & 0x20000000L) != 0L)
+         else if ((active0 & 0x40000000L) != 0L)
          {
-            jjmatchedKind = 29;
+            jjmatchedKind = 30;
             jjmatchedPos = 5;
          }
-         else if ((active1 & 0x200000000L) != 0L)
+         else if ((active1 & 0x400000000L) != 0L)
          {
-            jjmatchedKind = 97;
+            jjmatchedKind = 98;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x4L) != 0L)
+         else if ((active2 & 0x8L) != 0L)
          {
-            jjmatchedKind = 130;
+            jjmatchedKind = 131;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x4000L) != 0L)
+         else if ((active2 & 0x8000L) != 0L)
          {
-            jjmatchedKind = 142;
+            jjmatchedKind = 143;
             jjmatchedPos = 5;
          }
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x200000000000L, active2, 0L);
       case 88:
          if ((active0 & 0x200000L) != 0L)
          {
@@ -1535,105 +1549,105 @@ private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long a
          }
          break;
       case 89:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000L, active2, 0L);
       case 95:
-         return jjMoveStringLiteralDfa6_0(active0, 0x3000000000000000L, active1, 0x4L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x6000000000000000L, active1, 0x8L, active2, 0L);
       case 97:
-         return jjMoveStringLiteralDfa6_0(active0, 0x8010000000000000L, active1, 0x20000100000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000000L, active1, 0x40000200001L, active2, 0L);
       case 99:
-         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000L, active1, 0x1000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000L, active1, 0x2000000000L, active2, 0L);
       case 100:
-         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4040000000000L, active2, 0L);
+         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8080000000000L, active2, 0L);
       case 101:
-         if ((active1 & 0x2L) != 0L)
+         if ((active1 & 0x4L) != 0L)
          {
-            jjmatchedKind = 65;
+            jjmatchedKind = 66;
             jjmatchedPos = 5;
          }
-         else if ((active2 & 0x8L) != 0L)
+         else 

<TRUNCATED>

[5/5] jena git commit: JENA-632: Generate JSON from SPARQL directly

Posted by ki...@apache.org.
JENA-632: Generate JSON from SPARQL directly

This closes #114


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4bf5e3c0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4bf5e3c0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4bf5e3c0

Branch: refs/heads/master
Commit: 4bf5e3c0ad18d61542ce9e37804e8ec727283d96
Parents: e5cbf13
Author: Bruno P. Kinoshita <br...@yahoo.com.br>
Authored: Sun Dec 27 23:51:24 2015 +1300
Committer: Bruno P. Kinoshita <ki...@users.noreply.github.com>
Committed: Fri Apr 27 23:02:18 2018 +1200

----------------------------------------------------------------------
 jena-arq/Grammar/arq.jj                         |   41 +
 jena-arq/Grammar/master.jj                      |   46 +-
 jena-arq/Grammar/tokens.txt                     |    1 +
 .../main/java/org/apache/jena/query/Query.java  |   18 +
 .../org/apache/jena/query/QueryExecution.java   |   10 +-
 .../org/apache/jena/query/QueryVisitor.java     |    3 +-
 .../apache/jena/query/ResultSetFormatter.java   |   37 +-
 .../apache/jena/sparql/core/QueryCompare.java   |    5 +
 .../apache/jena/sparql/core/QueryHashCode.java  |    4 +
 .../apache/jena/sparql/engine/JsonIterator.java |  100 +
 .../jena/sparql/engine/QueryExecutionBase.java  |   45 +-
 .../sparql/engine/http/QueryEngineHTTP.java     |   15 +
 .../apache/jena/sparql/lang/arq/ARQParser.java  | 1192 ++++++------
 .../sparql/lang/arq/ARQParserConstants.java     |  379 ++--
 .../sparql/lang/arq/ARQParserTokenManager.java  | 1738 +++++++++---------
 .../apache/jena/sparql/lib/RDFTerm2Json.java    |    2 +-
 .../jena/sparql/resultset/SPARQLResult.java     |   30 +
 .../jena/sparql/serializer/QuerySerializer.java |   28 +-
 .../syntaxtransform/QueryTransformOps.java      |    5 +
 .../jena/query/TS_ResultSetFormatter.java       |   30 +
 .../jena/query/TestResultSetFormatter.java      |   84 +
 .../org/apache/jena/sparql/api/TestAPI.java     |   87 +-
 .../apache/jena/sparql/engine/TS_Engine.java    |    2 +
 .../apache/jena/sparql/engine/TestJsonEval.java |   77 +
 .../jena/sparql/engine/TestJsonIterator.java    |   86 +
 .../jena/fuseki/servlets/ResponseJson.java      |  150 ++
 .../jena/fuseki/servlets/SPARQL_Query.java      |   11 +
 .../java/org/apache/jena/fuseki/TestQuery.java  |   44 +
 28 files changed, 2662 insertions(+), 1608 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/Grammar/arq.jj
----------------------------------------------------------------------
diff --git a/jena-arq/Grammar/arq.jj b/jena-arq/Grammar/arq.jj
index 5169735..d43d40c 100644
--- a/jena-arq/Grammar/arq.jj
+++ b/jena-arq/Grammar/arq.jj
@@ -49,6 +49,7 @@ void Query() : { }
 {
   Prologue()
   ( SelectQuery() | ConstructQuery() | DescribeQuery() | AskQuery()
+    | JsonQuery()
   )
   ValuesClause()
 }
@@ -176,6 +177,34 @@ void AskQuery() : {}
   WhereClause()
   SolutionModifier()
 }
+void JsonQuery() : {}
+{
+  JsonClause()
+  ( DatasetClause() )*
+  WhereClause()
+  SolutionModifier()
+}
+void JsonClause() : {}
+{
+  <JSON> { getQuery().setQueryJsonType() ; }
+  <LBRACE>
+  JsonObjectMember() ( <COMMA> JsonObjectMember() ) *
+  <RBRACE>
+}
+void JsonObjectMember() : { Node o ; String s ; Token t; }
+{
+  s = String()
+  t = < PNAME_NS > {
+    if ( ! t.image.equals(":") )
+      throwParseException("Prefix name expression not legal at this point : "+t.image, t.beginLine, t.beginColumn) ;
+  }
+  (
+    o = Var() { getQuery().addResultVar((Var)o) ; getQuery().addJsonMapping(s, o) ; }
+  | o = RDFLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  | o = NumericLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  | o = BooleanLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  )
+}
 void DatasetClause() : {}
 {
   <FROM>
@@ -1563,6 +1592,17 @@ String String() : { Token t ; String lex ; }
       return lex ;
     }
 }
+Number Number() : { Token t ; Number number ; }
+{
+  (
+    t = < INTEGER > { number = integerValue(t.image) ; }
+  | t = < DECIMAL > { number = doubleValue(t.image) ; }
+  | t = < DOUBLE > { number = doubleValue(t.image) ; }
+  )
+  {
+    return number ;
+  }
+}
 String iri() : { String iri ; }
 {
   iri = IRIREF() { return iri ; }
@@ -1621,6 +1661,7 @@ TOKEN [IGNORE_CASE] :
 | < SELECT: "select" >
 | < DISTINCT: "distinct" >
 | < REDUCED: "reduced" >
+| < JSON: "json" >
 | < DESCRIBE: "describe" >
 | < CONSTRUCT: "construct" >
 | < ASK: "ask" >

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/Grammar/master.jj
----------------------------------------------------------------------
diff --git a/jena-arq/Grammar/master.jj b/jena-arq/Grammar/master.jj
index effbe1b..5c7af35 100644
--- a/jena-arq/Grammar/master.jj
+++ b/jena-arq/Grammar/master.jj
@@ -121,10 +121,10 @@ void QueryUnit(): { }
 void Query() : { }
 {    
   Prologue()
-  ( SelectQuery() | ConstructQuery() | DescribeQuery() | AskQuery() 
-// #ifdef ARQ
-//   | JsonTemplateQuery()
-// #endif
+  ( SelectQuery() | ConstructQuery() | DescribeQuery() | AskQuery()
+#ifdef ARQ
+    | JsonQuery()
+#endif
   )
   ValuesClause()
 }
@@ -326,6 +326,41 @@ void AskQuery() : {}
   SolutionModifier()
 }
 
+#ifdef ARQ
+void JsonQuery() : {}
+{
+  JsonClause()
+  ( DatasetClause() )*
+  WhereClause()
+  SolutionModifier()
+}
+
+void JsonClause() : {}
+{
+  <JSON> { getQuery().setQueryJsonType() ; }
+  <LBRACE>
+  JsonObjectMember() ( <COMMA> JsonObjectMember() ) *
+  <RBRACE> 
+}
+
+void JsonObjectMember() : { Node o ; String s ; Token t; }
+{
+  s = String()
+  // PNAME_NS would eval true before COLON (default namescape) so we make sure we got what we were expecting
+  t = < PNAME_NS > {
+    if ( ! t.image.equals(":") )
+      throwParseException("Prefix name expression not legal at this point : "+t.image, t.beginLine, t.beginColumn) ;
+  }
+  (
+    o = Var() { getQuery().addResultVar((Var)o) ; getQuery().addJsonMapping(s, o) ; }
+  | o = RDFLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  | o = NumericLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  | o = BooleanLiteral() { getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ; }
+  )
+}
+
+#endif
+
 // ----
 
 void DatasetClause() : {}
@@ -2276,6 +2311,9 @@ TOKEN [IGNORE_CASE] :
 |  < SELECT:      "select" >
 |  < DISTINCT:    "distinct" >
 |  < REDUCED:     "reduced" >
+#ifdef ARQ
+|  < JSON:        "json" >
+#endif
 |  < DESCRIBE:    "describe" >
 |  < CONSTRUCT:   "construct" >
 |  < ASK:         "ask" >

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/Grammar/tokens.txt
----------------------------------------------------------------------
diff --git a/jena-arq/Grammar/tokens.txt b/jena-arq/Grammar/tokens.txt
index a95d6a5..a5ac75e 100644
--- a/jena-arq/Grammar/tokens.txt
+++ b/jena-arq/Grammar/tokens.txt
@@ -48,6 +48,7 @@
 [<CONSTRUCT>]  ::= 'CONSTRUCT'
 //[<CONSTRUCT_WHERE>]  ::= 'CONSTRUCT WHERE'
 [<ASK>]        ::= 'ASK'
+[<JSON>]       ::= 'JSON'
 [<DISTINCT>]   ::= 'DISTINCT'
 [<REDUCED>]    ::= 'REDUCED'
 [<WHERE>]      ::= 'WHERE'

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/query/Query.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/Query.java b/jena-arq/src/main/java/org/apache/jena/query/Query.java
index 3eea849..bf50817 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/Query.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/Query.java
@@ -62,6 +62,7 @@ public class Query extends Prologue implements Cloneable, Printable
     public static final int QueryTypeConstruct  = 222 ;
     public static final int QueryTypeDescribe   = 333 ;
     public static final int QueryTypeAsk        = 444 ;
+    public static final int QueryTypeJson       = 555 ;
     int queryType = QueryTypeUnknown ; 
     
     // If no model is provided explicitly, the query engine will load
@@ -135,6 +136,7 @@ public class Query extends Prologue implements Cloneable, Printable
     public void setQueryConstructType()         { queryType = QueryTypeConstruct ; queryResultStar = true ; }
     public void setQueryDescribeType()          { queryType = QueryTypeDescribe ; }
     public void setQueryAskType()               { queryType = QueryTypeAsk ; }
+    public void setQueryJsonType()              { queryType = QueryTypeJson ; }
     
     public int getQueryType()                   { return queryType ; }
     
@@ -146,6 +148,8 @@ public class Query extends Prologue implements Cloneable, Printable
 
     public boolean isAskType()                  { return queryType == QueryTypeAsk ; }
 
+    public boolean isJsonType()                 { return queryType == QueryTypeJson ; }
+
     public boolean isUnknownType()              { return queryType == QueryTypeUnknown ; }
     
     public boolean isConstructQuad()            { return isConstructType() && constructTemplate.containsRealQuad() ; }
@@ -515,6 +519,18 @@ public class Query extends Prologue implements Cloneable, Printable
         havingExprs.add(expr) ;
     }
 
+    // SELECT JSON
+
+    private Map<String, Node> jsonMapping = new LinkedHashMap<>();
+
+    public void addJsonMapping(String key, Node value) {
+        jsonMapping.put(key, value);
+    }
+
+    public Map<String, Node> getJsonMapping() {
+        return Collections.unmodifiableMap(jsonMapping);
+    }
+
     // ---- Aggregates
 
     // Record allocated aggregations.
@@ -707,6 +723,8 @@ public class Query extends Prologue implements Cloneable, Printable
             visitor.visitDescribeResultForm(this) ;
         if ( this.isAskType() )
             visitor.visitAskResultForm(this) ;
+        if ( this.isJsonType() )
+            visitor.visitJsonResultForm(this) ;
         visitor.visitDatasetDecl(this) ;
         visitor.visitQueryPattern(this) ;
         visitor.visitGroupBy(this) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/query/QueryExecution.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/QueryExecution.java b/jena-arq/src/main/java/org/apache/jena/query/QueryExecution.java
index ada0d00..201b422 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/QueryExecution.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/QueryExecution.java
@@ -21,6 +21,8 @@ package org.apache.jena.query;
 import java.util.Iterator;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.jena.atlas.json.JsonArray;
+import org.apache.jena.atlas.json.JsonObject;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.rdf.model.Model;
 import org.apache.jena.sparql.core.Quad;
@@ -153,7 +155,13 @@ public interface QueryExecution extends AutoCloseable
 
     /** Execute an ASK query */
     public boolean execAsk();
-    
+
+    /** Execute a JSON query and return a json array */
+    public JsonArray execJson() ;
+
+    /** Execute a JSON query and return an interator */
+    public Iterator<JsonObject> execJsonItems() ;
+
 	/** Stop in mid execution.
 	 *  This method can be called in parallel with other methods on the
      *  QueryExecution object.

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/query/QueryVisitor.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/QueryVisitor.java b/jena-arq/src/main/java/org/apache/jena/query/QueryVisitor.java
index 7368701..3d0afac 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/QueryVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/QueryVisitor.java
@@ -32,7 +32,8 @@ public interface QueryVisitor
     public void visitConstructResultForm(Query query) ;
     public void visitDescribeResultForm(Query query) ;
     public void visitAskResultForm(Query query) ;
-    
+    public void visitJsonResultForm(Query query);
+
     public void visitDatasetDecl(Query query) ;
     public void visitQueryPattern(Query query) ;
     

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/query/ResultSetFormatter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ResultSetFormatter.java b/jena-arq/src/main/java/org/apache/jena/query/ResultSetFormatter.java
index 3d2aa83..359de91 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ResultSetFormatter.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ResultSetFormatter.java
@@ -31,6 +31,8 @@ import java.util.ArrayList ;
 import java.util.Iterator ;
 import java.util.List ;
 
+import org.apache.jena.atlas.io.IndentedWriter;
+import org.apache.jena.atlas.json.JsonObject;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.rdf.model.RDFNode ;
 import org.apache.jena.riot.Lang;
@@ -322,18 +324,43 @@ public class ResultSetFormatter {
     public static void output(boolean result, Lang resultFormat) {
         output(System.out, result, resultFormat);
     }
-    // ---- General Output
     
     public static void output(OutputStream outStream, boolean result, Lang resultFormat) {
         ResultsWriter.create().lang(resultFormat).build().write(outStream, result);
     }
+
+    /** Output an iterator of JSON values.
+     *
+     * @param outStream output stream
+     * @param jsonItems The JSON values
+     */
+    public static void output(OutputStream outStream, Iterator<JsonObject> jsonItems)
+    {
+        IndentedWriter out = new IndentedWriter(outStream) ;
+        out.println("[") ;
+        out.incIndent() ;
+        while (jsonItems.hasNext())
+        {
+            JsonObject jsonItem = jsonItems.next() ;
+            jsonItem.output(out) ;
+            if ( jsonItems.hasNext() )
+                out.println(" ,");
+            else
+                out.println();
+        }
+        out.decIndent();
+        out.println("]");
+        out.flush();
+    }
+
+    // ---- General Output
+
+    // ---- XML Output
+
     /** Output a result set in the XML format
      * 
      * @param qresults      result set
      */
-    
-    // ---- XML Output
-
     static public void outputAsXML(ResultSet qresults)
     { outputAsXML(System.out, qresults) ; }
 
@@ -517,7 +544,7 @@ public class ResultSetFormatter {
     
     static public void outputAsJSON(OutputStream outStream, boolean booleanResult)
     { output(outStream, booleanResult, SPARQLResultSetJSON) ; }
-    
+
     // ---- SSE
     
     /** Output a boolean result in the SSE format

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryCompare.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryCompare.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryCompare.java
index a2c2ea9..7a6df46 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryCompare.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryCompare.java
@@ -105,6 +105,11 @@ public class QueryCompare implements QueryVisitor
     }
 
     @Override
+    public void visitJsonResultForm(Query query) {
+        check("Not both JSON queries", query2.isJsonType()) ;
+    }
+
+    @Override
     public void visitDatasetDecl(Query query1)
     {
         boolean b1 = Lib.equalsListAsSet(query1.getGraphURIs(), query2.getGraphURIs()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryHashCode.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryHashCode.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryHashCode.java
index 543ccaf..0ca768e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryHashCode.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/QueryHashCode.java
@@ -81,6 +81,10 @@ public class QueryHashCode
         { }
 
         @Override
+        public void visitJsonResultForm(Query query)
+        { }
+
+        @Override
         public void visitDatasetDecl(Query query)
         {
             x ^= query.getNamedGraphURIs().hashCode() ; 

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/engine/JsonIterator.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/JsonIterator.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/JsonIterator.java
new file mode 100644
index 0000000..6306bd9
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/JsonIterator.java
@@ -0,0 +1,100 @@
+/*
+ * 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.jena.sparql.engine;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.jena.atlas.json.JsonObject;
+import org.apache.jena.atlas.json.JsonValue;
+import org.apache.jena.atlas.lib.Closeable;
+
+import org.apache.jena.graph.Node;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.lib.RDFTerm2Json;
+
+/** A JSON iterator for JsonObject's, that wraps a QueryIterator, and a list
+ * of result variables.
+ */
+public class JsonIterator implements Iterator<JsonObject>
+{
+
+    private final QueryIterator queryIterator ;
+    private final List<String> resultVars ;
+
+    public JsonIterator(QueryIterator queryIterator, List<String> resultVars)
+    {
+        this.queryIterator = queryIterator ;
+        this.resultVars = Collections.unmodifiableList(resultVars) ;
+    }
+
+    @Override
+    public boolean hasNext()
+    {
+        if (queryIterator == null)
+            return false;
+        boolean r = queryIterator.hasNext() ;
+        if (!r)
+            close() ;
+        return r ;
+    }
+
+    @Override
+    public JsonObject next()
+    {
+        if (queryIterator == null)
+            throw new NoSuchElementException(this.getClass() + ".next") ;
+        try
+        {
+            Binding binding = queryIterator.next() ;
+            JsonObject jsonObject = new JsonObject() ;
+            for (String resultVar : resultVars)
+            {
+                Node n = binding.get(Var.alloc(resultVar)) ;
+                JsonValue value = RDFTerm2Json.fromNode(n) ;
+                jsonObject.put(resultVar, value);
+            }
+            return jsonObject ;
+        }
+        catch (NoSuchElementException ex)
+        {
+            close() ;
+            throw ex ;
+        }
+    }
+
+    @Override
+    public void remove()
+    {
+        throw new UnsupportedOperationException(this.getClass().getName() + ".remove") ;
+    }
+
+    /**
+     * Closes the QueryIterator, if it is an instance of Closeable.
+     */
+    private void close()
+    {
+        if (queryIterator instanceof Closeable)
+            ((Closeable) queryIterator).close();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryExecutionBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryExecutionBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryExecutionBase.java
index 1dc292e..0e5d134 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryExecutionBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryExecutionBase.java
@@ -24,6 +24,9 @@ import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.jena.atlas.json.JsonArray;
+import org.apache.jena.atlas.json.JsonObject;
+import org.apache.jena.atlas.json.JsonValue;
 import org.apache.jena.atlas.lib.Alarm ;
 import org.apache.jena.atlas.lib.AlarmClock;
 import org.apache.jena.atlas.logging.Log;
@@ -36,6 +39,7 @@ import org.apache.jena.shared.PrefixMapping;
 import org.apache.jena.sparql.ARQConstants;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.core.Var;
 import org.apache.jena.sparql.core.describe.DescribeHandler;
 import org.apache.jena.sparql.core.describe.DescribeHandlerRegistry;
 import org.apache.jena.sparql.engine.binding.Binding;
@@ -43,6 +47,7 @@ import org.apache.jena.sparql.engine.binding.BindingRoot;
 import org.apache.jena.sparql.engine.binding.BindingUtils;
 import org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper;
 import org.apache.jena.sparql.graph.GraphFactory;
+import org.apache.jena.sparql.lib.RDFTerm2Json;
 import org.apache.jena.sparql.modify.TemplateLib;
 import org.apache.jena.sparql.syntax.ElementGroup;
 import org.apache.jena.sparql.syntax.Template;
@@ -335,7 +340,45 @@ public class QueryExecutionBase implements QueryExecution
     }
 
     @Override
-    public void setTimeout(long timeout, TimeUnit timeUnit) {
+    public JsonArray execJson()
+    {
+        checkNotClosed() ;
+        if ( ! query.isJsonType() )
+            throw new QueryExecException("Attempt to get a JSON result from a " + labelForQuery(query)+" query") ;
+
+        startQueryIterator() ;
+
+        JsonArray jsonArray = new JsonArray() ;
+        List<String> resultVars = query.getResultVars() ;
+
+        while (queryIterator.hasNext())
+        {
+            Binding binding = queryIterator.next() ;
+            JsonObject jsonObject = new JsonObject() ; 
+            for (String resultVar : resultVars) {
+                Node n = binding.get(Var.alloc(resultVar)) ;
+                JsonValue value = RDFTerm2Json.fromNode(n) ;
+                jsonObject.put(resultVar, value) ;
+            }
+            jsonArray.add(jsonObject) ;
+        }
+
+        return jsonArray ;
+    }
+
+    @Override
+    public Iterator<JsonObject> execJsonItems() 
+    {
+        checkNotClosed() ;
+        if ( ! query.isJsonType() )
+            throw new QueryExecException("Attempt to get a JSON result from a " + labelForQuery(query)+" query") ;
+        startQueryIterator() ;
+        return new JsonIterator(queryIterator, query.getResultVars()) ;
+    }
+
+    @Override
+    public void setTimeout(long timeout, TimeUnit timeUnit)
+    {
         // Overall timeout - recorded as (UNSET,N)
         long x = asMillis(timeout, timeUnit);
         this.timeout1 = TIMEOUT_UNSET;

http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
index 7c7491d..91c3ed5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
@@ -31,6 +31,9 @@ import org.apache.http.client.protocol.HttpClientContext;
 import org.apache.http.protocol.HttpContext ;
 import org.apache.jena.atlas.RuntimeIOException;
 import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.json.JsonArray;
+import org.apache.jena.atlas.json.JsonObject;
+import org.apache.jena.atlas.lib.NotImplemented;
 import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.* ;
@@ -532,6 +535,18 @@ public class QueryEngineHTTP implements QueryExecution {
         }
     }
 
+    @Override
+    public JsonArray execJson()
+    {
+        throw new NotImplemented("JSON queries not implemented for remote calls") ;
+    }
+
+    @Override
+    public Iterator<JsonObject> execJsonItems()
+    {
+        throw new NotImplemented("JSON queries not implemented for remote calls") ;
+    }
+
     private void checkNotClosed() {
         if ( closed )
             throw new QueryExecException("HTTP QueryExecution has been closed") ;


[3/5] jena git commit: JENA-632: Generate JSON from SPARQL directly

Posted by ki...@apache.org.
http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
index fd397c7..e2777d1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserConstants.java
@@ -49,381 +49,383 @@ public interface ARQParserConstants {
   /** RegularExpression Id. */
   int REDUCED = 24;
   /** RegularExpression Id. */
-  int DESCRIBE = 25;
+  int JSON = 25;
   /** RegularExpression Id. */
-  int CONSTRUCT = 26;
+  int DESCRIBE = 26;
   /** RegularExpression Id. */
-  int ASK = 27;
+  int CONSTRUCT = 27;
   /** RegularExpression Id. */
-  int LIMIT = 28;
+  int ASK = 28;
   /** RegularExpression Id. */
-  int OFFSET = 29;
+  int LIMIT = 29;
   /** RegularExpression Id. */
-  int ORDER = 30;
+  int OFFSET = 30;
   /** RegularExpression Id. */
-  int BY = 31;
+  int ORDER = 31;
   /** RegularExpression Id. */
-  int VALUES = 32;
+  int BY = 32;
   /** RegularExpression Id. */
-  int UNDEF = 33;
+  int VALUES = 33;
   /** RegularExpression Id. */
-  int ASC = 34;
+  int UNDEF = 34;
   /** RegularExpression Id. */
-  int DESC = 35;
+  int ASC = 35;
   /** RegularExpression Id. */
-  int NAMED = 36;
+  int DESC = 36;
   /** RegularExpression Id. */
-  int FROM = 37;
+  int NAMED = 37;
   /** RegularExpression Id. */
-  int WHERE = 38;
+  int FROM = 38;
   /** RegularExpression Id. */
-  int AND = 39;
+  int WHERE = 39;
   /** RegularExpression Id. */
-  int GRAPH = 40;
+  int AND = 40;
   /** RegularExpression Id. */
-  int OPTIONAL = 41;
+  int GRAPH = 41;
   /** RegularExpression Id. */
-  int UNION = 42;
+  int OPTIONAL = 42;
   /** RegularExpression Id. */
-  int MINUS_P = 43;
+  int UNION = 43;
   /** RegularExpression Id. */
-  int BIND = 44;
+  int MINUS_P = 44;
   /** RegularExpression Id. */
-  int SERVICE = 45;
+  int BIND = 45;
   /** RegularExpression Id. */
-  int LET = 46;
+  int SERVICE = 46;
   /** RegularExpression Id. */
-  int EXISTS = 47;
+  int LET = 47;
   /** RegularExpression Id. */
-  int NOT = 48;
+  int EXISTS = 48;
   /** RegularExpression Id. */
-  int AS = 49;
+  int NOT = 49;
   /** RegularExpression Id. */
-  int GROUP = 50;
+  int AS = 50;
   /** RegularExpression Id. */
-  int HAVING = 51;
+  int GROUP = 51;
   /** RegularExpression Id. */
-  int SEPARATOR = 52;
+  int HAVING = 52;
   /** RegularExpression Id. */
-  int AGG = 53;
+  int SEPARATOR = 53;
   /** RegularExpression Id. */
-  int COUNT = 54;
+  int AGG = 54;
   /** RegularExpression Id. */
-  int MIN = 55;
+  int COUNT = 55;
   /** RegularExpression Id. */
-  int MAX = 56;
+  int MIN = 56;
   /** RegularExpression Id. */
-  int SUM = 57;
+  int MAX = 57;
   /** RegularExpression Id. */
-  int AVG = 58;
+  int SUM = 58;
   /** RegularExpression Id. */
-  int STDEV = 59;
+  int AVG = 59;
   /** RegularExpression Id. */
-  int STDEV_SAMP = 60;
+  int STDEV = 60;
   /** RegularExpression Id. */
-  int STDEV_POP = 61;
+  int STDEV_SAMP = 61;
   /** RegularExpression Id. */
-  int VARIANCE = 62;
+  int STDEV_POP = 62;
   /** RegularExpression Id. */
-  int VAR_SAMP = 63;
+  int VARIANCE = 63;
   /** RegularExpression Id. */
-  int VAR_POP = 64;
+  int VAR_SAMP = 64;
   /** RegularExpression Id. */
-  int SAMPLE = 65;
+  int VAR_POP = 65;
   /** RegularExpression Id. */
-  int GROUP_CONCAT = 66;
+  int SAMPLE = 66;
   /** RegularExpression Id. */
-  int FILTER = 67;
+  int GROUP_CONCAT = 67;
   /** RegularExpression Id. */
-  int BOUND = 68;
+  int FILTER = 68;
   /** RegularExpression Id. */
-  int COALESCE = 69;
+  int BOUND = 69;
   /** RegularExpression Id. */
-  int IN = 70;
+  int COALESCE = 70;
   /** RegularExpression Id. */
-  int IF = 71;
+  int IN = 71;
   /** RegularExpression Id. */
-  int BNODE = 72;
+  int IF = 72;
   /** RegularExpression Id. */
-  int IRI = 73;
+  int BNODE = 73;
   /** RegularExpression Id. */
-  int URI = 74;
+  int IRI = 74;
   /** RegularExpression Id. */
-  int CAST = 75;
+  int URI = 75;
   /** RegularExpression Id. */
-  int CALL = 76;
+  int CAST = 76;
   /** RegularExpression Id. */
-  int MULTI = 77;
+  int CALL = 77;
   /** RegularExpression Id. */
-  int SHORTEST = 78;
+  int MULTI = 78;
   /** RegularExpression Id. */
-  int STR = 79;
+  int SHORTEST = 79;
   /** RegularExpression Id. */
-  int STRLANG = 80;
+  int STR = 80;
   /** RegularExpression Id. */
-  int STRDT = 81;
+  int STRLANG = 81;
   /** RegularExpression Id. */
-  int DTYPE = 82;
+  int STRDT = 82;
   /** RegularExpression Id. */
-  int LANG = 83;
+  int DTYPE = 83;
   /** RegularExpression Id. */
-  int LANGMATCHES = 84;
+  int LANG = 84;
   /** RegularExpression Id. */
-  int IS_URI = 85;
+  int LANGMATCHES = 85;
   /** RegularExpression Id. */
-  int IS_IRI = 86;
+  int IS_URI = 86;
   /** RegularExpression Id. */
-  int IS_BLANK = 87;
+  int IS_IRI = 87;
   /** RegularExpression Id. */
-  int IS_LITERAL = 88;
+  int IS_BLANK = 88;
   /** RegularExpression Id. */
-  int IS_NUMERIC = 89;
+  int IS_LITERAL = 89;
   /** RegularExpression Id. */
-  int REGEX = 90;
+  int IS_NUMERIC = 90;
   /** RegularExpression Id. */
-  int SAME_TERM = 91;
+  int REGEX = 91;
   /** RegularExpression Id. */
-  int RAND = 92;
+  int SAME_TERM = 92;
   /** RegularExpression Id. */
-  int ABS = 93;
+  int RAND = 93;
   /** RegularExpression Id. */
-  int CEIL = 94;
+  int ABS = 94;
   /** RegularExpression Id. */
-  int FLOOR = 95;
+  int CEIL = 95;
   /** RegularExpression Id. */
-  int ROUND = 96;
+  int FLOOR = 96;
   /** RegularExpression Id. */
-  int CONCAT = 97;
+  int ROUND = 97;
   /** RegularExpression Id. */
-  int SUBSTR = 98;
+  int CONCAT = 98;
   /** RegularExpression Id. */
-  int STRLEN = 99;
+  int SUBSTR = 99;
   /** RegularExpression Id. */
-  int REPLACE = 100;
+  int STRLEN = 100;
   /** RegularExpression Id. */
-  int UCASE = 101;
+  int REPLACE = 101;
   /** RegularExpression Id. */
-  int LCASE = 102;
+  int UCASE = 102;
   /** RegularExpression Id. */
-  int ENCODE_FOR_URI = 103;
+  int LCASE = 103;
   /** RegularExpression Id. */
-  int CONTAINS = 104;
+  int ENCODE_FOR_URI = 104;
   /** RegularExpression Id. */
-  int STRSTARTS = 105;
+  int CONTAINS = 105;
   /** RegularExpression Id. */
-  int STRENDS = 106;
+  int STRSTARTS = 106;
   /** RegularExpression Id. */
-  int STRBEFORE = 107;
+  int STRENDS = 107;
   /** RegularExpression Id. */
-  int STRAFTER = 108;
+  int STRBEFORE = 108;
   /** RegularExpression Id. */
-  int YEAR = 109;
+  int STRAFTER = 109;
   /** RegularExpression Id. */
-  int MONTH = 110;
+  int YEAR = 110;
   /** RegularExpression Id. */
-  int DAY = 111;
+  int MONTH = 111;
   /** RegularExpression Id. */
-  int HOURS = 112;
+  int DAY = 112;
   /** RegularExpression Id. */
-  int MINUTES = 113;
+  int HOURS = 113;
   /** RegularExpression Id. */
-  int SECONDS = 114;
+  int MINUTES = 114;
   /** RegularExpression Id. */
-  int TIMEZONE = 115;
+  int SECONDS = 115;
   /** RegularExpression Id. */
-  int TZ = 116;
+  int TIMEZONE = 116;
   /** RegularExpression Id. */
-  int NOW = 117;
+  int TZ = 117;
   /** RegularExpression Id. */
-  int UUID = 118;
+  int NOW = 118;
   /** RegularExpression Id. */
-  int STRUUID = 119;
+  int UUID = 119;
   /** RegularExpression Id. */
-  int VERSION = 120;
+  int STRUUID = 120;
   /** RegularExpression Id. */
-  int MD5 = 121;
+  int VERSION = 121;
   /** RegularExpression Id. */
-  int SHA1 = 122;
+  int MD5 = 122;
   /** RegularExpression Id. */
-  int SHA224 = 123;
+  int SHA1 = 123;
   /** RegularExpression Id. */
-  int SHA256 = 124;
+  int SHA224 = 124;
   /** RegularExpression Id. */
-  int SHA384 = 125;
+  int SHA256 = 125;
   /** RegularExpression Id. */
-  int SHA512 = 126;
+  int SHA384 = 126;
   /** RegularExpression Id. */
-  int TRUE = 127;
+  int SHA512 = 127;
   /** RegularExpression Id. */
-  int FALSE = 128;
+  int TRUE = 128;
   /** RegularExpression Id. */
-  int DATA = 129;
+  int FALSE = 129;
   /** RegularExpression Id. */
-  int INSERT = 130;
+  int DATA = 130;
   /** RegularExpression Id. */
-  int DELETE = 131;
+  int INSERT = 131;
   /** RegularExpression Id. */
-  int INSERT_DATA = 132;
+  int DELETE = 132;
   /** RegularExpression Id. */
-  int DELETE_DATA = 133;
+  int INSERT_DATA = 133;
   /** RegularExpression Id. */
-  int DELETE_WHERE = 134;
+  int DELETE_DATA = 134;
   /** RegularExpression Id. */
-  int LOAD = 135;
+  int DELETE_WHERE = 135;
   /** RegularExpression Id. */
-  int CLEAR = 136;
+  int LOAD = 136;
   /** RegularExpression Id. */
-  int CREATE = 137;
+  int CLEAR = 137;
   /** RegularExpression Id. */
-  int ADD = 138;
+  int CREATE = 138;
   /** RegularExpression Id. */
-  int MOVE = 139;
+  int ADD = 139;
   /** RegularExpression Id. */
-  int COPY = 140;
+  int MOVE = 140;
   /** RegularExpression Id. */
-  int META = 141;
+  int COPY = 141;
   /** RegularExpression Id. */
-  int SILENT = 142;
+  int META = 142;
   /** RegularExpression Id. */
-  int DROP = 143;
+  int SILENT = 143;
   /** RegularExpression Id. */
-  int INTO = 144;
+  int DROP = 144;
   /** RegularExpression Id. */
-  int TO = 145;
+  int INTO = 145;
   /** RegularExpression Id. */
-  int DFT = 146;
+  int TO = 146;
   /** RegularExpression Id. */
-  int ALL = 147;
+  int DFT = 147;
   /** RegularExpression Id. */
-  int WITH = 148;
+  int ALL = 148;
   /** RegularExpression Id. */
-  int USING = 149;
+  int WITH = 149;
   /** RegularExpression Id. */
-  int DIGITS = 150;
+  int USING = 150;
   /** RegularExpression Id. */
-  int INTEGER = 151;
+  int DIGITS = 151;
   /** RegularExpression Id. */
-  int DECIMAL = 152;
+  int INTEGER = 152;
   /** RegularExpression Id. */
-  int DOUBLE = 153;
+  int DECIMAL = 153;
   /** RegularExpression Id. */
-  int INTEGER_POSITIVE = 154;
+  int DOUBLE = 154;
   /** RegularExpression Id. */
-  int DECIMAL_POSITIVE = 155;
+  int INTEGER_POSITIVE = 155;
   /** RegularExpression Id. */
-  int DOUBLE_POSITIVE = 156;
+  int DECIMAL_POSITIVE = 156;
   /** RegularExpression Id. */
-  int INTEGER_NEGATIVE = 157;
+  int DOUBLE_POSITIVE = 157;
   /** RegularExpression Id. */
-  int DECIMAL_NEGATIVE = 158;
+  int INTEGER_NEGATIVE = 158;
   /** RegularExpression Id. */
-  int DOUBLE_NEGATIVE = 159;
+  int DECIMAL_NEGATIVE = 159;
   /** RegularExpression Id. */
-  int EXPONENT = 160;
+  int DOUBLE_NEGATIVE = 160;
   /** RegularExpression Id. */
-  int QUOTE_3D = 161;
+  int EXPONENT = 161;
   /** RegularExpression Id. */
-  int QUOTE_3S = 162;
+  int QUOTE_3D = 162;
   /** RegularExpression Id. */
-  int ECHAR = 163;
+  int QUOTE_3S = 163;
   /** RegularExpression Id. */
-  int STRING_LITERAL1 = 164;
+  int ECHAR = 164;
   /** RegularExpression Id. */
-  int STRING_LITERAL2 = 165;
+  int STRING_LITERAL1 = 165;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG1 = 166;
+  int STRING_LITERAL2 = 166;
   /** RegularExpression Id. */
-  int STRING_LITERAL_LONG2 = 167;
+  int STRING_LITERAL_LONG1 = 167;
   /** RegularExpression Id. */
-  int LPAREN = 168;
+  int STRING_LITERAL_LONG2 = 168;
   /** RegularExpression Id. */
-  int RPAREN = 169;
+  int LPAREN = 169;
   /** RegularExpression Id. */
-  int NIL = 170;
+  int RPAREN = 170;
   /** RegularExpression Id. */
-  int LBRACE = 171;
+  int NIL = 171;
   /** RegularExpression Id. */
-  int RBRACE = 172;
+  int LBRACE = 172;
   /** RegularExpression Id. */
-  int LBRACKET = 173;
+  int RBRACE = 173;
   /** RegularExpression Id. */
-  int RBRACKET = 174;
+  int LBRACKET = 174;
   /** RegularExpression Id. */
-  int ANON = 175;
+  int RBRACKET = 175;
   /** RegularExpression Id. */
-  int SEMICOLON = 176;
+  int ANON = 176;
   /** RegularExpression Id. */
-  int COMMA = 177;
+  int SEMICOLON = 177;
   /** RegularExpression Id. */
-  int DOT = 178;
+  int COMMA = 178;
   /** RegularExpression Id. */
-  int EQ = 179;
+  int DOT = 179;
   /** RegularExpression Id. */
-  int NE = 180;
+  int EQ = 180;
   /** RegularExpression Id. */
-  int GT = 181;
+  int NE = 181;
   /** RegularExpression Id. */
-  int LT = 182;
+  int GT = 182;
   /** RegularExpression Id. */
-  int LE = 183;
+  int LT = 183;
   /** RegularExpression Id. */
-  int GE = 184;
+  int LE = 184;
   /** RegularExpression Id. */
-  int BANG = 185;
+  int GE = 185;
   /** RegularExpression Id. */
-  int TILDE = 186;
+  int BANG = 186;
   /** RegularExpression Id. */
-  int COLON = 187;
+  int TILDE = 187;
   /** RegularExpression Id. */
-  int SC_OR = 188;
+  int COLON = 188;
   /** RegularExpression Id. */
-  int SC_AND = 189;
+  int SC_OR = 189;
   /** RegularExpression Id. */
-  int PLUS = 190;
+  int SC_AND = 190;
   /** RegularExpression Id. */
-  int MINUS = 191;
+  int PLUS = 191;
   /** RegularExpression Id. */
-  int STAR = 192;
+  int MINUS = 192;
   /** RegularExpression Id. */
-  int SLASH = 193;
+  int STAR = 193;
   /** RegularExpression Id. */
-  int DATATYPE = 194;
+  int SLASH = 194;
   /** RegularExpression Id. */
-  int AT = 195;
+  int DATATYPE = 195;
   /** RegularExpression Id. */
-  int ASSIGN = 196;
+  int AT = 196;
   /** RegularExpression Id. */
-  int VBAR = 197;
+  int ASSIGN = 197;
   /** RegularExpression Id. */
-  int CARAT = 198;
+  int VBAR = 198;
   /** RegularExpression Id. */
-  int FPATH = 199;
+  int CARAT = 199;
   /** RegularExpression Id. */
-  int RPATH = 200;
+  int FPATH = 200;
   /** RegularExpression Id. */
-  int QMARK = 201;
+  int RPATH = 201;
   /** RegularExpression Id. */
-  int PN_CHARS_BASE = 202;
+  int QMARK = 202;
   /** RegularExpression Id. */
-  int PN_CHARS_U = 203;
+  int PN_CHARS_BASE = 203;
   /** RegularExpression Id. */
-  int PN_CHARS = 204;
+  int PN_CHARS_U = 204;
   /** RegularExpression Id. */
-  int PN_PREFIX = 205;
+  int PN_CHARS = 205;
   /** RegularExpression Id. */
-  int PN_LOCAL = 206;
+  int PN_PREFIX = 206;
   /** RegularExpression Id. */
-  int VARNAME = 207;
+  int PN_LOCAL = 207;
   /** RegularExpression Id. */
-  int PN_LOCAL_ESC = 208;
+  int VARNAME = 208;
   /** RegularExpression Id. */
-  int PLX = 209;
+  int PN_LOCAL_ESC = 209;
   /** RegularExpression Id. */
-  int HEX = 210;
+  int PLX = 210;
   /** RegularExpression Id. */
-  int PERCENT = 211;
+  int HEX = 211;
   /** RegularExpression Id. */
-  int UNKNOWN = 212;
+  int PERCENT = 212;
+  /** RegularExpression Id. */
+  int UNKNOWN = 213;
 
   /** Lexical state. */
   int DEFAULT = 0;
@@ -455,6 +457,7 @@ public interface ARQParserConstants {
     "\"select\"",
     "\"distinct\"",
     "\"reduced\"",
+    "\"json\"",
     "\"describe\"",
     "\"construct\"",
     "\"ask\"",


[4/5] jena git commit: JENA-632: Generate JSON from SPARQL directly

Posted by ki...@apache.org.
http://git-wip-us.apache.org/repos/asf/jena/blob/4bf5e3c0/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
index c4fc913..c798218 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParser.java
@@ -38,6 +38,9 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     case ASK:
       AskQuery();
       break;
+    case JSON:
+      JsonQuery();
+      break;
     default:
       jj_la1[0] = jj_gen;
       jj_consume_token(-1);
@@ -660,6 +663,88 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     SolutionModifier();
   }
 
+  final public void JsonQuery() throws ParseException {
+    JsonClause();
+    label_9:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case FROM:
+        ;
+        break;
+      default:
+        jj_la1[20] = jj_gen;
+        break label_9;
+      }
+      DatasetClause();
+    }
+    WhereClause();
+    SolutionModifier();
+  }
+
+  final public void JsonClause() throws ParseException {
+    jj_consume_token(JSON);
+           getQuery().setQueryJsonType() ;
+    jj_consume_token(LBRACE);
+    JsonObjectMember();
+    label_10:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COMMA:
+        ;
+        break;
+      default:
+        jj_la1[21] = jj_gen;
+        break label_10;
+      }
+      jj_consume_token(COMMA);
+      JsonObjectMember();
+    }
+    jj_consume_token(RBRACE);
+  }
+
+  final public void JsonObjectMember() throws ParseException {
+                            Node o ; String s ; Token t;
+    s = String();
+    t = jj_consume_token(PNAME_NS);
+    if ( ! t.image.equals(":") )
+      throwParseException("Prefix name expression not legal at this point : "+t.image, t.beginLine, t.beginColumn) ;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VAR1:
+    case VAR2:
+      o = Var();
+                getQuery().addResultVar((Var)o) ; getQuery().addJsonMapping(s, o) ;
+      break;
+    case STRING_LITERAL1:
+    case STRING_LITERAL2:
+    case STRING_LITERAL_LONG1:
+    case STRING_LITERAL_LONG2:
+      o = RDFLiteral();
+                       getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ;
+      break;
+    case INTEGER:
+    case DECIMAL:
+    case DOUBLE:
+    case INTEGER_POSITIVE:
+    case DECIMAL_POSITIVE:
+    case DOUBLE_POSITIVE:
+    case INTEGER_NEGATIVE:
+    case DECIMAL_NEGATIVE:
+    case DOUBLE_NEGATIVE:
+      o = NumericLiteral();
+                           getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ;
+      break;
+    case TRUE:
+    case FALSE:
+      o = BooleanLiteral();
+                           getQuery().addResultVar(s, NodeValue.makeNode(o)) ; getQuery().addJsonMapping(s, o) ;
+      break;
+    default:
+      jj_la1[22] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
   final public void DatasetClause() throws ParseException {
     jj_consume_token(FROM);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -672,7 +757,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       NamedGraphClause();
       break;
     default:
-      jj_la1[20] = jj_gen;
+      jj_la1[23] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -705,7 +790,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(WHERE);
       break;
     default:
-      jj_la1[21] = jj_gen;
+      jj_la1[24] = jj_gen;
       ;
     }
      startWherePattern() ;
@@ -720,7 +805,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       GroupClause();
       break;
     default:
-      jj_la1[22] = jj_gen;
+      jj_la1[25] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -728,7 +813,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       HavingClause();
       break;
     default:
-      jj_la1[23] = jj_gen;
+      jj_la1[26] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -736,7 +821,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       OrderClause();
       break;
     default:
-      jj_la1[24] = jj_gen;
+      jj_la1[27] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -745,7 +830,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       LimitOffsetClauses();
       break;
     default:
-      jj_la1[25] = jj_gen;
+      jj_la1[28] = jj_gen;
       ;
     }
   }
@@ -753,7 +838,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public void GroupClause() throws ParseException {
     jj_consume_token(GROUP);
     jj_consume_token(BY);
-    label_9:
+    label_11:
     while (true) {
       GroupCondition();
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -836,8 +921,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[26] = jj_gen;
-        break label_9;
+        jj_la1[29] = jj_gen;
+        break label_11;
       }
     }
   }
@@ -933,7 +1018,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         v = Var();
         break;
       default:
-        jj_la1[27] = jj_gen;
+        jj_la1[30] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -945,7 +1030,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       getQuery().addGroupBy(v) ;
       break;
     default:
-      jj_la1[28] = jj_gen;
+      jj_la1[31] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -954,7 +1039,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public void HavingClause() throws ParseException {
       setAllowAggregatesInExpressions(true) ;
     jj_consume_token(HAVING);
-    label_10:
+    label_12:
     while (true) {
       HavingCondition();
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1035,8 +1120,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[29] = jj_gen;
-        break label_10;
+        jj_la1[32] = jj_gen;
+        break label_12;
       }
     }
       setAllowAggregatesInExpressions(false) ;
@@ -1052,7 +1137,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     setAllowAggregatesInExpressions(true) ;
     jj_consume_token(ORDER);
     jj_consume_token(BY);
-    label_11:
+    label_13:
     while (true) {
       OrderCondition();
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1137,8 +1222,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[30] = jj_gen;
-        break label_11;
+        jj_la1[33] = jj_gen;
+        break label_13;
       }
     }
     setAllowAggregatesInExpressions(false) ;
@@ -1160,7 +1245,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                  direction = Query.ORDER_DESCENDING ;
         break;
       default:
-        jj_la1[31] = jj_gen;
+        jj_la1[34] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1324,13 +1409,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         v = Var();
         break;
       default:
-        jj_la1[32] = jj_gen;
+        jj_la1[35] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[33] = jj_gen;
+      jj_la1[36] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1349,7 +1434,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         OffsetClause();
         break;
       default:
-        jj_la1[34] = jj_gen;
+        jj_la1[37] = jj_gen;
         ;
       }
       break;
@@ -1360,12 +1445,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         LimitClause();
         break;
       default:
-        jj_la1[35] = jj_gen;
+        jj_la1[38] = jj_gen;
         ;
       }
       break;
     default:
-      jj_la1[36] = jj_gen;
+      jj_la1[39] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1395,7 +1480,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       finishValuesClause(t.beginLine, t.beginColumn) ;
       break;
     default:
-      jj_la1[37] = jj_gen;
+      jj_la1[40] = jj_gen;
       ;
     }
   }
@@ -1417,12 +1502,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     case DROP:
     case WITH:
       Update1();
-      label_12:
+      label_14:
       while (true) {
         if (jj_2_2(2147483647)) {
           ;
         } else {
-          break label_12;
+          break label_14;
         }
         jj_consume_token(SEMICOLON);
         Prologue();
@@ -1434,12 +1519,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         Prologue();
         break;
       default:
-        jj_la1[38] = jj_gen;
+        jj_la1[41] = jj_gen;
         ;
       }
       break;
     default:
-      jj_la1[39] = jj_gen;
+      jj_la1[42] = jj_gen;
       ;
     }
   }
@@ -1484,7 +1569,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       DeleteData();
       break;
     default:
-      jj_la1[40] = jj_gen;
+      jj_la1[43] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1501,7 +1586,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                        silent = true ;
       break;
     default:
-      jj_la1[41] = jj_gen;
+      jj_la1[44] = jj_gen;
       ;
     }
     url = iri();
@@ -1511,7 +1596,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       dest = GraphRef();
       break;
     default:
-      jj_la1[42] = jj_gen;
+      jj_la1[45] = jj_gen;
       ;
     }
       {if (true) return new UpdateLoad(url, dest, silent) ;}
@@ -1527,7 +1612,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                        silent = true ;
       break;
     default:
-      jj_la1[43] = jj_gen;
+      jj_la1[46] = jj_gen;
       ;
     }
     target = GraphRefAll();
@@ -1544,7 +1629,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                       silent = true ;
       break;
     default:
-      jj_la1[44] = jj_gen;
+      jj_la1[47] = jj_gen;
       ;
     }
     target = GraphRefAll();
@@ -1561,7 +1646,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                         silent=true ;
       break;
     default:
-      jj_la1[45] = jj_gen;
+      jj_la1[48] = jj_gen;
       ;
     }
     iri = GraphRef();
@@ -1578,7 +1663,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                     silent=true ;
       break;
     default:
-      jj_la1[46] = jj_gen;
+      jj_la1[49] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1597,7 +1682,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                      silent=true ;
       break;
     default:
-      jj_la1[47] = jj_gen;
+      jj_la1[50] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1616,7 +1701,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                      silent=true ;
       break;
     default:
-      jj_la1[48] = jj_gen;
+      jj_la1[51] = jj_gen;
       ;
     }
     src = GraphOrDefault();
@@ -1668,7 +1753,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                          Node n = createNode(iri) ; up.setWithIRI(n) ;
       break;
     default:
-      jj_la1[49] = jj_gen;
+      jj_la1[52] = jj_gen;
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1679,7 +1764,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         InsertClause(up);
         break;
       default:
-        jj_la1[50] = jj_gen;
+        jj_la1[53] = jj_gen;
         ;
       }
       break;
@@ -1687,19 +1772,19 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       InsertClause(up);
       break;
     default:
-      jj_la1[51] = jj_gen;
+      jj_la1[54] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    label_13:
+    label_15:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case USING:
         ;
         break;
       default:
-        jj_la1[52] = jj_gen;
-        break label_13;
+        jj_la1[55] = jj_gen;
+        break label_15;
       }
       UsingClause(up);
     }
@@ -1749,7 +1834,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       n = createNode(iri) ; update.addUsingNamed(n) ;
       break;
     default:
-      jj_la1[53] = jj_gen;
+      jj_la1[56] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1771,14 +1856,14 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         jj_consume_token(GRAPH);
         break;
       default:
-        jj_la1[54] = jj_gen;
+        jj_la1[57] = jj_gen;
         ;
       }
       iri = iri();
        {if (true) return Target.create(createNode(iri)) ;}
       break;
     default:
-      jj_la1[55] = jj_gen;
+      jj_la1[58] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1813,7 +1898,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
              {if (true) return Target.ALL ;}
       break;
     default:
-      jj_la1[56] = jj_gen;
+      jj_la1[59] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1862,18 +1947,18 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       TriplesTemplate(acc);
       break;
     default:
-      jj_la1[57] = jj_gen;
+      jj_la1[60] = jj_gen;
       ;
     }
-    label_14:
+    label_16:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case GRAPH:
         ;
         break;
       default:
-        jj_la1[58] = jj_gen;
-        break label_14;
+        jj_la1[61] = jj_gen;
+        break label_16;
       }
       QuadsNotTriples(acc);
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1881,7 +1966,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         jj_consume_token(DOT);
         break;
       default:
-        jj_la1[59] = jj_gen;
+        jj_la1[62] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1913,7 +1998,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         TriplesTemplate(acc);
         break;
       default:
-        jj_la1[60] = jj_gen;
+        jj_la1[63] = jj_gen;
         ;
       }
     }
@@ -1954,7 +2039,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       TriplesTemplate(acc);
       break;
     default:
-      jj_la1[61] = jj_gen;
+      jj_la1[64] = jj_gen;
       ;
     }
     jj_consume_token(RBRACE);
@@ -1991,10 +2076,10 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       TriplesTemplate(acc);
       break;
     default:
-      jj_la1[62] = jj_gen;
+      jj_la1[65] = jj_gen;
       ;
     }
-    label_15:
+    label_17:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case GRAPH:
@@ -2002,8 +2087,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[63] = jj_gen;
-        break label_15;
+        jj_la1[66] = jj_gen;
+        break label_17;
       }
       ConstructQuadsNotTriples(acc);
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2011,7 +2096,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         jj_consume_token(DOT);
         break;
       default:
-        jj_la1[64] = jj_gen;
+        jj_la1[67] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2043,7 +2128,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         TriplesTemplate(acc);
         break;
       default:
-        jj_la1[65] = jj_gen;
+        jj_la1[68] = jj_gen;
         ;
       }
     }
@@ -2058,7 +2143,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       gn = VarOrBlankNodeOrIri();
       break;
     default:
-      jj_la1[66] = jj_gen;
+      jj_la1[69] = jj_gen;
       ;
     }
       setAccGraph(acc, gn) ;
@@ -2092,7 +2177,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       TriplesTemplate(acc);
       break;
     default:
-      jj_la1[67] = jj_gen;
+      jj_la1[70] = jj_gen;
       ;
     }
     jj_consume_token(RBRACE);
@@ -2101,12 +2186,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
 
   final public void TriplesTemplate(TripleCollector acc) throws ParseException {
     TriplesSameSubject(acc);
-    label_16:
+    label_18:
     while (true) {
       if (jj_2_3(2)) {
         ;
       } else {
-        break label_16;
+        break label_18;
       }
       jj_consume_token(DOT);
       TriplesSameSubject(acc);
@@ -2116,7 +2201,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(DOT);
       break;
     default:
-      jj_la1[68] = jj_gen;
+      jj_la1[71] = jj_gen;
       ;
     }
   }
@@ -2133,7 +2218,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       el = new ElementSubQuery(q) ;
       break;
     default:
-      jj_la1[69] = jj_gen;
+      jj_la1[72] = jj_gen;
       el = GroupGraphPatternSub();
     }
     jj_consume_token(RBRACE);
@@ -2177,10 +2262,10 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       elg.addElement(el) ;
       break;
     default:
-      jj_la1[70] = jj_gen;
+      jj_la1[73] = jj_gen;
       ;
     }
-    label_17:
+    label_19:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case VALUES:
@@ -2197,8 +2282,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[71] = jj_gen;
-        break label_17;
+        jj_la1[74] = jj_gen;
+        break label_19;
       }
       el = GraphPatternNotTriples();
       elg.addElement(el) ;
@@ -2207,7 +2292,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         jj_consume_token(DOT);
         break;
       default:
-        jj_la1[72] = jj_gen;
+        jj_la1[75] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2242,7 +2327,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         elg.addElement(el) ;
         break;
       default:
-        jj_la1[73] = jj_gen;
+        jj_la1[76] = jj_gen;
         ;
       }
     }
@@ -2287,12 +2372,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         TriplesBlock(acc);
         break;
       default:
-        jj_la1[74] = jj_gen;
+        jj_la1[77] = jj_gen;
         ;
       }
       break;
     default:
-      jj_la1[75] = jj_gen;
+      jj_la1[78] = jj_gen;
       ;
     }
       {if (true) return acc ;}
@@ -2336,7 +2421,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       el = NotExistsElt();
       break;
     default:
-      jj_la1[76] = jj_gen;
+      jj_la1[79] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2370,7 +2455,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
      silent=true;
       break;
     default:
-      jj_la1[77] = jj_gen;
+      jj_la1[80] = jj_gen;
       ;
     }
     n = VarOrIri();
@@ -2414,7 +2499,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       InlineDataFull();
       break;
     default:
-      jj_la1[78] = jj_gen;
+      jj_la1[81] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2425,7 +2510,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     v = Var();
     emitDataBlockVariable(v) ;
     t = jj_consume_token(LBRACE);
-    label_18:
+    label_20:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IRIref:
@@ -2452,8 +2537,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[79] = jj_gen;
-        break label_18;
+        jj_la1[82] = jj_gen;
+        break label_20;
       }
       n = DataBlockValue();
       startDataBlockValueRow(-1, -1) ;
@@ -2471,7 +2556,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       break;
     case LPAREN:
       jj_consume_token(LPAREN);
-      label_19:
+      label_21:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case VAR1:
@@ -2479,8 +2564,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
           ;
           break;
         default:
-          jj_la1[80] = jj_gen;
-          break label_19;
+          jj_la1[83] = jj_gen;
+          break label_21;
         }
         v = Var();
                  emitDataBlockVariable(v) ;
@@ -2488,12 +2573,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(RPAREN);
       break;
     default:
-      jj_la1[81] = jj_gen;
+      jj_la1[84] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     jj_consume_token(LBRACE);
-    label_20:
+    label_22:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LPAREN:
@@ -2501,15 +2586,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[82] = jj_gen;
-        break label_20;
+        jj_la1[85] = jj_gen;
+        break label_22;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LPAREN:
         t = jj_consume_token(LPAREN);
       beginLine = t.beginLine; beginColumn = t.beginColumn; t = null;
       startDataBlockValueRow(beginLine, beginColumn) ;
-        label_21:
+        label_23:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case IRIref:
@@ -2536,8 +2621,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
             ;
             break;
           default:
-            jj_la1[83] = jj_gen;
-            break label_21;
+            jj_la1[86] = jj_gen;
+            break label_23;
           }
           n = DataBlockValue();
           emitDataBlockValue(n, beginLine, beginColumn) ;
@@ -2553,7 +2638,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         finishDataBlockValueRow(beginLine, beginColumn) ;
         break;
       default:
-        jj_la1[84] = jj_gen;
+        jj_la1[87] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2604,7 +2689,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
             {if (true) return null ;}
       break;
     default:
-      jj_la1[85] = jj_gen;
+      jj_la1[88] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2651,15 +2736,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Element GroupOrUnionGraphPattern() throws ParseException {
       Element el = null ; ElementUnion el2 = null ;
     el = GroupGraphPattern();
-    label_22:
+    label_24:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case UNION:
         ;
         break;
       default:
-        jj_la1[86] = jj_gen;
-        break label_22;
+        jj_la1[89] = jj_gen;
+        break label_24;
       }
       jj_consume_token(UNION);
       if ( el2 == null )
@@ -2766,7 +2851,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       c = FunctionCall();
       break;
     default:
-      jj_la1[87] = jj_gen;
+      jj_la1[90] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2807,20 +2892,20 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                  beginLine, beginColumn) ;
         break;
       default:
-        jj_la1[88] = jj_gen;
+        jj_la1[91] = jj_gen;
         ;
       }
       expr = Expression();
                             args.add(expr) ;
-      label_23:
+      label_25:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case COMMA:
           ;
           break;
         default:
-          jj_la1[89] = jj_gen;
-          break label_23;
+          jj_la1[92] = jj_gen;
+          break label_25;
         }
         jj_consume_token(COMMA);
         expr = Expression();
@@ -2829,7 +2914,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(RPAREN);
       break;
     default:
-      jj_la1[90] = jj_gen;
+      jj_la1[93] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2847,15 +2932,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(LPAREN);
       expr = Expression();
                           exprList.add(expr) ;
-      label_24:
+      label_26:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case COMMA:
           ;
           break;
         default:
-          jj_la1[91] = jj_gen;
-          break label_24;
+          jj_la1[94] = jj_gen;
+          break label_26;
         }
         jj_consume_token(COMMA);
         expr = Expression();
@@ -2864,7 +2949,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(RPAREN);
       break;
     default:
-      jj_la1[92] = jj_gen;
+      jj_la1[95] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2886,12 +2971,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
 
   final public void ConstructTriples(TripleCollector acc) throws ParseException {
     TriplesSameSubject(acc);
-    label_25:
+    label_27:
     while (true) {
       if (jj_2_4(2)) {
         ;
       } else {
-        break label_25;
+        break label_27;
       }
       jj_consume_token(DOT);
       TriplesSameSubject(acc);
@@ -2901,7 +2986,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(DOT);
       break;
     default:
-      jj_la1[93] = jj_gen;
+      jj_la1[96] = jj_gen;
       ;
     }
   }
@@ -2943,7 +3028,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     insert(acc, tempAcc) ;
       break;
     default:
-      jj_la1[94] = jj_gen;
+      jj_la1[97] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2960,7 +3045,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       PropertyListNotEmpty(s, acc);
       break;
     default:
-      jj_la1[95] = jj_gen;
+      jj_la1[98] = jj_gen;
       ;
     }
   }
@@ -2969,15 +3054,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       Node p = null ;
     p = Verb();
     ObjectList(s, p, null, acc);
-    label_26:
+    label_28:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[96] = jj_gen;
-        break label_26;
+        jj_la1[99] = jj_gen;
+        break label_28;
       }
       jj_consume_token(SEMICOLON);
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2991,7 +3076,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ObjectList(s, p, null, acc);
         break;
       default:
-        jj_la1[97] = jj_gen;
+        jj_la1[100] = jj_gen;
         ;
       }
     }
@@ -3012,7 +3097,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                               p = nRDFtype ;
       break;
     default:
-      jj_la1[98] = jj_gen;
+      jj_la1[101] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3023,15 +3108,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public void ObjectList(Node s, Node p, Path path, TripleCollector acc) throws ParseException {
                                                                    Node o ;
     Object(s, p, path, acc);
-    label_27:
+    label_29:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[99] = jj_gen;
-        break label_27;
+        jj_la1[102] = jj_gen;
+        break label_29;
       }
       jj_consume_token(COMMA);
       Object(s, p, path, acc);
@@ -3082,7 +3167,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     insert(acc, tempAcc) ;
       break;
     default:
-      jj_la1[100] = jj_gen;
+      jj_la1[103] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3105,7 +3190,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       PropertyListPathNotEmpty(s, acc);
       break;
     default:
-      jj_la1[101] = jj_gen;
+      jj_la1[104] = jj_gen;
       ;
     }
   }
@@ -3130,20 +3215,20 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       p = VerbSimple();
       break;
     default:
-      jj_la1[102] = jj_gen;
+      jj_la1[105] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     ObjectListPath(s, p, path, acc);
-    label_28:
+    label_30:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
         ;
         break;
       default:
-        jj_la1[103] = jj_gen;
-        break label_28;
+        jj_la1[106] = jj_gen;
+        break label_30;
       }
       jj_consume_token(SEMICOLON);
       path = null ; p = null ;
@@ -3178,14 +3263,14 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
           p = VerbSimple();
           break;
         default:
-          jj_la1[104] = jj_gen;
+          jj_la1[107] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
         ObjectListPath(s, p, path, acc);
         break;
       default:
-        jj_la1[105] = jj_gen;
+        jj_la1[108] = jj_gen;
         ;
       }
     }
@@ -3208,15 +3293,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public void ObjectListPath(Node s, Node p, Path path, TripleCollector acc) throws ParseException {
                                                                        Node o ;
     ObjectPath(s, p, path, acc);
-    label_29:
+    label_31:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[106] = jj_gen;
-        break label_29;
+        jj_la1[109] = jj_gen;
+        break label_31;
       }
       jj_consume_token(COMMA);
       ObjectPath(s, p, path, acc);
@@ -3249,15 +3334,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Path PathAlternative() throws ParseException {
                            Path p1 , p2 ;
     p1 = PathSequence();
-    label_30:
+    label_32:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case VBAR:
         ;
         break;
       default:
-        jj_la1[107] = jj_gen;
-        break label_30;
+        jj_la1[110] = jj_gen;
+        break label_32;
       }
       jj_consume_token(VBAR);
       p2 = PathSequence();
@@ -3270,7 +3355,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Path PathSequence() throws ParseException {
                         Path p1 , p2 ;
     p1 = PathEltOrInverse();
-    label_31:
+    label_33:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SLASH:
@@ -3278,8 +3363,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[108] = jj_gen;
-        break label_31;
+        jj_la1[111] = jj_gen;
+        break label_33;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SLASH:
@@ -3293,7 +3378,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         p1 = PathFactory.pathSeq(p1, new P_Inverse(p2)) ;
         break;
       default:
-        jj_la1[109] = jj_gen;
+        jj_la1[112] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -3313,7 +3398,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       p = PathMod(p);
       break;
     default:
-      jj_la1[110] = jj_gen;
+      jj_la1[113] = jj_gen;
       ;
     }
      {if (true) return p ;}
@@ -3340,7 +3425,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
        p = PathFactory.pathInverse(p) ;
       break;
     default:
-      jj_la1[111] = jj_gen;
+      jj_la1[114] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3392,7 +3477,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                 {if (true) return PathFactory.pathMod(p, i1, i2) ;}
             break;
           default:
-            jj_la1[112] = jj_gen;
+            jj_la1[115] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -3402,7 +3487,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                        {if (true) return PathFactory.pathFixedLength(p, i1) ;}
           break;
         default:
-          jj_la1[113] = jj_gen;
+          jj_la1[116] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
@@ -3414,13 +3499,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
              {if (true) return PathFactory.pathMod(p, PathFactory.UNSET, i2) ;}
         break;
       default:
-        jj_la1[114] = jj_gen;
+        jj_la1[117] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[115] = jj_gen;
+      jj_la1[118] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3471,7 +3556,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(RPAREN);
       break;
     default:
-      jj_la1[116] = jj_gen;
+      jj_la1[119] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3501,15 +3586,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       case CARAT:
         p = PathOneInPropertySet();
                                    pNegSet.add(p) ;
-        label_32:
+        label_34:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case VBAR:
             ;
             break;
           default:
-            jj_la1[117] = jj_gen;
-            break label_32;
+            jj_la1[120] = jj_gen;
+            break label_34;
           }
           jj_consume_token(VBAR);
           p = PathOneInPropertySet();
@@ -3517,13 +3602,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         }
         break;
       default:
-        jj_la1[118] = jj_gen;
+        jj_la1[121] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
       break;
     default:
-      jj_la1[119] = jj_gen;
+      jj_la1[122] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3558,13 +3643,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                {if (true) return new P_ReverseLink(nRDFtype) ;}
         break;
       default:
-        jj_la1[120] = jj_gen;
+        jj_la1[123] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[121] = jj_gen;
+      jj_la1[124] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3590,7 +3675,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                    {if (true) return n ;}
       break;
     default:
-      jj_la1[122] = jj_gen;
+      jj_la1[125] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3619,7 +3704,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                        {if (true) return n ;}
       break;
     default:
-      jj_la1[123] = jj_gen;
+      jj_la1[126] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3640,7 +3725,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       Node listHead = nRDFnil ; Node lastCell = null ; int mark ; Node n ; Token t ;
     t = jj_consume_token(LPAREN);
     int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null;
-    label_33:
+    label_35:
     while (true) {
       Node cell = createListNode( beginLine, beginColumn) ;
       if ( listHead == nRDFnil )
@@ -3680,8 +3765,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[124] = jj_gen;
-        break label_33;
+        jj_la1[127] = jj_gen;
+        break label_35;
       }
     }
     jj_consume_token(RPAREN);
@@ -3695,7 +3780,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       Node listHead = nRDFnil ; Node lastCell = null ; int mark ; Node n ; Token t ;
     t = jj_consume_token(LPAREN);
     int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null;
-    label_34:
+    label_36:
     while (true) {
       Node cell = createListNode( beginLine, beginColumn) ;
       if ( listHead == nRDFnil )
@@ -3735,8 +3820,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[125] = jj_gen;
-        break label_34;
+        jj_la1[128] = jj_gen;
+        break label_36;
       }
     }
     jj_consume_token(RPAREN);
@@ -3781,7 +3866,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                          {if (true) return n ;}
       break;
     default:
-      jj_la1[126] = jj_gen;
+      jj_la1[129] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3823,7 +3908,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                              {if (true) return n ;}
       break;
     default:
-      jj_la1[127] = jj_gen;
+      jj_la1[130] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3861,7 +3946,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       n = GraphTerm();
       break;
     default:
-      jj_la1[128] = jj_gen;
+      jj_la1[131] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3883,7 +3968,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                               n = createNode(iri) ;
       break;
     default:
-      jj_la1[129] = jj_gen;
+      jj_la1[132] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3909,7 +3994,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                                 n = createNode(iri) ;
       break;
     default:
-      jj_la1[130] = jj_gen;
+      jj_la1[133] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3927,7 +4012,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       t = jj_consume_token(VAR2);
       break;
     default:
-      jj_la1[131] = jj_gen;
+      jj_la1[134] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3978,7 +4063,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
           {if (true) return nRDFnil ;}
       break;
     default:
-      jj_la1[132] = jj_gen;
+      jj_la1[135] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3995,15 +4080,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Expr ConditionalOrExpression() throws ParseException {
                                    Expr expr1, expr2 ;
     expr1 = ConditionalAndExpression();
-    label_35:
+    label_37:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SC_OR:
         ;
         break;
       default:
-        jj_la1[133] = jj_gen;
-        break label_35;
+        jj_la1[136] = jj_gen;
+        break label_37;
       }
       jj_consume_token(SC_OR);
       expr2 = ConditionalAndExpression();
@@ -4016,15 +4101,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Expr ConditionalAndExpression() throws ParseException {
                                     Expr expr1, expr2 ;
     expr1 = ValueLogical();
-    label_36:
+    label_38:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SC_AND:
         ;
         break;
       default:
-        jj_la1[134] = jj_gen;
-        break label_36;
+        jj_la1[137] = jj_gen;
+        break label_38;
       }
       jj_consume_token(SC_AND);
       expr2 = ValueLogical();
@@ -4096,13 +4181,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         expr1 = new E_NotOneOf(expr1, a) ;
         break;
       default:
-        jj_la1[135] = jj_gen;
+        jj_la1[138] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[136] = jj_gen;
+      jj_la1[139] = jj_gen;
       ;
     }
       {if (true) return expr1 ;}
@@ -4119,7 +4204,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Expr AdditiveExpression() throws ParseException {
                               Expr expr1, expr2, expr3 ; boolean addition ; Node n ;
     expr1 = MultiplicativeExpression();
-    label_37:
+    label_39:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case INTEGER_POSITIVE:
@@ -4133,8 +4218,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[137] = jj_gen;
-        break label_37;
+        jj_la1[140] = jj_gen;
+        break label_39;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PLUS:
@@ -4171,11 +4256,11 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
          addition = false ;
           break;
         default:
-          jj_la1[138] = jj_gen;
+          jj_la1[141] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
-        label_38:
+        label_40:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case STAR:
@@ -4183,8 +4268,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
             ;
             break;
           default:
-            jj_la1[139] = jj_gen;
-            break label_38;
+            jj_la1[142] = jj_gen;
+            break label_40;
           }
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case STAR:
@@ -4198,7 +4283,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                             expr2 = new E_Divide(expr2, expr3) ;
             break;
           default:
-            jj_la1[140] = jj_gen;
+            jj_la1[143] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
@@ -4209,7 +4294,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
          expr1 = new E_Subtract(expr1, expr2) ;
         break;
       default:
-        jj_la1[141] = jj_gen;
+        jj_la1[144] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4221,7 +4306,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   final public Expr MultiplicativeExpression() throws ParseException {
                                     Expr expr1, expr2 ;
     expr1 = UnaryExpression();
-    label_39:
+    label_41:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case STAR:
@@ -4229,8 +4314,8 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         ;
         break;
       default:
-        jj_la1[142] = jj_gen;
-        break label_39;
+        jj_la1[145] = jj_gen;
+        break label_41;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case STAR:
@@ -4244,7 +4329,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       expr1 = new E_Divide(expr1, expr2) ;
         break;
       default:
-        jj_la1[143] = jj_gen;
+        jj_la1[146] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4366,7 +4451,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                  {if (true) return expr ;}
       break;
     default:
-      jj_la1[144] = jj_gen;
+      jj_la1[147] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4489,7 +4574,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                  {if (true) return asExpr(gn) ;}
       break;
     default:
-      jj_la1[145] = jj_gen;
+      jj_la1[148] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4591,7 +4676,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
               {if (true) return new E_BNode() ;}
         break;
       default:
-        jj_la1[146] = jj_gen;
+        jj_la1[149] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4837,15 +4922,15 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       jj_consume_token(LPAREN);
       expr = Expression();
                             a.add(expr) ;
-      label_40:
+      label_42:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case COMMA:
           ;
           break;
         default:
-          jj_la1[147] = jj_gen;
-          break label_40;
+          jj_la1[150] = jj_gen;
+          break label_42;
         }
         jj_consume_token(COMMA);
         expr = Expression();
@@ -4940,7 +5025,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                              {if (true) return expr ;}
       break;
     default:
-      jj_la1[148] = jj_gen;
+      jj_la1[151] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4960,7 +5045,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       flagsExpr = Expression();
       break;
     default:
-      jj_la1[149] = jj_gen;
+      jj_la1[152] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -4981,7 +5066,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       expr3 = Expression();
       break;
     default:
-      jj_la1[150] = jj_gen;
+      jj_la1[153] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5004,7 +5089,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       expr4 = Expression();
       break;
     default:
-      jj_la1[151] = jj_gen;
+      jj_la1[154] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5045,7 +5130,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                    distinct = true ;
         break;
       default:
-        jj_la1[152] = jj_gen;
+        jj_la1[155] = jj_gen;
         ;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5149,7 +5234,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         expr = Expression();
         break;
       default:
-        jj_la1[153] = jj_gen;
+        jj_la1[156] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -5166,7 +5251,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                       distinct = true ;
         break;
       default:
-        jj_la1[154] = jj_gen;
+        jj_la1[157] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5182,7 +5267,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                       distinct = true ;
         break;
       default:
-        jj_la1[155] = jj_gen;
+        jj_la1[158] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5198,7 +5283,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                       distinct = true ;
         break;
       default:
-        jj_la1[156] = jj_gen;
+        jj_la1[159] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5214,7 +5299,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                       distinct = true ;
         break;
       default:
-        jj_la1[157] = jj_gen;
+        jj_la1[160] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5230,7 +5315,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                          distinct = true ;
         break;
       default:
-        jj_la1[158] = jj_gen;
+        jj_la1[161] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5246,7 +5331,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                       distinct = true ;
         break;
       default:
-        jj_la1[159] = jj_gen;
+        jj_la1[162] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5266,7 +5351,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                                            ordered.add(expr2) ;
             break;
           default:
-            jj_la1[160] = jj_gen;
+            jj_la1[163] = jj_gen;
             ;
           }
         } else {
@@ -5279,14 +5364,14 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                                        ordered.add(expr2) ;
             break;
           default:
-            jj_la1[161] = jj_gen;
+            jj_la1[164] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
         }
         break;
       default:
-        jj_la1[162] = jj_gen;
+        jj_la1[165] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
@@ -5301,7 +5386,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                         distinct = true ;
         break;
       default:
-        jj_la1[163] = jj_gen;
+        jj_la1[166] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5317,7 +5402,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                              distinct = true ;
         break;
       default:
-        jj_la1[164] = jj_gen;
+        jj_la1[167] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5333,7 +5418,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                             distinct = true ;
         break;
       default:
-        jj_la1[165] = jj_gen;
+        jj_la1[168] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5349,7 +5434,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                            distinct = true ;
         break;
       default:
-        jj_la1[166] = jj_gen;
+        jj_la1[169] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5365,7 +5450,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                            distinct = true ;
         break;
       default:
-        jj_la1[167] = jj_gen;
+        jj_la1[170] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5381,7 +5466,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                           distinct = true ;
         break;
       default:
-        jj_la1[168] = jj_gen;
+        jj_la1[171] = jj_gen;
         ;
       }
       expr = Expression();
@@ -5397,7 +5482,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       agg = AggregatorFactory.createCustom(iri, a) ;
       break;
     default:
-      jj_la1[169] = jj_gen;
+      jj_la1[172] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5418,7 +5503,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       a = ArgList();
       break;
     default:
-      jj_la1[170] = jj_gen;
+      jj_la1[173] = jj_gen;
       ;
     }
     if ( a == null )
@@ -5451,13 +5536,13 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
         uri = iri();
         break;
       default:
-        jj_la1[171] = jj_gen;
+        jj_la1[174] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[172] = jj_gen;
+      jj_la1[175] = jj_gen;
       ;
     }
       {if (true) return createLiteral(lex, lang, uri) ;}
@@ -5483,7 +5568,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       n = NumericLiteralNegative();
       break;
     default:
-      jj_la1[173] = jj_gen;
+      jj_la1[176] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5507,7 +5592,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                  {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[174] = jj_gen;
+      jj_la1[177] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5530,7 +5615,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                           {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[175] = jj_gen;
+      jj_la1[178] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5553,7 +5638,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                           {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[176] = jj_gen;
+      jj_la1[179] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5571,7 +5656,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
             {if (true) return XSD_FALSE ;}
       break;
     default:
-      jj_la1[177] = jj_gen;
+      jj_la1[180] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5598,7 +5683,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                                  lex = stripQuotes3(t.image) ;
       break;
     default:
-      jj_la1[178] = jj_gen;
+      jj_la1[181] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5607,6 +5692,30 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     throw new Error("Missing return statement in function");
   }
 
+  final public Number Number() throws ParseException {
+                    Token t ; Number number ;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER:
+      t = jj_consume_token(INTEGER);
+                      number = integerValue(t.image) ;
+      break;
+    case DECIMAL:
+      t = jj_consume_token(DECIMAL);
+                      number = doubleValue(t.image) ;
+      break;
+    case DOUBLE:
+      t = jj_consume_token(DOUBLE);
+                     number = doubleValue(t.image) ;
+      break;
+    default:
+      jj_la1[182] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    {if (true) return number ;}
+    throw new Error("Missing return statement in function");
+  }
+
   final public String iri() throws ParseException {
                  String iri ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -5620,7 +5729,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                          {if (true) return iri ;}
       break;
     default:
-      jj_la1[179] = jj_gen;
+      jj_la1[183] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5639,7 +5748,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
       {if (true) return resolvePName(t.image, t.beginLine, t.beginColumn) ;}
       break;
     default:
-      jj_la1[180] = jj_gen;
+      jj_la1[184] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5658,7 +5767,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
                {if (true) return createBNode(t.beginLine, t.beginColumn) ;}
       break;
     default:
-      jj_la1[181] = jj_gen;
+      jj_la1[185] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5707,85 +5816,37 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     finally { jj_save(4, xla); }
   }
 
-  private boolean jj_3R_163() {
-    if (jj_3R_174()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_162() {
-    if (jj_3R_173()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_161() {
-    if (jj_3R_172()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_155() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_161()) {
-    jj_scanpos = xsp;
-    if (jj_3R_162()) {
-    jj_scanpos = xsp;
-    if (jj_3R_163()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_135() {
-    if (jj_3R_141()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_115() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_135()) {
-    jj_scanpos = xsp;
-    if (jj_3R_136()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_154() {
-    if (jj_3R_160()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_130() {
+  private boolean jj_3R_132() {
     if (jj_scan_token(AGG)) return true;
-    if (jj_3R_139()) return true;
+    if (jj_3R_141()) return true;
     return false;
   }
 
-  private boolean jj_3R_129() {
+  private boolean jj_3R_131() {
     if (jj_scan_token(VAR_POP)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_128() {
+  private boolean jj_3R_130() {
     if (jj_scan_token(VAR_SAMP)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_127() {
+  private boolean jj_3R_129() {
     if (jj_scan_token(VARIANCE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_126() {
+  private boolean jj_3R_128() {
     if (jj_scan_token(STDEV_POP)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_125() {
+  private boolean jj_3R_127() {
     if (jj_scan_token(STDEV_SAMP)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
@@ -5793,36 +5854,36 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
 
   private boolean jj_3_2() {
     if (jj_scan_token(SEMICOLON)) return true;
-    if (jj_3R_42()) return true;
+    if (jj_3R_44()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_scan_token(135)) {
-    jj_scanpos = xsp;
     if (jj_scan_token(136)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(143)) {
+    if (jj_scan_token(137)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(138)) {
+    if (jj_scan_token(144)) {
     jj_scanpos = xsp;
     if (jj_scan_token(139)) {
     jj_scanpos = xsp;
     if (jj_scan_token(140)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(137)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(148)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(131)) {
+    if (jj_scan_token(141)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(130)) {
+    if (jj_scan_token(138)) {
     jj_scanpos = xsp;
     if (jj_scan_token(149)) {
     jj_scanpos = xsp;
     if (jj_scan_token(132)) {
     jj_scanpos = xsp;
+    if (jj_scan_token(131)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(150)) {
+    jj_scanpos = xsp;
     if (jj_scan_token(133)) {
     jj_scanpos = xsp;
-    if (jj_scan_token(134)) return true;
+    if (jj_scan_token(134)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(135)) return true;
     }
     }
     }
@@ -5839,7 +5900,7 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     return false;
   }
 
-  private boolean jj_3R_124() {
+  private boolean jj_3R_126() {
     if (jj_scan_token(STDEV)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
@@ -5851,60 +5912,56 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     return false;
   }
 
-  private boolean jj_3R_143() {
+  private boolean jj_3R_145() {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_123() {
+  private boolean jj_3R_125() {
     if (jj_scan_token(GROUP_CONCAT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_122() {
+  private boolean jj_3R_124() {
     if (jj_scan_token(SAMPLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_121() {
+  private boolean jj_3R_123() {
     if (jj_scan_token(AVG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_120() {
+  private boolean jj_3R_122() {
     if (jj_scan_token(MAX)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_119() {
+  private boolean jj_3R_121() {
     if (jj_scan_token(MIN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_118() {
+  private boolean jj_3R_120() {
     if (jj_scan_token(SUM)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_117() {
+  private boolean jj_3R_119() {
     if (jj_scan_token(COUNT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_104() {
+  private boolean jj_3R_106() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_117()) {
-    jj_scanpos = xsp;
-    if (jj_3R_118()) {
-    jj_scanpos = xsp;
     if (jj_3R_119()) {
     jj_scanpos = xsp;
     if (jj_3R_120()) {
@@ -5927,7 +5984,11 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     jj_scanpos = xsp;
     if (jj_3R_129()) {
     jj_scanpos = xsp;
-    if (jj_3R_130()) return true;
+    if (jj_3R_130()) {
+    jj_scanpos = xsp;
+    if (jj_3R_131()) {
+    jj_scanpos = xsp;
+    if (jj_3R_132()) return true;
     }
     }
     }
@@ -5944,389 +6005,389 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     return false;
   }
 
-  private boolean jj_3R_144() {
+  private boolean jj_3R_146() {
     if (jj_scan_token(LBRACKET)) return true;
     return false;
   }
 
-  private boolean jj_3R_138() {
-    if (jj_3R_144()) return true;
+  private boolean jj_3R_140() {
+    if (jj_3R_146()) return true;
     return false;
   }
 
-  private boolean jj_3R_116() {
+  private boolean jj_3R_118() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_137()) {
+    if (jj_3R_139()) {
     jj_scanpos = xsp;
-    if (jj_3R_138()) return true;
+    if (jj_3R_140()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_137() {
-    if (jj_3R_143()) return true;
+  private boolean jj_3R_139() {
+    if (jj_3R_145()) return true;
     return false;
   }
 
-  private boolean jj_3R_112() {
+  private boolean jj_3R_114() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(EXISTS)) return true;
     return false;
   }
 
-  private boolean jj_3R_111() {
+  private boolean jj_3R_113() {
     if (jj_scan_token(EXISTS)) return true;
-    if (jj_3R_132()) return true;
+    if (jj_3R_134()) return true;
     return false;
   }
 
-  private boolean jj_3R_109() {
+  private boolean jj_3R_111() {
     if (jj_scan_token(REPLACE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_108() {
+  private boolean jj_3R_110() {
     if (jj_scan_token(SUBSTR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_110() {
+  private boolean jj_3R_112() {
     if (jj_scan_token(REGEX)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_100() {
-    if (jj_3R_112()) return true;
+  private boolean jj_3R_102() {
+    if (jj_3R_114()) return true;
     return false;
   }
 
-  private boolean jj_3R_99() {
-    if (jj_3R_111()) return true;
+  private boolean jj_3R_101() {
+    if (jj_3R_113()) return true;
     return false;
   }
 
-  private boolean jj_3R_98() {
-    if (jj_3R_110()) return true;
+  private boolean jj_3R_100() {
+    if (jj_3R_112()) return true;
     return false;
   }
 
-  private boolean jj_3R_97() {
+  private boolean jj_3R_99() {
     if (jj_scan_token(IS_NUMERIC)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_96() {
+  private boolean jj_3R_98() {
     if (jj_scan_token(IS_LITERAL)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_95() {
+  private boolean jj_3R_97() {
     if (jj_scan_token(IS_BLANK)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_94() {
+  private boolean jj_3R_96() {
     if (jj_scan_token(IS_URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_93() {
+  private boolean jj_3R_95() {
     if (jj_scan_token(IS_IRI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_92() {
+  private boolean jj_3R_94() {
     if (jj_scan_token(SAME_TERM)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_91() {
+  private boolean jj_3R_93() {
     if (jj_scan_token(STRDT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_90() {
+  private boolean jj_3R_92() {
     if (jj_scan_token(STRLANG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_89() {
+  private boolean jj_3R_91() {
     if (jj_scan_token(IF)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_88() {
+  private boolean jj_3R_90() {
     if (jj_scan_token(CALL)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_87() {
+  private boolean jj_3R_89() {
     if (jj_scan_token(COALESCE)) return true;
-    if (jj_3R_107()) return true;
+    if (jj_3R_109()) return true;
     return false;
   }
 
-  private boolean jj_3R_86() {
+  private boolean jj_3R_88() {
     if (jj_scan_token(VERSION)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_85() {
+  private boolean jj_3R_87() {
     if (jj_scan_token(SHA512)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_84() {
+  private boolean jj_3R_86() {
     if (jj_scan_token(SHA384)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_83() {
+  private boolean jj_3R_85() {
     if (jj_scan_token(SHA256)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_82() {
+  private boolean jj_3R_84() {
     if (jj_scan_token(SHA1)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_81() {
+  private boolean jj_3R_83() {
     if (jj_scan_token(MD5)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_80() {
+  private boolean jj_3R_82() {
     if (jj_scan_token(STRUUID)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_79() {
+  private boolean jj_3R_81() {
     if (jj_scan_token(UUID)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_78() {
+  private boolean jj_3R_80() {
     if (jj_scan_token(NOW)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_77() {
+  private boolean jj_3R_79() {
     if (jj_scan_token(TZ)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_76() {
+  private boolean jj_3R_78() {
     if (jj_scan_token(TIMEZONE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_75() {
+  private boolean jj_3R_77() {
     if (jj_scan_token(SECONDS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_74() {
+  private boolean jj_3R_76() {
     if (jj_scan_token(MINUTES)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_73() {
+  private boolean jj_3R_75() {
     if (jj_scan_token(HOURS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_72() {
+  private boolean jj_3R_74() {
     if (jj_scan_token(DAY)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_71() {
+  private boolean jj_3R_73() {
     if (jj_scan_token(MONTH)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_70() {
+  private boolean jj_3R_72() {
     if (jj_scan_token(YEAR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_69() {
+  private boolean jj_3R_71() {
     if (jj_scan_token(STRAFTER)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_68() {
+  private boolean jj_3R_70() {
     if (jj_scan_token(STRBEFORE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_67() {
+  private boolean jj_3R_69() {
     if (jj_scan_token(STRENDS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_66() {
+  private boolean jj_3R_68() {
     if (jj_scan_token(STRSTARTS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_65() {
+  private boolean jj_3R_67() {
     if (jj_scan_token(CONTAINS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_64() {
+  private boolean jj_3R_66() {
     if (jj_scan_token(ENCODE_FOR_URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_63() {
+  private boolean jj_3R_65() {
     if (jj_scan_token(LCASE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_62() {
+  private boolean jj_3R_64() {
     if (jj_scan_token(UCASE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_61() {
-    if (jj_3R_109()) return true;
+  private boolean jj_3R_63() {
+    if (jj_3R_111()) return true;
     return false;
   }
 
-  private boolean jj_3R_60() {
+  private boolean jj_3R_62() {
     if (jj_scan_token(STRLEN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_59() {
-    if (jj_3R_108()) return true;
+  private boolean jj_3R_61() {
+    if (jj_3R_110()) return true;
     return false;
   }
 
-  private boolean jj_3R_58() {
+  private boolean jj_3R_60() {
     if (jj_scan_token(CONCAT)) return true;
-    if (jj_3R_107()) return true;
+    if (jj_3R_109()) return true;
     return false;
   }
 
-  private boolean jj_3R_57() {
+  private boolean jj_3R_59() {
     if (jj_scan_token(ROUND)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_56() {
+  private boolean jj_3R_58() {
     if (jj_scan_token(FLOOR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_55() {
+  private boolean jj_3R_57() {
     if (jj_scan_token(CEIL)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_54() {
+  private boolean jj_3R_56() {
     if (jj_scan_token(ABS)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_106() {
+  private boolean jj_3R_108() {
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_53() {
+  private boolean jj_3R_55() {
     if (jj_scan_token(RAND)) return true;
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_105() {
+  private boolean jj_3R_107() {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_52() {
+  private boolean jj_3R_54() {
     if (jj_scan_token(BNODE)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_105()) {
+    if (jj_3R_107()) {
     jj_scanpos = xsp;
-    if (jj_3R_106()) return true;
+    if (jj_3R_108()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_51() {
+  private boolean jj_3R_53() {
     if (jj_scan_token(URI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_50() {
+  private boolean jj_3R_52() {
     if (jj_scan_token(IRI)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_49() {
+  private boolean jj_3R_51() {
     if (jj_scan_token(BOUND)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_132() {
+  private boolean jj_3R_134() {
     if (jj_scan_token(LBRACE)) return true;
     return false;
   }
 
-  private boolean jj_3R_48() {
+  private boolean jj_3R_50() {
     if (jj_scan_token(DTYPE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
@@ -6334,40 +6395,36 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
 
   private boolean jj_3_3() {
     if (jj_scan_token(DOT)) return true;
-    if (jj_3R_43()) return true;
+    if (jj_3R_45()) return true;
     return false;
   }
 
-  private boolean jj_3R_47() {
+  private boolean jj_3R_49() {
     if (jj_scan_token(LANGMATCHES)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_46() {
+  private boolean jj_3R_48() {
     if (jj_scan_token(LANG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_45() {
+  private boolean jj_3R_47() {
     if (jj_scan_token(STR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_44() {
-    if (jj_3R_104()) return true;
+  private boolean jj_3R_46() {
+    if (jj_3R_106()) return true;
     return false;
   }
 
-  private boolean jj_3R_41() {
+  private boolean jj_3R_43() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_44()) {
-    jj_scanpos = xsp;
-    if (jj_3R_45()) {
-    jj_scanpos = xsp;
     if (jj_3R_46()) {
     jj_scanpos = xsp;
     if (jj_3R_47()) {
@@ -6476,7 +6533,11 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     jj_scanpos = xsp;
     if (jj_3R_99()) {
     jj_scanpos = xsp;
-    if (jj_3R_100()) return true;
+    if (jj_3R_100()) {
+    jj_scanpos = xsp;
+    if (jj_3R_101()) {
+    jj_scanpos = xsp;
+    if (jj_3R_102()) return true;
     }
     }
     }
@@ -6537,309 +6598,309 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
   }
 
   private boolean jj_3_1() {
-    if (jj_3R_41()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_114() {
-    if (jj_3R_134()) return true;
+    if (jj_3R_43()) return true;
     return false;
   }
 
-  private boolean jj_3R_134() {
-    if (jj_scan_token(PREFIX)) return true;
-    if (jj_scan_token(PNAME_NS)) return true;
-    if (jj_3R_140()) return true;
+  private boolean jj_3R_142() {
+    if (jj_scan_token(IRIref)) return true;
     return false;
   }
 
-  private boolean jj_3R_133() {
-    if (jj_scan_token(BASE)) return true;
-    if (jj_3R_140()) return true;
+  private boolean jj_3R_169() {
+    if (jj_scan_token(ANON)) return true;
     return false;
   }
 
-  private boolean jj_3R_101() {
+  private boolean jj_3R_159() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_113()) {
+    if (jj_3R_168()) {
     jj_scanpos = xsp;
-    if (jj_3R_114()) return true;
+    if (jj_3R_169()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_113() {
-    if (jj_3R_133()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_42() {
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_101()) { jj_scanpos = xsp; break; }
-    }
+  private boolean jj_3R_168() {
+    if (jj_scan_token(BLANK_NODE_LABEL)) return true;
     return false;
   }
 
-  private boolean jj_3R_103() {
-    if (jj_3R_116()) return true;
+  private boolean jj_3R_105() {
+    if (jj_3R_118()) return true;
     return false;
   }
 
-  private boolean jj_3R_140() {
-    if (jj_scan_token(IRIref)) return true;
+  private boolean jj_3R_161() {
+    if (jj_scan_token(PNAME_NS)) return true;
     return false;
   }
 
-  private boolean jj_3R_102() {
-    if (jj_3R_115()) return true;
+  private boolean jj_3R_104() {
+    if (jj_3R_117()) return true;
     return false;
   }
 
-  private boolean jj_3R_43() {
+  private boolean jj_3R_45() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_102()) {
+    if (jj_3R_104()) {
     jj_scanpos = xsp;
-    if (jj_3R_103()) return true;
+    if (jj_3R_105()) return true;
     }
     return false;
   }
 
+  private boolean jj_3R_116() {
+    if (jj_3R_136()) return true;
+    return false;
+  }
+
   private boolean jj_3_4() {
     if (jj_scan_token(DOT)) return true;
-    if (jj_3R_43()) return true;
+    if (jj_3R_45()) return true;
     return false;
   }
 
-  private boolean jj_3R_167() {
-    if (jj_scan_token(ANON)) return true;
+  private boolean jj_3R_160() {
+    if (jj_scan_token(PNAME_LN)) return true;
     return false;
   }
 
-  private boolean jj_3R_157() {
+  private boolean jj_3R_155() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_166()) {
+    if (jj_3R_160()) {
     jj_scanpos = xsp;
-    if (jj_3R_167()) return true;
+    if (jj_3R_161()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_166() {
-    if (jj_scan_token(BLANK_NODE_LABEL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_159() {
+  private boolean jj_3R_136() {
+    if (jj_scan_token(PREFIX)) return true;
     if (jj_scan_token(PNAME_NS)) return true;
+    if (jj_3R_142()) return true;
     return false;
   }
 
-  private boolean jj_3R_158() {
-    if (jj_scan_token(PNAME_LN)) return true;
+  private boolean jj_3R_148() {
+    if (jj_3R_155()) return true;
     return false;
   }
 
-  private boolean jj_3R_153() {
+  private boolean jj_3R_141() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_158()) {
+    if (jj_3R_147()) {
     jj_scanpos = xsp;
-    if (jj_3R_159()) return true;
+    if (jj_3R_148()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_146() {
-    if (jj_3R_153()) return true;
+  private boolean jj_3R_147() {
+    if (jj_3R_142()) return true;
     return false;
   }
 
-  private boolean jj_3R_139() {
+  private boolean jj_3R_135() {
+    if (jj_scan_token(BASE)) return true;
+    if (jj_3R_142()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_103() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_145()) {
+    if (jj_3R_115()) {
     jj_scanpos = xsp;
-    if (jj_3R_146()) return true;
+    if (jj_3R_116()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_145() {
-    if (jj_3R_140()) return true;
+  private boolean jj_3R_115() {
+    if (jj_3R_135()) return true;
     return false;
   }
 
-  private boolean jj_3R_131() {
+  private boolean jj_3R_44() {
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_103()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_133() {
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_107() {
+  private boolean jj_3R_109() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_scan_token(170)) {
+    if (jj_scan_token(171)) {
     jj_scanpos = xsp;
-    if (jj_3R_131()) return true;
+    if (jj_3R_133()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_171() {
+  private boolean jj_3R_173() {
     if (jj_scan_token(STRING_LITERAL_LONG2)) return true;
     return false;
   }
 
-  private boolean jj_3R_170() {
+  private boolean jj_3R_172() {
     if (jj_scan_token(STRING_LITERAL_LONG1)) return true;
     return false;
   }
 
-  private boolean jj_3R_169() {
+  private boolean jj_3R_171() {
     if (jj_scan_token(STRING_LITERAL2)) return true;
     return false;
   }
 
-  private boolean jj_3R_168() {
+  private boolean jj_3R_170() {
     if (jj_scan_token(STRING_LITERAL1)) return true;
     return false;
   }
 
-  private boolean jj_3R_160() {
+  private boolean jj_3R_162() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_168()) {
+    if (jj_3R_170()) {
     jj_scanpos = xsp;
-    if (jj_3R_169()) {
+    if (jj_3R_171()) {
     jj_scanpos = xsp;
-    if (jj_3R_170()) {
+    if (jj_3R_172()) {
     jj_scanpos = xsp;
-    if (jj_3R_171()) return true;
+    if (jj_3R_173()) return true;
     }
     }
     }
     return false;
   }
 
-  private boolean jj_3R_165() {
+  private boolean jj_3R_167() {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_156() {
+  private boolean jj_3R_158() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_164()) {
+    if (jj_3R_166()) {
     jj_scanpos = xsp;
-    if (jj_3R_165()) return true;
+    if (jj_3R_167()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_164() {
+  private boolean jj_3R_166() {
     if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  private boolean jj_3R_183() {
+  private boolean jj_3R_185() {
     if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_182() {
+  private boolean jj_3R_184() {
     if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_181() {
+  private boolean jj_3R_183() {
     if (jj_scan_token(INTEGER_NEGATIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_174() {
+  private boolean jj_3R_176() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_181()) {
+    if (jj_3R_183()) {
     jj_scanpos = xsp;
-    if (jj_3R_182()) {
+    if (jj_3R_184()) {
     jj_scanpos = xsp;
-    if (jj_3R_183()) return true;
+    if (jj_3R_185()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_152() {
+  private boolean jj_3R_154() {
     if (jj_scan_token(NIL)) return true;
     return false;
   }
 
-  private boolean jj_3R_151() {
-    if (jj_3R_157()) return true;
+  private boolean jj_3R_153() {
+    if (jj_3R_159()) return true;
     return false;
   }
 
-  private boolean jj_3R_180() {
+  private boolean jj_3R_182() {
     if (jj_scan_token(DOUBLE_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_150() {
-    if (jj_3R_156()) return true;
+  private boolean jj_3R_152() {
+    if (jj_3R_158()) return true;
     return false;
   }
 
-  private boolean jj_3R_179() {
+  private boolean jj_3R_181() {
     if (jj_scan_token(DECIMAL_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_149() {
-    if (jj_3R_155()) return true;
+  private boolean jj_3R_151() {
+    if (jj_3R_157()) return true;
     return false;
   }
 
-  private boolean jj_3R_148() {
-    if (jj_3R_154()) return true;
+  private boolean jj_3R_150() {
+    if (jj_3R_156()) return true;
     return false;
   }
 
-  private boolean jj_3R_173() {
+  private boolean jj_3R_175() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_178()) {
+    if (jj_3R_180()) {
     jj_scanpos = xsp;
-    if (jj_3R_179()) {
+    if (jj_3R_181()) {
     jj_scanpos = xsp;
-    if (jj_3R_180()) return true;
+    if (jj_3R_182()) return true;
     }
     }
     return false;
   }
 
-  private boolean jj_3R_178() {
+  private boolean jj_3R_180() {
     if (jj_scan_token(INTEGER_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_142() {
+  private boolean jj_3R_144() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_147()) {
-    jj_scanpos = xsp;
-    if (jj_3R_148()) {
-    jj_scanpos = xsp;
     if (jj_3R_149()) {
     jj_scanpos = xsp;
     if (jj_3R_150()) {
     jj_scanpos = xsp;
     if (jj_3R_151()) {
     jj_scanpos = xsp;
-    if (jj_3R_152()) return true;
+    if (jj_3R_152()) {
+    jj_scanpos = xsp;
+    if (jj_3R_153()) {
+    jj_scanpos = xsp;
+    if (jj_3R_154()) return true;
     }
     }
     }
@@ -6848,12 +6909,12 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     return false;
   }
 
-  private boolean jj_3R_147() {
-    if (jj_3R_139()) return true;
+  private boolean jj_3R_149() {
+    if (jj_3R_141()) return true;
     return false;
   }
 
-  private boolean jj_3R_141() {
+  private boolean jj_3R_143() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_scan_token(14)) {
@@ -6863,36 +6924,84 @@ public class ARQParser extends ARQParserBase implements ARQParserConstants {
     return false;
   }
 
-  private boolean jj_3R_177() {
+  private boolean jj_3R_179() {
     if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
-  private boolean jj_3R_176() {
+  private boolean jj_3R_178() {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_172() {
+  private boolean jj_3R_174() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_175()) {
+    if (jj_3R_177()) {
     jj_scanpos = xsp;
-    if (jj_3R_176()) {
+    if (jj_3R_178()) {
     jj_scanpos = xsp;
-    if (jj_3R_177()) return true;
+    if (jj_3R_179()) return true;
     }
     }
     return false;
   }
 
-

<TRUNCATED>