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(-)
----------------------------------------------------------------------