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:50 UTC
[41/50] jena git commit: Add execConstructDataset(Dataset)
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(", ") ;