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 2018/05/09 14:18:33 UTC
[1/2] jena git commit: JENA-1543: QueryEngineHttp support for JSON
queries.
Repository: jena
Updated Branches:
refs/heads/master c47a3da92 -> 379c4c693
JENA-1543: QueryEngineHttp support for JSON queries.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/90daf979
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/90daf979
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/90daf979
Branch: refs/heads/master
Commit: 90daf9793b7186ff7f1a03e7c312a371f028e5db
Parents: 3b3c469
Author: Andy Seaborne <an...@apache.org>
Authored: Mon May 7 10:08:55 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon May 7 12:04:51 2018 +0100
----------------------------------------------------------------------
.../jena/sparql/engine/QueryExecutionBase.java | 1 +
.../sparql/engine/http/QueryEngineHTTP.java | 23 ++++++--
.../apache/jena/sparql/util/QueryExecUtils.java | 56 ++++++++++++++++++--
.../org/apache/jena/sparql/junit/QueryTest.java | 3 ++
.../java/org/apache/jena/fuseki/TestQuery.java | 11 ++--
5 files changed, 78 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/90daf979/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 0e5d134..95c18c7 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
@@ -595,6 +595,7 @@ public class QueryExecutionBase implements QueryExecution
if ( q.isConstructType() ) return "CONSTRUCT" ;
if ( q.isDescribeType() ) return "DESCRIBE" ;
if ( q.isAskType() ) return "ASK" ;
+ if ( q.isJsonType() ) return "JSON" ;
return "<<unknown>>" ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/90daf979/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 91c3ed5..564c997 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
@@ -31,9 +31,10 @@ import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.protocol.HttpContext ;
import org.apache.jena.atlas.RuntimeIOException;
import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.json.JSON;
import org.apache.jena.atlas.json.JsonArray;
import org.apache.jena.atlas.json.JsonObject;
-import org.apache.jena.atlas.lib.NotImplemented;
+import org.apache.jena.atlas.json.JsonValue;
import org.apache.jena.atlas.lib.Pair ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.query.* ;
@@ -538,13 +539,29 @@ public class QueryEngineHTTP implements QueryExecution {
@Override
public JsonArray execJson()
{
- throw new NotImplemented("JSON queries not implemented for remote calls") ;
+ checkNotClosed();
+ HttpQuery httpQuery = makeHttpQuery();
+ httpQuery.setAccept(WebContent.contentTypeJSON);
+ InputStream in = httpQuery.exec();
+ JsonValue v = JSON.parseAny(in);
+ if ( ! v.isArray() )
+ throw new QueryExecException("Return from a JSON query isn't an array");
+ return v.getAsArray();
}
@Override
public Iterator<JsonObject> execJsonItems()
{
- throw new NotImplemented("JSON queries not implemented for remote calls") ;
+ // Non-streaming.
+ // TODO Integrate with the JSON parser to stream the results.
+ JsonArray array = execJson().getAsArray();
+ List<JsonObject> x = new ArrayList<>(array.size());
+ array.forEach(elt->{
+ if ( ! elt.isObject())
+ throw new QueryExecException("Item in an array from a JSON query isn't an object");
+ x.add(elt.getAsObject());
+ });
+ return x.iterator();
}
private void checkNotClosed() {
http://git-wip-us.apache.org/repos/asf/jena/blob/90daf979/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
index e2cbcef..541bac0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java
@@ -20,6 +20,8 @@ package org.apache.jena.sparql.util ;
import java.util.List ;
+import org.apache.jena.atlas.json.JSON;
+import org.apache.jena.atlas.json.JsonArray;
import org.apache.jena.query.* ;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.rdf.model.RDFNode ;
@@ -73,16 +75,20 @@ public class QueryExecUtils {
prologue = query.getPrologue() ;
if ( prologue == null )
prologue = dftPrologue ;
-
if ( query.isSelectType() )
doSelectQuery(prologue, queryExecution, outputFormat) ;
- if ( query.isDescribeType() )
+ else if ( query.isDescribeType() )
doDescribeQuery(prologue, queryExecution, outputFormat) ;
- if ( query.isConstructType() )
+ else if ( query.isConstructType() )
doConstructQuery(prologue, queryExecution, outputFormat) ;
- if ( query.isAskType() )
+ else if ( query.isConstructQuad() )
+ doConstructQuadsQuery(prologue, queryExecution, outputFormat) ;
+ else if ( query.isAskType() )
doAskQuery(prologue, queryExecution, outputFormat) ;
- queryExecution.close() ;
+ else if ( query.isJsonType() )
+ doJsonQuery(prologue, queryExecution, outputFormat) ;
+ else
+ throw new QueryException("Unrecognized query form");
}
public static void execute(Op op, DatasetGraph dsg) {
@@ -191,6 +197,11 @@ public class QueryExecUtils {
outputResultSet(results, prologue, outputFormat) ;
}
+ private static void doJsonQuery(Prologue prologue, QueryExecution queryExecution, ResultsFormat outputFormat) {
+ JsonArray results = queryExecution.execJson();
+ JSON.write(System.out, results);
+ }
+
private static void doDescribeQuery(Prologue prologue, QueryExecution qe, ResultsFormat outputFormat) {
if ( outputFormat == null || outputFormat == ResultsFormat.FMT_UNKNOWN )
outputFormat = ResultsFormat.FMT_RDF_TTL ;
@@ -254,6 +265,41 @@ public class QueryExecUtils {
System.err.println("Unknown format: " + outputFormat) ;
}
+ private static void doConstructQuadsQuery(Prologue prologue, QueryExecution qe, ResultsFormat outputFormat) {
+ if ( outputFormat == null || outputFormat == ResultsFormat.FMT_UNKNOWN )
+ outputFormat = ResultsFormat.FMT_RDF_TRIG;
+ Dataset ds = qe.execConstructDataset();
+ writeDataset(prologue, ds, outputFormat) ;
+ }
+
+ private static void writeDataset(Prologue prologue, Dataset dataset, ResultsFormat outputFormat) {
+ if ( outputFormat == null || outputFormat == ResultsFormat.FMT_UNKNOWN )
+ outputFormat = ResultsFormat.FMT_TEXT ;
+
+ if ( outputFormat.equals(ResultsFormat.FMT_NONE) )
+ return ;
+
+ if ( outputFormat.equals(ResultsFormat.FMT_TEXT) ) {
+ System.out.println("# ======== ") ;
+ RDFDataMgr.write(System.out, dataset, Lang.TURTLE) ;
+ System.out.println("# ======== ") ;
+ return ;
+ }
+
+ if ( outputFormat.equals(ResultsFormat.FMT_RDF_NQ) ) {
+ RDFDataMgr.write(System.out, dataset, Lang.NQUADS);
+ return ;
+ }
+
+ if ( outputFormat.equals(ResultsFormat.FMT_RDF_TRIG) ) {
+ RDFDataMgr.write(System.out, dataset, Lang.TRIG);
+ return ;
+ }
+
+ System.err.println("Unknown format: " + outputFormat) ;
+ }
+
+
private static void doAskQuery(Prologue prologue, QueryExecution qe, ResultsFormat outputFormat) {
boolean b = qe.execAsk() ;
http://git-wip-us.apache.org/repos/asf/jena/blob/90daf979/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 3c81071..1de9b23 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
@@ -204,6 +204,9 @@ public class QueryTest extends EarlTestCase
runTestDescribe(query, qe) ;
else if ( query.isAskType() )
runTestAsk(query, qe) ;
+ else if ( query.isJsonType() )
+ throw new UnsupportedOperationException("JSON {} queries not supported");
+
}
}
catch (IOException ioEx)
http://git-wip-us.apache.org/repos/asf/jena/blob/90daf979/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 a06bc35..9439342 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
@@ -20,22 +20,18 @@ package org.apache.jena.fuseki ;
import static org.apache.jena.fuseki.ServerCtl.serviceGSP ;
import static org.apache.jena.fuseki.ServerCtl.serviceQuery ;
-import static org.apache.jena.fuseki.ServerTest.* ;
+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 java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException ;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.*;
import java.net.HttpURLConnection ;
import java.net.URL ;
import java.util.Iterator ;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.jena.atlas.json.JsonArray;
-import org.apache.jena.atlas.lib.NotImplemented;
import org.apache.jena.atlas.web.AcceptList ;
import org.apache.jena.atlas.web.MediaType;
import org.apache.jena.graph.Node ;
@@ -270,7 +266,6 @@ public class TestQuery extends AbstractFusekiTest {
}
}
- @Test(expected = NotImplemented.class)
public void query_json_01() throws IOException {
Query query = QueryFactory.create("JSON { \"s\": ?s , \"p\": ?p , \"o\" : ?o } "
+ "WHERE { ?s ?p ?o }", Syntax.syntaxARQ);
[2/2] jena git commit: JENA-1543: Merge commit 'refs/pull/415/head'
of https://github.com/apache/jena
Posted by an...@apache.org.
JENA-1543: Merge commit 'refs/pull/415/head' of https://github.com/apache/jena
Follows from JENA-632.
This closes #415.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/379c4c69
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/379c4c69
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/379c4c69
Branch: refs/heads/master
Commit: 379c4c69317c89eea00562a761e9da13f1ddd889
Parents: c47a3da 90daf97
Author: Andy Seaborne <an...@apache.org>
Authored: Wed May 9 15:02:13 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed May 9 15:02:13 2018 +0100
----------------------------------------------------------------------
.../jena/sparql/engine/QueryExecutionBase.java | 1 +
.../sparql/engine/http/QueryEngineHTTP.java | 23 ++++++--
.../apache/jena/sparql/util/QueryExecUtils.java | 56 ++++++++++++++++++--
.../org/apache/jena/sparql/junit/QueryTest.java | 3 ++
.../java/org/apache/jena/fuseki/TestQuery.java | 11 ++--
5 files changed, 78 insertions(+), 16 deletions(-)
----------------------------------------------------------------------