You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/08/24 10:13:10 UTC

[01/50] jena git commit: Merge pull request #10 from apache/master

Repository: jena
Updated Branches:
  refs/heads/master 6a0fee3ca -> e2a076db5


Merge pull request #10 from apache/master

pull master 2015-07-28

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

Branch: refs/heads/master
Commit: 1ce04970fdf72c1b5bf2d209349ad4fec4390b65
Parents: 6e4379e 290c663
Author: confidencesun <co...@gmail.com>
Authored: Tue Jul 28 16:40:08 2015 -0300
Committer: confidencesun <co...@gmail.com>
Committed: Tue Jul 28 16:40:08 2015 -0300

----------------------------------------------------------------------
 apache-jena-libs/pom.xml                        |  6 +--
 apache-jena-osgi/jena-osgi/pom.xml              | 12 ++---
 apache-jena-osgi/pom.xml                        |  4 +-
 apache-jena/bin/tdbloader2common                | 30 +++++++++---
 apache-jena/bin/tdbloader2index                 | 51 +++++++++++---------
 apache-jena/pom.xml                             | 25 +++++-----
 jena-arq/pom.xml                                | 12 ++---
 jena-base/pom.xml                               |  6 +--
 jena-core/pom.xml                               | 13 +++--
 jena-csv/pom.xml                                |  8 +--
 jena-elephas/jena-elephas-common/pom.xml        |  2 +-
 jena-elephas/jena-elephas-io/pom.xml            |  2 +-
 jena-elephas/jena-elephas-mapreduce/pom.xml     |  2 +-
 jena-elephas/jena-elephas-stats/pom.xml         |  2 +-
 jena-elephas/pom.xml                            |  6 +--
 .../jena/example/helloworld/HelloWorld.java     |  8 +--
 .../jena/example/pizza/PizzaSparqlNoInf.java    | 16 +++---
 jena-extras/jena-querybuilder/pom.xml           |  2 +-
 jena-extras/pom.xml                             |  6 +--
 jena-fuseki1/pom.xml                            | 18 +++----
 jena-fuseki2/apache-jena-fuseki/pom.xml         |  4 +-
 jena-fuseki2/jena-fuseki-core/pom.xml           | 14 +++---
 jena-fuseki2/jena-fuseki-server/pom.xml         |  2 +-
 jena-fuseki2/jena-fuseki-war/pom.xml            |  2 +-
 jena-fuseki2/pom.xml                            |  4 +-
 jena-iri/pom.xml                                |  4 +-
 jena-jdbc/jena-jdbc-core/pom.xml                |  4 +-
 jena-jdbc/jena-jdbc-driver-bundle/pom.xml       | 20 ++++----
 jena-jdbc/jena-jdbc-driver-mem/pom.xml          |  6 +--
 jena-jdbc/jena-jdbc-driver-remote/pom.xml       | 10 ++--
 jena-jdbc/jena-jdbc-driver-tdb/pom.xml          | 10 ++--
 jena-jdbc/pom.xml                               |  4 +-
 jena-maven-tools/pom.xml                        |  6 +--
 jena-parent/pom.xml                             |  2 +-
 jena-permissions/pom.xml                        |  4 +-
 jena-sdb/pom.xml                                | 12 ++---
 jena-shaded-guava/pom.xml                       |  4 +-
 jena-spatial/pom.xml                            |  8 +--
 jena-tdb/pom.xml                                | 12 ++---
 jena-text/pom.xml                               |  8 +--
 pom.xml                                         |  2 +-
 41 files changed, 197 insertions(+), 176 deletions(-)
----------------------------------------------------------------------



[43/50] jena git commit: Remove uncomments.

Posted by an...@apache.org.
Remove uncomments.

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

Branch: refs/heads/master
Commit: 4ddf9ec3247b8792a0024d72c76c3a1af45473f1
Parents: 1555126
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:32:36 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:32:36 2015 +0100

----------------------------------------------------------------------
 .../jena/fuseki/servlets/ResponseDataset.java   | 22 +++++---------------
 1 file changed, 5 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4ddf9ec3/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
index 1464b99..f05331d 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
@@ -73,8 +73,7 @@ public class ResponseDataset
         
         String mimeType = null ;        // Header request type 
 
-        // TODO Use MediaType throughout.
-        MediaType i = ConNeg.chooseContentType(request, DEF.quadsOffer, DEF.acceptNQuads) ;
+        MediaType i = ConNeg.chooseContentType(request, DEF.constructOffer, DEF.acceptTurtle) ;
         if ( i != null )
             mimeType = i.getContentType() ;
 
@@ -109,26 +108,15 @@ public class ResponseDataset
         Lang lang = RDFLanguages.contentTypeToLang(contentType) ;
         if ( lang == null )
             ServletOps.errorBadRequest("Can't determine output content type: "+contentType) ;
-        
-//        if ( rdfw instanceof RDFXMLWriterI )
-//            rdfw.setProperty("showXmlDeclaration", "true") ;
-
-    //        // Write locally to check it's possible.
-    //        // Time/space tradeoff.
-    //        try {
-    //            OutputStream out = new NullOutputStream() ;
-    //            RDFDataMgr.write(out, model, lang) ;
-    //            IO.flush(out) ;
-    //        } catch (JenaException ex)
-    //        {
-    //            SPARQL_ServletBase.errorOccurred(ex) ;
-    //        }
 
         try {
             ResponseResultSet.setHttpResponse(action, contentType, charset) ; 
             response.setStatus(HttpSC.OK_200) ;
             ServletOutputStream out = response.getOutputStream() ;
-            RDFDataMgr.write(out, dataset, lang) ;
+            if ( RDFLanguages.isQuads(lang) )
+                RDFDataMgr.write(out, dataset, lang) ;
+            else
+                RDFDataMgr.write(out, dataset.getDefaultModel(), lang) ;
             out.flush() ;
         }
         catch (Exception ex) { 


[16/50] jena git commit: Merge remote-tracking branch 'origin/master'

Posted by an...@apache.org.
Merge remote-tracking branch 'origin/master'

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

Branch: refs/heads/master
Commit: e819ac32dac6efac1c7726dd9d738db7e33769ef
Parents: 3a67dbc e743d25
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 10 19:24:31 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 10 19:24:31 2015 +0800

----------------------------------------------------------------------
 .../arq/querybuilder/handlers/WhereHandler.java |   14 +-
 .../querybuilder/handlers/WhereHandlerTest.java |   33 +
 .../permissions/example/ExampleEvaluator.java   |   43 +-
 .../example/ShiroExampleEvaluator.java          |   15 +-
 .../jena/security/example/fuseki/config.ttl     |   26 +-
 .../apache/jena/permissions/SecuredItem.java    |  142 +-
 .../jena/permissions/SecurityEvaluator.java     |  112 +-
 .../jena/permissions/graph/SecuredGraph.java    |  102 +-
 .../graph/SecuredGraphEventManager.java         |  233 ++--
 .../permissions/graph/SecuredPrefixMapping.java |   81 +-
 .../graph/impl/SecuredGraphImpl.java            |  184 ++-
 .../graph/impl/SecuredPrefixMappingImpl.java    |   89 +-
 .../impl/CachedSecurityEvaluator.java           |   28 +-
 .../jena/permissions/impl/SecuredItemImpl.java  |  779 +++++------
 .../jena/permissions/model/SecuredAlt.java      |  163 ++-
 .../permissions/model/SecuredContainer.java     |  133 +-
 .../jena/permissions/model/SecuredLiteral.java  |   93 +-
 .../jena/permissions/model/SecuredModel.java    | 1243 ++++++++++++------
 .../jena/permissions/model/SecuredProperty.java |   11 +-
 .../jena/permissions/model/SecuredRDFList.java  |  236 +++-
 .../jena/permissions/model/SecuredRDFNode.java  |   26 +-
 .../model/SecuredReifiedStatement.java          |   12 +-
 .../jena/permissions/model/SecuredResource.java |  214 ++-
 .../jena/permissions/model/SecuredSeq.java      |  288 ++--
 .../permissions/model/SecuredStatement.java     |  166 ++-
 .../permissions/model/impl/SecuredAltImpl.java  |  207 ++-
 .../model/impl/SecuredContainerImpl.java        |  438 ++----
 .../model/impl/SecuredLiteralImpl.java          |  162 ++-
 .../model/impl/SecuredModelImpl.java            |  610 +++++----
 .../model/impl/SecuredPropertyImpl.java         |   51 +-
 .../model/impl/SecuredRDFListImpl.java          |  704 ++++------
 .../model/impl/SecuredRDFNodeImpl.java          |  211 ++-
 .../model/impl/SecuredReifiedStatementImpl.java |   29 +-
 .../model/impl/SecuredResourceImpl.java         |  570 ++++----
 .../permissions/model/impl/SecuredSelector.java |   39 +-
 .../permissions/model/impl/SecuredSeqImpl.java  |  326 ++---
 .../model/impl/SecuredStatementImpl.java        |  278 ++--
 .../permissions/query/SecuredQueryEngine.java   |  100 +-
 .../permissions/query/rewriter/OpRewriter.java  |  379 +++---
 .../query/rewriter/SecuredFunction.java         |  104 +-
 .../permissions/utils/PermStatementFilter.java  |   48 +-
 .../permissions/utils/PermTripleFilter.java     |   45 +-
 .../permissions/utils/RDFListSecFilter.java     |   23 +-
 .../jena/permissions/MockSecurityEvaluator.java |    6 +
 .../ModelBasedSecurityEvaluator.java            |    9 +-
 .../permissions/StaticSecurityEvaluator.java    |    5 +
 .../jena/permissions/graph/TDBGraphTest.java    |    3 -
 .../model/SecuredModelDetailTest.java           |    5 +
 .../permissions/model/SecuredModelTest.java     |    6 +-
 .../jena/permissions/query/DataSetTest.java     |   15 +-
 .../jena/permissions/query/QueryEngineTest.java |    9 +-
 51 files changed, 4778 insertions(+), 4070 deletions(-)
----------------------------------------------------------------------



[39/50] jena git commit: Use RDFDataMgr as core parser step.

Posted by an...@apache.org.
Use RDFDataMgr as core parser step.

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

Branch: refs/heads/master
Commit: 060248b790c6a78bcd0df5bab66f0fbf8b95b77e
Parents: 62bc52f
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:30:31 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:30:31 2015 +0100

----------------------------------------------------------------------
 jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/060248b7/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java b/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
index 67b9384..05892bb 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
@@ -113,9 +113,8 @@ public class RiotReader
      * @param dest      Where to send the triples from the parser.
      */  
     public static void parse(InputStream in, Lang lang, String baseIRI, StreamRDF dest)
-    {
-        LangRIOT parser = RiotReader.createParser(in, lang, baseIRI, dest) ;
-        parser.parse() ;
+    { 
+        RDFDataMgr.parse(dest, in, baseIRI, lang);
     }
 
     // -------- Parsers


[19/50] jena git commit: Trivial reformat

Posted by an...@apache.org.
Trivial reformat


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

Branch: refs/heads/master
Commit: f5150d4146d26b558e7482c85a2eb846c1c6f642
Parents: fd5a94a
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Aug 12 09:18:44 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Aug 12 09:18:44 2015 +0100

----------------------------------------------------------------------
 jena-parent/pom.xml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f5150d41/jena-parent/pom.xml
----------------------------------------------------------------------
diff --git a/jena-parent/pom.xml b/jena-parent/pom.xml
index 1d6805a..dcbd614 100644
--- a/jena-parent/pom.xml
+++ b/jena-parent/pom.xml
@@ -16,7 +16,9 @@
    limitations under the License.
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.apache.jena</groupId>


[48/50] jena git commit: Merge branch 'master' into JENA-491-construct-quads

Posted by an...@apache.org.
Merge branch 'master' into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: 0bd45a5103b8b406652994a866150a7bd960788c
Parents: d5a3f8b c74a042
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 20:02:44 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 20:02:44 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/riot/RDFDataMgr.java   |  30 +-
 .../org/apache/jena/riot/RDFParserRegistry.java |  10 +-
 .../java/org/apache/jena/riot/ReaderRIOT.java   |   4 +-
 .../java/org/apache/jena/riot/RiotReader.java   | 254 +++--------------
 .../org/apache/jena/riot/lang/JsonLDReader.java |   2 +
 .../apache/jena/riot/lang/PipedRDFIterator.java |   2 +
 .../org/apache/jena/riot/lang/ReaderTriX.java   |   5 +-
 .../org/apache/jena/riot/lang/RiotParsers.java  | 230 +++++++++++++++
 .../src/main/java/riotcmd/CmdLangParse.java     |   7 +-
 .../jena/riot/lang/ParserTestBaseLib.java       |  76 +++++
 .../apache/jena/riot/lang/TestLangNQuads.java   |  78 ++----
 .../apache/jena/riot/lang/TestLangNTriples.java | 130 ++++-----
 .../apache/jena/riot/lang/TestLangNTuples.java  |  73 +++--
 .../apache/jena/riot/lang/TestLangRdfJson.java  | 280 ++++++++-----------
 .../org/apache/jena/riot/lang/TestLangTrig.java |  24 +-
 .../apache/jena/riot/lang/TestLangTurtle.java   |  37 +--
 .../jena/riot/lang/TestParserFactory.java       |  32 ++-
 .../jena/riot/lang/TestPipedRDFIterators.java   |   6 +-
 .../jena/riot/lang/TestReaderNTriples.java      |  24 --
 .../apache/jena/riot/lang/TestTurtleTerms.java  |   3 +-
 .../jena/fuseki/validation/DataValidator.java   |   4 +-
 21 files changed, 659 insertions(+), 652 deletions(-)
----------------------------------------------------------------------



[07/50] jena git commit: create run-construct-quad-tests with test files

Posted by an...@apache.org.
create run-construct-quad-tests with test files

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

Branch: refs/heads/master
Commit: 84f6f989f0e40695ba675e81e9785e3a558d03df
Parents: 69f5ee2
Author: confidencesun <co...@gmail.com>
Authored: Wed Aug 5 11:07:49 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Wed Aug 5 11:07:49 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 40 +++++++++++++++-----
 .../Syntax-ARQ/syntax-quad-construct-01.arq     |  3 ++
 .../Syntax-ARQ/syntax-quad-construct-02.arq     |  3 ++
 .../Syntax-ARQ/syntax-quad-construct-03.arq     |  3 ++
 .../Syntax-ARQ/syntax-quad-construct-04.arq     |  9 +++++
 .../Syntax-ARQ/syntax-quad-construct-05.arq     |  9 +++++
 .../Syntax-ARQ/syntax-quad-construct-06.arq     | 14 +++++++
 .../Syntax-ARQ/syntax-quad-construct-07.arq     |  7 ++++
 .../Syntax-ARQ/syntax-quad-construct-08.arq     |  9 +++++
 9 files changed, 87 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index dcc587b..5b4efd6 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -18,6 +18,12 @@
 
 package arq.examples.constructquads;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FilenameFilter;
+import java.io.IOException;
 import java.util.Iterator;
 
 import org.apache.jena.graph.Triple;
@@ -38,7 +44,7 @@ import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.util.PrintUtil;
 
 public class ExampleConstructQuads {
-	public static void main(String[] args) {
+	public static void main(String[] args) throws FileNotFoundException, IOException {
 
 		// create testing data :
 		// 1) default graph data
@@ -64,7 +70,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -75,7 +80,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -87,7 +91,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -99,7 +102,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Triple> triples = qexec.execConstructTriples();
 			PrintUtil.printOut(triples);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -111,7 +113,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Dataset d = qexec.execConstructDataset();
 			RDFDataMgr.write(System.out, d, Lang.TRIG);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -123,7 +124,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -135,7 +135,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -147,7 +146,6 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Triple> triples = qexec.execConstructTriples();
 			PrintUtil.printOut(triples);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
@@ -159,9 +157,31 @@ public class ExampleConstructQuads {
 				.create(query, dataset)) {
 			Iterator<Quad> quads = qexec.execConstructQuads();
 			PrintUtil.printOut(quads);
-			qexec.close();
 		}
 		arq.qparse.main("--in", "arq", queryString);
 
+		// run-construct-quad-test
+		System.out.println("run-construct-quad-test:");
+		File[] tests = new File("testing/ARQ/Syntax/Syntax-ARQ")
+				.listFiles(new FilenameFilter() {
+					public boolean accept(File dir, String fname) {
+						System.out.println(fname);
+						if (fname.startsWith("syntax-quad-construct-")) {
+							return true;
+						}
+						return false;
+					}
+				});
+		for (File test : tests) {
+			System.out.println("======== File: "+test.getName());
+			try (BufferedReader br = new BufferedReader(new FileReader(test))) {
+				String line = null;
+				while( (line = br.readLine()) != null){
+					System.out.println(line);
+				}
+			}
+			System.out.println("==== Output of qparse --file "+ test.getName());
+			arq.qparse.main("--in", "arq", "--file", test.getAbsolutePath());
+		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-01.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-01.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-01.arq
new file mode 100644
index 0000000..3e43045
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-01.arq
@@ -0,0 +1,3 @@
+PREFIX : <http://example/>
+
+CONSTRUCT { GRAPH :g { :s :p :o } } WHERE {}

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-02.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-02.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-02.arq
new file mode 100644
index 0000000..f1bd671
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-02.arq
@@ -0,0 +1,3 @@
+PREFIX : <http://example/>
+
+CONSTRUCT { GRAPH ?g { ?s ?p ?o } } WHERE { ?s ?p ?o }

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-03.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-03.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-03.arq
new file mode 100644
index 0000000..2e7c0a8
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-03.arq
@@ -0,0 +1,3 @@
+PREFIX : <http://example/>
+
+CONSTRUCT { :s :p :o } WHERE {}

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
new file mode 100644
index 0000000..7638a43
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
@@ -0,0 +1,9 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
new file mode 100644
index 0000000..d9b1bda
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
@@ -0,0 +1,9 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   ?s ?p ?o
+   GRAPH ?g { :s :p :o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
new file mode 100644
index 0000000..d6b11bb
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
@@ -0,0 +1,14 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o .
+   ?s ?p ?o .
+   GRAPH ?g { ?s ?p ?o }
+   ?s ?p ?o .
+   ?s ?p ?o
+   GRAPH ?g { ?s ?p ?o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
new file mode 100644
index 0000000..19fe948
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .}
+   }
+WHERE {}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/84f6f989/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
new file mode 100644
index 0000000..602e81c
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
@@ -0,0 +1,9 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   GRAPH ?g1 { :s :p :o }
+   }
+WHERE
+   { }
+


[11/50] jena git commit: Merge pull request #12 from apache/master

Posted by an...@apache.org.
Merge pull request #12 from apache/master

pull master 2015-08-06

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

Branch: refs/heads/master
Commit: b084878a1d49e240c702f7961b316819d8a33b9f
Parents: 2bb0e58 7442161
Author: confidencesun <co...@gmail.com>
Authored: Thu Aug 6 00:02:12 2015 -0300
Committer: confidencesun <co...@gmail.com>
Committed: Thu Aug 6 00:02:12 2015 -0300

----------------------------------------------------------------------
 .../sparql/pfunction/PropertyFunctionBase.java  |  25 +-
 jena-core/src/main/java/jena/schemagen.java     |   3 +-
 .../apache/jena/fuseki/mgt/ActionDatasets.java  | 120 +--
 .../fuseki/server/DataAccessPointRegistry.java  |  14 +
 .../apache/jena/fuseki/server/FusekiEnv.java    |  53 +-
 .../jena/fuseki/servlets/SPARQL_Protocol.java   |  68 +-
 .../jena/fuseki/servlets/SPARQL_Query.java      |   2 +-
 .../fuseki/servlets/SPARQL_QueryDataset.java    |  20 +-
 .../fuseki/servlets/SPARQL_QueryGeneral.java    | 100 +-
 .../java/org/apache/jena/fuseki/TestAdmin.java  |  24 +-
 .../java/org/apache/jena/fuseki/TestQuery.java  | 134 ++-
 jena-parent/pom.xml                             |   5 +-
 .../java/org/apache/jena/tdb/TDBFactory.java    |  17 +-
 .../jena/tdb/setup/DatasetBuilderBasic.java     | 197 ----
 .../jena/tdb/setup/DatasetBuilderStd.java       |  27 +-
 .../org/apache/jena/tdb/sys/TDBInternal.java    | 128 ++-
 .../java/org/apache/jena/tdb/sys/TDBMaker.java  |  92 +-
 .../org/apache/jena/query/text/TextQueryPF.java | 914 +++++++++++--------
 18 files changed, 944 insertions(+), 999 deletions(-)
----------------------------------------------------------------------



[09/50] jena git commit: fix hashCode for re-parsing query

Posted by an...@apache.org.
fix hashCode for re-parsing query

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

Branch: refs/heads/master
Commit: 36d32da64b53d4af930f9395b2fd90c7d302b30f
Parents: 4bb4a7f
Author: confidencesun <co...@gmail.com>
Authored: Thu Aug 6 10:05:04 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Thu Aug 6 10:05:04 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 228 ++++++++++---------
 .../jena/sparql/lang/arq/ARQParserBase.java     |  12 +-
 .../jena/sparql/serializer/FmtTemplate.java     |  59 +++--
 .../org/apache/jena/sparql/syntax/Template.java |  28 ++-
 4 files changed, 169 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/36d32da6/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index 0f509b0..ff54915 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -46,119 +46,119 @@ import org.apache.jena.util.PrintUtil;
 public class ExampleConstructQuads {
 	public static void main(String[] args) throws FileNotFoundException, IOException {
 
-		// create testing data :
-		// 1) default graph data
-		Model model = ModelFactory.createDefaultModel();
-		Resource s = model.createResource("http://eg.com/s");
-		Property p = model.createProperty("http://eg.com/p");
-		Resource o = model.createResource("http://eg.com/o");
-		model.add(s, p, o);
-		Dataset dataset = DatasetFactory.create(model);
-		// 2) named graph data
-		Model model1 = ModelFactory.createDefaultModel();
-		Resource s1 = model.createResource("http://eg.com/s1");
-		Property p1 = model.createProperty("http://eg.com/p1");
-		Resource o1 = model.createResource("http://eg.com/o1");
-		model1.add(s1, p1, o1);
-		dataset.addNamedModel("http://eg.com/g1", model1);
-
-		// construct named graph
-		System.out.println("construct named graph:");
-		String queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// construct default graph 1
-		System.out.println("construct default graph 1:");
-		queryString = "CONSTRUCT {  {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// construct default graph 2
-		System.out.println("construct default graph 2:");
-		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// construct triples
-		System.out.println("construct default graph 2:");
-		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Triple> triples = qexec.execConstructTriples();
-			PrintUtil.printOut(triples);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// construct dataset
-		System.out.println("construct dataset:");
-		queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Dataset d = qexec.execConstructDataset();
-			RDFDataMgr.write(System.out, d, Lang.TRIG);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// short form 1
-		System.out.println("short form 1:");
-		queryString = "CONSTRUCT WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// short form 2
-		System.out.println("short form 2:");
-		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// short form 3
-		System.out.println("short form 3:");
-		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Triple> triples = qexec.execConstructTriples();
-			PrintUtil.printOut(triples);
-		}
-		arq.qparse.main("--in", "arq", queryString);
-
-		// short form 4
-		System.out.println("short form 4:");
-		queryString = "CONSTRUCT WHERE{ {<http://eg.com/s> <http://eg.com/p> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		try (QueryExecution qexec = QueryExecutionFactory
-				.create(query, dataset)) {
-			Iterator<Quad> quads = qexec.execConstructQuads();
-			PrintUtil.printOut(quads);
-		}
-		arq.qparse.main("--in", "arq", queryString);
+//		// create testing data :
+//		// 1) default graph data
+//		Model model = ModelFactory.createDefaultModel();
+//		Resource s = model.createResource("http://eg.com/s");
+//		Property p = model.createProperty("http://eg.com/p");
+//		Resource o = model.createResource("http://eg.com/o");
+//		model.add(s, p, o);
+//		Dataset dataset = DatasetFactory.create(model);
+//		// 2) named graph data
+//		Model model1 = ModelFactory.createDefaultModel();
+//		Resource s1 = model.createResource("http://eg.com/s1");
+//		Property p1 = model.createProperty("http://eg.com/p1");
+//		Resource o1 = model.createResource("http://eg.com/o1");
+//		model1.add(s1, p1, o1);
+//		dataset.addNamedModel("http://eg.com/g1", model1);
+//
+//		// construct named graph
+//		System.out.println("construct named graph:");
+//		String queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// construct default graph 1
+//		System.out.println("construct default graph 1:");
+//		queryString = "CONSTRUCT {  {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// construct default graph 2
+//		System.out.println("construct default graph 2:");
+//		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// construct triples
+//		System.out.println("construct default graph 2:");
+//		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Triple> triples = qexec.execConstructTriples();
+//			PrintUtil.printOut(triples);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// construct dataset
+//		System.out.println("construct dataset:");
+//		queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Dataset d = qexec.execConstructDataset();
+//			RDFDataMgr.write(System.out, d, Lang.TRIG);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// short form 1
+//		System.out.println("short form 1:");
+//		queryString = "CONSTRUCT WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// short form 2
+//		System.out.println("short form 2:");
+//		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// short form 3
+//		System.out.println("short form 3:");
+//		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Triple> triples = qexec.execConstructTriples();
+//			PrintUtil.printOut(triples);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
+//
+//		// short form 4
+//		System.out.println("short form 4:");
+//		queryString = "CONSTRUCT WHERE{ {<http://eg.com/s> <http://eg.com/p> ?o} }";
+//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+//		try (QueryExecution qexec = QueryExecutionFactory
+//				.create(query, dataset)) {
+//			Iterator<Quad> quads = qexec.execConstructQuads();
+//			PrintUtil.printOut(quads);
+//		}
+//		arq.qparse.main("--in", "arq", queryString);
 
 		// run-construct-quad-test
 		System.out.println("run-construct-quad-test:");
@@ -171,7 +171,9 @@ public class ExampleConstructQuads {
 						return false;
 					}
 				});
+		int i=0;
 		for (File test : tests) {
+//			if (++i != 4) continue;
 			System.out.println("======== File: "+test.getName());
 			try (BufferedReader br = new BufferedReader(new FileReader(test))) {
 				String line = null;

http://git-wip-us.apache.org/repos/asf/jena/blob/36d32da6/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
index bb2a01b..abfb512 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
@@ -19,6 +19,7 @@
 package org.apache.jena.sparql.lang.arq;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.jena.atlas.json.io.JSONHandler ;
 import org.apache.jena.atlas.json.io.JSONHandlerBase ;
@@ -81,16 +82,7 @@ class ARQParserBase
     protected void jsonValueVar(String image, long currLine, long currCol)       { throw new NotImplemented("yet") ; }
     protected ElementGroup createQueryPattern(Template t){
         ElementGroup elg = new ElementGroup();
-        List<Quad> quads = t.getQuads();
-        HashMap<Node, BasicPattern> graphs = new HashMap<>();
-        for (Quad q: quads){
-          BasicPattern bgp = graphs.get(q.getGraph());
-          if (bgp == null){
-            bgp = new BasicPattern();
-            graphs.put(q.getGraph(), bgp);
-          }
-          bgp.add( q.asTriple() );
-        }
+        Map<Node, BasicPattern> graphs = t.getGraphPattern();
         for(Node n: graphs.keySet()){
           Element el = new ElementPathBlock(graphs.get(n));
           if(! Quad.defaultGraphNodeGenerated.equals(n) ){

http://git-wip-us.apache.org/repos/asf/jena/blob/36d32da6/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
index d422d1c..facb963 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
@@ -18,8 +18,12 @@
 
 package org.apache.jena.sparql.serializer;
 
+import java.util.List;
+
 import org.apache.jena.atlas.io.IndentedLineBuffer;
 import org.apache.jena.atlas.io.IndentedWriter;
+import org.apache.jena.sparql.core.BasicPattern;
+import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.syntax.Template;
 import org.apache.jena.sparql.util.FmtUtils;
 
@@ -52,35 +56,42 @@ public class FmtTemplate extends FormatterBase
     @Override
     public void format(Template template)
     {
-    	
-    	if (template.isConstructQuadTemplate()){
-            out.print("{") ;
-            out.incIndent(INDENT) ;
-            out.pad() ;
-            
-    		out.print("GRAPH");
-    		out.print(" ");
-    		out.print(FmtUtils.stringForNode(template.getGraphNode()));
-    		out.print(" ");
-    	}
-    	
-    
         out.print("{") ;
         out.incIndent(INDENT) ;
         out.pad() ;
-    
-        formatTriples(template.getBGP()) ;
         
-        out.decIndent(INDENT) ;
-        out.print("}") ;
-        out.newline() ;
-        
-    	if (template.isConstructQuadTemplate()){
-            out.decIndent(INDENT) ;
-            out.print("}") ;
-            out.newline() ;
-    	}
+        List<Quad> quads = template.getQuads();
+        for(Quad quad: quads){
+          BasicPattern bgp = new BasicPattern();
+          bgp.add(quad.asTriple());
+          out.newline() ;
+          if(! Quad.defaultGraphNodeGenerated.equals(quad.getGraph()) ){
 
+        	out.print("GRAPH");
+      		out.print(" ");
+      		out.print(FmtUtils.stringForNode(quad.getGraph()));
+      		out.print(" ");
+      		
+      		out.newline() ;
+            out.incIndent(INDENT) ;
+            out.pad() ;
+            out.print("{") ;
+            out.incIndent(INDENT) ;
+            out.pad() ;
+          }
+          
+          formatTriples(bgp) ;
+          
+          if(! Quad.defaultGraphNodeGenerated.equals(quad.getGraph()) ){
+              out.decIndent(INDENT) ;
+              out.print("}") ;
+              out.decIndent(INDENT) ;
+          }
+       }
+       out.newline() ;
+       out.decIndent(INDENT) ;
+       out.print("}") ;
+       out.newline() ;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/36d32da6/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index eb970c1..3955866 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -20,9 +20,11 @@ package org.apache.jena.sparql.syntax;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.BasicPattern;
@@ -54,17 +56,6 @@ public class Template
     	this.qp = null;
     }
     
-    public boolean isConstructQuadTemplate(){
-    	return this.qp != null && ! this.getQuads().isEmpty();
-    }
-    
-    public Node getGraphNode() {
-    	if (!this.isConstructQuadTemplate()){
-    		return null;
-    	}
-    	return this.getQuads().get(0).getGraph();
-    }
-
 //    public void addTriple(Triple t) { quads.addTriple(t) ; }
 //    public int mark() { return quads.mark() ; }
 //    public void addTriple(int index, Triple t) { quads.addTriple(index, t) ; }
@@ -106,6 +97,21 @@ public class Template
     	}   	
     	return qp.getQuads() ; 
     }
+    
+    public Map<Node, BasicPattern> getGraphPattern(){
+        List<Quad> quads = getQuads();
+        HashMap<Node, BasicPattern> graphs = new HashMap<>();
+        for (Quad q: quads){
+          BasicPattern bgp = graphs.get(q.getGraph());
+          if (bgp == null){
+            bgp = new BasicPattern();
+            graphs.put(q.getGraph(), bgp);
+          }
+          bgp.add( q.asTriple() );
+        }
+        return graphs;
+    }
+
     // -------------------------
 
     public void subst(Collection<Triple> acc, Map<Node, Node> bNodeMap, Binding b)


[35/50] jena git commit: JENA-491 Fuseki Support: Hack on QueryEngineHTTP, so that we can test the conneg of Construct Quad.

Posted by an...@apache.org.
JENA-491 Fuseki Support: Hack on QueryEngineHTTP, so that we can test
the conneg of Construct Quad.

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

Branch: refs/heads/master
Commit: 602e3c02779366ef9c2654aaf6bb0f1159801012
Parents: 75a7a77
Author: confidencesun <co...@gmail.com>
Authored: Wed Aug 19 21:55:56 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Wed Aug 19 21:55:56 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/atlas/web/AcceptList.java   |  2 +-
 .../sparql/engine/http/QueryEngineHTTP.java     | 26 +++++++++-
 .../java/org/apache/jena/fuseki/TestQuery.java  | 52 ++++++++++++++++++++
 3 files changed, 77 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/602e3c02/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java b/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
index 8801016..e3eb290 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
@@ -99,7 +99,7 @@ public class AcceptList
         return match(aItem) != null ;
     }
     
-    private List<MediaRange> entries()
+    public List<MediaRange> entries()
     {
         return Collections.unmodifiableList(ranges) ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/602e3c02/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 84c2c10..abe4d1f 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
@@ -87,6 +87,9 @@ public class QueryEngineHTTP implements QueryExecution {
     private String selectContentType    = defaultSelectHeader();
     private String askContentType       = defaultAskHeader();
     private String modelContentType     = defaultConstructHeader();
+    private String datasetContentType   = WebContent.defaultDatasetAcceptHeader;
+    
+    private String httpResponseContentType;
     /**
      * Supported content types for SELECT queries
      */
@@ -334,7 +337,11 @@ public class QueryEngineHTTP implements QueryExecution {
         this.authenticator = authenticator;
     }
 
-    @Override
+    public String getHttpResponseContentType() {
+		return httpResponseContentType;
+	}
+
+	@Override
     public ResultSet execSelect() {
         checkNotClosed() ;
         ResultSet rs = execResultSetInner() ;
@@ -360,6 +367,7 @@ public class QueryEngineHTTP implements QueryExecution {
         // Don't assume the endpoint actually gives back the content type we
         // asked for
         String actualContentType = httpQuery.getContentType();
+        httpResponseContentType = actualContentType;
 
         // If the server fails to return a Content-Type then we will assume
         // the server returned the type we asked for
@@ -441,6 +449,7 @@ public class QueryEngineHTTP implements QueryExecution {
         // Don't assume the endpoint actually gives back the content type we
         // asked for
         String actualContentType = httpQuery.getContentType();
+        httpResponseContentType = actualContentType;
 
         // If the server fails to return a Content-Type then we will assume
         // the server returned the type we asked for
@@ -468,6 +477,7 @@ public class QueryEngineHTTP implements QueryExecution {
         // Don't assume the endpoint actually gives back the content type we
         // asked for
         String actualContentType = httpQuery.getContentType();
+        httpResponseContentType = actualContentType;
 
         // If the server fails to return a Content-Type then we will assume
         // the server returned the type we asked for
@@ -488,12 +498,13 @@ public class QueryEngineHTTP implements QueryExecution {
     private Iterator<Quad> execQuads() {
         checkNotClosed() ;
         HttpQuery httpQuery = makeHttpQuery();
-        httpQuery.setAccept(WebContent.defaultDatasetAcceptHeader);
+        httpQuery.setAccept(datasetContentType);
         InputStream in = httpQuery.exec();
         
         // Don't assume the endpoint actually gives back the content type we
         // asked for
         String actualContentType = httpQuery.getContentType();
+        httpResponseContentType = actualContentType;
 
         // If the server fails to return a Content-Type then we will assume
         // the server returned the type we asked for
@@ -520,6 +531,7 @@ public class QueryEngineHTTP implements QueryExecution {
             // Don't assume the endpoint actually gives back the content type we
             // asked for
             String actualContentType = httpQuery.getContentType();
+            httpResponseContentType = actualContentType;
 
             // If the server fails to return a Content-Type then we will assume
             // the server returned the type we asked for
@@ -795,6 +807,16 @@ public class QueryEngineHTTP implements QueryExecution {
         modelContentType = contentType;
     }
     
+    public void setDatasetContentType(String contentType) {
+        // Check that this is a valid setting
+        Lang lang = RDFLanguages.contentTypeToLang(contentType);
+        if (lang == null)
+            throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not supported by RIOT");
+        if (!RDFLanguages.isQuads(lang))
+            throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not a RDF Dataset format");
+        datasetContentType = contentType;
+    }
+    
     private static final String selectContentTypeHeader = initSelectContentTypes() ;
 
     public static String defaultSelectHeader() {

http://git-wip-us.apache.org/repos/asf/jena/blob/602e3c02/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 e721d9d..5a57da3 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
@@ -31,18 +31,22 @@ import java.net.URL ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.atlas.web.MediaType;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.* ;
 import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.engine.http.QueryEngineHTTP ;
 import org.apache.jena.sparql.resultset.ResultSetCompare ;
 import org.apache.jena.sparql.sse.Item ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.apache.jena.sparql.sse.builders.BuilderResultSet ;
 import org.apache.jena.sparql.util.Convert ;
 import org.apache.jena.rdf.model.*;
+import org.apache.jena.riot.WebContent;
 import org.junit.AfterClass ;
 import org.junit.Assert ;
 import org.junit.BeforeClass ;
@@ -192,6 +196,36 @@ public class TestQuery extends BaseTest {
             assertEquals(1, result.size());
         }
     }
+    
+    @Test
+    public void query_construct_conneg()
+    {
+        String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
+        for (MediaType type: DEF.rdfOffer.entries()){
+            String contentType = type.toHeaderString();
+            try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+                qExec.setModelContentType(initConstructContentTypes( contentType ) );
+        	    qExec.execConstruct();
+                assertEquals( contentType , qExec.getHttpResponseContentType());
+            }
+        }
+    }
+    
+    @Test
+    public void query_construct_quad_conneg()
+    {
+        String queryString = " CONSTRUCT { GRAPH ?g {?s ?p ?o} } WHERE { GRAPH ?g {?s ?p ?o}}" ;
+        Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        for (MediaType type: DEF.quadsOffer.entries()){
+            String contentType = type.toHeaderString();
+            try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+                qExec.setDatasetContentType(initConstructContentTypes( contentType ) );
+        	    qExec.execConstructQuads();
+                assertEquals( contentType , qExec.getHttpResponseContentType());
+            }
+        }
+    }
+   
 
     private void execQuery(String queryString, int exceptedRowCount) {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
@@ -206,4 +240,22 @@ public class TestQuery extends BaseTest {
         boolean b = ResultSetCompare.equalsByTerm(rs, expectedResultSet) ;
         assertTrue("Result sets different", b) ;
     }
+    
+    private static String initConstructContentTypes(String... contentTypes) {
+        // Or use WebContent.defaultGraphAcceptHeader which is slightly
+        // narrower. Here, we have a tuned setting for SPARQL operations.
+        StringBuilder sBuff = new StringBuilder() ;
+        for (int i=0;i<contentTypes.length;i++ ){
+        	accumulateContentTypeString(sBuff, contentTypes[i], 1- i*0.1);
+        }
+        return sBuff.toString();
+    }
+
+    private static void accumulateContentTypeString(StringBuilder sBuff, String str, double v) {
+        if ( sBuff.length() != 0 )
+            sBuff.append(", ") ;
+        sBuff.append(str) ;
+        if ( v < 1 )
+            sBuff.append(";q=").append(v) ;
+    } 
 }


[05/50] jena git commit: Given Java 8 iterator loop can use forEachRemaining

Posted by an...@apache.org.
Given Java 8 iterator loop can use forEachRemaining

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

Branch: refs/heads/master
Commit: 4d8fd79008953b5f4b02021c61550f375cc0082a
Parents: 82ef69b
Author: confidencesun <co...@gmail.com>
Authored: Thu Jul 30 10:12:31 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Thu Jul 30 10:12:31 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/sparql/engine/QueryExecutionBase.java    | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4d8fd790/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 af66134..9a98b71 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
@@ -285,13 +285,7 @@ public class QueryExecutionBase implements QueryExecution
         checkNotClosed() ;
         try
         {
-            Iterator<Quad> it = execConstructQuads();
-                        
-            while (it.hasNext())
-            {
-                Quad q = it.next();
-                graph.add(q);
-            }
+        	execConstructQuads().forEachRemaining(graph::add);
         }
         finally
         {


[33/50] jena git commit: Removed unused imports (they cause warnings)

Posted by an...@apache.org.
Removed unused imports (they cause warnings)


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

Branch: refs/heads/master
Commit: 3ac6a5af4b1b042902936d7f8dc95051b788c399
Parents: d828c37
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Aug 17 16:15:36 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Aug 17 16:15:36 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/sparql/lang/arq/ARQParserBase.java    | 3 ---
 .../java/org/apache/jena/sparql/serializer/FmtTemplate.java    | 1 -
 .../java/org/apache/jena/fuseki/servlets/ResponseDataset.java  | 6 ------
 3 files changed, 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/3ac6a5af/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
index abfb512..d7af915 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
@@ -17,8 +17,6 @@
  */
 
 package org.apache.jena.sparql.lang.arq;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.jena.atlas.json.io.JSONHandler ;
@@ -33,7 +31,6 @@ import org.apache.jena.sparql.syntax.ElementGroup;
 import org.apache.jena.sparql.syntax.ElementNamedGraph;
 import org.apache.jena.sparql.syntax.ElementPathBlock;
 import org.apache.jena.sparql.syntax.Template;
-import org.apache.jena.util.PrintUtil;
 
 class ARQParserBase
     extends SPARQLParserBase

http://git-wip-us.apache.org/repos/asf/jena/blob/3ac6a5af/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
index 0621a8a..ba829cb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
@@ -25,7 +25,6 @@ import org.apache.jena.atlas.io.IndentedWriter;
 import org.apache.jena.sparql.core.BasicPattern;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.syntax.Template;
-import org.apache.jena.sparql.util.FmtUtils;
 
 public class FmtTemplate extends FormatterBase
     implements FormatterTemplate 

http://git-wip-us.apache.org/repos/asf/jena/blob/3ac6a5af/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
index 91d615d..e12493d 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
@@ -19,12 +19,6 @@
 package org.apache.jena.fuseki.servlets;
 
 import static org.apache.jena.riot.WebContent.charsetUTF8;
-import static org.apache.jena.riot.WebContent.contentTypeJSONLD;
-import static org.apache.jena.riot.WebContent.contentTypeNTriples;
-import static org.apache.jena.riot.WebContent.contentTypeRDFJSON;
-import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
-import static org.apache.jena.riot.WebContent.contentTypeTurtle;
-
 import java.util.HashMap;
 import java.util.Map;
 


[26/50] jena git commit: Merge commit 'refs/pull/89/head' of github.com:apache/jena into JENA-491-construct-quads

Posted by an...@apache.org.
Merge commit 'refs/pull/89/head' of github.com:apache/jena into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: bdb1101e53883634e9660eb214d3442cc0c74c28
Parents: c8528b7 6f39740
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Aug 17 14:02:51 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Aug 17 14:02:51 2015 +0100

----------------------------------------------------------------------
 jena-arq/Grammar/arq.jj                         |   38 +-
 jena-arq/Grammar/master.jj                      |   76 +
 .../constructquads/ExampleConstructQuads.java   |  199 ++
 .../main/java/org/apache/jena/query/Query.java  |    3 +-
 .../org/apache/jena/query/QueryExecution.java   |   23 +-
 .../jena/sparql/engine/QueryExecutionBase.java  |  110 +-
 .../sparql/engine/http/QueryEngineHTTP.java     |   11 +
 .../apache/jena/sparql/lang/arq/ARQParser.java  | 1797 +++++++++---------
 .../jena/sparql/lang/arq/ARQParserBase.java     |   27 +
 .../sparql/lang/arq/ARQParserConstants.java     | 1266 ++++++------
 .../sparql/lang/arq/ARQParserTokenManager.java  |    1 +
 .../jena/sparql/lang/arq/JavaCharStream.java    | 1234 ++++++------
 .../jena/sparql/lang/arq/ParseException.java    |  374 ++--
 .../org/apache/jena/sparql/lang/arq/Token.java  |    2 +-
 .../jena/sparql/lang/arq/TokenMgrError.java     |    2 +-
 .../sparql/lang/sparql_11/JavaCharStream.java   | 1234 ++++++------
 .../sparql/lang/sparql_11/ParseException.java   |  374 ++--
 .../lang/sparql_11/SPARQLParser11Constants.java | 1224 ++++++------
 .../jena/sparql/lang/sparql_11/Token.java       |    2 +-
 .../sparql/lang/sparql_11/TokenMgrError.java    |    2 +-
 .../jena/sparql/resultset/ResultsFormat.java    |   13 +
 .../jena/sparql/resultset/SPARQLResult.java     |   33 +-
 .../jena/sparql/serializer/FmtTemplate.java     |   47 +-
 .../org/apache/jena/sparql/syntax/Template.java |  137 +-
 .../org/apache/jena/sparql/api/TestAPI.java     |  262 ++-
 .../org/apache/jena/sparql/junit/QueryTest.java |  117 +-
 .../org/apache/jena/sparql/junit/TestItem.java  |   45 +-
 jena-arq/testing/ARQ/Construct/dft.ttl          |    2 +
 jena-arq/testing/ARQ/Construct/g1.ttl           |    3 +
 jena-arq/testing/ARQ/Construct/g2.ttl           |    2 +
 jena-arq/testing/ARQ/Construct/manifest.ttl     |  120 ++
 .../ARQ/Construct/q-construct-quad-dataset.arq  |    6 +
 .../q-construct-quad-default-graph-1.arq        |    6 +
 .../q-construct-quad-default-graph-2.arq        |    6 +
 .../Construct/q-construct-quad-named-graph.arq  |    6 +
 .../Construct/q-construct-quad-short-form-1.arq |    5 +
 .../Construct/q-construct-quad-short-form-2.arq |    5 +
 .../Construct/q-construct-quad-short-form-3.arq |    5 +
 .../ARQ/Construct/q-construct-quad-syntax-1.arq |    3 +
 .../ARQ/Construct/q-construct-quad-syntax-2.arq |    3 +
 .../ARQ/Construct/q-construct-quad-syntax-3.arq |    4 +
 .../ARQ/Construct/q-construct-quad-syntax-4.arq |    9 +
 .../ARQ/Construct/q-construct-quad-syntax-5.arq |    9 +
 .../ARQ/Construct/q-construct-quad-syntax-6.arq |   14 +
 .../ARQ/Construct/q-construct-quad-syntax-7.arq |    7 +
 .../ARQ/Construct/q-construct-quad-syntax-8.arq |    9 +
 .../Construct/results-construct-quad-data-2.ttl |    2 +
 .../results-construct-quad-dataset.trig         |    4 +
 .../results-construct-quad-default-graph.ttl    |    3 +
 .../results-construct-quad-named-graph.trig     |    3 +
 .../results-construct-quad-short-form-1.trig    |    3 +
 .../results-construct-quad-short-form-2.ttl     |    2 +
 .../results-construct-quad-short-form-3.trig    |    4 +
 .../results-construct-quad-syntax-1.trig        |    2 +
 .../results-construct-quad-syntax-2.trig        |    0
 .../results-construct-quad-syntax-3.ttl         |    2 +
 .../results-construct-quad-syntax-4.trig        |    6 +
 .../results-construct-quad-syntax-5.trig        |    6 +
 .../results-construct-quad-syntax-6.trig        |    6 +
 .../results-construct-quad-syntax-7.ttl         |    2 +
 .../results-construct-quad-syntax-8.trig        |    0
 .../testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl  |   69 +-
 .../Syntax-ARQ/syntax-quad-construct-01.arq     |    3 +
 .../Syntax-ARQ/syntax-quad-construct-02.arq     |    3 +
 .../Syntax-ARQ/syntax-quad-construct-03.arq     |    3 +
 .../Syntax-ARQ/syntax-quad-construct-04.arq     |    8 +
 .../Syntax-ARQ/syntax-quad-construct-05.arq     |    8 +
 .../Syntax-ARQ/syntax-quad-construct-06.arq     |   13 +
 .../Syntax-ARQ/syntax-quad-construct-07.arq     |    6 +
 .../Syntax-ARQ/syntax-quad-construct-08.arq     |    8 +
 .../Syntax-ARQ/syntax-quad-construct-09.arq     |    7 +
 .../Syntax-ARQ/syntax-quad-construct-10.arq     |    7 +
 .../Syntax-ARQ/syntax-quad-construct-11.arq     |    7 +
 .../Syntax-ARQ/syntax-quad-construct-12.arq     |    7 +
 .../Syntax-ARQ/syntax-quad-construct-bad-01.arq |    7 +
 jena-arq/testing/ARQ/Syntax/syn-arq.sh          |   82 +-
 76 files changed, 5274 insertions(+), 3886 deletions(-)
----------------------------------------------------------------------



[38/50] jena git commit: Add execConstructDadset(Dataset)

Posted by an...@apache.org.
Add execConstructDadset(Dataset)

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

Branch: refs/heads/master
Commit: 62bc52f87acd77156d18e42a541d00074c8178e3
Parents: fe19b4b
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:28:13 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:28:13 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/query/QueryExecution.java   | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/62bc52f8/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 2707675..5322ddd 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
@@ -102,15 +102,29 @@ public interface QueryExecution extends AutoCloseable
     public Iterator<Triple> execConstructTriples();
     
     /**
-     * Similar to execConstructTriples(), except that constructing {@link Quad}.
+     * Execute a CONSTRUCT query, returning the results as an iterator of {@link Quad}.
+     * <p>
+     * <b>Caution:</b> This method may return duplicate Quads.  This method may be useful if you only
+     * need the results for stream processing, as it can avoid having to place the results in a Model.
+     * </p>
+     * @return An iterator of Quad objects (possibly containing duplicates) generated
+     * by applying the CONSTRUCT template of the query to the bindings in the WHERE clause.
+     * </p>
+     * <p>
+     * See {@link #execConstructTriples} for usage and features.
      */
     public Iterator<Quad> execConstructQuads();
     
-    /**
-     * Similar to execConstructTriples(), except that constructing {@link Dataset}.
+    /** Execute a CONSTRUCT query, putting the statements into 'dataset'.
+     *  This maybe an exetended synatx query (if supported).   
      */
     public Dataset execConstructDataset();
 
+    /** Execute a CONSTRUCT query, putting the statements into 'dataset'.
+     *  This maybe an exetended synatx query (if supported).   
+     */
+    public Dataset execConstructDataset(Dataset dataset);
+    
     /** Execute a DESCRIBE query */
     public Model execDescribe();
 


[03/50] jena git commit: fix bugs for qparse of JENA-491

Posted by an...@apache.org.
fix bugs for qparse of JENA-491

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

Branch: refs/heads/master
Commit: 68254a2be094342aec75ff6e7028af5ab36e3b61
Parents: 9920b52
Author: confidencesun <co...@gmail.com>
Authored: Wed Jul 29 11:29:51 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Wed Jul 29 11:29:51 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 10 +++++++-
 .../jena/sparql/lang/arq/ARQParserBase.java     |  6 +++--
 .../jena/sparql/serializer/FmtTemplate.java     | 26 +++++++++++++++++---
 .../org/apache/jena/sparql/syntax/Template.java | 19 +++++++++++++-
 4 files changed, 54 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/68254a2b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index ae724ec..4ef097e 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -65,6 +65,7 @@ public class ExampleConstructQuads {
 		Iterator<Quad> quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		// construct default graph 1
 		System.out.println("construct default graph 1:");
@@ -74,6 +75,7 @@ public class ExampleConstructQuads {
 		quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		// construct default graph 2
 		System.out.println("construct default graph 2:");
@@ -83,6 +85,7 @@ public class ExampleConstructQuads {
 		quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		// construct triples
 		System.out.println("construct default graph 2:");
@@ -92,6 +95,7 @@ public class ExampleConstructQuads {
 		Iterator<Triple> triples = qexec.execConstructTriples();
 		PrintUtil.printOut(triples);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		//construct dataset
 		System.out.println("construct dataset:");
@@ -101,6 +105,7 @@ public class ExampleConstructQuads {
 		Dataset d = qexec.execConstructDataset();
 		RDFDataMgr.write(System.out, d, Lang.TRIG) ;
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		//short form 1
 		System.out.println("short form 1:");
@@ -110,6 +115,7 @@ public class ExampleConstructQuads {
 		quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		//short form 2
 		System.out.println("short form 2:");
@@ -119,6 +125,7 @@ public class ExampleConstructQuads {
 		quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		//short form 3
 		System.out.println("short form 3:");
@@ -128,6 +135,7 @@ public class ExampleConstructQuads {
 		triples = qexec.execConstructTriples();
 		PrintUtil.printOut(triples);
 		qexec.close();
+		arq.qparse.main("--in", "arq", queryString);
 		
 		//short form 4
 		System.out.println("short form 4:");
@@ -137,7 +145,7 @@ public class ExampleConstructQuads {
 		quads = qexec.execConstructQuads();
 		PrintUtil.printOut(quads);
 		qexec.close();
-		
+		arq.qparse.main("--in", "arq", queryString);
 
 	}
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/68254a2b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
index 3a11805..eac508e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
@@ -93,8 +93,10 @@ class ARQParserBase
         }
         for(Node n: graphs.keySet()){
           Element el = new ElementPathBlock(graphs.get(n));
-          if(! Quad.defaultGraphIRI.equals(n) ){
-            el = new ElementNamedGraph(n, el);
+          if(! Quad.defaultGraphNodeGenerated.equals(n) ){
+        	ElementGroup e = new ElementGroup();
+        	e.addElement(el);
+            el = new ElementNamedGraph(n, e);
           }
           elg.addElement(el);
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/68254a2b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
index a1b65fd..d422d1c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
@@ -18,9 +18,10 @@
 
 package org.apache.jena.sparql.serializer;
 
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
-import org.apache.jena.atlas.io.IndentedWriter ;
-import org.apache.jena.sparql.syntax.Template ;
+import org.apache.jena.atlas.io.IndentedLineBuffer;
+import org.apache.jena.atlas.io.IndentedWriter;
+import org.apache.jena.sparql.syntax.Template;
+import org.apache.jena.sparql.util.FmtUtils;
 
 public class FmtTemplate extends FormatterBase
     implements FormatterTemplate 
@@ -51,6 +52,19 @@ public class FmtTemplate extends FormatterBase
     @Override
     public void format(Template template)
     {
+    	
+    	if (template.isConstructQuadTemplate()){
+            out.print("{") ;
+            out.incIndent(INDENT) ;
+            out.pad() ;
+            
+    		out.print("GRAPH");
+    		out.print(" ");
+    		out.print(FmtUtils.stringForNode(template.getGraphNode()));
+    		out.print(" ");
+    	}
+    	
+    
         out.print("{") ;
         out.incIndent(INDENT) ;
         out.pad() ;
@@ -60,6 +74,12 @@ public class FmtTemplate extends FormatterBase
         out.decIndent(INDENT) ;
         out.print("}") ;
         out.newline() ;
+        
+    	if (template.isConstructQuadTemplate()){
+            out.decIndent(INDENT) ;
+            out.print("}") ;
+            out.newline() ;
+    	}
 
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/68254a2b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index 248ce7e..eb970c1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -53,6 +53,17 @@ public class Template
     	this.bgp = bgp;
     	this.qp = null;
     }
+    
+    public boolean isConstructQuadTemplate(){
+    	return this.qp != null && ! this.getQuads().isEmpty();
+    }
+    
+    public Node getGraphNode() {
+    	if (!this.isConstructQuadTemplate()){
+    		return null;
+    	}
+    	return this.getQuads().get(0).getGraph();
+    }
 
 //    public void addTriple(Triple t) { quads.addTriple(t) ; }
 //    public int mark() { return quads.mark() ; }
@@ -123,9 +134,15 @@ public class Template
         hash = hashNode(quad.getSubject())   ^ hash<<1 ;
         hash = hashNode(quad.getPredicate()) ^ hash<<1 ;
         hash = hashNode(quad.getObject())    ^ hash<<1 ;
-        hash = hashNode(quad.getGraph())     ^ hash<<1 ;
+        hash = hashGraph(quad.getGraph())    ^ hash<<1 ;
         return hash ;
     }
+    
+    private static int hashGraph(Node node){
+    	if ( node == null ) return Quad.defaultGraphNodeGenerated.hashCode() ; 
+        if ( node.isBlank() ) return 59 ;
+        return node.hashCode() ;
+    }
 
     private static int hashNode(Node node)
     {


[37/50] jena git commit: Remove unused imports

Posted by an...@apache.org.
Remove unused imports

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

Branch: refs/heads/master
Commit: fe19b4b1b5cfbfdf956a07370e0622071cebda26
Parents: 077a413
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 09:40:53 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 09:40:53 2015 +0100

----------------------------------------------------------------------
 .../src/test/java/org/apache/jena/fuseki/TestQuery.java  | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/fe19b4b1/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 1c496f0..7436e7a 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
@@ -18,12 +18,7 @@
 
 package org.apache.jena.fuseki ;
 
-import static org.apache.jena.fuseki.ServerTest.gn1 ;
-import static org.apache.jena.fuseki.ServerTest.gn2 ;
-import static org.apache.jena.fuseki.ServerTest.model1 ;
-import static org.apache.jena.fuseki.ServerTest.model2 ;
-import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
-import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.* ;
 
 import java.io.IOException ;
 import java.net.HttpURLConnection ;
@@ -31,11 +26,11 @@ import java.net.URL ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.atlas.web.MediaType;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.* ;
+import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.binding.Binding ;
@@ -45,8 +40,6 @@ import org.apache.jena.sparql.sse.Item ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.apache.jena.sparql.sse.builders.BuilderResultSet ;
 import org.apache.jena.sparql.util.Convert ;
-import org.apache.jena.rdf.model.*;
-import org.apache.jena.riot.WebContent;
 import org.junit.AfterClass ;
 import org.junit.Assert ;
 import org.junit.BeforeClass ;


[20/50] jena git commit: Merge branch 'master' into JENA-491-construct-quads

Posted by an...@apache.org.
Merge branch 'master' into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: c8528b7b9f08fc100d4cc6a284988afae45d0bde
Parents: f5150d4 957959c
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Aug 12 09:50:05 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Aug 12 09:50:05 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/osgi/test/JenaOSGITest.java | 36 ++++++++++----------
 .../ontology/classHierarchy/ClassHierarchy.java |  8 ++---
 .../examples/ontology/classHierarchy/Main.java  |  4 +--
 .../ontology/describeClass/DescribeClass.java   |  6 ++--
 .../examples/ontology/describeClass/Main.java   |  4 +--
 .../jena/examples/rdf/Tutorial01.java           |  4 +--
 .../jena/examples/rdf/Tutorial02.java           |  4 +--
 .../jena/examples/rdf/Tutorial03.java           |  4 +--
 .../jena/examples/rdf/Tutorial04.java           |  4 +--
 .../jena/examples/rdf/Tutorial05.java           |  4 +--
 .../jena/examples/rdf/Tutorial06.java           |  6 ++--
 .../jena/examples/rdf/Tutorial07.java           |  6 ++--
 .../jena/examples/rdf/Tutorial08.java           |  6 ++--
 .../jena/examples/rdf/Tutorial09.java           |  4 +--
 .../jena/examples/rdf/Tutorial10.java           |  6 ++--
 .../jena/examples/rdf/Tutorial11.java           |  4 +--
 .../java/org/apache/jena/fuseki/FusekiCmd.java  |  1 -
 .../src-examples/tdb/examples/ExQuadFilter.java | 20 +++++------
 jena-tdb/src-examples/tdb/examples/ExTDB1.java  |  6 ++--
 jena-tdb/src-examples/tdb/examples/ExTDB2.java  |  4 +--
 jena-tdb/src-examples/tdb/examples/ExTDB3.java  | 18 +++++-----
 jena-tdb/src-examples/tdb/examples/ExTDB4.java  | 16 ++++-----
 jena-tdb/src-examples/tdb/examples/ExTDB5.java  | 16 ++++-----
 jena-tdb/src-examples/tdb/examples/ExTDB6.java  | 16 ++++-----
 .../src-examples/tdb/examples/ExTDB_Txn1.java   | 18 +++++-----
 .../src-examples/tdb/examples/ExTDB_Txn2.java   | 18 +++++-----
 .../src-examples/tdb/examples/ExTDB_Txn3.java   |  8 ++---
 27 files changed, 125 insertions(+), 126 deletions(-)
----------------------------------------------------------------------



[13/50] jena git commit: Add test support in QueryTest for Construct Quad: 1) define new type of SPARQLResult for Dataset; 2) define new ResultsFormat of Trig for Dataset results;

Posted by an...@apache.org.
Add test support in QueryTest for Construct Quad: 1) define new type of
SPARQLResult for Dataset; 2) define new ResultsFormat of Trig for
Dataset results; 

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

Branch: refs/heads/master
Commit: 6b695c59166a25a999840873bfb0af1c4198b202
Parents: 50a65c3
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 10 16:59:20 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 10 16:59:20 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/Query.java  |   3 +-
 .../jena/sparql/resultset/ResultsFormat.java    |  13 +++
 .../jena/sparql/resultset/SPARQLResult.java     |  33 +++++-
 .../org/apache/jena/sparql/syntax/Template.java |  11 +-
 .../org/apache/jena/sparql/junit/QueryTest.java | 117 ++++++++++++++-----
 .../org/apache/jena/sparql/junit/TestItem.java  |  45 ++++---
 6 files changed, 165 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/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 914e626..f0d6233 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
@@ -146,7 +146,8 @@ public class Query extends Prologue implements Cloneable, Printable
     public boolean isAskType()                  { return queryType == QueryTypeAsk ; }
 
     public boolean isUnknownType()              { return queryType == QueryTypeUnknown ; }
-
+    
+    public boolean isConstructQuad()            { return isConstructType() && constructTemplate.containsRealQuad() ; }
     // It was a mistake to extend Prologue ... but what is done is done.
     public Prologue getPrologue()               { return this ; }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
index 2a103cf..c23cfad 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java
@@ -63,7 +63,9 @@ public class ResultsFormat extends Symbol
     static public ResultsFormat FMT_RDF_TTL      = new ResultsFormat(contentTypeTurtle) ;
     static public ResultsFormat FMT_RDF_TURTLE   = new ResultsFormat(contentTypeTurtle) ;
     static public ResultsFormat FMT_RDF_NT       = new ResultsFormat(contentTypeNTriples) ;
+    static public ResultsFormat FMT_TRIG         = new ResultsFormat(contentTypeTriG) ;
     static public ResultsFormat FMT_UNKNOWN      = new ResultsFormat("unknown") ;
+    
     // ---- Compatibility
     
     // Common names to symbol (used by arq.rset)
@@ -95,6 +97,8 @@ public class ResultsFormat extends Symbol
         names.put("graph",       FMT_RDF_TTL) ;
         names.put("nt",          FMT_RDF_NT) ;
         names.put("n-triples",   FMT_RDF_NT) ;
+        
+        names.put("trig",        FMT_TRIG) ;
 
     }
 
@@ -112,6 +116,11 @@ public class ResultsFormat extends Symbol
         return false ;
     }
     
+    public static boolean isDatasetSyntax(ResultsFormat fmt){
+    	if ( FMT_TRIG.equals(fmt) ) return true ;
+    	return false;
+    }
+    
     public static ResultsFormat guessSyntax(String url, ResultsFormat defaultFormat)
     {
         // -- XML
@@ -153,6 +162,10 @@ public class ResultsFormat extends Symbol
         if ( url.endsWith(".tsv") )
             return FMT_RS_TSV ;
         
+        // Trig for Dataset
+        if ( url.endsWith(".trig") )
+            return FMT_TRIG ;
+        
         return defaultFormat ;
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/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 1506e44..bbc5c55 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,12 +18,13 @@
 
 package org.apache.jena.sparql.resultset;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.ResultSet ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.binding.BindingMap ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.BindingMap;
 
 /**
  * The class "ResultSet" is reserved for the SELECT result format.
@@ -37,6 +38,7 @@ public class SPARQLResult
     private ResultSet resultSet = null ;
     private Boolean booleanResult = null ;
     private Model model = null ;
+    private Dataset dataset = null ;
     
     // Delayed choice of result type.
     protected SPARQLResult() {}
@@ -44,6 +46,7 @@ public class SPARQLResult
     public SPARQLResult(Model model)            { set(model) ; }
     public SPARQLResult(ResultSet resultSet)    { set(resultSet) ;}
     public SPARQLResult(boolean booleanResult)  { set(booleanResult) ; }
+    public SPARQLResult(Dataset dataset)        { set(dataset) ; }
     
     public boolean isResultSet()
     {
@@ -61,6 +64,13 @@ public class SPARQLResult
             throw new ResultSetException("Not set") ;
         return model != null ;
     }
+    
+    public boolean isDataset()
+    {
+        if ( ! hasBeenSet )
+            throw new ResultSetException("Not set") ;
+        return dataset != null ;
+    }
 
     public boolean isBoolean()
     {
@@ -96,6 +106,14 @@ public class SPARQLResult
         return model ;
     }
     
+    public Dataset getDataset() { 
+        if ( ! hasBeenSet )
+            throw new ResultSetException("Not set") ;
+        if ( ! isDataset() )
+            throw new ResultSetException("Not a dataset result") ;
+        return dataset ;
+    }
+    
     public boolean isHasBeenSet() { return hasBeenSet; }
     
     protected void set(ResultSet rs)
@@ -107,6 +125,9 @@ public class SPARQLResult
     protected void set(Model m)
     { model = m ; hasBeenSet = true ; }
     
+    protected void set(Dataset d)
+    { dataset = d ; hasBeenSet = true ; }
+    
     protected void set(boolean r)
     { set (new Boolean(r)) ; } 
     

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index 3955866..a6e74d8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.BasicPattern;
@@ -65,6 +64,16 @@ public class Template
 //    public void addTriplePath(int index, TriplePath path)
 //    { throw new ARQException("Triples-only collector") ; }
 
+    
+    public boolean containsRealQuad(){
+    	for(Quad quad : this.getQuads()){
+    		if ( ! Quad.defaultGraphNodeGenerated.equals( quad.getGraph())){
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    
     public BasicPattern getBGP()
     { 
     	if (this.bgp != null){

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
index 89844e1..519316f 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/junit/QueryTest.java
@@ -18,35 +18,55 @@
 
 package org.apache.jena.sparql.junit;
 
-import java.io.IOException ;
-import java.io.PrintStream ;
-import java.io.PrintWriter ;
-import java.util.* ;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.riot.checker.CheckerLiterals ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.sparql.SystemARQ ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.QueryIterator ;
-import org.apache.jena.sparql.engine.ResultSetStream ;
-import org.apache.jena.sparql.engine.binding.Binding ;
-import org.apache.jena.sparql.engine.binding.BindingFactory ;
-import org.apache.jena.sparql.engine.binding.BindingMap ;
-import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper ;
-import org.apache.jena.sparql.expr.nodevalue.NodeFunctions ;
-import org.apache.jena.sparql.resultset.RDFOutput ;
-import org.apache.jena.sparql.resultset.ResultSetCompare ;
-import org.apache.jena.sparql.resultset.SPARQLResult ;
-import org.apache.jena.sparql.util.DatasetUtils ;
-import org.apache.jena.sparql.vocabulary.ResultSetGraphVocab ;
-import org.apache.jena.util.FileUtils ;
-import org.apache.jena.util.junit.TestUtils ;
-import org.apache.jena.vocabulary.RDF ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryException;
+import org.apache.jena.query.QueryExecution;
+import org.apache.jena.query.QueryExecutionFactory;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.query.ResultSetRewindable;
+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.Statement;
+import org.apache.jena.rdf.model.StmtIterator;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.riot.checker.CheckerLiterals;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.SystemARQ;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.QueryIterator;
+import org.apache.jena.sparql.engine.ResultSetStream;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.engine.binding.BindingFactory;
+import org.apache.jena.sparql.engine.binding.BindingMap;
+import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper;
+import org.apache.jena.sparql.expr.nodevalue.NodeFunctions;
+import org.apache.jena.sparql.resultset.RDFOutput;
+import org.apache.jena.sparql.resultset.ResultSetCompare;
+import org.apache.jena.sparql.resultset.SPARQLResult;
+import org.apache.jena.sparql.util.DatasetUtils;
+import org.apache.jena.sparql.util.IsoMatcher;
+import org.apache.jena.sparql.vocabulary.ResultSetGraphVocab;
+import org.apache.jena.util.FileUtils;
+import org.apache.jena.util.junit.TestUtils;
+import org.apache.jena.vocabulary.RDF;
 
 public class QueryTest extends EarlTestCase
 {
@@ -348,8 +368,13 @@ public class QueryTest extends EarlTestCase
    void runTestConstruct(Query query, QueryExecution qe)
     {
         // Do the query!
-        Model resultsActual = qe.execConstruct() ;
-        compareGraphResults(resultsActual, query) ;
+	    if ( query.isConstructQuad() ){
+	    	Dataset resultActual = qe.execConstructDataset();
+	    	compareDatasetResults(resultActual, query) ;
+	    } else {
+	    	Model resultsActual = qe.execConstruct() ;
+	    	compareGraphResults(resultsActual, query) ;
+	    }
     }
    
    private void compareGraphResults(Model resultsActual, Query query)
@@ -373,6 +398,28 @@ public class QueryTest extends EarlTestCase
             }
         }
     }
+   
+   private void compareDatasetResults(Dataset resultsActual, Query query)
+   {
+        if ( results != null )
+        {
+            try {
+                if ( ! results.isDataset() )
+                    fail("Expected results are not a graph: "+testItem.getName()) ;
+                    
+                Dataset resultsExpected = results.getDataset() ;
+                if ( ! IsoMatcher.isomorphic( resultsExpected.asDatasetGraph(),resultsActual.asDatasetGraph() ) )
+                {
+                    printFailedDatasetTest(query, resultsExpected, resultsActual) ;
+                    fail("Results do not match: "+testItem.getName()) ;
+                }
+            } catch (Exception ex)
+            {
+                String typeName = (query.isConstructType()?"construct":"describe") ;
+                fail("Exception in result testing ("+typeName+"): "+ex) ;
+            }
+        }
+    }
     
     void runTestDescribe(Query query, QueryExecution qe)
     {
@@ -448,6 +495,16 @@ public class QueryTest extends EarlTestCase
         out.println() ;
     }
     
+    void printFailedDatasetTest(Query query, Dataset expected, Dataset results)
+    {
+    	System.out.println("=======================================") ;
+    	System.out.println("Failure: "+description()) ;
+    	RDFDataMgr.write(System.out, results, Lang.TRIG);
+    	System.out.println("---------------------------------------") ;
+    	RDFDataMgr.write(System.out, expected, Lang.TRIG);
+        System.out.println() ;
+    }
+    
     @Override
     public String toString()
     { 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b695c59/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java b/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
index b6bcf05..c6a4c40 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/junit/TestItem.java
@@ -18,25 +18,27 @@
 
 package org.apache.jena.sparql.junit ;
 
-import java.util.ArrayList ;
-import java.util.List ;
-
-import org.apache.jena.query.ResultSetFactory ;
-import org.apache.jena.query.Syntax ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.rdf.model.Resource ;
-import org.apache.jena.rdf.model.Statement ;
-import org.apache.jena.sparql.resultset.ResultsFormat ;
-import org.apache.jena.sparql.resultset.SPARQLResult ;
-import org.apache.jena.sparql.vocabulary.TestManifest ;
-import org.apache.jena.sparql.vocabulary.TestManifestX ;
-import org.apache.jena.sparql.vocabulary.VocabTestQuery ;
-import org.apache.jena.util.FileManager ;
-import org.apache.jena.util.iterator.ClosableIterator ;
-import org.apache.jena.util.junit.TestException ;
-import org.apache.jena.util.junit.TestUtils ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.ResultSetFactory;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.sparql.resultset.ResultsFormat;
+import org.apache.jena.sparql.resultset.SPARQLResult;
+import org.apache.jena.sparql.vocabulary.TestManifest;
+import org.apache.jena.sparql.vocabulary.TestManifestX;
+import org.apache.jena.sparql.vocabulary.VocabTestQuery;
+import org.apache.jena.util.FileManager;
+import org.apache.jena.util.iterator.ClosableIterator;
+import org.apache.jena.util.junit.TestException;
+import org.apache.jena.util.junit.TestUtils;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.RDFS;
 
 /**
  * Wrapper class for individual test items. Assumes it is a query test item,
@@ -151,6 +153,11 @@ public class TestItem
             Model m = FileManager.get().loadModel(resultFile) ;
             return new SPARQLResult(m) ;
         }
+        
+        if ( ResultsFormat.isDatasetSyntax(format) ) {
+            Dataset d = RDFDataMgr.loadDataset(resultFile) ;
+            return new SPARQLResult(d) ;
+        }
 
         // Attempt to handle as a resulset or boolean result.s
         SPARQLResult x = ResultSetFactory.result(resultFile) ;


[44/50] jena git commit: Correct log message

Posted by an...@apache.org.
Correct log message

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

Branch: refs/heads/master
Commit: f308d43555d5c32edc90a6551851f3f0e2dcd934
Parents: 4ddf9ec
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:32:49 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:32:49 2015 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f308d435/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 8e81426..c43b257 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
@@ -316,7 +316,7 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
 
         if ( query.isConstructType() ) {
             Dataset dataset = queryExecution.execConstructDataset();
-            action.log.info(format("[%d] exec/construct/dataset", action.id));
+            action.log.info(format("[%d] exec/construct", action.id));
             return new SPARQLResult(dataset);
         }
 


[22/50] jena git commit: Add tests of duplicated quads in construct quad

Posted by an...@apache.org.
Add tests of duplicated quads in construct quad

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

Branch: refs/heads/master
Commit: 54e48f3e8e3734d495bc399a2133eb9e25f24491
Parents: 03a321f
Author: confidencesun <co...@gmail.com>
Authored: Fri Aug 14 18:53:01 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Fri Aug 14 18:53:01 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/sparql/api/TestAPI.java     | 36 +++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/54e48f3e/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 5393cda..ecc576a 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
@@ -369,7 +369,7 @@ public class TestAPI extends BaseTest
         DatasetGraph expected = DatasetGraphFactory.createMem();
         expected.add(g1.asNode(), s.asNode(), p.asNode(), o.asNode());
         
-        assertEquals(1, count); // 3 duplicated quads
+        assertEquals(1, count); 
         assertTrue(IsoMatcher.isomorphic( expected, result) );
         
     }
@@ -414,6 +414,40 @@ public class TestAPI extends BaseTest
         assertTrue(dft.isIsomorphicWith(result));
     }
     
+    
+    // Allow duplicated quads in execConstructQuads()
+    @Test public void testARQConstructQuad_Duplicate_1() {
+        String queryString = "CONSTRUCT { GRAPH ?g1 {?s ?p ?o} } WHERE { ?s ?p ?o. GRAPH ?g1 {?s1 ?p1 ?o1} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Quad> ts = qExec.execConstructQuads();
+        long count = 0;
+        Quad expected = Quad.create( g1.asNode(), s.asNode(), p.asNode(), o.asNode());
+        while (ts.hasNext()) {
+            count++;
+            Quad qd = ts.next();
+            assertEquals(expected, qd);
+        }
+        assertEquals(3, count); // 3 duplicated quads
+    }
+    
+    // No duplicated quads in execConstructDataset()
+    @Test public void testARQConstructQuad_Duplicate_2() {
+        String queryString = "CONSTRUCT { GRAPH ?g1 {?s ?p ?o} } WHERE { ?s ?p ?o. GRAPH ?g1 {?s1 ?p1 ?o1} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Dataset result = qExec.execConstructDataset();
+
+        DatasetGraph expected = DatasetGraphFactory.createMem();
+        expected.add(g1.asNode(), s.asNode(), p.asNode(), o.asNode());
+        assertEquals(1, result.asDatasetGraph().size());
+        assertTrue(IsoMatcher.isomorphic( expected, result.asDatasetGraph()) );
+    }
+    
     private QueryExecution makeQExec(String queryString)
     {
         Query q = QueryFactory.create(queryString) ;


[02/50] jena git commit: Merge pull request #11 from confidencesun/JENA-491

Posted by an...@apache.org.
Merge pull request #11 from confidencesun/JENA-491

pull Jena 491

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

Branch: refs/heads/master
Commit: 9920b52b5614e48dca4bf5f96bc493b466a991bd
Parents: 1ce0497 e398c4e
Author: confidencesun <co...@gmail.com>
Authored: Tue Jul 28 16:41:24 2015 -0300
Committer: confidencesun <co...@gmail.com>
Committed: Tue Jul 28 16:41:24 2015 -0300

----------------------------------------------------------------------
 jena-arq/Grammar/arq.jj                         |  3 +-
 jena-arq/Grammar/master.jj                      |  5 +-
 .../constructquads/ExampleConstructQuads.java   |  6 ++-
 .../org/apache/jena/query/QueryExecution.java   | 13 -----
 .../apache/jena/sparql/lang/arq/ARQParser.java  | 51 ++++++++++----------
 .../sparql/lang/arq/ARQParserTokenManager.java  |  1 +
 6 files changed, 37 insertions(+), 42 deletions(-)
----------------------------------------------------------------------



[47/50] jena git commit: Merge branch 'master' into JENA-491-construct-quads

Posted by an...@apache.org.
Merge branch 'master' into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: d5a3f8b55d4f2315b31bc9b3e59ef04625498453
Parents: a8d40b1 b54af5d
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 13:06:05 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 13:06:05 2015 +0100

----------------------------------------------------------------------

----------------------------------------------------------------------



[28/50] jena git commit: Merge commit 'refs/pull/91/head' of github.com:apache/jena into JENA-491-construct-quads

Posted by an...@apache.org.
Merge commit 'refs/pull/91/head' of github.com:apache/jena into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: d828c378a8d75595b05607bb1688b106c56930e3
Parents: 5aa889c 69f1ee2
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Aug 17 14:03:30 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Aug 17 14:03:30 2015 +0100

----------------------------------------------------------------------
 .../sparql/engine/http/QueryEngineHTTP.java     |  30 +-
 .../main/java/org/apache/jena/fuseki/DEF.java   |   7 +
 .../jena/fuseki/servlets/ResponseDataset.java   | 134 +++
 .../jena/fuseki/servlets/SPARQL_Query.java      | 838 ++++++++++---------
 .../java/org/apache/jena/fuseki/TestQuery.java  | 188 ++---
 5 files changed, 719 insertions(+), 478 deletions(-)
----------------------------------------------------------------------



[30/50] jena git commit: JENA-491 Fuseki Support: minor formatting for SPARQL_Query.java

Posted by an...@apache.org.
JENA-491 Fuseki Support: minor formatting for SPARQL_Query.java

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

Branch: refs/heads/master
Commit: 5939a351616d5e588835b9a265dd568f2087148b
Parents: c7dedb2
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 17 21:32:55 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 17 21:32:55 2015 +0800

----------------------------------------------------------------------
 .../jena/fuseki/servlets/SPARQL_Query.java      | 121 +++++++++----------
 1 file changed, 54 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/5939a351/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 8a2195e..cd0c410 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
@@ -18,61 +18,48 @@
 
 package org.apache.jena.fuseki.servlets ;
 
-import static java.lang.String.format;
-import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts;
-import static org.apache.jena.riot.WebContent.ctHTMLForm;
-import static org.apache.jena.riot.WebContent.ctSPARQLQuery;
-import static org.apache.jena.riot.WebContent.isHtmlForm;
-import static org.apache.jena.riot.WebContent.matchContentType;
-import static org.apache.jena.riot.web.HttpNames.paramAccept;
-import static org.apache.jena.riot.web.HttpNames.paramCallback;
-import static org.apache.jena.riot.web.HttpNames.paramDefaultGraphURI;
-import static org.apache.jena.riot.web.HttpNames.paramForceAccept;
-import static org.apache.jena.riot.web.HttpNames.paramNamedGraphURI;
-import static org.apache.jena.riot.web.HttpNames.paramOutput1;
-import static org.apache.jena.riot.web.HttpNames.paramOutput2;
-import static org.apache.jena.riot.web.HttpNames.paramQuery;
-import static org.apache.jena.riot.web.HttpNames.paramQueryRef;
-import static org.apache.jena.riot.web.HttpNames.paramStyleSheet;
-import static org.apache.jena.riot.web.HttpNames.paramTimeout;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.jena.atlas.io.IO;
-import org.apache.jena.atlas.io.IndentedLineBuffer;
-import org.apache.jena.atlas.web.AcceptList;
-import org.apache.jena.atlas.web.ContentType;
-import org.apache.jena.atlas.web.MediaType;
-import org.apache.jena.fuseki.DEF;
-import org.apache.jena.fuseki.Fuseki;
-import org.apache.jena.fuseki.FusekiException;
-import org.apache.jena.fuseki.FusekiLib;
-import org.apache.jena.fuseki.conneg.WebLib;
-import org.apache.jena.query.Dataset;
-import org.apache.jena.query.Query;
-import org.apache.jena.query.QueryCancelledException;
-import org.apache.jena.query.QueryException;
-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.ResultSet;
-import org.apache.jena.query.Syntax;
-import org.apache.jena.rdf.model.Model;
-import org.apache.jena.riot.web.HttpNames;
-import org.apache.jena.riot.web.HttpOp;
-import org.apache.jena.sparql.core.Prologue;
-import org.apache.jena.sparql.resultset.SPARQLResult;
-import org.apache.jena.web.HttpSC;
+import static java.lang.String.format ;
+import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts ;
+import static org.apache.jena.riot.WebContent.ctHTMLForm ;
+import static org.apache.jena.riot.WebContent.ctSPARQLQuery ;
+import static org.apache.jena.riot.WebContent.isHtmlForm ;
+import static org.apache.jena.riot.WebContent.matchContentType ;
+import static org.apache.jena.riot.web.HttpNames.paramAccept ;
+import static org.apache.jena.riot.web.HttpNames.paramCallback ;
+import static org.apache.jena.riot.web.HttpNames.paramDefaultGraphURI ;
+import static org.apache.jena.riot.web.HttpNames.paramForceAccept ;
+import static org.apache.jena.riot.web.HttpNames.paramNamedGraphURI ;
+import static org.apache.jena.riot.web.HttpNames.paramOutput1 ;
+import static org.apache.jena.riot.web.HttpNames.paramOutput2 ;
+import static org.apache.jena.riot.web.HttpNames.paramQuery ;
+import static org.apache.jena.riot.web.HttpNames.paramQueryRef ;
+import static org.apache.jena.riot.web.HttpNames.paramStyleSheet ;
+import static org.apache.jena.riot.web.HttpNames.paramTimeout ;
+
+import java.io.IOException ;
+import java.io.InputStream ;
+import java.util.* ;
+
+import javax.servlet.http.HttpServletRequest ;
+import javax.servlet.http.HttpServletResponse ;
+
+import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.web.AcceptList ;
+import org.apache.jena.atlas.web.ContentType ;
+import org.apache.jena.atlas.web.MediaType ;
+import org.apache.jena.fuseki.DEF ;
+import org.apache.jena.fuseki.Fuseki ;
+import org.apache.jena.fuseki.FusekiException ;
+import org.apache.jena.fuseki.FusekiLib ;
+import org.apache.jena.fuseki.conneg.WebLib ;
+import org.apache.jena.query.* ;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.riot.web.HttpNames ;
+import org.apache.jena.riot.web.HttpOp ;
+import org.apache.jena.sparql.core.Prologue ;
+import org.apache.jena.sparql.resultset.SPARQLResult ;
+import org.apache.jena.web.HttpSC ;
 
 /** Handle SPARQL Query requests overt eh SPARQL Protocol. 
  * Subclasses provide this algorithm with the actual dataset to query, whether
@@ -332,18 +319,18 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
         }
 
         if ( query.isConstructType() ) {
-        	
+            
             MediaType rdfMediaType = AcceptList.match( DEF.pureRdfOffer, new AcceptList( WebLib.getAccept(action.getRequest())));
-		    
-			if ( ! rdfMediaType.getType().equals("*") ) {
-			    Model model = queryExecution.execConstruct();
-			    action.log.info(format("[%d] exec/construct/model", action.id));
-			    return new SPARQLResult(model);
-			} else  {
-			    Dataset dataset = queryExecution.execConstructDataset();
-			    action.log.info(format("[%d] exec/construct/dataset", action.id));
-			    return new SPARQLResult(dataset);
-		    }
+            
+            if ( ! rdfMediaType.getType().equals("*") ) {
+                Model model = queryExecution.execConstruct();
+                action.log.info(format("[%d] exec/construct/model", action.id));
+                return new SPARQLResult(model);
+            } else  {
+                Dataset dataset = queryExecution.execConstructDataset();
+                action.log.info(format("[%d] exec/construct/dataset", action.id));
+                return new SPARQLResult(dataset);
+            }
         }
 
         if ( query.isDescribeType() ) {
@@ -409,7 +396,7 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
         else if ( result.isBoolean() )
             ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
         else if ( result.isDataset() )
-        	ResponseDataset.doResponseDataset(action, result.getDataset());
+            ResponseDataset.doResponseDataset(action, result.getDataset());
         else
             ServletOps.errorOccurred("Unknown or invalid result type") ;
     }


[29/50] jena git commit: JENA-491 Fuseki Support: repair formatting of SPARQL_Query.java and TestQuery.java

Posted by an...@apache.org.
JENA-491 Fuseki Support: repair formatting of SPARQL_Query.java and
TestQuery.java

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

Branch: refs/heads/master
Commit: c7dedb2b5b3455b2a4d62c58c138fc690d8ea383
Parents: 69f1ee2
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 17 21:12:01 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 17 21:12:01 2015 +0800

----------------------------------------------------------------------
 .../jena/fuseki/servlets/SPARQL_Query.java      | 748 +++++++++----------
 .../java/org/apache/jena/fuseki/TestQuery.java  | 193 +++--
 2 files changed, 461 insertions(+), 480 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/c7dedb2b/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 bed63da..8a2195e 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
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.fuseki.servlets;
+package org.apache.jena.fuseki.servlets ;
 
 import static java.lang.String.format;
 import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts;
@@ -74,405 +74,355 @@ import org.apache.jena.sparql.core.Prologue;
 import org.apache.jena.sparql.resultset.SPARQLResult;
 import org.apache.jena.web.HttpSC;
 
-/**
- * Handle SPARQL Query requests overt eh SPARQL Protocol. Subclasses provide
- * this algorithm with the actual dataset to query, whether a dataset hosted by
- * this server ({@link SPARQL_QueryDataset}) or speciifed in the protocol
- * request ({@link SPARQL_QueryGeneral}).
- */
-public abstract class SPARQL_Query extends SPARQL_Protocol {
-	private static final String QueryParseBase = Fuseki.BaseParserSPARQL;
-
-	public SPARQL_Query() {
-		super();
-	}
-
-	// Choose REST verbs to support.
-
-	@Override
-	protected void doPost(HttpServletRequest request,
-			HttpServletResponse response) {
-		doCommon(request, response);
-	}
-
-	@Override
-	protected void doGet(HttpServletRequest request,
-			HttpServletResponse response) {
-		doCommon(request, response);
-	}
-
-	// HEAD
-
-	@Override
-	protected void doOptions(HttpServletRequest request,
-			HttpServletResponse response) {
-		setCommonHeadersForOptions(response);
-		response.setHeader(HttpNames.hAllow, "GET,OPTIONS,POST");
-		response.setHeader(HttpNames.hContentLengh, "0");
-	}
-
-	@Override
-	protected final void perform(HttpAction action) {
-		// GET
-		if (action.request.getMethod().equals(HttpNames.METHOD_GET)) {
-			executeWithParameter(action);
-			return;
-		}
-
-		ContentType ct = FusekiLib.getContentType(action);
-
-		// POST application/x-www-form-url
-		// POST ?query= and no Content-Type
-		if (ct == null || isHtmlForm(ct)) {
-			// validation checked that if no Content-type, then its a POST with
-			// ?query=
-			executeWithParameter(action);
-			return;
-		}
-
-		// POST application/sparql-query
-		if (matchContentType(ct, ctSPARQLQuery)) {
-			executeBody(action);
-			return;
-		}
-
-		ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415,
-				"Bad content type: " + ct.getContentType());
-	}
-
-	// All the params we support
-
-	protected static List<String> allParams = Arrays.asList(paramQuery,
-			paramDefaultGraphURI, paramNamedGraphURI, paramQueryRef,
-			paramStyleSheet, paramAccept, paramOutput1, paramOutput2,
-			paramCallback, paramForceAccept, paramTimeout);
-
-	/**
-	 * Validate the request, checking HTTP method and HTTP Parameters.
-	 * 
-	 * @param action
-	 *            HTTP Action
-	 */
-	@Override
-	protected void validate(HttpAction action) {
-		String method = action.request.getMethod().toUpperCase(Locale.ROOT);
-
-		if (!HttpNames.METHOD_POST.equals(method)
-				&& !HttpNames.METHOD_GET.equals(method))
-			ServletOps.errorMethodNotAllowed("Not a GET or POST request");
-
-		if (HttpNames.METHOD_GET.equals(method)
-				&& action.request.getQueryString() == null) {
-			ServletOps.warning(action, "Service Description / SPARQL Query / "
-					+ action.request.getRequestURI());
-			ServletOps.errorNotFound("Service Description: "
-					+ action.request.getRequestURI());
-		}
-
-		// Use of the dataset describing parameters is check later.
-		try {
-			validateParams(action, allParams);
-			validateRequest(action);
-		} catch (ActionErrorException ex) {
-			throw ex;
-		}
-		// Query not yet parsed.
-	}
-
-	/**
-	 * Validate the request after checking HTTP method and HTTP Parameters.
-	 * 
-	 * @param action
-	 *            HTTP Action
-	 */
-	protected abstract void validateRequest(HttpAction action);
-
-	/**
-	 * Helper method for validating request.
-	 * 
-	 * @param request
-	 *            HTTP request
-	 * @param params
-	 *            parameters in a collection of Strings
-	 */
-	protected void validateParams(HttpAction action, Collection<String> params) {
-		HttpServletRequest request = action.request;
-		ContentType ct = FusekiLib.getContentType(request);
-		boolean mustHaveQueryParam = true;
-		if (ct != null) {
-			String incoming = ct.getContentType();
-
-			if (matchContentType(ctSPARQLQuery, ct)) {
-				mustHaveQueryParam = false;
-				// Drop through.
-			} else if (matchContentType(ctHTMLForm, ct)) {
-				// Nothing specific to do
-			} else
-				ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415,
-						"Unsupported: " + incoming);
-		}
-
-		// GET/POST of a form at this point.
-
-		if (mustHaveQueryParam) {
-			int N = countParamOccurences(request, paramQuery);
-
-			if (N == 0)
-				ServletOps
-						.errorBadRequest("SPARQL Query: No 'query=' parameter");
-			if (N > 1)
-				ServletOps
-						.errorBadRequest("SPARQL Query: Multiple 'query=' parameters");
-
-			// application/sparql-query does not use a query param.
-			String queryStr = request.getParameter(HttpNames.paramQuery);
-
-			if (queryStr == null)
-				ServletOps
-						.errorBadRequest("SPARQL Query: No query specified (no 'query=' found)");
-			if (queryStr.isEmpty())
-				ServletOps.errorBadRequest("SPARQL Query: Empty query string");
-		}
-
-		if (params != null) {
-			Enumeration<String> en = request.getParameterNames();
-			for (; en.hasMoreElements();) {
-				String name = en.nextElement();
-				if (!params.contains(name))
-					ServletOps.warning(action,
-							"SPARQL Query: Unrecognize request parameter (ignored): "
-									+ name);
-			}
-		}
-	}
-
-	private void executeWithParameter(HttpAction action) {
-		String queryString = action.request.getParameter(paramQuery);
-		execute(queryString, action);
-	}
-
-	private void executeBody(HttpAction action) {
-		String queryString = null;
-		try {
-			InputStream input = action.request.getInputStream();
-			queryString = IO.readWholeFileAsUTF8(input);
-		} catch (IOException ex) {
-			ServletOps.errorOccurred(ex);
-		}
-		execute(queryString, action);
-	}
-
-	private void execute(String queryString, HttpAction action) {
-		String queryStringLog = ServletOps.formatForLog(queryString);
-		if (action.verbose)
-			action.log
-					.info(format("[%d] Query = \n%s", action.id, queryString));
-		else
-			action.log
-					.info(format("[%d] Query = %s", action.id, queryStringLog));
-
-		Query query = null;
-		try {
-			// NB syntax is ARQ (a superset of SPARQL)
-			query = QueryFactory.create(queryString, QueryParseBase,
-					Syntax.syntaxARQ);
-			queryStringLog = formatForLog(query);
-			validateQuery(action, query);
-		} catch (ActionErrorException ex) {
-			throw ex;
-		} catch (QueryParseException ex) {
-			ServletOps.errorBadRequest("Parse error: \n" + queryString + "\n\r"
-					+ messageForQueryException(ex));
-		}
-		// Should not happen.
-		catch (QueryException ex) {
-			ServletOps.errorBadRequest("Error: \n" + queryString + "\n\r"
-					+ ex.getMessage());
-		}
-
-		// Assumes finished whole thing by end of sendResult.
-		try {
-			action.beginRead();
-			Dataset dataset = decideDataset(action, query, queryStringLog);
-			try (QueryExecution qExec = createQueryExecution(query, dataset);) {
-				SPARQLResult result = executeQuery(action, qExec, query,
-						queryStringLog);
-				// Deals with exceptions itself.
-				sendResults(action, result, query.getPrologue());
-			}
-		} catch (QueryParseException ex) {
-			// Late stage static error (e.g. bad fixed Lucene query string).
-			ServletOps.errorBadRequest("Query parse error: \n" + queryString
-					+ "\n\r" + messageForQueryException(ex));
-		} catch (QueryCancelledException ex) {
-			// Additional counter information.
-			incCounter(action.getEndpoint().getCounters(), QueryTimeouts);
-			throw ex;
-		} finally {
-			action.endRead();
-		}
-	}
-
-	/**
-	 * Check the query - if unacceptable, throw ActionErrorException or call
-	 * super.error
-	 * 
-	 * @param action
-	 *            HTTP Action
-	 * @param query
-	 *            SPARQL Query
-	 */
-	protected abstract void validateQuery(HttpAction action, Query query);
-
-	/**
-	 * Create the {@link QueryExecution} for this operation.
-	 * 
-	 * @param query
-	 * @param dataset
-	 * @return QueryExecution
-	 */
-	protected QueryExecution createQueryExecution(Query query, Dataset dataset) {
-		return QueryExecutionFactory.create(query, dataset);
-	}
-
-	/**
-	 * Perform the {@link QueryExecution} once.
-	 * 
-	 * @param action
-	 * @param queryExecution
-	 * @param query
-	 * @param queryStringLog
-	 *            Informational string created from the initial query.
-	 * @return
-	 */
-	protected SPARQLResult executeQuery(HttpAction action,
-			QueryExecution queryExecution, Query query, String queryStringLog) {
-		setAnyTimeouts(queryExecution, action);
-
-		if (query.isSelectType()) {
-			ResultSet rs = queryExecution.execSelect();
-
-			// Force some query execution now.
-			//
-			// If the timeout-first-row goes off, the output stream has not
-			// been started so the HTTP error code is sent.
-
-			rs.hasNext();
-
-			// If we wanted perfect query time cancellation, we could consume
-			// the result now
-			// to see if the timeout-end-of-query goes off.
-
-			// rs = ResultSetFactory.copyResults(rs) ;
-
-			action.log.info(format("[%d] exec/select", action.id));
-			return new SPARQLResult(rs);
-		}
-
-		if (query.isConstructType()) {
-
-			MediaType rdfMediaType = AcceptList.match( DEF.pureRdfOffer, new AcceptList( WebLib.getAccept(action.getRequest())));
-			
+/** Handle SPARQL Query requests overt eh SPARQL Protocol. 
+ * Subclasses provide this algorithm with the actual dataset to query, whether
+ * a dataset hosted by this server ({@link SPARQL_QueryDataset}) or 
+ * speciifed in the protocol request ({@link SPARQL_QueryGeneral}).   
+ */ 
+public abstract class SPARQL_Query extends SPARQL_Protocol
+{
+    private static final String QueryParseBase = Fuseki.BaseParserSPARQL ;
+    
+    public SPARQL_Query() {
+        super() ;
+    }
+
+    // Choose REST verbs to support.
+
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
+        doCommon(request, response) ;
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
+        doCommon(request, response) ;
+    }
+
+    // HEAD
+
+    @Override
+    protected void doOptions(HttpServletRequest request, HttpServletResponse response) {
+        setCommonHeadersForOptions(response) ;
+        response.setHeader(HttpNames.hAllow, "GET,OPTIONS,POST") ;
+        response.setHeader(HttpNames.hContentLengh, "0") ;
+    }
+
+    @Override
+    protected final void perform(HttpAction action) {
+        // GET
+        if ( action.request.getMethod().equals(HttpNames.METHOD_GET) ) {
+            executeWithParameter(action) ;
+            return ;
+        }
+
+        ContentType ct = FusekiLib.getContentType(action) ;
+
+        // POST application/x-www-form-url
+        // POST ?query= and no Content-Type
+        if ( ct == null || isHtmlForm(ct) ) {
+            // validation checked that if no Content-type, then its a POST with ?query=
+            executeWithParameter(action) ;
+            return ;
+        }
+
+        // POST application/sparql-query
+        if ( matchContentType(ct, ctSPARQLQuery) ) {
+            executeBody(action) ;
+            return ;
+        }
+
+        ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: " + ct.getContentType()) ;
+    }
+
+    // All the params we support
+
+    protected static List<String> allParams = Arrays.asList(paramQuery, paramDefaultGraphURI, paramNamedGraphURI,
+                                                            paramQueryRef, paramStyleSheet, paramAccept, paramOutput1,
+                                                            paramOutput2, paramCallback, paramForceAccept, paramTimeout) ;
+
+    /**
+     * Validate the request, checking HTTP method and HTTP Parameters.
+     * @param action HTTP Action
+     */
+    @Override
+    protected void validate(HttpAction action) {
+        String method = action.request.getMethod().toUpperCase(Locale.ROOT) ;
+
+        if ( !HttpNames.METHOD_POST.equals(method) && !HttpNames.METHOD_GET.equals(method) )
+            ServletOps.errorMethodNotAllowed("Not a GET or POST request") ;
+
+        if ( HttpNames.METHOD_GET.equals(method) && action.request.getQueryString() == null ) {
+            ServletOps.warning(action, "Service Description / SPARQL Query / " + action.request.getRequestURI()) ;
+            ServletOps.errorNotFound("Service Description: " + action.request.getRequestURI()) ;
+        }
+
+        // Use of the dataset describing parameters is check later.
+        try {
+            validateParams(action, allParams) ;
+            validateRequest(action) ;
+        } catch (ActionErrorException ex) {
+            throw ex ;
+        }
+        // Query not yet parsed.
+    }
+
+    /**
+     * Validate the request after checking HTTP method and HTTP Parameters.
+     * @param action HTTP Action
+     */
+    protected abstract void validateRequest(HttpAction action) ;
+
+    /**
+     * Helper method for validating request.
+     * @param request HTTP request
+     * @param params parameters in a collection of Strings
+     */
+    protected void validateParams(HttpAction action, Collection<String> params) {
+        HttpServletRequest request = action.request ;
+        ContentType ct = FusekiLib.getContentType(request) ;
+        boolean mustHaveQueryParam = true ;
+        if ( ct != null ) {
+            String incoming = ct.getContentType() ;
+
+            if ( matchContentType(ctSPARQLQuery, ct) ) {
+                mustHaveQueryParam = false ;
+                // Drop through.
+            } else if ( matchContentType(ctHTMLForm, ct)) {
+                // Nothing specific to do
+            } 
+            else
+                ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Unsupported: " + incoming) ;
+        }
+
+        // GET/POST of a form at this point.
+
+        if ( mustHaveQueryParam ) {
+            int N = countParamOccurences(request, paramQuery) ;
+
+            if ( N == 0 )
+                ServletOps.errorBadRequest("SPARQL Query: No 'query=' parameter") ;
+            if ( N > 1 )
+                ServletOps.errorBadRequest("SPARQL Query: Multiple 'query=' parameters") ;
+
+            // application/sparql-query does not use a query param.
+            String queryStr = request.getParameter(HttpNames.paramQuery) ;
+
+            if ( queryStr == null )
+                ServletOps.errorBadRequest("SPARQL Query: No query specified (no 'query=' found)") ;
+            if ( queryStr.isEmpty() )
+                ServletOps.errorBadRequest("SPARQL Query: Empty query string") ;
+        }
+
+        if ( params != null ) {
+            Enumeration<String> en = request.getParameterNames() ;
+            for (; en.hasMoreElements();) {
+                String name = en.nextElement() ;
+                if ( !params.contains(name) )
+                    ServletOps.warning(action, "SPARQL Query: Unrecognize request parameter (ignored): " + name) ;
+            }
+        }
+    }
+
+    private void executeWithParameter(HttpAction action) {
+        String queryString = action.request.getParameter(paramQuery) ;
+        execute(queryString, action) ;
+    }
+
+    private void executeBody(HttpAction action) {
+        String queryString = null ;
+        try {
+            InputStream input = action.request.getInputStream() ;
+            queryString = IO.readWholeFileAsUTF8(input) ;
+        } catch (IOException ex) {
+            ServletOps.errorOccurred(ex) ;
+        }
+        execute(queryString, action) ;
+    }
+
+    private void execute(String queryString, HttpAction action) {
+        String queryStringLog = ServletOps.formatForLog(queryString) ;
+        if ( action.verbose )
+            action.log.info(format("[%d] Query = \n%s", action.id, queryString)) ;
+        else
+            action.log.info(format("[%d] Query = %s", action.id, queryStringLog)) ;
+
+        Query query = null ;
+        try {
+            // NB syntax is ARQ (a superset of SPARQL)
+            query = QueryFactory.create(queryString, QueryParseBase, Syntax.syntaxARQ) ;
+            queryStringLog = formatForLog(query) ;
+            validateQuery(action, query) ;
+        } catch (ActionErrorException ex) {
+            throw ex ;
+        } catch (QueryParseException ex) {
+            ServletOps.errorBadRequest("Parse error: \n" + queryString + "\n\r" + messageForQueryException(ex)) ;
+        }
+        // Should not happen.
+        catch (QueryException ex) {
+            ServletOps.errorBadRequest("Error: \n" + queryString + "\n\r" + ex.getMessage()) ;
+        }
+
+        // Assumes finished whole thing by end of sendResult.
+        try {
+            action.beginRead() ;
+            Dataset dataset = decideDataset(action, query, queryStringLog) ;
+            try ( QueryExecution qExec = createQueryExecution(query, dataset) ; ) {
+                SPARQLResult result = executeQuery(action, qExec, query, queryStringLog) ;
+                // Deals with exceptions itself.
+                sendResults(action, result, query.getPrologue()) ;
+            }
+        } 
+        catch (QueryParseException ex) {
+            // Late stage static error (e.g. bad fixed Lucene query string). 
+            ServletOps.errorBadRequest("Query parse error: \n" + queryString + "\n\r" + messageForQueryException(ex)) ;
+        }
+        catch (QueryCancelledException ex) {
+            // Additional counter information.
+            incCounter(action.getEndpoint().getCounters(), QueryTimeouts) ;
+            throw ex ;
+        } finally { action.endRead() ; }
+    }
+
+    /**
+     * Check the query - if unacceptable, throw ActionErrorException or call
+     * super.error
+     * @param action HTTP Action
+     * @param query  SPARQL Query
+     */
+    protected abstract void validateQuery(HttpAction action, Query query) ;
+
+    /** Create the {@link QueryExecution} for this operation.
+     * @param query
+     * @param dataset
+     * @return QueryExecution
+     */
+    protected QueryExecution createQueryExecution(Query query, Dataset dataset) {
+        return QueryExecutionFactory.create(query, dataset) ;
+    }
+
+    /** Perform the {@link QueryExecution} once.
+     * @param action
+     * @param queryExecution
+     * @param query
+     * @param queryStringLog Informational string created from the initial query. 
+     * @return
+     */
+    protected SPARQLResult executeQuery(HttpAction action, QueryExecution queryExecution, Query query, String queryStringLog) {
+        setAnyTimeouts(queryExecution, action) ;
+
+        if ( query.isSelectType() ) {
+            ResultSet rs = queryExecution.execSelect() ;
+
+            // Force some query execution now.
+            //
+            // If the timeout-first-row goes off, the output stream has not
+            // been started so the HTTP error code is sent.
+
+            rs.hasNext() ;
+
+            // If we wanted perfect query time cancellation, we could consume
+            // the result now
+            // to see if the timeout-end-of-query goes off.
+
+            // rs = ResultSetFactory.copyResults(rs) ;
+
+            action.log.info(format("[%d] exec/select", action.id)) ;
+            return new SPARQLResult(rs) ;
+        }
+
+        if ( query.isConstructType() ) {
+        	
+            MediaType rdfMediaType = AcceptList.match( DEF.pureRdfOffer, new AcceptList( WebLib.getAccept(action.getRequest())));
+		    
 			if ( ! rdfMediaType.getType().equals("*") ) {
-				Model model = queryExecution.execConstruct();
-				action.log.info(format("[%d] exec/construct/model", action.id));
-				return new SPARQLResult(model);
+			    Model model = queryExecution.execConstruct();
+			    action.log.info(format("[%d] exec/construct/model", action.id));
+			    return new SPARQLResult(model);
 			} else  {
-				Dataset dataset = queryExecution.execConstructDataset();
-				action.log
-						.info(format("[%d] exec/construct/dataset", action.id));
-				return new SPARQLResult(dataset);
-			}
-		}
-
-		if (query.isDescribeType()) {
-			Model model = queryExecution.execDescribe();
-			action.log.info(format("[%d] exec/describe", action.id));
-			return new SPARQLResult(model);
-		}
-
-		if (query.isAskType()) {
-			boolean b = queryExecution.execAsk();
-			action.log.info(format("[%d] exec/ask", action.id));
-			return new SPARQLResult(b);
-		}
-
-		ServletOps.errorBadRequest("Unknown query type - " + queryStringLog);
-		return null;
-	}
-
-	private void setAnyTimeouts(QueryExecution qexec, HttpAction action) {
-		// if ( !(action.getDataService().allowTimeoutOverride) )
-		// return ;
-
-		long desiredTimeout = Long.MAX_VALUE;
-		String timeoutHeader = action.request.getHeader("Timeout");
-		String timeoutParameter = action.request.getParameter("timeout");
-		if (timeoutHeader != null) {
-			try {
-				desiredTimeout = (int) (Float.parseFloat(timeoutHeader) * 1000);
-			} catch (NumberFormatException e) {
-				throw new FusekiException("Timeout header must be a number", e);
-			}
-		} else if (timeoutParameter != null) {
-			try {
-				desiredTimeout = (int) (Float.parseFloat(timeoutParameter) * 1000);
-			} catch (NumberFormatException e) {
-				throw new FusekiException("timeout parameter must be a number",
-						e);
-			}
-		}
-
-		// desiredTimeout =
-		// Math.min(action.getDataService().maximumTimeoutOverride,
-		// desiredTimeout) ;
-		if (desiredTimeout != Long.MAX_VALUE)
-			qexec.setTimeout(desiredTimeout);
-	}
-
-	/**
-	 * Choose the dataset for this SPARQL Query request.
-	 * 
-	 * @param action
-	 * @param query
-	 * @param queryStringLog
-	 * @return {@link Dataset}
-	 */
-	protected abstract Dataset decideDataset(HttpAction action, Query query,
-			String queryStringLog);
-
-	/**
-	 * Ship the results to the remote caller.
-	 * 
-	 * @param action
-	 * @param result
-	 * @param qPrologue
-	 */
-	protected void sendResults(HttpAction action, SPARQLResult result,
-			Prologue qPrologue) {
-		if (result.isResultSet())
-			ResponseResultSet.doResponseResultSet(action,
-					result.getResultSet(), qPrologue);
-		else if (result.isGraph()) {
-			ResponseModel.doResponseModel(action, result.getModel());
-		} else if (result.isBoolean())
-			ResponseResultSet.doResponseResultSet(action,
-					result.getBooleanResult());
-		else if (result.isDataset()) {
-			ResponseDataset.doResponseDataset(action, result.getDataset());
-		} else
-			ServletOps.errorOccurred("Unknown or invalid result type");
-	}
-
-	private String formatForLog(Query query) {
-		IndentedLineBuffer out = new IndentedLineBuffer();
-		out.setFlatMode(true);
-		query.serialize(out);
-		return out.asString();
-	}
-
-	private String getRemoteString(String queryURI) {
-		return HttpOp.execHttpGetString(queryURI);
-	}
+			    Dataset dataset = queryExecution.execConstructDataset();
+			    action.log.info(format("[%d] exec/construct/dataset", action.id));
+			    return new SPARQLResult(dataset);
+		    }
+        }
+
+        if ( query.isDescribeType() ) {
+            Model model = queryExecution.execDescribe() ;
+            action.log.info(format("[%d] exec/describe", action.id)) ;
+            return new SPARQLResult(model) ;
+        }
+
+        if ( query.isAskType() ) {
+            boolean b = queryExecution.execAsk() ;
+            action.log.info(format("[%d] exec/ask", action.id)) ;
+            return new SPARQLResult(b) ;
+        }
+
+        ServletOps.errorBadRequest("Unknown query type - " + queryStringLog) ;
+        return null ;
+    }
+
+    private void setAnyTimeouts(QueryExecution qexec, HttpAction action) {
+//        if ( !(action.getDataService().allowTimeoutOverride) )
+//            return ;
+
+        long desiredTimeout = Long.MAX_VALUE ;
+        String timeoutHeader = action.request.getHeader("Timeout") ;
+        String timeoutParameter = action.request.getParameter("timeout") ;
+        if ( timeoutHeader != null ) {
+            try {
+                desiredTimeout = (int)(Float.parseFloat(timeoutHeader) * 1000) ;
+            } catch (NumberFormatException e) {
+                throw new FusekiException("Timeout header must be a number", e) ;
+            }
+        } else if ( timeoutParameter != null ) {
+            try {
+                desiredTimeout = (int)(Float.parseFloat(timeoutParameter) * 1000) ;
+            } catch (NumberFormatException e) {
+                throw new FusekiException("timeout parameter must be a number", e) ;
+            }
+        }
+
+//        desiredTimeout = Math.min(action.getDataService().maximumTimeoutOverride, desiredTimeout) ;
+        if ( desiredTimeout != Long.MAX_VALUE )
+            qexec.setTimeout(desiredTimeout) ;
+    }
+
+    /** Choose the dataset for this SPARQL Query request. 
+     * @param action
+     * @param query  Query - this may be modified to remove a DatasetDescription.
+     * @param queryStringLog 
+     * @return {@link Dataset}
+     */
+    protected abstract Dataset decideDataset(HttpAction action, Query query, String queryStringLog) ;
+
+    /** Ship the results to the remote caller.
+     * @param action
+     * @param result
+     * @param qPrologue
+     */
+    protected void sendResults(HttpAction action, SPARQLResult result, Prologue qPrologue) {
+        if ( result.isResultSet() )
+            ResponseResultSet.doResponseResultSet(action, result.getResultSet(), qPrologue) ;
+        else if ( result.isGraph() )
+            ResponseModel.doResponseModel(action, result.getModel()) ;
+        else if ( result.isBoolean() )
+            ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
+        else if ( result.isDataset() )
+        	ResponseDataset.doResponseDataset(action, result.getDataset());
+        else
+            ServletOps.errorOccurred("Unknown or invalid result type") ;
+    }
+
+    private String formatForLog(Query query) {
+        IndentedLineBuffer out = new IndentedLineBuffer() ;
+        out.setFlatMode(true) ;
+        query.serialize(out) ;
+        return out.asString() ;
+    }
+
+    private String getRemoteString(String queryURI) {
+        return HttpOp.execHttpGetString(queryURI) ;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c7dedb2b/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 911d105..21f89fc 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
@@ -16,95 +16,137 @@
  * limitations under the License.
  */
 
-package org.apache.jena.fuseki;
-
-import static org.apache.jena.fuseki.ServerTest.gn1;
-import static org.apache.jena.fuseki.ServerTest.model1;
-import static org.apache.jena.fuseki.ServerTest.model2;
-import static org.apache.jena.fuseki.ServerTest.serviceQuery;
-import static org.apache.jena.fuseki.ServerTest.serviceREST;
-
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Iterator;
-
-import org.apache.jena.atlas.junit.BaseTest;
-import org.apache.jena.graph.Triple;
-import org.apache.jena.query.DatasetAccessor;
-import org.apache.jena.query.DatasetAccessorFactory;
-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.ResultSet;
-import org.apache.jena.query.ResultSetFormatter;
-import org.apache.jena.query.Syntax;
-import org.apache.jena.sparql.core.Quad;
-import org.apache.jena.sparql.core.Var;
-import org.apache.jena.sparql.engine.binding.Binding;
-import org.apache.jena.sparql.resultset.ResultSetCompare;
-import org.apache.jena.sparql.sse.Item;
-import org.apache.jena.sparql.sse.SSE;
-import org.apache.jena.sparql.sse.builders.BuilderResultSet;
-import org.apache.jena.sparql.util.Convert;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class TestQuery extends BaseTest 
-{
-    protected static ResultSet rs1 = null ; 
+package org.apache.jena.fuseki ;
+
+import static org.apache.jena.fuseki.ServerTest.gn1 ;
+import static org.apache.jena.fuseki.ServerTest.gn2 ;
+import static org.apache.jena.fuseki.ServerTest.model1 ;
+import static org.apache.jena.fuseki.ServerTest.model2 ;
+import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
+import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+
+import java.io.IOException ;
+import java.net.HttpURLConnection ;
+import java.net.URL ;
+import java.util.Iterator ;
+
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.query.* ;
+import org.apache.jena.sparql.core.Quad ;
+import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.resultset.ResultSetCompare ;
+import org.apache.jena.sparql.sse.Item ;
+import org.apache.jena.sparql.sse.SSE ;
+import org.apache.jena.sparql.sse.builders.BuilderResultSet ;
+import org.apache.jena.sparql.util.Convert ;
+import org.junit.AfterClass ;
+import org.junit.Assert ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+public class TestQuery extends BaseTest {
+    protected static ResultSet rs1 = null ;
     static {
         Item item = SSE.parseItem("(resultset (?s ?p ?o) (row (?s <x>)(?p <p>)(?o 1)))") ;
         rs1 = BuilderResultSet.build(item) ;
     }
-    
-    @BeforeClass public static void beforeClass()
-    {
+
+    @BeforeClass
+    public static void beforeClass() {
         ServerTest.allocServer() ;
         ServerTest.resetServer() ;
         DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
         du.putModel(model1) ;
         du.putModel(gn1, model2) ;
     }
-    
-    @AfterClass public static void afterClass()
-    {
+
+    @AfterClass
+    public static void afterClass() {
         DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
         du.deleteDefault() ;
         ServerTest.freeServer() ;
     }
-    
-    @Test public void query_01()
-    {
+
+    @Test
+    public void query_01() {
         execQuery("SELECT * {?s ?p ?o}", 1) ;
     }
-    
-    @Test public void query_recursive_01()
-    {
-        String query = "SELECT * WHERE { SERVICE <" + serviceQuery + "> { ?s ?p ?o . BIND(?o AS ?x) } }";
-        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
-            ResultSet rs = qExec.execSelect();
-            Var x = Var.alloc("x");
+
+    @Test
+    public void query_recursive_01() {
+        String query = "SELECT * WHERE { SERVICE <" + serviceQuery + "> { ?s ?p ?o . BIND(?o AS ?x) } }" ;
+        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query)) {
+            ResultSet rs = qExec.execSelect() ;
+            Var x = Var.alloc("x") ;
             while (rs.hasNext()) {
-                Binding b = rs.nextBinding();
-                Assert.assertNotNull(b.get(x));
+                Binding b = rs.nextBinding() ;
+                Assert.assertNotNull(b.get(x)) ;
+            }
+        }
+    }
+
+    @Test
+    public void query_with_params_01() {
+        String query = "ASK { }" ;
+        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
+            boolean result = qExec.execAsk() ;
+            Assert.assertTrue(result) ;
+        }
+    }
+
+    @Test
+    public void request_id_header_01() throws IOException {
+        String qs = Convert.encWWWForm("ASK{}") ;
+        URL u = new URL(serviceQuery + "?query=" + qs) ;
+        HttpURLConnection conn = (HttpURLConnection)u.openConnection() ;
+        Assert.assertTrue(conn.getHeaderField("Fuseki-Request-ID") != null) ;
+    }
+
+    @Test
+    public void query_dynamic_dataset_01() {
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        du.putModel(model1);
+        du.putModel(gn1, model2);
+        {
+            String query = "SELECT * { ?s ?p ?o }" ;
+            try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
+                ResultSet rs = qExec.execSelect() ;
+                Node o = rs.next().getLiteral("o").asNode() ;
+                Node n = SSE.parseNode("1") ;
+                assertEquals(n, o) ;
+            }
+        }
+        {
+
+            String query = "SELECT * FROM <" + gn1 + "> { ?s ?p ?o }" ;
+            try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
+                ResultSet rs = qExec.execSelect() ;
+                Node o = rs.next().getLiteral("o").asNode() ;
+                Node n = SSE.parseNode("2") ;
+                assertEquals(n, o) ;
             }
         }
     }
     
-    @Test public void query_with_params_01()
-    {
-        String query = "ASK { }";
-        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query) ) {
-            boolean result = qExec.execAsk();
-            Assert.assertTrue(result);
+    @Test
+    public void query_dynamic_dataset_02() {
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        du.putModel(model1);
+        du.putModel(gn1, model1);
+        du.putModel(gn2, model2);
+        String query = "SELECT * FROM <"+gn1+"> FROM <"+gn2+"> { ?s ?p ?o }" ;
+        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
+            ResultSet rs = qExec.execSelect() ;
+            int n = ResultSetFormatter.consume(rs) ;
+            assertEquals(2, n) ;
         }
     }
     
-    @Test public void query_construct_quad_01()
+    @Test
+    public void query_construct_quad_01()
     {
         String queryString = " CONSTRUCT { GRAPH <http://eg/g> {?s ?p ?oq} } WHERE {?s ?p ?oq}" ;
         Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
@@ -117,7 +159,8 @@ public class TestQuery extends BaseTest
         }
     }
     
-    @Test public void query_construct_01()
+    @Test
+    public void query_construct_01()
     {
         String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
         try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
@@ -125,27 +168,15 @@ public class TestQuery extends BaseTest
             Assert.assertTrue(result.hasNext());
         }
     }
-    
-
-    
-    @Test public void request_id_header_01() throws IOException
-    {
-        String qs = Convert.encWWWForm("ASK{}") ;
-        URL u = new URL(serviceQuery+"?query="+qs);
-        HttpURLConnection conn = (HttpURLConnection) u.openConnection();
-        Assert.assertTrue(conn.getHeaderField("Fuseki-Request-ID") != null);
-    }
 
-    private void execQuery(String queryString, int exceptedRowCount)
-    {
+    private void execQuery(String queryString, int exceptedRowCount) {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
         ResultSet rs = qExec.execSelect() ;
         int x = ResultSetFormatter.consume(rs) ;
         assertEquals(exceptedRowCount, x) ;
     }
-    
-    private void execQuery(String queryString, ResultSet expectedResultSet)
-    {
+
+    private void execQuery(String queryString, ResultSet expectedResultSet) {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
         ResultSet rs = qExec.execSelect() ;
         boolean b = ResultSetCompare.equalsByTerm(rs, expectedResultSet) ;


[42/50] jena git commit: acceptTurtle

Posted by an...@apache.org.
acceptTurtle

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

Branch: refs/heads/master
Commit: 155512631065c6f3e4f613b002ebfe6d356d616f
Parents: 179a204
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:32:20 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:32:20 2015 +0100

----------------------------------------------------------------------
 .../jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java  | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/15551263/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
index 46ef3be..cd7962a 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
@@ -28,6 +28,7 @@ public class DEF
     public static final MediaType acceptNQuads        = MediaType.create(contentTypeNQuads) ;
     public static final MediaType acceptRSXML         = MediaType.create(contentTypeResultsXML) ;
     public static final MediaType acceptJSON          = MediaType.create(contentTypeJSON) ;
+    public static final MediaType acceptTurtle        = MediaType.create(contentTypeTurtle) ;
     
     public static final AcceptList jsonOffer          = AcceptList.create(contentTypeJSON) ;
 


[10/50] jena git commit: formatting of should be :g in FmtTemplate

Posted by an...@apache.org.
formatting of <http://example/g> should be :g in FmtTemplate

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

Branch: refs/heads/master
Commit: 2bb0e5876a2049e4fd24d70cd240a247007f80c8
Parents: 36d32da
Author: confidencesun <co...@gmail.com>
Authored: Thu Aug 6 11:00:15 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Thu Aug 6 11:00:15 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/jena/sparql/serializer/FmtTemplate.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2bb0e587/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
index facb963..0621a8a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java
@@ -69,7 +69,7 @@ public class FmtTemplate extends FormatterBase
 
         	out.print("GRAPH");
       		out.print(" ");
-      		out.print(FmtUtils.stringForNode(quad.getGraph()));
+      		out.print(slotToString(quad.getGraph()));
       		out.print(" ");
       		
       		out.newline() ;


[12/50] jena git commit: add some syntax tests: 1) default graph; 2) short form; 3) bad syntax test

Posted by an...@apache.org.
add some syntax tests: 1) default graph; 2) short form; 3) bad syntax
test

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

Branch: refs/heads/master
Commit: 50a65c3cc817fd482867450fb41a5cc01e81a7db
Parents: b084878
Author: confidencesun <co...@gmail.com>
Authored: Sun Aug 9 09:49:06 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Sun Aug 9 09:49:06 2015 +0800

----------------------------------------------------------------------
 .../ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-09.arq        | 7 +++++++
 .../ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-10.arq        | 7 +++++++
 .../ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-11.arq        | 7 +++++++
 .../ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-12.arq        | 7 +++++++
 .../ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-bad-01.arq    | 7 +++++++
 5 files changed, 35 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/50a65c3c/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-09.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-09.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-09.arq
new file mode 100644
index 0000000..6fb3c52
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-09.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT {
+    { ?s ?p ?o }
+   }
+WHERE
+   { }

http://git-wip-us.apache.org/repos/asf/jena/blob/50a65c3c/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-10.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-10.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-10.arq
new file mode 100644
index 0000000..ba071bb
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-10.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT 
+WHERE
+   { 
+     ?s ?p ?o
+   }

http://git-wip-us.apache.org/repos/asf/jena/blob/50a65c3c/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-11.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-11.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-11.arq
new file mode 100644
index 0000000..bb9dcbb
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-11.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT 
+WHERE
+   { 
+     GRAPH ?g { ?s ?p ?o }
+   }

http://git-wip-us.apache.org/repos/asf/jena/blob/50a65c3c/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-12.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-12.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-12.arq
new file mode 100644
index 0000000..7fae8d2
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-12.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT 
+WHERE
+   { 
+     { ?s ?p ?o }
+   }

http://git-wip-us.apache.org/repos/asf/jena/blob/50a65c3c/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-bad-01.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-bad-01.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-bad-01.arq
new file mode 100644
index 0000000..d776dd3
--- /dev/null
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-bad-01.arq
@@ -0,0 +1,7 @@
+PREFIX : <http://example/>
+
+CONSTRUCT 
+WHERE
+   { 
+     GRAPH ?g { ?s ?p ?o. FILTER isIRI(?o) }
+   }


[08/50] jena git commit: modify syn-arq.sh to generate syntax tests for construct quad

Posted by an...@apache.org.
modify syn-arq.sh to generate syntax tests for construct quad

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

Branch: refs/heads/master
Commit: 4bb4a7f21eded96854d262118821980e0e8ea2c6
Parents: 84f6f98
Author: confidencesun <co...@gmail.com>
Authored: Thu Aug 6 01:49:58 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Thu Aug 6 01:49:58 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   |  1 -
 .../testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl  | 69 +++++++++++-----
 .../Syntax-ARQ/syntax-quad-construct-04.arq     |  1 -
 .../Syntax-ARQ/syntax-quad-construct-05.arq     |  1 -
 .../Syntax-ARQ/syntax-quad-construct-06.arq     |  1 -
 .../Syntax-ARQ/syntax-quad-construct-07.arq     |  1 -
 .../Syntax-ARQ/syntax-quad-construct-08.arq     |  1 -
 jena-arq/testing/ARQ/Syntax/syn-arq.sh          | 82 +++++++++++++++++++-
 8 files changed, 132 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index 5b4efd6..0f509b0 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -165,7 +165,6 @@ public class ExampleConstructQuads {
 		File[] tests = new File("testing/ARQ/Syntax/Syntax-ARQ")
 				.listFiles(new FilenameFilter() {
 					public boolean accept(File dir, String fname) {
-						System.out.println(fname);
 						if (fname.startsWith("syntax-quad-construct-")) {
 							return true;
 						}

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl
index 8d98238..3478a61 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/manifest.ttl
@@ -1,18 +1,3 @@
-#  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.
-
 @prefix :       <manifest#> .
 @prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 @prefix rdfs:	<http://www.w3.org/2000/01/rdf-schema#> .
@@ -51,6 +36,14 @@
 :test_23
 :test_24
 :test_25
+:test_26
+:test_27
+:test_28
+:test_29
+:test_30
+:test_31
+:test_32
+:test_33
 ) .
 
 :test_1 rdf:type   mfx:PositiveSyntaxTestARQ ;
@@ -163,17 +156,57 @@
    mf:name    "syntax-let-02.arq" ;
    mf:action  <syntax-let-02.arq> ;.
 
-:test_23 rdf:type   mfx:NegativeSyntaxTestARQ ;
+:test_23 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-01.arq" ;
+   mf:action  <syntax-quad-construct-01.arq> ;.
+
+:test_24 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-02.arq" ;
+   mf:action  <syntax-quad-construct-02.arq> ;.
+
+:test_25 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-03.arq" ;
+   mf:action  <syntax-quad-construct-03.arq> ;.
+
+:test_26 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-04.arq" ;
+   mf:action  <syntax-quad-construct-04.arq> ;.
+
+:test_27 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-05.arq" ;
+   mf:action  <syntax-quad-construct-05.arq> ;.
+
+:test_28 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-06.arq" ;
+   mf:action  <syntax-quad-construct-06.arq> ;.
+
+:test_29 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-07.arq" ;
+   mf:action  <syntax-quad-construct-07.arq> ;.
+
+:test_30 rdf:type   mfx:PositiveSyntaxTestARQ ;
+   dawgt:approval dawgt:NotClassified ;
+   mf:name    "syntax-quad-construct-08.arq" ;
+   mf:action  <syntax-quad-construct-08.arq> ;.
+
+:test_31 rdf:type   mfx:NegativeSyntaxTestARQ ;
    dawgt:approval dawgt:NotClassified ;
    mf:name    "syntax-subquery-bad-01.arq" ;
    mf:action  <syntax-subquery-bad-01.arq> ;.
 
-:test_24 rdf:type   mfx:NegativeSyntaxTestARQ ;
+:test_32 rdf:type   mfx:NegativeSyntaxTestARQ ;
    dawgt:approval dawgt:NotClassified ;
    mf:name    "syntax-subquery-bad-02.arq" ;
    mf:action  <syntax-subquery-bad-02.arq> ;.
 
-:test_25 rdf:type   mfx:NegativeSyntaxTestARQ ;
+:test_33 rdf:type   mfx:NegativeSyntaxTestARQ ;
    dawgt:approval dawgt:NotClassified ;
    mf:name    "syntax-let-bad-01.arq" ;
    mf:action  <syntax-let-bad-01.arq> ;.

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
index 7638a43..521d182 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-04.arq
@@ -6,4 +6,3 @@ CONSTRUCT {
    }
 WHERE
    { GRAPH ?g { ?s ?p ?o } }
-

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
index d9b1bda..de726b4 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-05.arq
@@ -6,4 +6,3 @@ CONSTRUCT {
    }
 WHERE
    { GRAPH ?g { ?s ?p ?o } }
-

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
index d6b11bb..98ef396 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-06.arq
@@ -11,4 +11,3 @@ CONSTRUCT {
    }
 WHERE
    { GRAPH ?g { ?s ?p ?o } }
-

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
index 19fe948..54a6630 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-07.arq
@@ -4,4 +4,3 @@ CONSTRUCT {
    GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .}
    }
 WHERE {}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
index 602e81c..0393ecd 100644
--- a/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
+++ b/jena-arq/testing/ARQ/Syntax/Syntax-ARQ/syntax-quad-construct-08.arq
@@ -6,4 +6,3 @@ CONSTRUCT {
    }
 WHERE
    { }
-

http://git-wip-us.apache.org/repos/asf/jena/blob/4bb4a7f2/jena-arq/testing/ARQ/Syntax/syn-arq.sh
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Syntax/syn-arq.sh b/jena-arq/testing/ARQ/Syntax/syn-arq.sh
index 3f8bce5..508d29b 100644
--- a/jena-arq/testing/ARQ/Syntax/syn-arq.sh
+++ b/jena-arq/testing/ARQ/Syntax/syn-arq.sh
@@ -184,4 +184,84 @@ SELECT *
 {
   LET ?x := (4+5)
 }
-EOF
\ No newline at end of file
+EOF
+
+## ---- CONSTRUCT QUAD
+
+N=0
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT { GRAPH :g { :s :p :o } } WHERE {}
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT { GRAPH ?g { ?s ?p ?o } } WHERE { ?s ?p ?o }
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT { :s :p :o } WHERE {}
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   ?s ?p ?o
+   GRAPH ?g { :s :p :o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o .
+   ?s ?p ?o .
+   GRAPH ?g { ?s ?p ?o }
+   ?s ?p ?o .
+   ?s ?p ?o
+   GRAPH ?g { ?s ?p ?o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .}
+   }
+WHERE {}
+EOF
+
+N=$((N+1)) ; testGood $ARQ $(fname "syntax-quad-construct-" $N arq) <<EOF
+PREFIX : <http://example/>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   GRAPH ?g1 { :s :p :o }
+   }
+WHERE
+   { }
+EOF


[49/50] jena git commit: Merge master

Posted by an...@apache.org.
Merge master


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

Branch: refs/heads/master
Commit: d030947e2038741e4c02867091d604db2211dcdb
Parents: 0bd45a5 123cf4c
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Aug 23 16:54:46 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Aug 23 16:54:46 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/riot/RDFDataMgr.java   | 47 ++++++++++++++-
 .../java/org/apache/jena/riot/RiotReader.java   | 61 ++++----------------
 .../sparql/engine/http/QueryEngineHTTP.java     |  4 +-
 .../org/apache/jena/riot/TestRiotReader.java    |  8 +--
 .../AbstractNodeTupleInputFormatTests.java      |  9 +--
 jena-fuseki2/examples/jetty-fuseki.xml          | 48 ---------------
 6 files changed, 65 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d030947e/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
----------------------------------------------------------------------
diff --cc jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
index 933c8e7,e20efd2..46d7f7b
--- 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
@@@ -444,37 -433,12 +444,37 @@@ public class QueryEngineHTTP implement
          return model;
      }
  
 +    private Dataset execDataset(Dataset dataset) {
 +        Pair<InputStream, Lang> p = execConstructWorker(datasetContentType);
 +        InputStream in = p.getLeft() ;
 +        Lang lang = p.getRight() ;
 +        try { RDFDataMgr.read(dataset, in, lang); }
 +        finally { this.close(); }
 +        return dataset;
 +    }
 +
      private Iterator<Triple> execTriples() {
 +        Pair<InputStream, Lang> p = execConstructWorker(modelContentType) ;
 +        InputStream in = p.getLeft() ;
 +        Lang lang = p.getRight() ;
 +        // Base URI?
-         return RiotReader.createIteratorTriples(in, lang, null);
++        return RDFDataMgr.createIteratorTriples(in, lang, null);
 +    }
 +    
 +    private Iterator<Quad> execQuads() {
 +        Pair<InputStream, Lang> p = execConstructWorker(datasetContentType) ;
 +        InputStream in = p.getLeft() ;
 +        Lang lang = p.getRight() ;
 +        // Base URI?
-         return RiotReader.createIteratorQuads(in, lang, null);
++        return RDFDataMgr.createIteratorQuads(in, lang, null);
 +    }
 +
 +    private Pair<InputStream, Lang> execConstructWorker(String contentType) {
          checkNotClosed() ;
          HttpQuery httpQuery = makeHttpQuery();
 -        httpQuery.setAccept(modelContentType);
 +        httpQuery.setAccept(contentType);
          InputStream in = httpQuery.exec();
 -
 +        
          // Don't assume the endpoint actually gives back the content type we
          // asked for
          String actualContentType = httpQuery.getContentType();


[24/50] jena git commit: Add the execution test files from syntax tests

Posted by an...@apache.org.
Add the execution test files from syntax tests

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

Branch: refs/heads/master
Commit: 6f397404e69d9da10ea456c977d44ef52b899968
Parents: fcbbf9b
Author: confidencesun <co...@gmail.com>
Authored: Sat Aug 15 16:31:54 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Sat Aug 15 16:31:54 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/sparql/api/TestAPI.java     | 11 ++++
 jena-arq/testing/ARQ/Construct/manifest.ttl     | 64 ++++++++++++++++++++
 .../ARQ/Construct/q-construct-quad-syntax-1.arq |  3 +
 .../ARQ/Construct/q-construct-quad-syntax-2.arq |  3 +
 .../ARQ/Construct/q-construct-quad-syntax-3.arq |  4 ++
 .../ARQ/Construct/q-construct-quad-syntax-4.arq |  9 +++
 .../ARQ/Construct/q-construct-quad-syntax-5.arq |  9 +++
 .../ARQ/Construct/q-construct-quad-syntax-6.arq | 14 +++++
 .../ARQ/Construct/q-construct-quad-syntax-7.arq |  7 +++
 .../ARQ/Construct/q-construct-quad-syntax-8.arq |  9 +++
 .../Construct/results-construct-quad-data-2.ttl |  2 +
 .../results-construct-quad-syntax-1.trig        |  2 +
 .../results-construct-quad-syntax-2.trig        |  0
 .../results-construct-quad-syntax-3.ttl         |  2 +
 .../results-construct-quad-syntax-4.trig        |  6 ++
 .../results-construct-quad-syntax-5.trig        |  6 ++
 .../results-construct-quad-syntax-6.trig        |  6 ++
 .../results-construct-quad-syntax-7.ttl         |  2 +
 .../results-construct-quad-syntax-8.trig        |  0
 19 files changed, 159 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/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 5630804..6b6d203 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
@@ -519,6 +519,17 @@ public class TestAPI extends BaseTest
         assertTrue(IsoMatcher.isomorphic( expected.asDatasetGraph(), result.asDatasetGraph()) );
     }
     
+    // Test construct triple and quad short form:
+    @Test public void testARQConstructQuad_ShortForm_3() {
+        String queryString = "CONSTRUCT WHERE { ?s ?p ?o. GRAPH ?g1 {?s1 ?p1 ?o1} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        Dataset result = qExec.execConstructDataset();
+        
+        assertTrue(IsoMatcher.isomorphic( d.asDatasetGraph(), result.asDatasetGraph()) );
+    }
+    
     // Test bad construct quad short form:
     @Test public void testARQConstructQuad_ShortForm_bad() {
         String queryString = "CONSTRUCT WHERE { GRAPH ?g {?s ?p ?o. FILTER isIRI(?o)}  }";

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/manifest.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/manifest.ttl b/jena-arq/testing/ARQ/Construct/manifest.ttl
index 09d5038..7e9e660 100644
--- a/jena-arq/testing/ARQ/Construct/manifest.ttl
+++ b/jena-arq/testing/ARQ/Construct/manifest.ttl
@@ -105,4 +105,68 @@
               qt:graphData <g2.ttl> ] ;
         mf:result  <results-construct-quad-short-form-3.trig>
       ]
+      [  mf:name    "Construct Quad: Syntax 1" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-1.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-1.trig>
+      ]
+      [  mf:name    "Construct Quad: Syntax 2" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-2.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-2.trig>
+      ]
+      [  mf:name    "Construct Quad: Syntax 3" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-3.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-3.ttl>
+      ]
+      [  mf:name    "Construct Quad: Syntax 4" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-4.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-4.trig>
+      ]
+      [  mf:name    "Construct Quad: Syntax 5" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-5.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-5.trig>
+      ]
+      [  mf:name    "Construct Quad: Syntax 6" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-6.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-6.trig>
+      ]
+      [  mf:name    "Construct Quad: Syntax 7" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-7.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-7.ttl>
+      ]
+      [  mf:name    "Construct Quad: Syntax 7" ;
+         mf:action
+            [ qt:query     <q-construct-quad-syntax-7.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-syntax-7.ttl>
+      ]
     ).

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-1.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-1.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-1.arq
new file mode 100644
index 0000000..32eb189
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-1.arq
@@ -0,0 +1,3 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT { GRAPH :g { :s :p :o } } WHERE {}

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-2.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-2.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-2.arq
new file mode 100644
index 0000000..340c047
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-2.arq
@@ -0,0 +1,3 @@
+PREFIX : <http://example.org/ns#>
+
+CONSTRUCT { GRAPH ?g { ?s ?p ?o } } WHERE { ?s ?p ?o }

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-3.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-3.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-3.arq
new file mode 100644
index 0000000..bef7c4f
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-3.arq
@@ -0,0 +1,4 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT { :s :p :o  } WHERE {}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-4.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-4.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-4.arq
new file mode 100644
index 0000000..929b602
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-4.arq
@@ -0,0 +1,9 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-5.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-5.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-5.arq
new file mode 100644
index 0000000..a9a8b61
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-5.arq
@@ -0,0 +1,9 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT {
+   ?s ?p ?o
+   GRAPH ?g { :s :p :o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-6.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-6.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-6.arq
new file mode 100644
index 0000000..921a44b
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-6.arq
@@ -0,0 +1,14 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   ?s ?p ?o .
+   ?s ?p ?o .
+   GRAPH ?g { ?s ?p ?o }
+   ?s ?p ?o .
+   ?s ?p ?o
+   GRAPH ?g { ?s ?p ?o }
+   }
+WHERE
+   { GRAPH ?g { ?s ?p ?o } }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-7.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-7.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-7.arq
new file mode 100644
index 0000000..fedde3c
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-7.arq
@@ -0,0 +1,7 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT {
+   GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .}
+   }
+WHERE {}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-8.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-8.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-8.arq
new file mode 100644
index 0000000..b5c0b40
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-syntax-8.arq
@@ -0,0 +1,9 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT {
+   GRAPH ?g { :s :p :o }
+   GRAPH ?g1 { :s :p :o }
+   }
+WHERE
+   { }
+

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-data-2.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-data-2.ttl b/jena-arq/testing/ARQ/Construct/results-construct-quad-data-2.ttl
new file mode 100644
index 0000000..9a434a5
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-data-2.ttl
@@ -0,0 +1,2 @@
+@prefix : <http://example.org/ns#> .
+:s :p :o .
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-1.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-1.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-1.trig
new file mode 100644
index 0000000..ee42de7
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-1.trig
@@ -0,0 +1,2 @@
+@prefix :      <http://example.org/ns#> .
+:g {:s :p :o }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-2.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-2.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-2.trig
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-3.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-3.ttl b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-3.ttl
new file mode 100644
index 0000000..8914bbe
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-3.ttl
@@ -0,0 +1,2 @@
+@prefix :      <http://example.org/ns#> .
+:s :p :o
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-4.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-4.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-4.trig
new file mode 100644
index 0000000..eb40f00
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-4.trig
@@ -0,0 +1,6 @@
+@prefix :      <http://example.org/ns#> .
+:s1 :p :o1 .
+:s2 :p :o2 .
+:a1 :b1 :c1 .
+<g1.ttl> {:s :p :o}
+<g2.ttl> {:s :p :o}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-5.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-5.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-5.trig
new file mode 100644
index 0000000..eb40f00
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-5.trig
@@ -0,0 +1,6 @@
+@prefix :      <http://example.org/ns#> .
+:s1 :p :o1 .
+:s2 :p :o2 .
+:a1 :b1 :c1 .
+<g1.ttl> {:s :p :o}
+<g2.ttl> {:s :p :o}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-6.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-6.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-6.trig
new file mode 100644
index 0000000..9ddbf74
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-6.trig
@@ -0,0 +1,6 @@
+@prefix :      <http://example.org/ns#> .
+:s1 :p :o1 .
+:s2 :p :o2 .
+:a1 :b1 :c1 .
+<g1.ttl> {:s :p :o. :s1 :p :o1 . :a1 :b1 :c1 .}
+<g2.ttl> {:s :p :o. :s2 :p :o2 .}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-7.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-7.ttl b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-7.ttl
new file mode 100644
index 0000000..8914bbe
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-7.ttl
@@ -0,0 +1,2 @@
+@prefix :      <http://example.org/ns#> .
+:s :p :o
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/6f397404/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-8.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-8.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-syntax-8.trig
new file mode 100644
index 0000000..e69de29


[41/50] jena git commit: Add execConstructDataset(Dataset)

Posted by an...@apache.org.
Add execConstructDataset(Dataset)


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

Branch: refs/heads/master
Commit: 179a2048a2d6b4e4a44a5304d4ca87e9b8f14f4f
Parents: cfb7fda
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:30:53 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:31:59 2015 +0100

----------------------------------------------------------------------
 .../sparql/engine/http/QueryEngineHTTP.java     | 164 ++++++++++---------
 1 file changed, 90 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/179a2048/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 2fa9602..933c8e7 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
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit ;
 
 import org.apache.http.client.HttpClient ;
 import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
 import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
 import org.apache.jena.graph.Triple ;
@@ -36,8 +37,6 @@ import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.riot.* ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.ARQException ;
-import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.engine.ResultSetCheckCondition ;
 import org.apache.jena.sparql.graph.GraphFactory ;
@@ -87,7 +86,9 @@ public class QueryEngineHTTP implements QueryExecution {
     private String selectContentType    = defaultSelectHeader();
     private String askContentType       = defaultAskHeader();
     private String modelContentType     = defaultConstructHeader();
-    private String datasetContentType   = WebContent.defaultDatasetAcceptHeader;
+    
+    private String constructContentType = defaultConstructHeader() ;
+    private String datasetContentType   = defaultConstructDatasetHeader() ;
     
     // Received content type 
     private String httpResponseContentType = null ;
@@ -411,14 +412,12 @@ public class QueryEngineHTTP implements QueryExecution {
     
     @Override
     public Dataset execConstructDataset(){
-        checkNotClosed() ;
-    	DatasetGraph dataset = DatasetGraphFactory.createMem();
-        try {
-        	execConstructQuads().forEachRemaining(dataset::add);
-        } finally {
-            this.close();
-        }
-        return DatasetFactory.create(dataset);
+        return execConstructDataset(DatasetFactory.createMem());
+    }
+
+    @Override
+    public Dataset execConstructDataset(Dataset dataset){
+        return execDataset(dataset) ;
     }
 
     @Override
@@ -437,64 +436,43 @@ public class QueryEngineHTTP implements QueryExecution {
     }
 
     private Model execModel(Model model) {
-        checkNotClosed() ;
-        HttpQuery httpQuery = makeHttpQuery();
-        httpQuery.setAccept(modelContentType);
-        InputStream in = httpQuery.exec();
-
-        // Don't assume the endpoint actually gives back the content type we
-        // asked for
-        String actualContentType = httpQuery.getContentType();
-        httpResponseContentType = actualContentType;
-
-        // If the server fails to return a Content-Type then we will assume
-        // the server returned the type we asked for
-        if (actualContentType == null || actualContentType.equals("")) {
-            actualContentType = modelContentType;
-        }
-
-        // Try to select language appropriately here based on the model content
-        // type
-        Lang lang = RDFLanguages.contentTypeToLang(actualContentType);
-        if (!RDFLanguages.isTriples(lang))
-            throw new QueryException("Endpoint returned Content Type: " + actualContentType
-                    + " which is not a valid RDF Graph syntax");
-        RDFDataMgr.read(model, in, lang);
-        this.close();
+        Pair<InputStream, Lang> p = execConstructWorker(modelContentType) ;
+        InputStream in = p.getLeft() ;
+        Lang lang = p.getRight() ;
+        try { RDFDataMgr.read(model, in, lang); }
+        finally { this.close(); }
         return model;
     }
 
-    private Iterator<Triple> execTriples() {
-        checkNotClosed() ;
-        HttpQuery httpQuery = makeHttpQuery();
-        httpQuery.setAccept(modelContentType);
-        InputStream in = httpQuery.exec();
-
-        // Don't assume the endpoint actually gives back the content type we
-        // asked for
-        String actualContentType = httpQuery.getContentType();
-        httpResponseContentType = actualContentType;
-
-        // If the server fails to return a Content-Type then we will assume
-        // the server returned the type we asked for
-        if (actualContentType == null || actualContentType.equals("")) {
-            actualContentType = modelContentType;
-        }
-
-        // Try to select language appropriately here based on the model content
-        // type
-        Lang lang = RDFLanguages.contentTypeToLang(actualContentType);
-        if (!RDFLanguages.isTriples(lang))
-            throw new QueryException("Endpoint returned Content Type: " + actualContentType
-                    + " which is not a valid RDF Graph syntax");
+    private Dataset execDataset(Dataset dataset) {
+        Pair<InputStream, Lang> p = execConstructWorker(datasetContentType);
+        InputStream in = p.getLeft() ;
+        Lang lang = p.getRight() ;
+        try { RDFDataMgr.read(dataset, in, lang); }
+        finally { this.close(); }
+        return dataset;
+    }
 
+    private Iterator<Triple> execTriples() {
+        Pair<InputStream, Lang> p = execConstructWorker(modelContentType) ;
+        InputStream in = p.getLeft() ;
+        Lang lang = p.getRight() ;
+        // Base URI?
         return RiotReader.createIteratorTriples(in, lang, null);
     }
     
     private Iterator<Quad> execQuads() {
+        Pair<InputStream, Lang> p = execConstructWorker(datasetContentType) ;
+        InputStream in = p.getLeft() ;
+        Lang lang = p.getRight() ;
+        // Base URI?
+        return RiotReader.createIteratorQuads(in, lang, null);
+    }
+
+    private Pair<InputStream, Lang> execConstructWorker(String contentType) {
         checkNotClosed() ;
         HttpQuery httpQuery = makeHttpQuery();
-        httpQuery.setAccept(datasetContentType);
+        httpQuery.setAccept(contentType);
         InputStream in = httpQuery.exec();
         
         // Don't assume the endpoint actually gives back the content type we
@@ -507,17 +485,14 @@ public class QueryEngineHTTP implements QueryExecution {
         if (actualContentType == null || actualContentType.equals("")) {
             actualContentType = WebContent.defaultDatasetAcceptHeader;
         }
-
-        // Try to select language appropriately here based on the model content
-        // type
         Lang lang = RDFLanguages.contentTypeToLang(actualContentType);
-        if (!RDFLanguages.isQuads(lang))
-            throw new QueryException("Endpoint returned Content Type: " + actualContentType
-                    + " which is not a valid RDF Dataset syntax");
-
-        return RiotReader.createIteratorQuads(in, lang, null);
+        if ( ! RDFLanguages.isQuads(lang) && ! RDFLanguages.isTriples(lang) )
+            throw new QueryException("Endpoint returned Content Type: "
+                                     + actualContentType 
+                                     + " which is not a valid RDF syntax");
+        return Pair.create(in, lang) ;
     }
-
+    
     @Override
     public boolean execAsk() {
         checkNotClosed() ;
@@ -813,10 +788,10 @@ public class QueryEngineHTTP implements QueryExecution {
         datasetContentType = contentType;
     }
     
-    private static final String selectContentTypeHeader = initSelectContentTypes() ;
+    private static final String dftSelectContentTypeHeader = initSelectContentTypes() ;
 
     public static String defaultSelectHeader() {
-        return selectContentTypeHeader ;
+        return dftSelectContentTypeHeader ;
     }
 
     private static String initSelectContentTypes() {
@@ -836,18 +811,18 @@ public class QueryEngineHTTP implements QueryExecution {
     private static final String askContentTypeHeader = initAskContentTypes() ;
 
     public static String defaultAskHeader() {
-        return selectContentTypeHeader ;
+        return dftSelectContentTypeHeader ;
     }
 
     // These happen to be the same.
     private static String initAskContentTypes() { return initSelectContentTypes(); }
 
-    private static final String constructContentTypeHeader = initConstructContentTypes() ;
+    private static final String dftConstructContentTypeHeader = initConstructContentTypes() ;
 
     public static String defaultConstructHeader() {
-        return constructContentTypeHeader ;
+        return dftConstructContentTypeHeader ;
     }
-
+    
     private static String initConstructContentTypes() {
         // Or use WebContent.defaultGraphAcceptHeader which is slightly
         // narrower. Here, we have a tuned setting for SPARQL operations.
@@ -869,6 +844,47 @@ public class QueryEngineHTTP implements QueryExecution {
         return sBuff.toString();
     }
 
+    private static final String dftConstructDatasetContentTypeHeader = initConstructDatasetContentTypes() ;
+
+    public static String defaultConstructDatasetHeader() {
+        return dftConstructDatasetContentTypeHeader ; 
+    }
+    
+    private static String initConstructDatasetContentTypes() {
+        // Or use WebContent.defaultDatasetAcceptHeader which is slightly
+        // narrower. Here, we have a tuned setting for SPARQL operations.
+        StringBuilder sBuff = new StringBuilder() ;
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTriG,         1.0) ;
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTriGAlt1,     1.0) ;
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTriGAlt2,     1.0) ;
+
+        accumulateContentTypeString(sBuff, WebContent.contentTypeNQuads,       1.0) ;
+        accumulateContentTypeString(sBuff, WebContent.contentTypeNQuadsAlt1,   1.0) ;
+        accumulateContentTypeString(sBuff, WebContent.contentTypeNQuadsAlt2,   1.0) ;
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeJSONLD,       0.9) ;
+
+        // And triple formats (the case of execConstructDatasets but a regular triples CONSTRUCT). 
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTurtle,       0.8);
+        accumulateContentTypeString(sBuff, WebContent.contentTypeNTriples,     0.8);
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeRDFXML,       0.7);
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTurtleAlt1,   0.6);
+        accumulateContentTypeString(sBuff, WebContent.contentTypeTurtleAlt2,   0.6);
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeN3,           0.5);
+        accumulateContentTypeString(sBuff, WebContent.contentTypeN3Alt1,       0.5);
+        accumulateContentTypeString(sBuff, WebContent.contentTypeN3Alt2,       0.5);
+        
+        accumulateContentTypeString(sBuff, WebContent.contentTypeNTriplesAlt,  0.4);
+        
+        accumulateContentTypeString(sBuff, "*/*",                              0.1) ;
+
+        return sBuff.toString();
+    }
+    
     private static void accumulateContentTypeString(StringBuilder sBuff, String str, double v) {
         if ( sBuff.length() != 0 )
             sBuff.append(", ") ;


[40/50] jena git commit: Add execConstructDataset(Dataset)

Posted by an...@apache.org.
Add execConstructDataset(Dataset)

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

Branch: refs/heads/master
Commit: cfb7fda26273c129c2e5bf6650169a89c06c67ac
Parents: 060248b
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 11:30:47 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 11:30:47 2015 +0100

----------------------------------------------------------------------
 .../jena/sparql/engine/QueryExecutionBase.java  | 24 ++++++++------------
 1 file changed, 10 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/cfb7fda2/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 9a98b71..c04675b 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
@@ -47,7 +47,6 @@ import org.apache.jena.riot.system.IRIResolver;
 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.DatasetGraphFactory;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.core.describe.DescribeHandler;
 import org.apache.jena.sparql.core.describe.DescribeHandlerRegistry;
@@ -279,27 +278,24 @@ public class QueryExecutionBase implements QueryExecution
     
     @Override
     public Dataset execConstructDataset(){
-    	
-    	DatasetGraph graph = DatasetGraphFactory.createMem();
-    	
-        checkNotClosed() ;
-        try
-        {
-        	execConstructQuads().forEachRemaining(graph::add);
-        }
-        finally
-        {
+        return execConstructDataset(DatasetFactory.createMem()) ;
+    }
+
+    @Override
+    public Dataset execConstructDataset(Dataset dataset){
+        DatasetGraph dsg = dataset.asDatasetGraph() ; 
+        try {
+            execConstructQuads().forEachRemaining(dsg::add);
+        } finally {
             this.close();
         }
-        return DatasetFactory.create(graph);
-
+        return dataset ; 
     }
 
     @Override
     public Model execDescribe()
     { return execDescribe(GraphFactory.makeJenaDefaultModel()) ; }
 
-
     @Override
     public Model execDescribe(Model model)
     {


[46/50] jena git commit: Merge from master

Posted by an...@apache.org.
Merge from master


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

Branch: refs/heads/master
Commit: a8d40b1749480612a209360fe217f304cd856ec8
Parents: 444a6c9 03ae45e
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 13:05:35 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 13:05:35 2015 +0100

----------------------------------------------------------------------
 jena-arq/src/main/java/org/apache/jena/query/Query.java       | 7 ++-----
 jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java   | 6 +++++-
 .../src/main/java/org/apache/jena/tdb/store/GraphTDB.java     | 4 +++-
 3 files changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/a8d40b17/jena-arq/src/main/java/org/apache/jena/query/Query.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/jena/blob/a8d40b17/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
----------------------------------------------------------------------
diff --cc jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
index 05892bb,1159058..4b7faa1
--- a/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RiotReader.java
@@@ -283,7 -283,9 +283,9 @@@ public class RiotReade
                  @Override
                  public void run()
                  {
+                     out.start();
                      parse(input, lang, baseIRI, out);
 -                    out.finish() ;
++                    // Unsafe: out.finish() ;
                  }
              });
              t.start();
@@@ -317,7 -319,9 +319,9 @@@
                  @Override
                  public void run()
                  {
+                     out.start();
                      parse(input, lang, baseIRI, out);
 -                    //out.finish() ;
++                    // Unsafe: out.finish() ;
                  }
              });
              t.start();


[36/50] jena git commit: Reworking CONSTRUCT for quads.

Posted by an...@apache.org.
Reworking CONSTRUCT for quads.

GSOC JENA 491 final.


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

Branch: refs/heads/master
Commit: 077a413662c19f8ac063e236d7bdd5f652fef3cb
Parents: 3ac6a5a 602e3c0
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 09:39:26 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 09:39:43 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/atlas/web/AcceptList.java   | 145 ++--
 .../sparql/engine/http/QueryEngineHTTP.java     |  43 +-
 .../main/java/org/apache/jena/fuseki/DEF.java   |  17 +-
 .../jena/fuseki/servlets/ResponseDataset.java   |  20 +-
 .../jena/fuseki/servlets/ResponseModel.java     |   5 +
 .../jena/fuseki/servlets/SPARQL_Query.java      | 838 +++++++++----------
 .../java/org/apache/jena/fuseki/TestQuery.java  | 260 ++++--
 7 files changed, 699 insertions(+), 629 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/077a4136/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
----------------------------------------------------------------------
diff --cc jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
index 8801016,e3eb290..1d251c8
--- a/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/web/AcceptList.java
@@@ -54,27 -54,27 +54,24 @@@ public class AcceptLis
       * @param acceptItems
       */
      
--    public static AcceptList create(MediaType...acceptItems)
--    { 
--        AcceptList accepList = new AcceptList() ;
++    public static AcceptList create(MediaType... acceptItems) {
++        AcceptList accepList = new AcceptList();
          for ( MediaType mtype : acceptItems )
--            accepList.ranges.add(new MediaRange(mtype)) ;
--        return accepList ;
--    }        
++            accepList.ranges.add(new MediaRange(mtype));
++        return accepList;
++    }
  
      /**
       * Create a list of accept items from strings.
       * @param acceptStrings
       */
      
--    public static AcceptList create(String... acceptStrings)
--    {
--        AcceptList accepList = new AcceptList() ;
--        for ( String acceptString : acceptStrings )
--        {
--            accepList.ranges.add( new MediaRange( acceptString ) );
++    public static AcceptList create(String... acceptStrings) {
++        AcceptList accepList = new AcceptList();
++        for ( String acceptString : acceptStrings ) {
++            accepList.ranges.add(new MediaRange(acceptString));
          }
--        return accepList ;
++        return accepList;
      }
      
      /**
@@@ -82,26 -82,26 +79,23 @@@
       * @param headerString
       */
      
--    public AcceptList(String headerString)
--    {
++    public AcceptList(String headerString) {
          try {
--            ranges = stringToAcceptList(headerString) ;
--        } catch (Exception ex)
--        {
--            ex.printStackTrace(System.err) ;
--            Log.warn(this, "Unrecognized accept string (ignored): "+headerString) ;
--            ranges = new ArrayList<>() ;
++            ranges = stringToAcceptList(headerString);
++        }
++        catch (Exception ex) {
++            ex.printStackTrace(System.err);
++            Log.warn(this, "Unrecognized accept string (ignored): " + headerString);
++            ranges = new ArrayList<>();
          }
      }
--    
--    private /*public*/ boolean accepts(MediaRange aItem)
--    {
--        return match(aItem) != null ;
++
++    private /* public */ boolean accepts(MediaRange aItem) {
++        return match(aItem) != null;
      }
      
-     private List<MediaRange> entries()
 -    public List<MediaRange> entries()
--    {
--        return Collections.unmodifiableList(ranges) ;
++    public List<MediaRange> entries() {
++        return Collections.unmodifiableList(ranges);
      }
  
      private final static MediaRangeCompare comparator = new MediaRangeCompare() ;
@@@ -119,11 -119,11 +113,9 @@@
          double weight = -1 ;
          int exact = -1 ;
          
--        for ( MediaRange acceptItem : ranges )
--        {
--            if ( acceptItem.accepts(offer) )
--            {
--                boolean newChoice = false; 
++        for ( MediaRange acceptItem : ranges ) {
++            if ( acceptItem.accepts(offer) ) {
++                boolean newChoice = false;
                  if ( choice == null ) 
                      // First possibility.
                      newChoice = true ;
@@@ -134,12 -134,12 +126,11 @@@
                      // New possibility has same weight but better exactness.
                      newChoice = true ;
                  
--                if ( newChoice )
--                {
--                    choice = acceptItem ;
--                    weight = acceptItem.get_q() ;
--                    exact = acceptItem.subweight() ;
--                    continue ;
++                if ( newChoice ) {
++                    choice = acceptItem;
++                    weight = acceptItem.get_q();
++                    exact = acceptItem.subweight();
++                    continue;
                  }
                  //if ( weight == acceptItem.get_q() && !exact &&  
              }
@@@ -157,19 -157,19 +148,17 @@@
       * @return MediaType
       */
      
--    static public MediaType match(AcceptList proposalList, AcceptList offerList)
--    {
--        MediaRange cause = null ;
++    static public MediaType match(AcceptList proposalList, AcceptList offerList) {
++        MediaRange cause = null;
          MediaRange choice = null ;  // From the proposalList
          double weight = -1 ;
          int exactness = -1 ;
  
--        for ( MediaRange offer : offerList.entries() )
--        {
--            MediaRange m = proposalList.match(offer) ;
++        for ( MediaRange offer : offerList.entries() ) {
++            MediaRange m = proposalList.match(offer);
              if ( m == null )
--                continue ;
--            boolean newChoice = false ;
++                continue;
++            boolean newChoice = false;
              
              if ( choice == null )
                  newChoice = true ;
@@@ -185,51 -185,51 +174,43 @@@
              }
          }
          
--        
          if ( choice == null )
              return null ;
          return new MediaType(choice);
      }
      
--    public MediaRange first()
--    {
--        MediaRange choice = null ;
--        for ( MediaRange acceptItem : ranges )
--        {
++    public MediaRange first() {
++        MediaRange choice = null;
++        for ( MediaRange acceptItem : ranges ) {
              if ( choice != null && choice.get_q() >= acceptItem.get_q() )
--                continue ;
--            choice = acceptItem ;
++                continue;
++            choice = acceptItem;
          }
--        return choice ;
++        return choice;
      }
--    
++
      @Override
      public String toString() { return ranges.toString() ; }
      
--    private static List<MediaRange> stringToAcceptList(String s)
--    {
--        List<MediaRange> ranges = new ArrayList<>() ;
++    private static List<MediaRange> stringToAcceptList(String s) {
++        List<MediaRange> ranges = new ArrayList<>();
          if ( s == null )
--            return ranges ;
++            return ranges;
  
--        String[] x = s.split(",") ;
--        for ( String aX : x )
--        {
--            if ( aX.equals( "" ) )
--            {
++        String[] x = s.split(",");
++        for ( String aX : x ) {
++            if ( aX.equals("") ) {
                  continue;
              }
--            MediaRange mType = new MediaRange( aX );
--            ranges.add( mType );
++            MediaRange mType = new MediaRange(aX);
++            ranges.add(mType);
          }
--        return ranges ;
++        return ranges;
      }
      
--    private static class MediaRangeCompare implements Comparator<MediaRange>
--    {
++    private static class MediaRangeCompare implements Comparator<MediaRange> {
          @Override
--        public int compare(MediaRange mType1, MediaRange mType2)
--        {
++        public int compare(MediaRange mType1, MediaRange mType2) {
              int r = Double.compare(mType1.get_q(), mType2.get_q()) ;
              
              if ( r == 0 )
@@@ -238,8 -238,8 +219,7 @@@
              if ( r == 0 )
                  r = subCompare(mType1.getSubType(), mType2.getSubType()) ;
              
--//            if ( r == 0 )
--//            {
++//            if ( r == 0 ) {
  //                // This reverses the input order so that the rightmost elements is the
  //                // greatest and hence is the first mentioned in the accept range.
  //                
@@@ -254,19 -254,19 +234,18 @@@
              return r ;
          }
          
--        public int subCompare(String a, String b)
--        {
++        public int subCompare(String a, String b) {
              if ( a == null )
--                return 1 ;
++                return 1;
              if ( b == null )
--                return -1 ;
++                return -1;
              if ( a.equals("*") && b.equals("*") )
--                return 0 ;
++                return 0;
              if ( a.equals("*") )
--                return -1 ;
++                return -1;
              if ( b.equals("*") )
--                return 1 ;
--            return 0 ;
++                return 1;
++            return 0;
          }
      }
  }

http://git-wip-us.apache.org/repos/asf/jena/blob/077a4136/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
----------------------------------------------------------------------
diff --cc jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
index cab831f,abe4d1f..2fa9602
--- 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
@@@ -85,6 -87,9 +87,10 @@@ public class QueryEngineHTTP implement
      private String selectContentType    = defaultSelectHeader();
      private String askContentType       = defaultAskHeader();
      private String modelContentType     = defaultConstructHeader();
+     private String datasetContentType   = WebContent.defaultDatasetAcceptHeader;
+     
 -    private String httpResponseContentType;
++    // Received content type 
++    private String httpResponseContentType = null ;
      /**
       * Supported content types for SELECT queries
       */
@@@ -332,7 -337,11 +338,12 @@@
          this.authenticator = authenticator;
      }
  
-     @Override
++    /** The Content-Type response header received (null before the remote operation is attempted). */
+     public String getHttpResponseContentType() {
+ 		return httpResponseContentType;
+ 	}
+ 
+ 	@Override
      public ResultSet execSelect() {
          checkNotClosed() ;
          ResultSet rs = execResultSetInner() ;
@@@ -355,9 -364,10 +366,10 @@@
          retainedConnection = in; // This will be closed on close()
          retainedClient = httpQuery.shouldShutdownClient() ? httpQuery.getClient() : null;
  
--        // Don't assume the endpoint actually gives back the content type we
--        // asked for
++        // Don't assume the endpoint actually gives back the
++        // content type we asked for
          String actualContentType = httpQuery.getContentType();
+         httpResponseContentType = actualContentType;
  
          // If the server fails to return a Content-Type then we will assume
          // the server returned the type we asked for
@@@ -399,7 -409,20 +411,14 @@@
      
      @Override
      public Dataset execConstructDataset(){
-     	return null;
 -    	
 -    	DatasetGraph graph = DatasetGraphFactory.createMem();
 -    	
+         checkNotClosed() ;
 -        try
 -        {
 -        	execConstructQuads().forEachRemaining(graph::add);
 -        }
 -        finally
 -        {
++    	DatasetGraph dataset = DatasetGraphFactory.createMem();
++        try {
++        	execConstructQuads().forEachRemaining(dataset::add);
++        } finally {
+             this.close();
+         }
 -        return DatasetFactory.create(graph);
 -
++        return DatasetFactory.create(dataset);
      }
  
      @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/077a4136/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
----------------------------------------------------------------------
diff --cc jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
index e12493d,5242f4b..1464b99
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
@@@ -18,7 -18,15 +18,8 @@@
  
  package org.apache.jena.fuseki.servlets;
  
--import static org.apache.jena.riot.WebContent.charsetUTF8;
 -import static org.apache.jena.riot.WebContent.contentTypeNQuads;
 -import static org.apache.jena.riot.WebContent.contentTypeTriG;
 -import static org.apache.jena.riot.WebContent.contentTypeJSONLD;
 -import static org.apache.jena.riot.WebContent.contentTypeNTriples;
 -import static org.apache.jena.riot.WebContent.contentTypeRDFJSON;
 -import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
 -import static org.apache.jena.riot.WebContent.contentTypeTurtle;
++import static org.apache.jena.riot.WebContent.* ;
+ 
  import java.util.HashMap;
  import java.util.Map;
  
@@@ -41,17 -48,31 +42,28 @@@ import org.apache.jena.web.HttpSC
  public class ResponseDataset
  {
      // Short names for "output="
 -    private static final String contentOutputTriG          = "trig" ;
 -    private static final String contentOutputNQuads        = "n-quads" ;
+     private static final String contentOutputJSONLD        = "json-ld" ;
+     private static final String contentOutputJSONRDF       = "json-rdf" ;
+     private static final String contentOutputJSON          = "json" ;
+     private static final String contentOutputXML           = "xml" ;
+     private static final String contentOutputText          = "text" ;
+     private static final String contentOutputTTL           = "ttl" ;
+     private static final String contentOutputNT            = "nt" ;
 -
 +    private static final String contentOutputTriG          = "trig" ;
 +    private static final String contentOutputNQuads        = "n-quads" ;
  
- 
      public static Map<String,String> shortNamesModel = new HashMap<String, String>() ;
      static {
--
          // Some short names.  keys are lowercase.
--        
 -        ResponseOps.put(shortNamesModel, contentOutputNQuads,   contentTypeNQuads) ;
 -        ResponseOps.put(shortNamesModel, contentOutputTriG,     contentTypeTriG) ;
+         ResponseOps.put(shortNamesModel, contentOutputJSONLD,   contentTypeJSONLD) ;
+         ResponseOps.put(shortNamesModel, contentOutputJSONRDF,  contentTypeRDFJSON) ;
+         ResponseOps.put(shortNamesModel, contentOutputJSON,     contentTypeJSONLD) ;
+         ResponseOps.put(shortNamesModel, contentOutputXML,      contentTypeRDFXML) ;
+         ResponseOps.put(shortNamesModel, contentOutputText,     contentTypeTurtle) ;
+         ResponseOps.put(shortNamesModel, contentOutputTTL,      contentTypeTurtle) ;
+         ResponseOps.put(shortNamesModel, contentOutputNT,       contentTypeNTriples) ;
 +        ResponseOps.put(shortNamesModel, contentOutputNQuads,  WebContent.contentTypeNQuads) ;
 +        ResponseOps.put(shortNamesModel, contentOutputTriG,     WebContent.contentTypeTriG) ;
      }
  
      public static void doResponseDataset(HttpAction action, Dataset dataset) 

http://git-wip-us.apache.org/repos/asf/jena/blob/077a4136/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
----------------------------------------------------------------------
diff --cc jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
index 68cf016,0000000..e46fbe6
mode 100644,000000..100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
@@@ -1,135 -1,0 +1,140 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.jena.fuseki.servlets;
 +
 +import java.util.HashMap ;
 +import java.util.Map ;
 +
 +import javax.servlet.ServletOutputStream ;
 +import javax.servlet.http.HttpServletRequest ;
 +import javax.servlet.http.HttpServletResponse ;
 +
 +import org.apache.jena.atlas.web.MediaType ;
 +import org.apache.jena.fuseki.DEF ;
 +import org.apache.jena.fuseki.Fuseki ;
 +import org.apache.jena.fuseki.conneg.ConNeg ;
 +import org.apache.jena.fuseki.conneg.WebLib ;
 +import org.apache.jena.rdf.model.Model ;
 +import org.apache.jena.riot.Lang ;
 +import org.apache.jena.riot.RDFDataMgr ;
 +import org.apache.jena.riot.RDFLanguages ;
 +import static org.apache.jena.riot.WebContent.* ;
 +import org.apache.jena.web.HttpSC ;
 +
++// REPLACED by RssponseDataset
++// Kept here in case we need to revert it (Aug 2015)
++// Delete after release of Fusek 2.3.1 or earlier if specific confirmation
++// the new code is OK.
++
 +public class ResponseModel
 +{
 +    // Short names for "output="
 +    private static final String contentOutputJSONLD        = "json-ld" ;
 +    private static final String contentOutputJSONRDF       = "json-rdf" ;
 +    private static final String contentOutputJSON          = "json" ;
 +    private static final String contentOutputXML           = "xml" ;
 +    private static final String contentOutputText          = "text" ;
 +    private static final String contentOutputTTL           = "ttl" ;
 +    private static final String contentOutputNT            = "nt" ;
 +
 +    public static Map<String,String> shortNamesModel = new HashMap<String, String>() ;
 +    static {
 +
 +        // Some short names.  keys are lowercase.
 +        ResponseOps.put(shortNamesModel, contentOutputJSONLD,   contentTypeJSONLD) ;
 +        ResponseOps.put(shortNamesModel, contentOutputJSONRDF,  contentTypeRDFJSON) ;
 +        ResponseOps.put(shortNamesModel, contentOutputJSON,     contentTypeJSONLD) ;
 +        ResponseOps.put(shortNamesModel, contentOutputXML,      contentTypeRDFXML) ;
 +        ResponseOps.put(shortNamesModel, contentOutputText,     contentTypeTurtle) ;
 +        ResponseOps.put(shortNamesModel, contentOutputTTL,      contentTypeTurtle) ;
 +        ResponseOps.put(shortNamesModel, contentOutputNT,       contentTypeNTriples) ;
 +    }
 +
 +    public static void doResponseModel(HttpAction action, Model model) 
 +    {
 +        HttpServletRequest request = action.request ;
 +        HttpServletResponse response = action.response ;
 +        
 +        String mimeType = null ;        // Header request type 
 +
 +        // TODO Use MediaType throughout.
 +        MediaType i = ConNeg.chooseContentType(request, DEF.rdfOffer, DEF.acceptRDFXML) ;
 +        if ( i != null )
 +            mimeType = i.getContentType() ;
 +
 +        String outputField = ResponseOps.paramOutput(request, shortNamesModel) ;
 +        if ( outputField != null )
 +            mimeType = outputField ;
 +
 +        String writerMimeType = mimeType ;
 +
 +        if ( mimeType == null )
 +        {
 +            Fuseki.actionLog.warn("Can't find MIME type for response") ;
 +            String x = WebLib.getAccept(request) ;
 +            String msg ;
 +            if ( x == null )
 +                msg = "No Accept: header" ;
 +            else
 +                msg = "Accept: "+x+" : Not understood" ;
 +            ServletOps.error(HttpSC.NOT_ACCEPTABLE_406, msg) ;
 +        }
 +
 +        String contentType = mimeType ;
 +        String charset =     charsetUTF8 ;
 +
 +        String forceAccept = ResponseOps.paramForceAccept(request) ;
 +        if ( forceAccept != null )
 +        {
 +            contentType = forceAccept ;
 +            charset = charsetUTF8 ;
 +        }
 +
 +        Lang lang = RDFLanguages.contentTypeToLang(contentType) ;
 +        if ( lang == null )
 +            ServletOps.errorBadRequest("Can't determine output content type: "+contentType) ;
 +        
 +//        if ( rdfw instanceof RDFXMLWriterI )
 +//            rdfw.setProperty("showXmlDeclaration", "true") ;
 +
 +    //        // Write locally to check it's possible.
 +    //        // Time/space tradeoff.
 +    //        try {
 +    //            OutputStream out = new NullOutputStream() ;
 +    //            RDFDataMgr.write(out, model, lang) ;
 +    //            IO.flush(out) ;
 +    //        } catch (JenaException ex)
 +    //        {
 +    //            SPARQL_ServletBase.errorOccurred(ex) ;
 +    //        }
 +
 +        try {
 +            ResponseResultSet.setHttpResponse(action, contentType, charset) ; 
 +            response.setStatus(HttpSC.OK_200) ;
 +            ServletOutputStream out = response.getOutputStream() ;
 +            RDFDataMgr.write(out, model, lang) ;
 +            out.flush() ;
 +        }
 +        catch (Exception ex) { 
 +            action.log.info("Exception while writing the response model: "+ex.getMessage(), ex) ;
 +            ServletOps.errorOccurred("Exception while writing the response model: "+ex.getMessage(), ex) ;
 +        }
 +    }
 +}
 +

http://git-wip-us.apache.org/repos/asf/jena/blob/077a4136/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
----------------------------------------------------------------------
diff --cc jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
index 911d105,5a57da3..1c496f0
--- 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
@@@ -126,18 -187,47 +187,46 @@@ public class TestQuery extends BaseTes
          }
      }
      
- 
+     @Test
+     public void query_construct_02()
+     {
+         String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
+         try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+             Model result = qExec.execConstruct();
+             assertEquals(1, result.size());
+         }
+     }
      
-     @Test public void request_id_header_01() throws IOException
+     @Test
+     public void query_construct_conneg()
      {
-         String qs = Convert.encWWWForm("ASK{}") ;
-         URL u = new URL(serviceQuery+"?query="+qs);
-         HttpURLConnection conn = (HttpURLConnection) u.openConnection();
-         Assert.assertTrue(conn.getHeaderField("Fuseki-Request-ID") != null);
+         String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
+         for (MediaType type: DEF.rdfOffer.entries()){
+             String contentType = type.toHeaderString();
+             try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+                 qExec.setModelContentType(initConstructContentTypes( contentType ) );
+         	    qExec.execConstruct();
+                 assertEquals( contentType , qExec.getHttpResponseContentType());
+             }
+         }
      }
- 
-     private void execQuery(String queryString, int exceptedRowCount)
+     
+     @Test
+     public void query_construct_quad_conneg()
      {
+         String queryString = " CONSTRUCT { GRAPH ?g {?s ?p ?o} } WHERE { GRAPH ?g {?s ?p ?o}}" ;
+         Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+         for (MediaType type: DEF.quadsOffer.entries()){
+             String contentType = type.toHeaderString();
+             try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+                 qExec.setDatasetContentType(initConstructContentTypes( contentType ) );
+         	    qExec.execConstructQuads();
+                 assertEquals( contentType , qExec.getHttpResponseContentType());
+             }
+         }
+     }
 -   
+ 
+     private void execQuery(String queryString, int exceptedRowCount) {
          QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
          ResultSet rs = qExec.execSelect() ;
          int x = ResultSetFormatter.consume(rs) ;


[34/50] jena git commit: JENA-491 Fuseki Support: always use exeConstructQuads() at the server side, and discards ResponseModel.

Posted by an...@apache.org.
JENA-491 Fuseki Support: always use exeConstructQuads() at the server
side, and discards ResponseModel.

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

Branch: refs/heads/master
Commit: 75a7a77c9a92662a88c62dca5d80f85c1c478b78
Parents: de1d1c3
Author: confidencesun <co...@gmail.com>
Authored: Tue Aug 18 23:23:09 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Tue Aug 18 23:23:09 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/jena/fuseki/DEF.java   |  17 ++-
 .../jena/fuseki/servlets/ResponseDataset.java   |  28 +++-
 .../jena/fuseki/servlets/ResponseModel.java     | 135 -------------------
 .../jena/fuseki/servlets/SPARQL_Query.java      |  25 +---
 .../java/org/apache/jena/fuseki/TestQuery.java  |  12 +-
 5 files changed, 54 insertions(+), 163 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/75a7a77c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
index 953b724..46ef3be 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
@@ -31,11 +31,24 @@ public class DEF
     
     public static final AcceptList jsonOffer          = AcceptList.create(contentTypeJSON) ;
 
-    public static final AcceptList pureRdfOffer       = AcceptList.create(contentTypeTurtle, 
+    public static final AcceptList constructOffer     = AcceptList.create(contentTypeTurtle, 
                                                                           contentTypeTurtleAlt1,
                                                                           contentTypeTurtleAlt2,
                                                                           contentTypeNTriples,
-                                                                          contentTypeRDFXML
+                                                                          contentTypeNTriplesAlt,
+                                                                          contentTypeRDFXML,
+                                                                          contentTypeTriX,
+                                                                          contentTypeTriXxml,
+                                                                          contentTypeJSONLD,
+                                                                          contentTypeRDFJSON,
+                                                                          contentTypeRDFThrift,
+                                                                          
+                                                                          contentTypeTriG,
+                                                                          contentTypeTriGAlt1,
+                                                                          contentTypeTriGAlt2,
+                                                                          contentTypeNQuads,
+                                                                          contentTypeNQuadsAlt1,
+                                                                          contentTypeNQuadsAlt2
                                                                           ) ;
     
     public static final AcceptList rdfOffer           = AcceptList.create(contentTypeTurtle, 

http://git-wip-us.apache.org/repos/asf/jena/blob/75a7a77c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
index 91d615d..5242f4b 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
@@ -19,6 +19,8 @@
 package org.apache.jena.fuseki.servlets;
 
 import static org.apache.jena.riot.WebContent.charsetUTF8;
+import static org.apache.jena.riot.WebContent.contentTypeNQuads;
+import static org.apache.jena.riot.WebContent.contentTypeTriG;
 import static org.apache.jena.riot.WebContent.contentTypeJSONLD;
 import static org.apache.jena.riot.WebContent.contentTypeNTriples;
 import static org.apache.jena.riot.WebContent.contentTypeRDFJSON;
@@ -41,7 +43,6 @@ import org.apache.jena.query.Dataset;
 import org.apache.jena.riot.Lang;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RDFLanguages;
-import org.apache.jena.riot.WebContent;
 import org.apache.jena.web.HttpSC;
 
 public class ResponseDataset
@@ -49,6 +50,13 @@ public class ResponseDataset
     // Short names for "output="
     private static final String contentOutputTriG          = "trig" ;
     private static final String contentOutputNQuads        = "n-quads" ;
+    private static final String contentOutputJSONLD        = "json-ld" ;
+    private static final String contentOutputJSONRDF       = "json-rdf" ;
+    private static final String contentOutputJSON          = "json" ;
+    private static final String contentOutputXML           = "xml" ;
+    private static final String contentOutputText          = "text" ;
+    private static final String contentOutputTTL           = "ttl" ;
+    private static final String contentOutputNT            = "nt" ;
 
 
     public static Map<String,String> shortNamesModel = new HashMap<String, String>() ;
@@ -56,8 +64,15 @@ public class ResponseDataset
 
         // Some short names.  keys are lowercase.
         
-        ResponseOps.put(shortNamesModel, contentOutputNQuads,  WebContent.contentTypeNQuads) ;
-        ResponseOps.put(shortNamesModel, contentOutputTriG,     WebContent.contentTypeTriG) ;
+        ResponseOps.put(shortNamesModel, contentOutputNQuads,   contentTypeNQuads) ;
+        ResponseOps.put(shortNamesModel, contentOutputTriG,     contentTypeTriG) ;
+        ResponseOps.put(shortNamesModel, contentOutputJSONLD,   contentTypeJSONLD) ;
+        ResponseOps.put(shortNamesModel, contentOutputJSONRDF,  contentTypeRDFJSON) ;
+        ResponseOps.put(shortNamesModel, contentOutputJSON,     contentTypeJSONLD) ;
+        ResponseOps.put(shortNamesModel, contentOutputXML,      contentTypeRDFXML) ;
+        ResponseOps.put(shortNamesModel, contentOutputText,     contentTypeTurtle) ;
+        ResponseOps.put(shortNamesModel, contentOutputTTL,      contentTypeTurtle) ;
+        ResponseOps.put(shortNamesModel, contentOutputNT,       contentTypeNTriples) ;
     }
 
     public static void doResponseDataset(HttpAction action, Dataset dataset) 
@@ -68,7 +83,7 @@ public class ResponseDataset
         String mimeType = null ;        // Header request type 
 
         // TODO Use MediaType throughout.
-        MediaType i = ConNeg.chooseContentType(request, DEF.quadsOffer, DEF.acceptNQuads) ;
+        MediaType i = ConNeg.chooseContentType(request, DEF.constructOffer, DEF.acceptNQuads) ;
         if ( i != null )
             mimeType = i.getContentType() ;
 
@@ -122,7 +137,10 @@ public class ResponseDataset
             ResponseResultSet.setHttpResponse(action, contentType, charset) ; 
             response.setStatus(HttpSC.OK_200) ;
             ServletOutputStream out = response.getOutputStream() ;
-            RDFDataMgr.write(out, dataset, lang) ;
+            if (RDFLanguages.isQuads(lang))
+                RDFDataMgr.write(out, dataset, lang) ;
+            else 
+            	RDFDataMgr.write(out, dataset.getDefaultModel(), lang) ;
             out.flush() ;
         }
         catch (Exception ex) { 

http://git-wip-us.apache.org/repos/asf/jena/blob/75a7a77c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
deleted file mode 100644
index 68cf016..0000000
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseModel.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * 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 java.util.HashMap ;
-import java.util.Map ;
-
-import javax.servlet.ServletOutputStream ;
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.atlas.web.MediaType ;
-import org.apache.jena.fuseki.DEF ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.conneg.ConNeg ;
-import org.apache.jena.fuseki.conneg.WebLib ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.riot.RDFLanguages ;
-import static org.apache.jena.riot.WebContent.* ;
-import org.apache.jena.web.HttpSC ;
-
-public class ResponseModel
-{
-    // Short names for "output="
-    private static final String contentOutputJSONLD        = "json-ld" ;
-    private static final String contentOutputJSONRDF       = "json-rdf" ;
-    private static final String contentOutputJSON          = "json" ;
-    private static final String contentOutputXML           = "xml" ;
-    private static final String contentOutputText          = "text" ;
-    private static final String contentOutputTTL           = "ttl" ;
-    private static final String contentOutputNT            = "nt" ;
-
-    public static Map<String,String> shortNamesModel = new HashMap<String, String>() ;
-    static {
-
-        // Some short names.  keys are lowercase.
-        ResponseOps.put(shortNamesModel, contentOutputJSONLD,   contentTypeJSONLD) ;
-        ResponseOps.put(shortNamesModel, contentOutputJSONRDF,  contentTypeRDFJSON) ;
-        ResponseOps.put(shortNamesModel, contentOutputJSON,     contentTypeJSONLD) ;
-        ResponseOps.put(shortNamesModel, contentOutputXML,      contentTypeRDFXML) ;
-        ResponseOps.put(shortNamesModel, contentOutputText,     contentTypeTurtle) ;
-        ResponseOps.put(shortNamesModel, contentOutputTTL,      contentTypeTurtle) ;
-        ResponseOps.put(shortNamesModel, contentOutputNT,       contentTypeNTriples) ;
-    }
-
-    public static void doResponseModel(HttpAction action, Model model) 
-    {
-        HttpServletRequest request = action.request ;
-        HttpServletResponse response = action.response ;
-        
-        String mimeType = null ;        // Header request type 
-
-        // TODO Use MediaType throughout.
-        MediaType i = ConNeg.chooseContentType(request, DEF.rdfOffer, DEF.acceptRDFXML) ;
-        if ( i != null )
-            mimeType = i.getContentType() ;
-
-        String outputField = ResponseOps.paramOutput(request, shortNamesModel) ;
-        if ( outputField != null )
-            mimeType = outputField ;
-
-        String writerMimeType = mimeType ;
-
-        if ( mimeType == null )
-        {
-            Fuseki.actionLog.warn("Can't find MIME type for response") ;
-            String x = WebLib.getAccept(request) ;
-            String msg ;
-            if ( x == null )
-                msg = "No Accept: header" ;
-            else
-                msg = "Accept: "+x+" : Not understood" ;
-            ServletOps.error(HttpSC.NOT_ACCEPTABLE_406, msg) ;
-        }
-
-        String contentType = mimeType ;
-        String charset =     charsetUTF8 ;
-
-        String forceAccept = ResponseOps.paramForceAccept(request) ;
-        if ( forceAccept != null )
-        {
-            contentType = forceAccept ;
-            charset = charsetUTF8 ;
-        }
-
-        Lang lang = RDFLanguages.contentTypeToLang(contentType) ;
-        if ( lang == null )
-            ServletOps.errorBadRequest("Can't determine output content type: "+contentType) ;
-        
-//        if ( rdfw instanceof RDFXMLWriterI )
-//            rdfw.setProperty("showXmlDeclaration", "true") ;
-
-    //        // Write locally to check it's possible.
-    //        // Time/space tradeoff.
-    //        try {
-    //            OutputStream out = new NullOutputStream() ;
-    //            RDFDataMgr.write(out, model, lang) ;
-    //            IO.flush(out) ;
-    //        } catch (JenaException ex)
-    //        {
-    //            SPARQL_ServletBase.errorOccurred(ex) ;
-    //        }
-
-        try {
-            ResponseResultSet.setHttpResponse(action, contentType, charset) ; 
-            response.setStatus(HttpSC.OK_200) ;
-            ServletOutputStream out = response.getOutputStream() ;
-            RDFDataMgr.write(out, model, lang) ;
-            out.flush() ;
-        }
-        catch (Exception ex) { 
-            action.log.info("Exception while writing the response model: "+ex.getMessage(), ex) ;
-            ServletOps.errorOccurred("Exception while writing the response model: "+ex.getMessage(), ex) ;
-        }
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/75a7a77c/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 cd0c410..8e81426 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,14 +45,10 @@ import javax.servlet.http.HttpServletResponse ;
 
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.io.IndentedLineBuffer ;
-import org.apache.jena.atlas.web.AcceptList ;
 import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.atlas.web.MediaType ;
-import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiException ;
 import org.apache.jena.fuseki.FusekiLib ;
-import org.apache.jena.fuseki.conneg.WebLib ;
 import org.apache.jena.query.* ;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.riot.web.HttpNames ;
@@ -319,18 +315,9 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
         }
 
         if ( query.isConstructType() ) {
-            
-            MediaType rdfMediaType = AcceptList.match( DEF.pureRdfOffer, new AcceptList( WebLib.getAccept(action.getRequest())));
-            
-            if ( ! rdfMediaType.getType().equals("*") ) {
-                Model model = queryExecution.execConstruct();
-                action.log.info(format("[%d] exec/construct/model", action.id));
-                return new SPARQLResult(model);
-            } else  {
-                Dataset dataset = queryExecution.execConstructDataset();
-                action.log.info(format("[%d] exec/construct/dataset", action.id));
-                return new SPARQLResult(dataset);
-            }
+            Dataset dataset = queryExecution.execConstructDataset();
+            action.log.info(format("[%d] exec/construct/dataset", action.id));
+            return new SPARQLResult(dataset);
         }
 
         if ( query.isDescribeType() ) {
@@ -391,12 +378,10 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
     protected void sendResults(HttpAction action, SPARQLResult result, Prologue qPrologue) {
         if ( result.isResultSet() )
             ResponseResultSet.doResponseResultSet(action, result.getResultSet(), qPrologue) ;
-        else if ( result.isGraph() )
-            ResponseModel.doResponseModel(action, result.getModel()) ;
-        else if ( result.isBoolean() )
-            ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
         else if ( result.isDataset() )
             ResponseDataset.doResponseDataset(action, result.getDataset());
+        else if ( result.isBoolean() )
+            ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
         else
             ServletOps.errorOccurred("Unknown or invalid result type") ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/75a7a77c/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 4cf5b1b..e721d9d 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
@@ -42,6 +42,7 @@ import org.apache.jena.sparql.sse.Item ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.apache.jena.sparql.sse.builders.BuilderResultSet ;
 import org.apache.jena.sparql.util.Convert ;
+import org.apache.jena.rdf.model.*;
 import org.junit.AfterClass ;
 import org.junit.Assert ;
 import org.junit.BeforeClass ;
@@ -169,7 +170,6 @@ public class TestQuery extends BaseTest {
             Dataset result = qExec.execConstructDataset();
             Assert.assertTrue(result.asDatasetGraph().find().hasNext());
             Assert.assertEquals( "http://eg/g", result.asDatasetGraph().find().next().getGraph().getURI());
-
         }
     }
     
@@ -182,6 +182,16 @@ public class TestQuery extends BaseTest {
             Assert.assertTrue(result.hasNext());
         }
     }
+    
+    @Test
+    public void query_construct_02()
+    {
+        String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+            Model result = qExec.execConstruct();
+            assertEquals(1, result.size());
+        }
+    }
 
     private void execQuery(String queryString, int exceptedRowCount) {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;


[04/50] jena git commit: Just new HashMap<> is okay after Java 7.

Posted by an...@apache.org.
Just new HashMap<> is okay after Java 7.

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

Branch: refs/heads/master
Commit: 82ef69b6563fd811193eaf74bfd436c47476b262
Parents: 68254a2
Author: confidencesun <co...@gmail.com>
Authored: Thu Jul 30 03:59:55 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Thu Jul 30 03:59:55 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/82ef69b6/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
index eac508e..bb2a01b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/arq/ARQParserBase.java
@@ -82,7 +82,7 @@ class ARQParserBase
     protected ElementGroup createQueryPattern(Template t){
         ElementGroup elg = new ElementGroup();
         List<Quad> quads = t.getQuads();
-        HashMap<Node, BasicPattern> graphs = new HashMap<Node, BasicPattern>();
+        HashMap<Node, BasicPattern> graphs = new HashMap<>();
         for (Quad q: quads){
           BasicPattern bgp = graphs.get(q.getGraph());
           if (bgp == null){


[23/50] jena git commit: Add more tests of construct quad: 1) duplication; 3) prefix; 3) short form

Posted by an...@apache.org.
Add more tests of construct quad: 1) duplication; 3) prefix; 3) short
form

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

Branch: refs/heads/master
Commit: fcbbf9b6549ccabcc9786a9fb59f2f2bde42c2f6
Parents: 54e48f3
Author: confidencesun <co...@gmail.com>
Authored: Fri Aug 14 22:25:41 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Fri Aug 14 22:25:41 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/sparql/api/TestAPI.java     | 83 ++++++++++++++++++++
 1 file changed, 83 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/fcbbf9b6/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 ecc576a..5630804 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
@@ -28,6 +28,7 @@ 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;
@@ -448,6 +449,88 @@ public class TestAPI extends BaseTest
         assertTrue(IsoMatcher.isomorphic( expected, result.asDatasetGraph()) );
     }
     
+    // Allow duplicated template quads in execConstructQuads()
+    @Test public void testARQConstructQuad_Duplicate_3() {
+        String queryString = "CONSTRUCT { GRAPH ?g1 {?s ?p ?o} GRAPH ?g1 {?s ?p ?o} } WHERE { ?s ?p ?o. GRAPH ?g1 {?s1 ?p1 ?o1} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Quad> ts = qExec.execConstructQuads();
+        long count = 0;
+        Quad expected = Quad.create( g1.asNode(), s.asNode(), p.asNode(), o.asNode());
+        while (ts.hasNext()) {
+            count++;
+            Quad qd = ts.next();
+            assertEquals(expected, qd);
+        }
+        assertEquals(6, count); // 6 duplicated quads
+    }
+    
+    // Allow duplicated template quads in execConstructQuads()
+    @Test public void testARQConstructQuad_Prefix() {
+        String queryString = "PREFIX :   <http://example/ns#> CONSTRUCT { GRAPH :g1 { ?s :p ?o} } WHERE { ?s ?p ?o }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Quad> quads = qExec.execConstructQuads();
+        DatasetGraph result = DatasetGraphFactory.createMem();
+        long count = 0;
+        while (quads.hasNext()) {
+            count++;
+            Quad qd = quads.next();
+            result.add(qd);
+        }
+        
+        DatasetGraph expected = DatasetGraphFactory.createMem();
+        expected.add(g1.asNode(), s.asNode(), p.asNode(), o.asNode());
+        
+        assertEquals(1, count); 
+        assertTrue(IsoMatcher.isomorphic( expected, result) );
+        
+    }
+    
+    // Test construct triple short form:
+    @Test public void testARQConstructQuad_ShortForm_1() {
+        String queryString = "CONSTRUCT WHERE {?s ?p ?o }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Model result = ModelFactory.createDefaultModel();
+        qExec.execConstruct(result);
+
+        assertEquals(1, result.size());
+        assertTrue(dft.isIsomorphicWith(result));
+    }
+    
+    // Test construct quad short form:
+    @Test public void testARQConstructQuad_ShortForm_2() {
+        String queryString = "CONSTRUCT WHERE { GRAPH ?g {?s ?p ?o} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        Dataset result = qExec.execConstructDataset();
+        
+        Dataset expected = DatasetFactory.createMem();
+        expected.addNamedModel(g1.getURI(), m);
+        
+        assertTrue(IsoMatcher.isomorphic( expected.asDatasetGraph(), result.asDatasetGraph()) );
+    }
+    
+    // Test bad construct quad short form:
+    @Test public void testARQConstructQuad_ShortForm_bad() {
+        String queryString = "CONSTRUCT WHERE { GRAPH ?g {?s ?p ?o. FILTER isIRI(?o)}  }";
+        try {
+        	QueryFactory.create(queryString, Syntax.syntaxARQ);
+        }catch (QueryParseException e){
+        	return;
+        }
+        fail("Short form of construct quad MUST be simple graph patterns!");
+    }
+    
+    
     private QueryExecution makeQExec(String queryString)
     {
         Query q = QueryFactory.create(queryString) ;


[31/50] jena git commit: JENA-491 Fuseki Support: Add support of exeConstructDataset() of QueryEngineHTTP

Posted by an...@apache.org.
JENA-491 Fuseki Support: Add support of exeConstructDataset() of
QueryEngineHTTP

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

Branch: refs/heads/master
Commit: 2bc9fe621fbeede59885aada83ae361747513b8e
Parents: 5939a35
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 17 21:45:05 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 17 21:45:05 2015 +0800

----------------------------------------------------------------------
 .../jena/sparql/engine/http/QueryEngineHTTP.java   | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2bc9fe62/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 cab831f..84c2c10 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
@@ -36,6 +36,8 @@ import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.riot.* ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.ARQException ;
+import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.engine.ResultSetCheckCondition ;
 import org.apache.jena.sparql.graph.GraphFactory ;
@@ -399,7 +401,20 @@ public class QueryEngineHTTP implements QueryExecution {
     
     @Override
     public Dataset execConstructDataset(){
-    	return null;
+    	
+    	DatasetGraph graph = DatasetGraphFactory.createMem();
+    	
+        checkNotClosed() ;
+        try
+        {
+        	execConstructQuads().forEachRemaining(graph::add);
+        }
+        finally
+        {
+            this.close();
+        }
+        return DatasetFactory.create(graph);
+
     }
 
     @Override


[25/50] jena git commit: Merge remote-tracking branch 'origin/master' into JENA-491

Posted by an...@apache.org.
Merge remote-tracking branch 'origin/master' into JENA-491

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

Branch: refs/heads/master
Commit: 69f1ee27cbc8a3f62199e0a3760330f775befe61
Parents: 0eb28d8 6f39740
Author: confidencesun <co...@gmail.com>
Authored: Sat Aug 15 16:33:44 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Sat Aug 15 16:33:44 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 241 +++++++++--------
 .../org/apache/jena/sparql/syntax/Template.java |   6 +-
 .../org/apache/jena/sparql/api/TestAPI.java     | 262 ++++++++++++++++++-
 jena-arq/testing/ARQ/Construct/manifest.ttl     |  64 +++++
 .../ARQ/Construct/q-construct-quad-syntax-1.arq |   3 +
 .../ARQ/Construct/q-construct-quad-syntax-2.arq |   3 +
 .../ARQ/Construct/q-construct-quad-syntax-3.arq |   4 +
 .../ARQ/Construct/q-construct-quad-syntax-4.arq |   9 +
 .../ARQ/Construct/q-construct-quad-syntax-5.arq |   9 +
 .../ARQ/Construct/q-construct-quad-syntax-6.arq |  14 +
 .../ARQ/Construct/q-construct-quad-syntax-7.arq |   7 +
 .../ARQ/Construct/q-construct-quad-syntax-8.arq |   9 +
 .../Construct/results-construct-quad-data-2.ttl |   2 +
 .../results-construct-quad-syntax-1.trig        |   2 +
 .../results-construct-quad-syntax-2.trig        |   0
 .../results-construct-quad-syntax-3.ttl         |   2 +
 .../results-construct-quad-syntax-4.trig        |   6 +
 .../results-construct-quad-syntax-5.trig        |   6 +
 .../results-construct-quad-syntax-6.trig        |   6 +
 .../results-construct-quad-syntax-7.ttl         |   2 +
 .../results-construct-quad-syntax-8.trig        |   0
 21 files changed, 531 insertions(+), 126 deletions(-)
----------------------------------------------------------------------



[06/50] jena git commit: fix try-with-resource warnings

Posted by an...@apache.org.
fix try-with-resource warnings

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

Branch: refs/heads/master
Commit: 69f5ee2c35fcb925be15f092740a1cb98f746c6b
Parents: 4d8fd79
Author: confidencesun <co...@gmail.com>
Authored: Tue Aug 4 23:51:23 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Tue Aug 4 23:51:23 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 118 +++++++++++--------
 1 file changed, 67 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/69f5ee2c/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index 4ef097e..dcc587b 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -56,95 +56,111 @@ public class ExampleConstructQuads {
 		model1.add(s1, p1, o1);
 		dataset.addNamedModel("http://eg.com/g1", model1);
 
-
 		// construct named graph
 		System.out.println("construct named graph:");
 		String queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
 		Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		QueryExecution qexec = QueryExecutionFactory.create(query, dataset);
-		Iterator<Quad> quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
+
 		// construct default graph 1
 		System.out.println("construct default graph 1:");
 		queryString = "CONSTRUCT {  {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
+
 		// construct default graph 2
 		System.out.println("construct default graph 2:");
 		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
+
 		// construct triples
 		System.out.println("construct default graph 2:");
 		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		Iterator<Triple> triples = qexec.execConstructTriples();
-		PrintUtil.printOut(triples);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Triple> triples = qexec.execConstructTriples();
+			PrintUtil.printOut(triples);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
-		//construct dataset
+
+		// construct dataset
 		System.out.println("construct dataset:");
 		queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		Dataset d = qexec.execConstructDataset();
-		RDFDataMgr.write(System.out, d, Lang.TRIG) ;
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Dataset d = qexec.execConstructDataset();
+			RDFDataMgr.write(System.out, d, Lang.TRIG);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
-		//short form 1
+
+		// short form 1
 		System.out.println("short form 1:");
 		queryString = "CONSTRUCT WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
-		//short form 2
+
+		// short form 2
 		System.out.println("short form 2:");
 		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
-		//short form 3
+
+		// short form 3
 		System.out.println("short form 3:");
 		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		triples = qexec.execConstructTriples();
-		PrintUtil.printOut(triples);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Triple> triples = qexec.execConstructTriples();
+			PrintUtil.printOut(triples);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
-		
-		//short form 4
+
+		// short form 4
 		System.out.println("short form 4:");
 		queryString = "CONSTRUCT WHERE{ {<http://eg.com/s> <http://eg.com/p> ?o} }";
 		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-		qexec = QueryExecutionFactory.create(query, dataset);
-		quads = qexec.execConstructQuads();
-		PrintUtil.printOut(quads);
-		qexec.close();
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+			qexec.close();
+		}
 		arq.qparse.main("--in", "arq", queryString);
 
 	}


[21/50] jena git commit: Add 4 tests of the combinations of 2 types of construct query strings and 2 kinds of query methods (exeContructTriples(), exeConstructQuads) for ARQ.

Posted by an...@apache.org.
Add 4 tests of the combinations of 2 types of construct query strings
and 2 kinds of query methods (exeContructTriples(), exeConstructQuads)
for ARQ.

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

Branch: refs/heads/master
Commit: 03a321ffde733ac2d493200e82b1f31d7529fe3f
Parents: f27623d
Author: confidencesun <co...@gmail.com>
Authored: Fri Aug 14 16:31:08 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Fri Aug 14 16:31:08 2015 +0800

----------------------------------------------------------------------
 .../org/apache/jena/sparql/api/TestAPI.java     | 134 +++++++++++++++++--
 1 file changed, 125 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/03a321ff/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 370507c..5393cda 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
@@ -18,16 +18,36 @@
 
 package org.apache.jena.sparql.api;
 
-import java.util.Iterator ;
+import java.util.Iterator;
 
-import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.sparql.graph.GraphFactory ;
-import org.apache.jena.vocabulary.OWL ;
-import org.apache.jena.vocabulary.RDF ;
-import org.junit.Test ;
+import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.graph.Triple;
+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.QuerySolution;
+import org.apache.jena.query.QuerySolutionMap;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.query.Syntax;
+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.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;
+import org.apache.jena.sparql.graph.GraphFactory;
+import org.apache.jena.sparql.util.IsoMatcher;
+import org.apache.jena.sparql.util.ModelUtils;
+import org.apache.jena.vocabulary.OWL;
+import org.apache.jena.vocabulary.RDF;
+import org.junit.Test;
 
 public class TestAPI extends BaseTest
 {
@@ -38,10 +58,19 @@ public class TestAPI extends BaseTest
     static Property p1 = m.createProperty(ns+"p1") ;
     static Property p2 = m.createProperty(ns+"p2") ;
     static Property p3 = m.createProperty(ns+"p3") ;
+    static Model dft = GraphFactory.makeJenaDefaultModel() ;
+    static Resource s = dft.createResource(ns+"s") ;
+    static Property p = dft.createProperty(ns+"p") ;
+    static Resource o = dft.createResource(ns+"o") ;
+    static Resource g1 = dft.createResource(ns+"g1") ;
+    static Dataset d = null;
     static  {
         m.add(r1, p1, "x1") ;
         m.add(r1, p2, "X2") ; // NB Capital
         m.add(r1, p3, "y1") ;
+        dft.add(s, p, o) ;
+        d = DatasetFactory.create(dft);
+        d.addNamedModel(g1.getURI(), m);
     }
     
     @Test public void testInitialBindingsConstruct1()
@@ -298,6 +327,93 @@ public class TestAPI extends BaseTest
 //        }
 //    }
     
+    // ARQ Construct Quad Tests:
+    // Two types of query strings: a) construct triple string; b) construct quad string;
+    // Two kinds of query methods: 1) execTriples(); 2) execQuads();
+    
+    // Test a)+1)
+    @Test public void testARQConstructQuad_a_1() {
+        String queryString = "CONSTRUCT { ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p ?o } }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Triple> ts = qExec.execConstructTriples();
+        Model result = ModelFactory.createDefaultModel();
+        while (ts.hasNext()) {
+            Triple t = ts.next();
+            Statement stmt = ModelUtils.tripleToStatement(result, t);
+            if ( stmt != null )
+                result.add(stmt);
+        }
+        assertEquals(3, result.size());
+        assertTrue(m.isIsomorphicWith(result));
+    }
+    
+    // Test b)+2)
+    @Test public void testARQConstructQuad_b_2() {
+        String queryString = "CONSTRUCT { GRAPH ?g1 {?s ?p ?o} } WHERE { ?s ?p ?o. GRAPH ?g1 {?s1 ?p1 'x1'} }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Quad> ts = qExec.execConstructQuads();
+        DatasetGraph result = DatasetGraphFactory.createMem();
+        long count = 0;
+        while (ts.hasNext()) {
+            count++;
+            Quad qd = ts.next();
+            result.add(qd);
+        }
+        
+        DatasetGraph expected = DatasetGraphFactory.createMem();
+        expected.add(g1.asNode(), s.asNode(), p.asNode(), o.asNode());
+        
+        assertEquals(1, count); // 3 duplicated quads
+        assertTrue(IsoMatcher.isomorphic( expected, result) );
+        
+    }
+    
+    // Test a)+2): Quads constructed in the default graph
+    @Test public void testARQConstructQuad_a_2() {
+        String queryString = "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Quad> ts = qExec.execConstructQuads();
+        DatasetGraph result = DatasetGraphFactory.createMem();
+        long count = 0;
+        while (ts.hasNext()) {
+            count++;
+            result.add( ts.next() );
+        }
+        DatasetGraph expected = DatasetGraphFactory.createMem();
+        expected.add(Quad.defaultGraphNodeGenerated, s.asNode(), p.asNode(), o.asNode());
+        assertEquals(1, count);
+        assertTrue(IsoMatcher.isomorphic( expected, result) );
+        
+    }
+    
+    // Test b)+1): Projection on default graph, ignoring constructing named graphs
+    @Test public void testARQConstructQuad_b_1() {
+        String queryString = "CONSTRUCT { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 } } WHERE { ?s ?p ?o. GRAPH ?g1 { ?s1 ?p1 ?o1 } }";
+        Query q = QueryFactory.create(queryString, Syntax.syntaxARQ);
+        
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        
+        Iterator<Triple> ts = qExec.execConstructTriples();
+        Model result = ModelFactory.createDefaultModel();
+        while (ts.hasNext()) {
+            Triple t = ts.next();
+            Statement stmt = ModelUtils.tripleToStatement(result, t);
+            if ( stmt != null )
+                result.add(stmt);
+        }
+        assertEquals(1, result.size());
+        assertTrue(dft.isIsomorphicWith(result));
+    }
+    
     private QueryExecution makeQExec(String queryString)
     {
         Query q = QueryFactory.create(queryString) ;


[32/50] jena git commit: JENA-491 Fuseki Support: Test exeConstructDataset() of QueryEngineHTTP

Posted by an...@apache.org.
JENA-491 Fuseki Support: Test exeConstructDataset() of
QueryEngineHTTP

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

Branch: refs/heads/master
Commit: de1d1c33cd64b88d3a56127c4c434c2b39c1e196
Parents: 2bc9fe6
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 17 21:45:05 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 17 21:54:05 2015 +0800

----------------------------------------------------------------------
 .../test/java/org/apache/jena/fuseki/TestQuery.java   | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/de1d1c33/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 21f89fc..4cf5b1b 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
@@ -160,6 +160,20 @@ public class TestQuery extends BaseTest {
     }
     
     @Test
+    public void query_construct_quad_02()
+    {
+        String queryString = " CONSTRUCT { GRAPH <http://eg/g> {?s ?p ?oq} } WHERE {?s ?p ?oq}" ;
+        Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+               
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+            Dataset result = qExec.execConstructDataset();
+            Assert.assertTrue(result.asDatasetGraph().find().hasNext());
+            Assert.assertEquals( "http://eg/g", result.asDatasetGraph().find().next().getGraph().getURI());
+
+        }
+    }
+    
+    @Test
     public void query_construct_01()
     {
         String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;


[27/50] jena git commit: Merge branch 'master' into JENA-491-construct-quads

Posted by an...@apache.org.
Merge branch 'master' into JENA-491-construct-quads


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

Branch: refs/heads/master
Commit: 5aa889c7113493c5b8ef6449d8b3d1ce57f5f1f4
Parents: bdb1101 43efe52
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Aug 17 14:03:22 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Aug 17 14:03:22 2015 +0100

----------------------------------------------------------------------
 apache-jena/bin/tdbloader2                      |   4 +-
 apache-jena/bin/tdbloader2common                |   6 +-
 apache-jena/bin/tdbloader2data                  |   6 +-
 apache-jena/bin/tdbloader2index                 |   4 +-
 .../main/java/arq/cmdline/ModLangOutput.java    |  33 +-
 .../java/org/apache/jena/riot/RDFDataMgr.java   | 422 +++++++------------
 .../jena/riot/adapters/JenaReadersWriters.java  |   3 -
 .../src/main/java/riotcmd/CmdLangParse.java     |  79 ++--
 8 files changed, 203 insertions(+), 354 deletions(-)
----------------------------------------------------------------------



[18/50] jena git commit: Fix default graph projection for exeConstructTriples();

Posted by an...@apache.org.
Fix default graph projection for exeConstructTriples();

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

Branch: refs/heads/master
Commit: f27623dcf073638a92c55a580a891bc6008e51bf
Parents: e819ac3
Author: confidencesun <co...@gmail.com>
Authored: Wed Aug 12 15:11:00 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Wed Aug 12 15:11:00 2015 +0800

----------------------------------------------------------------------
 .../constructquads/ExampleConstructQuads.java   | 241 ++++++++++---------
 .../org/apache/jena/sparql/syntax/Template.java |   6 +-
 2 files changed, 130 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f27623dc/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
index ff54915..dab9007 100644
--- a/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
+++ b/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
@@ -46,119 +46,132 @@ import org.apache.jena.util.PrintUtil;
 public class ExampleConstructQuads {
 	public static void main(String[] args) throws FileNotFoundException, IOException {
 
-//		// create testing data :
-//		// 1) default graph data
-//		Model model = ModelFactory.createDefaultModel();
-//		Resource s = model.createResource("http://eg.com/s");
-//		Property p = model.createProperty("http://eg.com/p");
-//		Resource o = model.createResource("http://eg.com/o");
-//		model.add(s, p, o);
-//		Dataset dataset = DatasetFactory.create(model);
-//		// 2) named graph data
-//		Model model1 = ModelFactory.createDefaultModel();
-//		Resource s1 = model.createResource("http://eg.com/s1");
-//		Property p1 = model.createProperty("http://eg.com/p1");
-//		Resource o1 = model.createResource("http://eg.com/o1");
-//		model1.add(s1, p1, o1);
-//		dataset.addNamedModel("http://eg.com/g1", model1);
-//
-//		// construct named graph
-//		System.out.println("construct named graph:");
-//		String queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// construct default graph 1
-//		System.out.println("construct default graph 1:");
-//		queryString = "CONSTRUCT {  {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// construct default graph 2
-//		System.out.println("construct default graph 2:");
-//		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// construct triples
-//		System.out.println("construct default graph 2:");
-//		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Triple> triples = qexec.execConstructTriples();
-//			PrintUtil.printOut(triples);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// construct dataset
-//		System.out.println("construct dataset:");
-//		queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Dataset d = qexec.execConstructDataset();
-//			RDFDataMgr.write(System.out, d, Lang.TRIG);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// short form 1
-//		System.out.println("short form 1:");
-//		queryString = "CONSTRUCT WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// short form 2
-//		System.out.println("short form 2:");
-//		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// short form 3
-//		System.out.println("short form 3:");
-//		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Triple> triples = qexec.execConstructTriples();
-//			PrintUtil.printOut(triples);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
-//
-//		// short form 4
-//		System.out.println("short form 4:");
-//		queryString = "CONSTRUCT WHERE{ {<http://eg.com/s> <http://eg.com/p> ?o} }";
-//		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-//		try (QueryExecution qexec = QueryExecutionFactory
-//				.create(query, dataset)) {
-//			Iterator<Quad> quads = qexec.execConstructQuads();
-//			PrintUtil.printOut(quads);
-//		}
-//		arq.qparse.main("--in", "arq", queryString);
+		// create testing data :
+		// 1) default graph data
+		Model model = ModelFactory.createDefaultModel();
+		Resource s = model.createResource("http://eg.com/s");
+		Property p = model.createProperty("http://eg.com/p");
+		Resource o = model.createResource("http://eg.com/o");
+		model.add(s, p, o);
+		Dataset dataset = DatasetFactory.create(model);
+		// 2) named graph data
+		Model model1 = ModelFactory.createDefaultModel();
+		Resource s1 = model.createResource("http://eg.com/s1");
+		Property p1 = model.createProperty("http://eg.com/p1");
+		Resource o1 = model.createResource("http://eg.com/o1");
+		model1.add(s1, p1, o1);
+		dataset.addNamedModel("http://eg.com/g1", model1);
+		
+		PrintUtil.printOut(dataset.asDatasetGraph().find());
+
+		// construct named graph
+		System.out.println("construct named graph:");
+		String queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// construct default graph 1
+		System.out.println("construct default graph 1:");
+		queryString = "CONSTRUCT {  {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// construct default graph 2
+		System.out.println("construct default graph 2:");
+		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// construct triples
+		System.out.println("construct default graph 2:");
+		queryString = "CONSTRUCT {<http://eg.com/s1> <http://eg.com/p1> ?o}  WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Triple> triples = qexec.execConstructTriples();
+			PrintUtil.printOut(triples);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// construct dataset
+		System.out.println("construct dataset:");
+		queryString = "CONSTRUCT { GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Dataset d = qexec.execConstructDataset();
+			RDFDataMgr.write(System.out, d, Lang.TRIG);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// short form 1
+		System.out.println("short form 1:");
+		queryString = "CONSTRUCT WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// short form 2
+		System.out.println("short form 2:");
+		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// short form 3
+		System.out.println("short form 3:");
+		queryString = "CONSTRUCT WHERE{ <http://eg.com/s> <http://eg.com/p> ?o }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Triple> triples = qexec.execConstructTriples();
+			PrintUtil.printOut(triples);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+
+		// short form 4
+		System.out.println("short form 4:");
+		queryString = "CONSTRUCT WHERE{ {<http://eg.com/s> <http://eg.com/p> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Quad> quads = qexec.execConstructQuads();
+			PrintUtil.printOut(quads);
+		}
+		arq.qparse.main("--in", "arq", queryString);
+		
+		// short form 4
+		System.out.println("default graph projection:");
+		queryString = "CONSTRUCT { {<http://eg.com/s> <http://eg.com/p> ?o} GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} } WHERE{ GRAPH ?g {<http://eg.com/s1> <http://eg.com/p1> ?o} }";
+		query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+		try (QueryExecution qexec = QueryExecutionFactory
+				.create(query, dataset)) {
+			Iterator<Triple> triples = qexec.execConstructTriples();
+			PrintUtil.printOut(triples);
+		}
+		arq.qparse.main("--in", "arq", queryString);
 
 		// run-construct-quad-test
 		System.out.println("run-construct-quad-test:");
@@ -171,9 +184,7 @@ public class ExampleConstructQuads {
 						return false;
 					}
 				});
-		int i=0;
 		for (File test : tests) {
-//			if (++i != 4) continue;
 			System.out.println("======== File: "+test.getName());
 			try (BufferedReader br = new BufferedReader(new FileReader(test))) {
 				String line = null;

http://git-wip-us.apache.org/repos/asf/jena/blob/f27623dc/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index a6e74d8..641ceb7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -81,7 +81,8 @@ public class Template
     	}
     	BasicPattern bgp = new BasicPattern();
     	for(Quad q: qp.getQuads()){
-    		bgp.add(q.asTriple());
+    		if (Quad.defaultGraphNodeGenerated.equals(q.getGraph()))
+    			bgp.add(q.asTriple());
     	}
     	return bgp;
     }
@@ -92,7 +93,8 @@ public class Template
     	}
     	List<Triple> triples = new ArrayList<Triple>();
     	for(Quad q: qp.getQuads()){
-    		triples.add(q.asTriple());
+    		if (Quad.defaultGraphNodeGenerated.equals(q.getGraph()))
+    			triples.add(q.asTriple());
     	}
     	return triples;
     }


[45/50] jena git commit: Clean up tests.

Posted by an...@apache.org.
Clean up tests.

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

Branch: refs/heads/master
Commit: 444a6c9cbd5417e9830e4630d7b725874cda0334
Parents: f308d43
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 12:08:16 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 12:08:16 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/fuseki/TestQuery.java  | 49 +++++++-------------
 1 file changed, 18 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/444a6c9c/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 7436e7a..dabe10d 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
@@ -26,6 +26,7 @@ import java.net.URL ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.web.AcceptList ;
 import org.apache.jena.atlas.web.MediaType;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
@@ -118,7 +119,6 @@ public class TestQuery extends BaseTest {
             }
         }
         {
-
             String query = "SELECT * FROM <" + gn1 + "> { ?s ?p ?o }" ;
             try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
                 ResultSet rs = qExec.execSelect() ;
@@ -190,31 +190,36 @@ public class TestQuery extends BaseTest {
         }
     }
     
+    private static final AcceptList rdfOfferTest = DEF.rdfOffer ;
+    private static final AcceptList quadsOfferTest = DEF.quadsOffer ;
+    
     @Test
-    public void query_construct_conneg()
-    {
+    public void query_construct_conneg() {
         String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
-        for (MediaType type: DEF.rdfOffer.entries()){
+        for (MediaType type: rdfOfferTest.entries()){
             String contentType = type.toHeaderString();
             try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
-                qExec.setModelContentType(initConstructContentTypes( contentType ) );
-        	    qExec.execConstruct();
-                assertEquals( contentType , qExec.getHttpResponseContentType());
+                qExec.setModelContentType( contentType );
+                Iterator<Triple> iter = qExec.execConstructTriples();
+                assertTrue(iter.hasNext()) ;
+                String x = qExec.getHttpResponseContentType() ;
+                assertEquals( contentType , x ) ;
             }
         }
     }
     
     @Test
-    public void query_construct_quad_conneg()
-    {
+    public void query_construct_quad_conneg() {
         String queryString = " CONSTRUCT { GRAPH ?g {?s ?p ?o} } WHERE { GRAPH ?g {?s ?p ?o}}" ;
         Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
-        for (MediaType type: DEF.quadsOffer.entries()){
+        for (MediaType type: quadsOfferTest.entries()){
             String contentType = type.toHeaderString();
             try ( QueryEngineHTTP qExec = (QueryEngineHTTP) QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
-                qExec.setDatasetContentType(initConstructContentTypes( contentType ) );
-        	    qExec.execConstructQuads();
-                assertEquals( contentType , qExec.getHttpResponseContentType());
+                qExec.setDatasetContentType( contentType );
+                Iterator<Quad> iter = qExec.execConstructQuads();
+                assertTrue(iter.hasNext()) ;
+                String x = qExec.getHttpResponseContentType() ;
+                assertEquals( contentType , x ) ;
             }
         }
     }
@@ -232,22 +237,4 @@ public class TestQuery extends BaseTest {
         boolean b = ResultSetCompare.equalsByTerm(rs, expectedResultSet) ;
         assertTrue("Result sets different", b) ;
     }
-    
-    private static String initConstructContentTypes(String... contentTypes) {
-        // Or use WebContent.defaultGraphAcceptHeader which is slightly
-        // narrower. Here, we have a tuned setting for SPARQL operations.
-        StringBuilder sBuff = new StringBuilder() ;
-        for (int i=0;i<contentTypes.length;i++ ){
-        	accumulateContentTypeString(sBuff, contentTypes[i], 1- i*0.1);
-        }
-        return sBuff.toString();
-    }
-
-    private static void accumulateContentTypeString(StringBuilder sBuff, String str, double v) {
-        if ( sBuff.length() != 0 )
-            sBuff.append(", ") ;
-        sBuff.append(str) ;
-        if ( v < 1 )
-            sBuff.append(";q=").append(v) ;
-    } 
 }


[14/50] jena git commit: Merge pull request #13 from apache/master

Posted by an...@apache.org.
Merge pull request #13 from apache/master

pull master 2015-08-10

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

Branch: refs/heads/master
Commit: e743d2560061176eeb4abaef618fbef8a5b29b77
Parents: 6b695c5 4a2c5d2
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 10 06:02:28 2015 -0300
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 10 06:02:28 2015 -0300

----------------------------------------------------------------------
 .../arq/querybuilder/handlers/WhereHandler.java |   14 +-
 .../querybuilder/handlers/WhereHandlerTest.java |   33 +
 .../permissions/example/ExampleEvaluator.java   |   43 +-
 .../example/ShiroExampleEvaluator.java          |   15 +-
 .../jena/security/example/fuseki/config.ttl     |   26 +-
 .../apache/jena/permissions/SecuredItem.java    |  142 +-
 .../jena/permissions/SecurityEvaluator.java     |  112 +-
 .../jena/permissions/graph/SecuredGraph.java    |  102 +-
 .../graph/SecuredGraphEventManager.java         |  233 ++--
 .../permissions/graph/SecuredPrefixMapping.java |   81 +-
 .../graph/impl/SecuredGraphImpl.java            |  184 ++-
 .../graph/impl/SecuredPrefixMappingImpl.java    |   89 +-
 .../impl/CachedSecurityEvaluator.java           |   28 +-
 .../jena/permissions/impl/SecuredItemImpl.java  |  779 +++++------
 .../jena/permissions/model/SecuredAlt.java      |  163 ++-
 .../permissions/model/SecuredContainer.java     |  133 +-
 .../jena/permissions/model/SecuredLiteral.java  |   93 +-
 .../jena/permissions/model/SecuredModel.java    | 1243 ++++++++++++------
 .../jena/permissions/model/SecuredProperty.java |   11 +-
 .../jena/permissions/model/SecuredRDFList.java  |  236 +++-
 .../jena/permissions/model/SecuredRDFNode.java  |   26 +-
 .../model/SecuredReifiedStatement.java          |   12 +-
 .../jena/permissions/model/SecuredResource.java |  214 ++-
 .../jena/permissions/model/SecuredSeq.java      |  288 ++--
 .../permissions/model/SecuredStatement.java     |  166 ++-
 .../permissions/model/impl/SecuredAltImpl.java  |  207 ++-
 .../model/impl/SecuredContainerImpl.java        |  438 ++----
 .../model/impl/SecuredLiteralImpl.java          |  162 ++-
 .../model/impl/SecuredModelImpl.java            |  610 +++++----
 .../model/impl/SecuredPropertyImpl.java         |   51 +-
 .../model/impl/SecuredRDFListImpl.java          |  704 ++++------
 .../model/impl/SecuredRDFNodeImpl.java          |  211 ++-
 .../model/impl/SecuredReifiedStatementImpl.java |   29 +-
 .../model/impl/SecuredResourceImpl.java         |  570 ++++----
 .../permissions/model/impl/SecuredSelector.java |   39 +-
 .../permissions/model/impl/SecuredSeqImpl.java  |  326 ++---
 .../model/impl/SecuredStatementImpl.java        |  278 ++--
 .../permissions/query/SecuredQueryEngine.java   |  100 +-
 .../permissions/query/rewriter/OpRewriter.java  |  379 +++---
 .../query/rewriter/SecuredFunction.java         |  104 +-
 .../permissions/utils/PermStatementFilter.java  |   48 +-
 .../permissions/utils/PermTripleFilter.java     |   45 +-
 .../permissions/utils/RDFListSecFilter.java     |   23 +-
 .../jena/permissions/MockSecurityEvaluator.java |    6 +
 .../ModelBasedSecurityEvaluator.java            |    9 +-
 .../permissions/StaticSecurityEvaluator.java    |    5 +
 .../jena/permissions/graph/TDBGraphTest.java    |    3 -
 .../model/SecuredModelDetailTest.java           |    5 +
 .../permissions/model/SecuredModelTest.java     |    6 +-
 .../jena/permissions/query/DataSetTest.java     |   15 +-
 .../jena/permissions/query/QueryEngineTest.java |    9 +-
 51 files changed, 4778 insertions(+), 4070 deletions(-)
----------------------------------------------------------------------



[17/50] jena git commit: Add construct quad support to Fuseki

Posted by an...@apache.org.
Add construct quad support to Fuseki

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

Branch: refs/heads/master
Commit: 0eb28d805e3270c9951f13cdbd55af3e8d01d0ab
Parents: e819ac3
Author: confidencesun <co...@gmail.com>
Authored: Tue Aug 11 12:05:55 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Tue Aug 11 12:05:55 2015 +0800

----------------------------------------------------------------------
 .../sparql/engine/http/QueryEngineHTTP.java     |  30 +-
 .../main/java/org/apache/jena/fuseki/DEF.java   |   7 +
 .../jena/fuseki/servlets/ResponseDataset.java   | 134 +++
 .../jena/fuseki/servlets/SPARQL_Query.java      | 838 ++++++++++---------
 .../java/org/apache/jena/fuseki/TestQuery.java  | 188 ++---
 5 files changed, 719 insertions(+), 478 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/0eb28d80/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 a35fffc..cab831f 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
@@ -394,7 +394,7 @@ public class QueryEngineHTTP implements QueryExecution {
     
     @Override
     public Iterator<Quad> execConstructQuads(){
-    	return null;
+    	return execQuads();
     }
     
     @Override
@@ -469,6 +469,32 @@ public class QueryEngineHTTP implements QueryExecution {
 
         return RiotReader.createIteratorTriples(in, lang, null);
     }
+    
+    private Iterator<Quad> execQuads() {
+        checkNotClosed() ;
+        HttpQuery httpQuery = makeHttpQuery();
+        httpQuery.setAccept(WebContent.defaultDatasetAcceptHeader);
+        InputStream in = httpQuery.exec();
+        
+        // Don't assume the endpoint actually gives back the content type we
+        // asked for
+        String actualContentType = httpQuery.getContentType();
+
+        // If the server fails to return a Content-Type then we will assume
+        // the server returned the type we asked for
+        if (actualContentType == null || actualContentType.equals("")) {
+            actualContentType = WebContent.defaultDatasetAcceptHeader;
+        }
+
+        // Try to select language appropriately here based on the model content
+        // type
+        Lang lang = RDFLanguages.contentTypeToLang(actualContentType);
+        if (!RDFLanguages.isQuads(lang))
+            throw new QueryException("Endpoint returned Content Type: " + actualContentType
+                    + " which is not a valid RDF Dataset syntax");
+
+        return RiotReader.createIteratorQuads(in, lang, null);
+    }
 
     @Override
     public boolean execAsk() {
@@ -817,4 +843,4 @@ public class QueryEngineHTTP implements QueryExecution {
         if ( v < 1 )
             sBuff.append(";q=").append(v) ;
     } 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/0eb28d80/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
index b419cc6..953b724 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
@@ -31,6 +31,13 @@ public class DEF
     
     public static final AcceptList jsonOffer          = AcceptList.create(contentTypeJSON) ;
 
+    public static final AcceptList pureRdfOffer       = AcceptList.create(contentTypeTurtle, 
+                                                                          contentTypeTurtleAlt1,
+                                                                          contentTypeTurtleAlt2,
+                                                                          contentTypeNTriples,
+                                                                          contentTypeRDFXML
+                                                                          ) ;
+    
     public static final AcceptList rdfOffer           = AcceptList.create(contentTypeTurtle, 
                                                                           contentTypeTurtleAlt1,
                                                                           contentTypeTurtleAlt2,

http://git-wip-us.apache.org/repos/asf/jena/blob/0eb28d80/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
new file mode 100644
index 0000000..91d615d
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseDataset.java
@@ -0,0 +1,134 @@
+/*
+ * 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 org.apache.jena.riot.WebContent.charsetUTF8;
+import static org.apache.jena.riot.WebContent.contentTypeJSONLD;
+import static org.apache.jena.riot.WebContent.contentTypeNTriples;
+import static org.apache.jena.riot.WebContent.contentTypeRDFJSON;
+import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
+import static org.apache.jena.riot.WebContent.contentTypeTurtle;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.jena.atlas.web.MediaType;
+import org.apache.jena.fuseki.DEF;
+import org.apache.jena.fuseki.Fuseki;
+import org.apache.jena.fuseki.conneg.ConNeg;
+import org.apache.jena.fuseki.conneg.WebLib;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.riot.WebContent;
+import org.apache.jena.web.HttpSC;
+
+public class ResponseDataset
+{
+    // Short names for "output="
+    private static final String contentOutputTriG          = "trig" ;
+    private static final String contentOutputNQuads        = "n-quads" ;
+
+
+    public static Map<String,String> shortNamesModel = new HashMap<String, String>() ;
+    static {
+
+        // Some short names.  keys are lowercase.
+        
+        ResponseOps.put(shortNamesModel, contentOutputNQuads,  WebContent.contentTypeNQuads) ;
+        ResponseOps.put(shortNamesModel, contentOutputTriG,     WebContent.contentTypeTriG) ;
+    }
+
+    public static void doResponseDataset(HttpAction action, Dataset dataset) 
+    {
+        HttpServletRequest request = action.request ;
+        HttpServletResponse response = action.response ;
+        
+        String mimeType = null ;        // Header request type 
+
+        // TODO Use MediaType throughout.
+        MediaType i = ConNeg.chooseContentType(request, DEF.quadsOffer, DEF.acceptNQuads) ;
+        if ( i != null )
+            mimeType = i.getContentType() ;
+
+        String outputField = ResponseOps.paramOutput(request, shortNamesModel) ;
+        if ( outputField != null )
+            mimeType = outputField ;
+
+        String writerMimeType = mimeType ;
+
+        if ( mimeType == null )
+        {
+            Fuseki.actionLog.warn("Can't find MIME type for response") ;
+            String x = WebLib.getAccept(request) ;
+            String msg ;
+            if ( x == null )
+                msg = "No Accept: header" ;
+            else
+                msg = "Accept: "+x+" : Not understood" ;
+            ServletOps.error(HttpSC.NOT_ACCEPTABLE_406, msg) ;
+        }
+
+        String contentType = mimeType ;
+        String charset =     charsetUTF8 ;
+
+        String forceAccept = ResponseOps.paramForceAccept(request) ;
+        if ( forceAccept != null )
+        {
+            contentType = forceAccept ;
+            charset = charsetUTF8 ;
+        }
+
+        Lang lang = RDFLanguages.contentTypeToLang(contentType) ;
+        if ( lang == null )
+            ServletOps.errorBadRequest("Can't determine output content type: "+contentType) ;
+        
+//        if ( rdfw instanceof RDFXMLWriterI )
+//            rdfw.setProperty("showXmlDeclaration", "true") ;
+
+    //        // Write locally to check it's possible.
+    //        // Time/space tradeoff.
+    //        try {
+    //            OutputStream out = new NullOutputStream() ;
+    //            RDFDataMgr.write(out, model, lang) ;
+    //            IO.flush(out) ;
+    //        } catch (JenaException ex)
+    //        {
+    //            SPARQL_ServletBase.errorOccurred(ex) ;
+    //        }
+
+        try {
+            ResponseResultSet.setHttpResponse(action, contentType, charset) ; 
+            response.setStatus(HttpSC.OK_200) ;
+            ServletOutputStream out = response.getOutputStream() ;
+            RDFDataMgr.write(out, dataset, lang) ;
+            out.flush() ;
+        }
+        catch (Exception ex) { 
+            action.log.info("Exception while writing the response model: "+ex.getMessage(), ex) ;
+            ServletOps.errorOccurred("Exception while writing the response model: "+ex.getMessage(), ex) ;
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/0eb28d80/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 ba4a61a..bed63da 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
@@ -16,385 +16,463 @@
  * limitations under the License.
  */
 
-package org.apache.jena.fuseki.servlets ;
-
-import static java.lang.String.format ;
-import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts ;
-import static org.apache.jena.riot.WebContent.ctHTMLForm ;
-import static org.apache.jena.riot.WebContent.ctSPARQLQuery ;
-import static org.apache.jena.riot.WebContent.isHtmlForm ;
-import static org.apache.jena.riot.WebContent.matchContentType ;
-import static org.apache.jena.riot.web.HttpNames.paramAccept ;
-import static org.apache.jena.riot.web.HttpNames.paramCallback ;
-import static org.apache.jena.riot.web.HttpNames.paramDefaultGraphURI ;
-import static org.apache.jena.riot.web.HttpNames.paramForceAccept ;
-import static org.apache.jena.riot.web.HttpNames.paramNamedGraphURI ;
-import static org.apache.jena.riot.web.HttpNames.paramOutput1 ;
-import static org.apache.jena.riot.web.HttpNames.paramOutput2 ;
-import static org.apache.jena.riot.web.HttpNames.paramQuery ;
-import static org.apache.jena.riot.web.HttpNames.paramQueryRef ;
-import static org.apache.jena.riot.web.HttpNames.paramStyleSheet ;
-import static org.apache.jena.riot.web.HttpNames.paramTimeout ;
-
-import java.io.IOException ;
-import java.io.InputStream ;
-import java.util.* ;
-
-import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
-
-import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
-import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.fuseki.Fuseki ;
-import org.apache.jena.fuseki.FusekiException ;
-import org.apache.jena.fuseki.FusekiLib ;
-import org.apache.jena.query.* ;
-import org.apache.jena.rdf.model.Model ;
-import org.apache.jena.riot.web.HttpNames ;
-import org.apache.jena.riot.web.HttpOp ;
-import org.apache.jena.sparql.core.Prologue ;
-import org.apache.jena.sparql.resultset.SPARQLResult ;
-import org.apache.jena.web.HttpSC ;
-
-/** Handle SPARQL Query requests overt eh SPARQL Protocol. 
- * Subclasses provide this algorithm with the actual dataset to query, whether
- * a dataset hosted by this server ({@link SPARQL_QueryDataset}) or 
- * speciifed in the protocol request ({@link SPARQL_QueryGeneral}).   
- */ 
-public abstract class SPARQL_Query extends SPARQL_Protocol
-{
-    private static final String QueryParseBase = Fuseki.BaseParserSPARQL ;
-    
-    public SPARQL_Query() {
-        super() ;
-    }
-
-    // Choose REST verbs to support.
-
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
-        doCommon(request, response) ;
-    }
-
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
-        doCommon(request, response) ;
-    }
-
-    // HEAD
-
-    @Override
-    protected void doOptions(HttpServletRequest request, HttpServletResponse response) {
-        setCommonHeadersForOptions(response) ;
-        response.setHeader(HttpNames.hAllow, "GET,OPTIONS,POST") ;
-        response.setHeader(HttpNames.hContentLengh, "0") ;
-    }
-
-    @Override
-    protected final void perform(HttpAction action) {
-        // GET
-        if ( action.request.getMethod().equals(HttpNames.METHOD_GET) ) {
-            executeWithParameter(action) ;
-            return ;
-        }
-
-        ContentType ct = FusekiLib.getContentType(action) ;
-
-        // POST application/x-www-form-url
-        // POST ?query= and no Content-Type
-        if ( ct == null || isHtmlForm(ct) ) {
-            // validation checked that if no Content-type, then its a POST with ?query=
-            executeWithParameter(action) ;
-            return ;
-        }
-
-        // POST application/sparql-query
-        if ( matchContentType(ct, ctSPARQLQuery) ) {
-            executeBody(action) ;
-            return ;
-        }
-
-        ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: " + ct.getContentType()) ;
-    }
-
-    // All the params we support
-
-    protected static List<String> allParams = Arrays.asList(paramQuery, paramDefaultGraphURI, paramNamedGraphURI,
-                                                            paramQueryRef, paramStyleSheet, paramAccept, paramOutput1,
-                                                            paramOutput2, paramCallback, paramForceAccept, paramTimeout) ;
-
-    /**
-     * Validate the request, checking HTTP method and HTTP Parameters.
-     * @param action HTTP Action
-     */
-    @Override
-    protected void validate(HttpAction action) {
-        String method = action.request.getMethod().toUpperCase(Locale.ROOT) ;
-
-        if ( !HttpNames.METHOD_POST.equals(method) && !HttpNames.METHOD_GET.equals(method) )
-            ServletOps.errorMethodNotAllowed("Not a GET or POST request") ;
-
-        if ( HttpNames.METHOD_GET.equals(method) && action.request.getQueryString() == null ) {
-            ServletOps.warning(action, "Service Description / SPARQL Query / " + action.request.getRequestURI()) ;
-            ServletOps.errorNotFound("Service Description: " + action.request.getRequestURI()) ;
-        }
-
-        // Use of the dataset describing parameters is check later.
-        try {
-            validateParams(action, allParams) ;
-            validateRequest(action) ;
-        } catch (ActionErrorException ex) {
-            throw ex ;
-        }
-        // Query not yet parsed.
-    }
-
-    /**
-     * Validate the request after checking HTTP method and HTTP Parameters.
-     * @param action HTTP Action
-     */
-    protected abstract void validateRequest(HttpAction action) ;
-
-    /**
-     * Helper method for validating request.
-     * @param request HTTP request
-     * @param params parameters in a collection of Strings
-     */
-    protected void validateParams(HttpAction action, Collection<String> params) {
-        HttpServletRequest request = action.request ;
-        ContentType ct = FusekiLib.getContentType(request) ;
-        boolean mustHaveQueryParam = true ;
-        if ( ct != null ) {
-            String incoming = ct.getContentType() ;
-
-            if ( matchContentType(ctSPARQLQuery, ct) ) {
-                mustHaveQueryParam = false ;
-                // Drop through.
-            } else if ( matchContentType(ctHTMLForm, ct)) {
-                // Nothing specific to do
-            } 
-            else
-                ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Unsupported: " + incoming) ;
-        }
-
-        // GET/POST of a form at this point.
-
-        if ( mustHaveQueryParam ) {
-            int N = countParamOccurences(request, paramQuery) ;
-
-            if ( N == 0 )
-                ServletOps.errorBadRequest("SPARQL Query: No 'query=' parameter") ;
-            if ( N > 1 )
-                ServletOps.errorBadRequest("SPARQL Query: Multiple 'query=' parameters") ;
-
-            // application/sparql-query does not use a query param.
-            String queryStr = request.getParameter(HttpNames.paramQuery) ;
-
-            if ( queryStr == null )
-                ServletOps.errorBadRequest("SPARQL Query: No query specified (no 'query=' found)") ;
-            if ( queryStr.isEmpty() )
-                ServletOps.errorBadRequest("SPARQL Query: Empty query string") ;
-        }
-
-        if ( params != null ) {
-            Enumeration<String> en = request.getParameterNames() ;
-            for (; en.hasMoreElements();) {
-                String name = en.nextElement() ;
-                if ( !params.contains(name) )
-                    ServletOps.warning(action, "SPARQL Query: Unrecognize request parameter (ignored): " + name) ;
-            }
-        }
-    }
-
-    private void executeWithParameter(HttpAction action) {
-        String queryString = action.request.getParameter(paramQuery) ;
-        execute(queryString, action) ;
-    }
-
-    private void executeBody(HttpAction action) {
-        String queryString = null ;
-        try {
-            InputStream input = action.request.getInputStream() ;
-            queryString = IO.readWholeFileAsUTF8(input) ;
-        } catch (IOException ex) {
-            ServletOps.errorOccurred(ex) ;
-        }
-        execute(queryString, action) ;
-    }
-
-    private void execute(String queryString, HttpAction action) {
-        String queryStringLog = ServletOps.formatForLog(queryString) ;
-        if ( action.verbose )
-            action.log.info(format("[%d] Query = \n%s", action.id, queryString)) ;
-        else
-            action.log.info(format("[%d] Query = %s", action.id, queryStringLog)) ;
-
-        Query query = null ;
-        try {
-            // NB syntax is ARQ (a superset of SPARQL)
-            query = QueryFactory.create(queryString, QueryParseBase, Syntax.syntaxARQ) ;
-            queryStringLog = formatForLog(query) ;
-            validateQuery(action, query) ;
-        } catch (ActionErrorException ex) {
-            throw ex ;
-        } catch (QueryParseException ex) {
-            ServletOps.errorBadRequest("Parse error: \n" + queryString + "\n\r" + messageForQueryException(ex)) ;
-        }
-        // Should not happen.
-        catch (QueryException ex) {
-            ServletOps.errorBadRequest("Error: \n" + queryString + "\n\r" + ex.getMessage()) ;
-        }
-
-        // Assumes finished whole thing by end of sendResult.
-        try {
-            action.beginRead() ;
-            Dataset dataset = decideDataset(action, query, queryStringLog) ;
-            try ( QueryExecution qExec = createQueryExecution(query, dataset) ; ) {
-                SPARQLResult result = executeQuery(action, qExec, query, queryStringLog) ;
-                // Deals with exceptions itself.
-                sendResults(action, result, query.getPrologue()) ;
-            }
-        } 
-        catch (QueryParseException ex) {
-            // Late stage static error (e.g. bad fixed Lucene query string). 
-            ServletOps.errorBadRequest("Query parse error: \n" + queryString + "\n\r" + messageForQueryException(ex)) ;
-        }
-        catch (QueryCancelledException ex) {
-            // Additional counter information.
-            incCounter(action.getEndpoint().getCounters(), QueryTimeouts) ;
-            throw ex ;
-        } finally { action.endRead() ; }
-    }
-
-    /**
-     * Check the query - if unacceptable, throw ActionErrorException or call
-     * super.error
-     * @param action HTTP Action
-     * @param query  SPARQL Query
-     */
-    protected abstract void validateQuery(HttpAction action, Query query) ;
-
-    /** Create the {@link QueryExecution} for this operation.
-     * @param query
-     * @param dataset
-     * @return QueryExecution
-     */
-    protected QueryExecution createQueryExecution(Query query, Dataset dataset) {
-        return QueryExecutionFactory.create(query, dataset) ;
-    }
-
-    /** Perform the {@link QueryExecution} once.
-     * @param action
-     * @param queryExecution
-     * @param query
-     * @param queryStringLog Informational string created from the initial query. 
-     * @return
-     */
-    protected SPARQLResult executeQuery(HttpAction action, QueryExecution queryExecution, Query query, String queryStringLog) {
-        setAnyTimeouts(queryExecution, action) ;
-
-        if ( query.isSelectType() ) {
-            ResultSet rs = queryExecution.execSelect() ;
-
-            // Force some query execution now.
-            //
-            // If the timeout-first-row goes off, the output stream has not
-            // been started so the HTTP error code is sent.
-
-            rs.hasNext() ;
-
-            // If we wanted perfect query time cancellation, we could consume
-            // the result now
-            // to see if the timeout-end-of-query goes off.
-
-            // rs = ResultSetFactory.copyResults(rs) ;
-
-            action.log.info(format("[%d] exec/select", action.id)) ;
-            return new SPARQLResult(rs) ;
-        }
-
-        if ( query.isConstructType() ) {
-            Model model = queryExecution.execConstruct() ;
-            action.log.info(format("[%d] exec/construct", action.id)) ;
-            return new SPARQLResult(model) ;
-        }
-
-        if ( query.isDescribeType() ) {
-            Model model = queryExecution.execDescribe() ;
-            action.log.info(format("[%d] exec/describe", action.id)) ;
-            return new SPARQLResult(model) ;
-        }
-
-        if ( query.isAskType() ) {
-            boolean b = queryExecution.execAsk() ;
-            action.log.info(format("[%d] exec/ask", action.id)) ;
-            return new SPARQLResult(b) ;
-        }
-
-        ServletOps.errorBadRequest("Unknown query type - " + queryStringLog) ;
-        return null ;
-    }
-
-    private void setAnyTimeouts(QueryExecution qexec, HttpAction action) {
-//        if ( !(action.getDataService().allowTimeoutOverride) )
-//            return ;
-
-        long desiredTimeout = Long.MAX_VALUE ;
-        String timeoutHeader = action.request.getHeader("Timeout") ;
-        String timeoutParameter = action.request.getParameter("timeout") ;
-        if ( timeoutHeader != null ) {
-            try {
-                desiredTimeout = (int)(Float.parseFloat(timeoutHeader) * 1000) ;
-            } catch (NumberFormatException e) {
-                throw new FusekiException("Timeout header must be a number", e) ;
-            }
-        } else if ( timeoutParameter != null ) {
-            try {
-                desiredTimeout = (int)(Float.parseFloat(timeoutParameter) * 1000) ;
-            } catch (NumberFormatException e) {
-                throw new FusekiException("timeout parameter must be a number", e) ;
-            }
-        }
-
-//        desiredTimeout = Math.min(action.getDataService().maximumTimeoutOverride, desiredTimeout) ;
-        if ( desiredTimeout != Long.MAX_VALUE )
-            qexec.setTimeout(desiredTimeout) ;
-    }
-
-    /** Choose the dataset for this SPARQL Query request. 
-     * @param action
-     * @param query  Query - this may be modified to remove a DatasetDescription.
-     * @param queryStringLog 
-     * @return {@link Dataset}
-     */
-    protected abstract Dataset decideDataset(HttpAction action, Query query, String queryStringLog) ;
-
-    /** Ship the results to the remote caller.
-     * @param action
-     * @param result
-     * @param qPrologue
-     */
-    protected void sendResults(HttpAction action, SPARQLResult result, Prologue qPrologue) {
-        if ( result.isResultSet() )
-            ResponseResultSet.doResponseResultSet(action, result.getResultSet(), qPrologue) ;
-        else if ( result.isGraph() )
-            ResponseModel.doResponseModel(action, result.getModel()) ;
-        else if ( result.isBoolean() )
-            ResponseResultSet.doResponseResultSet(action, result.getBooleanResult()) ;
-        else
-            ServletOps.errorOccurred("Unknown or invalid result type") ;
-    }
-
-    private String formatForLog(Query query) {
-        IndentedLineBuffer out = new IndentedLineBuffer() ;
-        out.setFlatMode(true) ;
-        query.serialize(out) ;
-        return out.asString() ;
-    }
-
-    private String getRemoteString(String queryURI) {
-        return HttpOp.execHttpGetString(queryURI) ;
-    }
+package org.apache.jena.fuseki.servlets;
+
+import static java.lang.String.format;
+import static org.apache.jena.fuseki.server.CounterName.QueryTimeouts;
+import static org.apache.jena.riot.WebContent.ctHTMLForm;
+import static org.apache.jena.riot.WebContent.ctSPARQLQuery;
+import static org.apache.jena.riot.WebContent.isHtmlForm;
+import static org.apache.jena.riot.WebContent.matchContentType;
+import static org.apache.jena.riot.web.HttpNames.paramAccept;
+import static org.apache.jena.riot.web.HttpNames.paramCallback;
+import static org.apache.jena.riot.web.HttpNames.paramDefaultGraphURI;
+import static org.apache.jena.riot.web.HttpNames.paramForceAccept;
+import static org.apache.jena.riot.web.HttpNames.paramNamedGraphURI;
+import static org.apache.jena.riot.web.HttpNames.paramOutput1;
+import static org.apache.jena.riot.web.HttpNames.paramOutput2;
+import static org.apache.jena.riot.web.HttpNames.paramQuery;
+import static org.apache.jena.riot.web.HttpNames.paramQueryRef;
+import static org.apache.jena.riot.web.HttpNames.paramStyleSheet;
+import static org.apache.jena.riot.web.HttpNames.paramTimeout;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.jena.atlas.io.IO;
+import org.apache.jena.atlas.io.IndentedLineBuffer;
+import org.apache.jena.atlas.web.AcceptList;
+import org.apache.jena.atlas.web.ContentType;
+import org.apache.jena.atlas.web.MediaType;
+import org.apache.jena.fuseki.DEF;
+import org.apache.jena.fuseki.Fuseki;
+import org.apache.jena.fuseki.FusekiException;
+import org.apache.jena.fuseki.FusekiLib;
+import org.apache.jena.fuseki.conneg.WebLib;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.Query;
+import org.apache.jena.query.QueryCancelledException;
+import org.apache.jena.query.QueryException;
+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.ResultSet;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.riot.web.HttpNames;
+import org.apache.jena.riot.web.HttpOp;
+import org.apache.jena.sparql.core.Prologue;
+import org.apache.jena.sparql.resultset.SPARQLResult;
+import org.apache.jena.web.HttpSC;
+
+/**
+ * Handle SPARQL Query requests overt eh SPARQL Protocol. Subclasses provide
+ * this algorithm with the actual dataset to query, whether a dataset hosted by
+ * this server ({@link SPARQL_QueryDataset}) or speciifed in the protocol
+ * request ({@link SPARQL_QueryGeneral}).
+ */
+public abstract class SPARQL_Query extends SPARQL_Protocol {
+	private static final String QueryParseBase = Fuseki.BaseParserSPARQL;
+
+	public SPARQL_Query() {
+		super();
+	}
+
+	// Choose REST verbs to support.
+
+	@Override
+	protected void doPost(HttpServletRequest request,
+			HttpServletResponse response) {
+		doCommon(request, response);
+	}
+
+	@Override
+	protected void doGet(HttpServletRequest request,
+			HttpServletResponse response) {
+		doCommon(request, response);
+	}
+
+	// HEAD
+
+	@Override
+	protected void doOptions(HttpServletRequest request,
+			HttpServletResponse response) {
+		setCommonHeadersForOptions(response);
+		response.setHeader(HttpNames.hAllow, "GET,OPTIONS,POST");
+		response.setHeader(HttpNames.hContentLengh, "0");
+	}
+
+	@Override
+	protected final void perform(HttpAction action) {
+		// GET
+		if (action.request.getMethod().equals(HttpNames.METHOD_GET)) {
+			executeWithParameter(action);
+			return;
+		}
+
+		ContentType ct = FusekiLib.getContentType(action);
+
+		// POST application/x-www-form-url
+		// POST ?query= and no Content-Type
+		if (ct == null || isHtmlForm(ct)) {
+			// validation checked that if no Content-type, then its a POST with
+			// ?query=
+			executeWithParameter(action);
+			return;
+		}
+
+		// POST application/sparql-query
+		if (matchContentType(ct, ctSPARQLQuery)) {
+			executeBody(action);
+			return;
+		}
+
+		ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415,
+				"Bad content type: " + ct.getContentType());
+	}
+
+	// All the params we support
+
+	protected static List<String> allParams = Arrays.asList(paramQuery,
+			paramDefaultGraphURI, paramNamedGraphURI, paramQueryRef,
+			paramStyleSheet, paramAccept, paramOutput1, paramOutput2,
+			paramCallback, paramForceAccept, paramTimeout);
+
+	/**
+	 * Validate the request, checking HTTP method and HTTP Parameters.
+	 * 
+	 * @param action
+	 *            HTTP Action
+	 */
+	@Override
+	protected void validate(HttpAction action) {
+		String method = action.request.getMethod().toUpperCase(Locale.ROOT);
+
+		if (!HttpNames.METHOD_POST.equals(method)
+				&& !HttpNames.METHOD_GET.equals(method))
+			ServletOps.errorMethodNotAllowed("Not a GET or POST request");
+
+		if (HttpNames.METHOD_GET.equals(method)
+				&& action.request.getQueryString() == null) {
+			ServletOps.warning(action, "Service Description / SPARQL Query / "
+					+ action.request.getRequestURI());
+			ServletOps.errorNotFound("Service Description: "
+					+ action.request.getRequestURI());
+		}
+
+		// Use of the dataset describing parameters is check later.
+		try {
+			validateParams(action, allParams);
+			validateRequest(action);
+		} catch (ActionErrorException ex) {
+			throw ex;
+		}
+		// Query not yet parsed.
+	}
+
+	/**
+	 * Validate the request after checking HTTP method and HTTP Parameters.
+	 * 
+	 * @param action
+	 *            HTTP Action
+	 */
+	protected abstract void validateRequest(HttpAction action);
+
+	/**
+	 * Helper method for validating request.
+	 * 
+	 * @param request
+	 *            HTTP request
+	 * @param params
+	 *            parameters in a collection of Strings
+	 */
+	protected void validateParams(HttpAction action, Collection<String> params) {
+		HttpServletRequest request = action.request;
+		ContentType ct = FusekiLib.getContentType(request);
+		boolean mustHaveQueryParam = true;
+		if (ct != null) {
+			String incoming = ct.getContentType();
+
+			if (matchContentType(ctSPARQLQuery, ct)) {
+				mustHaveQueryParam = false;
+				// Drop through.
+			} else if (matchContentType(ctHTMLForm, ct)) {
+				// Nothing specific to do
+			} else
+				ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415,
+						"Unsupported: " + incoming);
+		}
+
+		// GET/POST of a form at this point.
+
+		if (mustHaveQueryParam) {
+			int N = countParamOccurences(request, paramQuery);
+
+			if (N == 0)
+				ServletOps
+						.errorBadRequest("SPARQL Query: No 'query=' parameter");
+			if (N > 1)
+				ServletOps
+						.errorBadRequest("SPARQL Query: Multiple 'query=' parameters");
+
+			// application/sparql-query does not use a query param.
+			String queryStr = request.getParameter(HttpNames.paramQuery);
+
+			if (queryStr == null)
+				ServletOps
+						.errorBadRequest("SPARQL Query: No query specified (no 'query=' found)");
+			if (queryStr.isEmpty())
+				ServletOps.errorBadRequest("SPARQL Query: Empty query string");
+		}
+
+		if (params != null) {
+			Enumeration<String> en = request.getParameterNames();
+			for (; en.hasMoreElements();) {
+				String name = en.nextElement();
+				if (!params.contains(name))
+					ServletOps.warning(action,
+							"SPARQL Query: Unrecognize request parameter (ignored): "
+									+ name);
+			}
+		}
+	}
+
+	private void executeWithParameter(HttpAction action) {
+		String queryString = action.request.getParameter(paramQuery);
+		execute(queryString, action);
+	}
+
+	private void executeBody(HttpAction action) {
+		String queryString = null;
+		try {
+			InputStream input = action.request.getInputStream();
+			queryString = IO.readWholeFileAsUTF8(input);
+		} catch (IOException ex) {
+			ServletOps.errorOccurred(ex);
+		}
+		execute(queryString, action);
+	}
+
+	private void execute(String queryString, HttpAction action) {
+		String queryStringLog = ServletOps.formatForLog(queryString);
+		if (action.verbose)
+			action.log
+					.info(format("[%d] Query = \n%s", action.id, queryString));
+		else
+			action.log
+					.info(format("[%d] Query = %s", action.id, queryStringLog));
+
+		Query query = null;
+		try {
+			// NB syntax is ARQ (a superset of SPARQL)
+			query = QueryFactory.create(queryString, QueryParseBase,
+					Syntax.syntaxARQ);
+			queryStringLog = formatForLog(query);
+			validateQuery(action, query);
+		} catch (ActionErrorException ex) {
+			throw ex;
+		} catch (QueryParseException ex) {
+			ServletOps.errorBadRequest("Parse error: \n" + queryString + "\n\r"
+					+ messageForQueryException(ex));
+		}
+		// Should not happen.
+		catch (QueryException ex) {
+			ServletOps.errorBadRequest("Error: \n" + queryString + "\n\r"
+					+ ex.getMessage());
+		}
+
+		// Assumes finished whole thing by end of sendResult.
+		try {
+			action.beginRead();
+			Dataset dataset = decideDataset(action, query, queryStringLog);
+			try (QueryExecution qExec = createQueryExecution(query, dataset);) {
+				SPARQLResult result = executeQuery(action, qExec, query,
+						queryStringLog);
+				// Deals with exceptions itself.
+				sendResults(action, result, query.getPrologue());
+			}
+		} catch (QueryParseException ex) {
+			// Late stage static error (e.g. bad fixed Lucene query string).
+			ServletOps.errorBadRequest("Query parse error: \n" + queryString
+					+ "\n\r" + messageForQueryException(ex));
+		} catch (QueryCancelledException ex) {
+			// Additional counter information.
+			incCounter(action.getEndpoint().getCounters(), QueryTimeouts);
+			throw ex;
+		} finally {
+			action.endRead();
+		}
+	}
+
+	/**
+	 * Check the query - if unacceptable, throw ActionErrorException or call
+	 * super.error
+	 * 
+	 * @param action
+	 *            HTTP Action
+	 * @param query
+	 *            SPARQL Query
+	 */
+	protected abstract void validateQuery(HttpAction action, Query query);
+
+	/**
+	 * Create the {@link QueryExecution} for this operation.
+	 * 
+	 * @param query
+	 * @param dataset
+	 * @return QueryExecution
+	 */
+	protected QueryExecution createQueryExecution(Query query, Dataset dataset) {
+		return QueryExecutionFactory.create(query, dataset);
+	}
+
+	/**
+	 * Perform the {@link QueryExecution} once.
+	 * 
+	 * @param action
+	 * @param queryExecution
+	 * @param query
+	 * @param queryStringLog
+	 *            Informational string created from the initial query.
+	 * @return
+	 */
+	protected SPARQLResult executeQuery(HttpAction action,
+			QueryExecution queryExecution, Query query, String queryStringLog) {
+		setAnyTimeouts(queryExecution, action);
+
+		if (query.isSelectType()) {
+			ResultSet rs = queryExecution.execSelect();
+
+			// Force some query execution now.
+			//
+			// If the timeout-first-row goes off, the output stream has not
+			// been started so the HTTP error code is sent.
+
+			rs.hasNext();
+
+			// If we wanted perfect query time cancellation, we could consume
+			// the result now
+			// to see if the timeout-end-of-query goes off.
+
+			// rs = ResultSetFactory.copyResults(rs) ;
+
+			action.log.info(format("[%d] exec/select", action.id));
+			return new SPARQLResult(rs);
+		}
+
+		if (query.isConstructType()) {
+
+			MediaType rdfMediaType = AcceptList.match( DEF.pureRdfOffer, new AcceptList( WebLib.getAccept(action.getRequest())));
+			
+			if ( ! rdfMediaType.getType().equals("*") ) {
+				Model model = queryExecution.execConstruct();
+				action.log.info(format("[%d] exec/construct/model", action.id));
+				return new SPARQLResult(model);
+			} else  {
+				Dataset dataset = queryExecution.execConstructDataset();
+				action.log
+						.info(format("[%d] exec/construct/dataset", action.id));
+				return new SPARQLResult(dataset);
+			}
+		}
+
+		if (query.isDescribeType()) {
+			Model model = queryExecution.execDescribe();
+			action.log.info(format("[%d] exec/describe", action.id));
+			return new SPARQLResult(model);
+		}
+
+		if (query.isAskType()) {
+			boolean b = queryExecution.execAsk();
+			action.log.info(format("[%d] exec/ask", action.id));
+			return new SPARQLResult(b);
+		}
+
+		ServletOps.errorBadRequest("Unknown query type - " + queryStringLog);
+		return null;
+	}
+
+	private void setAnyTimeouts(QueryExecution qexec, HttpAction action) {
+		// if ( !(action.getDataService().allowTimeoutOverride) )
+		// return ;
+
+		long desiredTimeout = Long.MAX_VALUE;
+		String timeoutHeader = action.request.getHeader("Timeout");
+		String timeoutParameter = action.request.getParameter("timeout");
+		if (timeoutHeader != null) {
+			try {
+				desiredTimeout = (int) (Float.parseFloat(timeoutHeader) * 1000);
+			} catch (NumberFormatException e) {
+				throw new FusekiException("Timeout header must be a number", e);
+			}
+		} else if (timeoutParameter != null) {
+			try {
+				desiredTimeout = (int) (Float.parseFloat(timeoutParameter) * 1000);
+			} catch (NumberFormatException e) {
+				throw new FusekiException("timeout parameter must be a number",
+						e);
+			}
+		}
+
+		// desiredTimeout =
+		// Math.min(action.getDataService().maximumTimeoutOverride,
+		// desiredTimeout) ;
+		if (desiredTimeout != Long.MAX_VALUE)
+			qexec.setTimeout(desiredTimeout);
+	}
+
+	/**
+	 * Choose the dataset for this SPARQL Query request.
+	 * 
+	 * @param action
+	 * @param query
+	 * @param queryStringLog
+	 * @return {@link Dataset}
+	 */
+	protected abstract Dataset decideDataset(HttpAction action, Query query,
+			String queryStringLog);
+
+	/**
+	 * Ship the results to the remote caller.
+	 * 
+	 * @param action
+	 * @param result
+	 * @param qPrologue
+	 */
+	protected void sendResults(HttpAction action, SPARQLResult result,
+			Prologue qPrologue) {
+		if (result.isResultSet())
+			ResponseResultSet.doResponseResultSet(action,
+					result.getResultSet(), qPrologue);
+		else if (result.isGraph()) {
+			ResponseModel.doResponseModel(action, result.getModel());
+		} else if (result.isBoolean())
+			ResponseResultSet.doResponseResultSet(action,
+					result.getBooleanResult());
+		else if (result.isDataset()) {
+			ResponseDataset.doResponseDataset(action, result.getDataset());
+		} else
+			ServletOps.errorOccurred("Unknown or invalid result type");
+	}
+
+	private String formatForLog(Query query) {
+		IndentedLineBuffer out = new IndentedLineBuffer();
+		out.setFlatMode(true);
+		query.serialize(out);
+		return out.asString();
+	}
+
+	private String getRemoteString(String queryURI) {
+		return HttpOp.execHttpGetString(queryURI);
+	}
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/0eb28d80/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 2f4d73a..911d105 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
@@ -16,140 +16,136 @@
  * limitations under the License.
  */
 
-package org.apache.jena.fuseki ;
+package org.apache.jena.fuseki;
 
-import static org.apache.jena.fuseki.ServerTest.gn1 ;
-import static org.apache.jena.fuseki.ServerTest.gn2 ;
-import static org.apache.jena.fuseki.ServerTest.model1 ;
-import static org.apache.jena.fuseki.ServerTest.model2 ;
-import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
-import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.gn1;
+import static org.apache.jena.fuseki.ServerTest.model1;
+import static org.apache.jena.fuseki.ServerTest.model2;
+import static org.apache.jena.fuseki.ServerTest.serviceQuery;
+import static org.apache.jena.fuseki.ServerTest.serviceREST;
 
-import java.io.IOException ;
-import java.net.HttpURLConnection ;
-import java.net.URL ;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Iterator;
 
-import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.* ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.engine.binding.Binding ;
-import org.apache.jena.sparql.resultset.ResultSetCompare ;
-import org.apache.jena.sparql.sse.Item ;
-import org.apache.jena.sparql.sse.SSE ;
-import org.apache.jena.sparql.sse.builders.BuilderResultSet ;
-import org.apache.jena.sparql.util.Convert ;
-import org.junit.AfterClass ;
-import org.junit.Assert ;
-import org.junit.BeforeClass ;
-import org.junit.Test ;
+import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.DatasetAccessor;
+import org.apache.jena.query.DatasetAccessorFactory;
+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.ResultSet;
+import org.apache.jena.query.ResultSetFormatter;
+import org.apache.jena.query.Syntax;
+import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.resultset.ResultSetCompare;
+import org.apache.jena.sparql.sse.Item;
+import org.apache.jena.sparql.sse.SSE;
+import org.apache.jena.sparql.sse.builders.BuilderResultSet;
+import org.apache.jena.sparql.util.Convert;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
-public class TestQuery extends BaseTest {
-    protected static ResultSet rs1 = null ;
+public class TestQuery extends BaseTest 
+{
+    protected static ResultSet rs1 = null ; 
     static {
         Item item = SSE.parseItem("(resultset (?s ?p ?o) (row (?s <x>)(?p <p>)(?o 1)))") ;
         rs1 = BuilderResultSet.build(item) ;
     }
-
-    @BeforeClass
-    public static void beforeClass() {
+    
+    @BeforeClass public static void beforeClass()
+    {
         ServerTest.allocServer() ;
         ServerTest.resetServer() ;
         DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
         du.putModel(model1) ;
         du.putModel(gn1, model2) ;
     }
-
-    @AfterClass
-    public static void afterClass() {
+    
+    @AfterClass public static void afterClass()
+    {
         DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
         du.deleteDefault() ;
         ServerTest.freeServer() ;
     }
-
-    @Test
-    public void query_01() {
+    
+    @Test public void query_01()
+    {
         execQuery("SELECT * {?s ?p ?o}", 1) ;
     }
-
-    @Test
-    public void query_recursive_01() {
-        String query = "SELECT * WHERE { SERVICE <" + serviceQuery + "> { ?s ?p ?o . BIND(?o AS ?x) } }" ;
-        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query)) {
-            ResultSet rs = qExec.execSelect() ;
-            Var x = Var.alloc("x") ;
+    
+    @Test public void query_recursive_01()
+    {
+        String query = "SELECT * WHERE { SERVICE <" + serviceQuery + "> { ?s ?p ?o . BIND(?o AS ?x) } }";
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+            ResultSet rs = qExec.execSelect();
+            Var x = Var.alloc("x");
             while (rs.hasNext()) {
-                Binding b = rs.nextBinding() ;
-                Assert.assertNotNull(b.get(x)) ;
+                Binding b = rs.nextBinding();
+                Assert.assertNotNull(b.get(x));
             }
         }
     }
-
-    @Test
-    public void query_with_params_01() {
-        String query = "ASK { }" ;
-        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
-            boolean result = qExec.execAsk() ;
-            Assert.assertTrue(result) ;
+    
+    @Test public void query_with_params_01()
+    {
+        String query = "ASK { }";
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query) ) {
+            boolean result = qExec.execAsk();
+            Assert.assertTrue(result);
         }
     }
+    
+    @Test public void query_construct_quad_01()
+    {
+        String queryString = " CONSTRUCT { GRAPH <http://eg/g> {?s ?p ?oq} } WHERE {?s ?p ?oq}" ;
+        Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);
+               
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+            Iterator<Quad> result = qExec.execConstructQuads();
+            Assert.assertTrue(result.hasNext());
+            Assert.assertEquals( "http://eg/g", result.next().getGraph().getURI());
 
-    @Test
-    public void request_id_header_01() throws IOException {
-        String qs = Convert.encWWWForm("ASK{}") ;
-        URL u = new URL(serviceQuery + "?query=" + qs) ;
-        HttpURLConnection conn = (HttpURLConnection)u.openConnection() ;
-        Assert.assertTrue(conn.getHeaderField("Fuseki-Request-ID") != null) ;
-    }
-
-    @Test
-    public void query_dynamic_dataset_01() {
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
-        du.putModel(model1);
-        du.putModel(gn1, model2);
-        {
-            String query = "SELECT * { ?s ?p ?o }" ;
-            try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
-                ResultSet rs = qExec.execSelect() ;
-                Node o = rs.next().getLiteral("o").asNode() ;
-                Node n = SSE.parseNode("1") ;
-                assertEquals(n, o) ;
-            }
-        }
-        {
-
-            String query = "SELECT * FROM <" + gn1 + "> { ?s ?p ?o }" ;
-            try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
-                ResultSet rs = qExec.execSelect() ;
-                Node o = rs.next().getLiteral("o").asNode() ;
-                Node n = SSE.parseNode("2") ;
-                assertEquals(n, o) ;
-            }
         }
     }
     
-    @Test
-    public void query_dynamic_dataset_02() {
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
-        du.putModel(model1);
-        du.putModel(gn1, model1);
-        du.putModel(gn2, model2);
-        String query = "SELECT * FROM <"+gn1+"> FROM <"+gn2+"> { ?s ?p ?o }" ;
-        try (QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery + "?output=json", query)) {
-            ResultSet rs = qExec.execSelect() ;
-            int n = ResultSetFormatter.consume(rs) ;
-            assertEquals(2, n) ;
+    @Test public void query_construct_01()
+    {
+        String query = " CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o}" ;
+        try ( QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, query) ) {
+            Iterator<Triple> result = qExec.execConstructTriples();
+            Assert.assertTrue(result.hasNext());
         }
     }
+    
 
-    private void execQuery(String queryString, int exceptedRowCount) {
+    
+    @Test public void request_id_header_01() throws IOException
+    {
+        String qs = Convert.encWWWForm("ASK{}") ;
+        URL u = new URL(serviceQuery+"?query="+qs);
+        HttpURLConnection conn = (HttpURLConnection) u.openConnection();
+        Assert.assertTrue(conn.getHeaderField("Fuseki-Request-ID") != null);
+    }
+
+    private void execQuery(String queryString, int exceptedRowCount)
+    {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
         ResultSet rs = qExec.execSelect() ;
         int x = ResultSetFormatter.consume(rs) ;
         assertEquals(exceptedRowCount, x) ;
     }
-
-    private void execQuery(String queryString, ResultSet expectedResultSet) {
+    
+    private void execQuery(String queryString, ResultSet expectedResultSet)
+    {
         QueryExecution qExec = QueryExecutionFactory.sparqlService(serviceQuery, queryString) ;
         ResultSet rs = qExec.execSelect() ;
         boolean b = ResultSetCompare.equalsByTerm(rs, expectedResultSet) ;


[15/50] jena git commit: Add the execution tests for construct quad

Posted by an...@apache.org.
Add the execution tests for construct quad

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

Branch: refs/heads/master
Commit: 3a67dbcd5207e5dc7c93c3adde91734cf5880d20
Parents: 6b695c5
Author: confidencesun <co...@gmail.com>
Authored: Mon Aug 10 19:21:52 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Aug 10 19:21:52 2015 +0800

----------------------------------------------------------------------
 jena-arq/testing/ARQ/Construct/dft.ttl          |  2 +
 jena-arq/testing/ARQ/Construct/g1.ttl           |  3 ++
 jena-arq/testing/ARQ/Construct/g2.ttl           |  2 +
 jena-arq/testing/ARQ/Construct/manifest.ttl     | 56 ++++++++++++++++++++
 .../ARQ/Construct/q-construct-quad-dataset.arq  |  6 +++
 .../q-construct-quad-default-graph-1.arq        |  6 +++
 .../q-construct-quad-default-graph-2.arq        |  6 +++
 .../Construct/q-construct-quad-named-graph.arq  |  6 +++
 .../Construct/q-construct-quad-short-form-1.arq |  5 ++
 .../Construct/q-construct-quad-short-form-2.arq |  5 ++
 .../Construct/q-construct-quad-short-form-3.arq |  5 ++
 .../results-construct-quad-dataset.trig         |  4 ++
 .../results-construct-quad-default-graph.ttl    |  3 ++
 .../results-construct-quad-named-graph.trig     |  3 ++
 .../results-construct-quad-short-form-1.trig    |  3 ++
 .../results-construct-quad-short-form-2.ttl     |  2 +
 .../results-construct-quad-short-form-3.trig    |  4 ++
 17 files changed, 121 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/dft.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/dft.ttl b/jena-arq/testing/ARQ/Construct/dft.ttl
new file mode 100644
index 0000000..078013e
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/dft.ttl
@@ -0,0 +1,2 @@
+@prefix : <http://example.org/ns#> .
+:s :p :o .

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/g1.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/g1.ttl b/jena-arq/testing/ARQ/Construct/g1.ttl
new file mode 100644
index 0000000..97ea06b
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/g1.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/ns#> .
+:s1 :p :o1 .
+:a1 :b1 :c1 .

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/g2.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/g2.ttl b/jena-arq/testing/ARQ/Construct/g2.ttl
new file mode 100644
index 0000000..15bab83
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/g2.ttl
@@ -0,0 +1,2 @@
+@prefix : <http://example.org/ns#> .
+:s2 :p :o2 .

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/manifest.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/manifest.ttl b/jena-arq/testing/ARQ/Construct/manifest.ttl
index 307aa65..09d5038 100644
--- a/jena-arq/testing/ARQ/Construct/manifest.ttl
+++ b/jena-arq/testing/ARQ/Construct/manifest.ttl
@@ -49,4 +49,60 @@
               qt:data   <reif-data-2.ttl> ] ;
         mf:result  <reif-result-2.rdf>
       ]
+      [  mf:name    "Construct Quad: Named Graph" ;
+         mf:action
+            [ qt:query     <q-construct-quad-named-graph.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-named-graph.trig>
+      ]
+      [  mf:name    "Construct Quad: Default Graph 1" ;
+         mf:action
+            [ qt:query     <q-construct-quad-default-graph-1.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-default-graph.ttl>
+      ]
+      [  mf:name    "Construct Quad: Default Graph 2" ;
+         mf:action
+            [ qt:query     <q-construct-quad-default-graph-2.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-default-graph.ttl>
+      ]
+      [  mf:name    "Construct Quad: Dataset" ;
+         mf:action
+            [ qt:query     <q-construct-quad-dataset.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-dataset.trig>
+      ]
+      [  mf:name    "Construct Quad: Short Form 1" ;
+         mf:action
+            [ qt:query     <q-construct-quad-short-form-1.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-short-form-1.trig>
+      ]
+      [  mf:name    "Construct Quad: Short Form 2" ;
+         mf:action
+            [ qt:query     <q-construct-quad-short-form-2.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-short-form-2.ttl>
+      ]
+      [  mf:name    "Construct Quad: Short Form 3" ;
+         mf:action
+            [ qt:query     <q-construct-quad-short-form-3.arq> ;
+              qt:data      <dft.ttl> ;
+              qt:graphData <g1.ttl> ;
+              qt:graphData <g2.ttl> ] ;
+        mf:result  <results-construct-quad-short-form-3.trig>
+      ]
     ).

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-dataset.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-dataset.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-dataset.arq
new file mode 100644
index 0000000..9b5d893
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-dataset.arq
@@ -0,0 +1,6 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+    { ?s :m ?o. GRAPH ?g { ?sg :m ?og  }  }
+WHERE
+    { ?s :p ?o. GRAPH ?g { ?sg :p ?og  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-1.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-1.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-1.arq
new file mode 100644
index 0000000..c348c06
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-1.arq
@@ -0,0 +1,6 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+    {  ?s :m ?o  }
+WHERE
+    { GRAPH ?g { ?s :p ?o  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-2.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-2.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-2.arq
new file mode 100644
index 0000000..da4fe46
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-default-graph-2.arq
@@ -0,0 +1,6 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+    {  { ?s :m ?o } }
+WHERE
+    { GRAPH ?g { ?s :p ?o  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-named-graph.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-named-graph.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-named-graph.arq
new file mode 100644
index 0000000..7bebe3c
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-named-graph.arq
@@ -0,0 +1,6 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+    { GRAPH ?g { ?s :m ?o  }  }
+WHERE
+    { GRAPH ?g { ?s :p ?o  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-1.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-1.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-1.arq
new file mode 100644
index 0000000..d1300d8
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-1.arq
@@ -0,0 +1,5 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+WHERE
+    { GRAPH ?g { ?s :p ?o  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-2.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-2.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-2.arq
new file mode 100644
index 0000000..68a45fd
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-2.arq
@@ -0,0 +1,5 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+WHERE
+    { ?s :p ?o  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-3.arq
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-3.arq b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-3.arq
new file mode 100644
index 0000000..97ef15c
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/q-construct-quad-short-form-3.arq
@@ -0,0 +1,5 @@
+PREFIX :   <http://example.org/ns#>
+
+CONSTRUCT
+WHERE
+    { ?s :p ?o. GRAPH ?g { ?sg :p ?og  }  }

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-dataset.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-dataset.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-dataset.trig
new file mode 100644
index 0000000..2ca2b27
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-dataset.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example.org/ns#> .
+{:s :m :o}
+<g1.ttl> {:s1 :m :o1 }
+<g2.ttl> {:s2 :m :o2 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-default-graph.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-default-graph.ttl b/jena-arq/testing/ARQ/Construct/results-construct-quad-default-graph.ttl
new file mode 100644
index 0000000..f07c90c
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-default-graph.ttl
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/ns#> .
+:s1 :m :o1 .
+:s2 :m :o2 .

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-named-graph.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-named-graph.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-named-graph.trig
new file mode 100644
index 0000000..876197f
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-named-graph.trig
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/ns#> .
+<g1.ttl> {:s1 :m :o1 }
+<g2.ttl> {:s2 :m :o2 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-1.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-1.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-1.trig
new file mode 100644
index 0000000..f95c57b
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-1.trig
@@ -0,0 +1,3 @@
+@prefix : <http://example.org/ns#> .
+<g1.ttl> {:s1 :p :o1 }
+<g2.ttl> {:s2 :p :o2 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-2.ttl
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-2.ttl b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-2.ttl
new file mode 100644
index 0000000..9a434a5
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-2.ttl
@@ -0,0 +1,2 @@
+@prefix : <http://example.org/ns#> .
+:s :p :o .
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/3a67dbcd/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-3.trig
----------------------------------------------------------------------
diff --git a/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-3.trig b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-3.trig
new file mode 100644
index 0000000..ab87333
--- /dev/null
+++ b/jena-arq/testing/ARQ/Construct/results-construct-quad-short-form-3.trig
@@ -0,0 +1,4 @@
+@prefix : <http://example.org/ns#> .
+{:s :p :o}
+<g1.ttl> {:s1 :p :o1 }
+<g2.ttl> {:s2 :p :o2 }
\ No newline at end of file


[50/50] jena git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena

Posted by an...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena


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

Branch: refs/heads/master
Commit: e2a076db500f8d289e087d84e6abc70f6d67e876
Parents: d030947 6a0fee3
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Aug 23 21:15:22 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Aug 23 21:15:22 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/riot/lang/JsonLDReader.java | 108 ++++++++++++++++---
 .../AbstractNodeTupleInputFormatTests.java      |   2 -
 2 files changed, 95 insertions(+), 15 deletions(-)
----------------------------------------------------------------------