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/10/03 19:11:55 UTC

[1/5] jena git commit: Clean imports

Repository: jena
Updated Branches:
  refs/heads/master a9e1fae23 -> 48f5e0be6


Clean imports

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

Branch: refs/heads/master
Commit: 4c9cda41ad1de908539a922cbae76c19b5556c78
Parents: a9e1fae
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Oct 3 10:33:00 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Oct 3 10:33:00 2015 +0100

----------------------------------------------------------------------
 .../src/test/java/org/apache/jena/sparql/algebra/TestClassify.java | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4c9cda41/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
index d3819c4..2bd6b0c 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
@@ -22,8 +22,6 @@ import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.query.Query ;
 import org.apache.jena.query.QueryFactory ;
 import org.apache.jena.query.Syntax ;
-import org.apache.jena.sparql.algebra.Algebra ;
-import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.op.OpJoin ;
 import org.apache.jena.sparql.algebra.op.OpLeftJoin ;
 import org.apache.jena.sparql.engine.main.JoinClassifier ;


[5/5] jena git commit: JENA-1042: Exclude org.xenei:contract-test-maven-plugin in m2e

Posted by an...@apache.org.
JENA-1042: Exclude org.xenei:contract-test-maven-plugin in m2e


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

Branch: refs/heads/master
Commit: 48f5e0be683caf6b5744749f9b6a29efae4aa53c
Parents: 6a9f4d1
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Oct 3 17:48:32 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Oct 3 17:48:32 2015 +0100

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


http://git-wip-us.apache.org/repos/asf/jena/blob/48f5e0be/jena-parent/pom.xml
----------------------------------------------------------------------
diff --git a/jena-parent/pom.xml b/jena-parent/pom.xml
index 220683f..0144565 100644
--- a/jena-parent/pom.xml
+++ b/jena-parent/pom.xml
@@ -601,6 +601,20 @@
                   </action>
                 </pluginExecution>
 
+		<pluginExecution>
+		  <pluginExecutionFilter>
+		    <groupId>org.xenei</groupId>
+		    <artifactId>contract-test-maven-plugin</artifactId>
+		    <versionRange>[0.1.5,)</versionRange>
+		    <goals>
+		      <goal>contract-test</goal>
+		    </goals>
+		  </pluginExecutionFilter>
+		  <action>
+		    <ignore></ignore>
+		  </action>
+		</pluginExecution>
+		
               </pluginExecutions>
             </lifecycleMappingMetadata>
           </configuration>


[4/5] jena git commit: JENA-1038: Put back the Jena sequence for processing JSON-LD.

Posted by an...@apache.org.
JENA-1038: Put back the Jena sequence for processing JSON-LD.

The Jena code has a slightly different behaviour in the presence of
junk content after the JSON object.


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

Branch: refs/heads/master
Commit: 6a9f4d11a9cc7b4adf8141560fd05091e93ea178
Parents: d214459
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Oct 3 17:17:33 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Oct 3 17:17:33 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/riot/lang/JsonLDReader.java | 208 ++++++++++---------
 1 file changed, 110 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/6a9f4d11/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
index cca0f77..0f44248 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
@@ -25,11 +25,11 @@ import java.util.List ;
 import java.util.Map ;
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.function.Consumer ;
 
-import com.fasterxml.jackson.core.JsonLocation ;
-import com.fasterxml.jackson.core.JsonProcessingException ;
+import com.fasterxml.jackson.core.* ;
+import com.fasterxml.jackson.databind.ObjectMapper ;
 import com.github.jsonldjava.core.* ;
-import com.github.jsonldjava.utils.JsonUtils ;
 
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.InternalErrorException ;
@@ -45,6 +45,7 @@ import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.system.* ;
 import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.util.Context ;
+import org.apache.jena.util.FileUtils ;
 
 public class JsonLDReader implements ReaderRIOT
 {
@@ -57,56 +58,11 @@ public class JsonLDReader implements ReaderRIOT
     @Override public ParserProfile getParserProfile()                   { return parserProfile ; }
     @Override public void setParserProfile(ParserProfile parserProfile) { this.parserProfile = parserProfile ; }
     
-    @Override
-    public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {
-        try {
-            Object jsonObject = JsonUtils.fromReader(reader) ;
-            read$(jsonObject, baseURI, ct, output, context) ;
-        }
-        catch (JsonProcessingException ex) {    
-            // includes JsonParseException
-            // The Jackson JSON parser, or addition JSON-level check, throws up something.
-            JsonLocation loc = ex.getLocation() ;
-            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
-            throw new RiotException(ex.getOriginalMessage()) ;
-        }
-        catch (IOException e) {
-            IO.exception(e) ;
-        }
-    }
-
-    @Override
-    public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
-        try {
-            Object jsonObject = JsonUtils.fromInputStream(in) ;
-            read$(jsonObject, baseURI, ct, output, context) ;
-        }
-        catch (JsonProcessingException ex) {    
-            // includes JsonParseException
-            // The Jackson JSON parser, or addition JSON-level check, throws up something.
-            JsonLocation loc = ex.getLocation() ;
-            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
-            throw new RiotException(ex.getOriginalMessage()) ;
-        }
-        catch (IOException e) {
-            IO.exception(e) ;
-        }
-    }
-    
-    // This addresses jsonld-java issue #144 prior to jsonld-java release 0.6.0 in
-    // Jena code so that we get triples/quads out then there is a parse error.
-    // Even if it is fixed in jsonld-java, it would mean that no triples would
-    // be produced - all the JSON parsing is done before JSON-LD processing.
-    // Here we process the first JSON object, which causes triples to be
-    // generated then decide whether to throw a parse error. This is more in the
-    // style of other syntaxes and stream parsing.
-    // This fix is in jsonld-java itself release 0.6.0 and later.
-    
 //    @Override
 //    public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {
 //        try {
-//            readProcess(reader, 
-//                       (jsonObject)->read$(jsonObject, baseURI, ct, output, context)) ;
+//            Object jsonObject = JsonUtils.fromReader(reader) ;
+//            read$(jsonObject, baseURI, ct, output, context) ;
 //        }
 //        catch (JsonProcessingException ex) {    
 //            // includes JsonParseException
@@ -123,58 +79,114 @@ public class JsonLDReader implements ReaderRIOT
 //
 //    @Override
 //    public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
-//        Reader r = FileUtils.asBufferedUTF8(in) ;
-//        read(r, baseURI, ct, output, context) ;
-//    }
-//
-//    // From JsonUtils.fromReader in the jsonld-java codebase.
-//    // Note that jsonld-java always uses a reader.
-//    private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
-//    private static final JsonFactory JSON_FACTORY = new JsonFactory(JSON_MAPPER);
-//    
-//    /** Read a JSON object from the reader, acall the prcoessing function, then
-//     * check for trailing content. For Jena, this means tripes/quads are generated
-//     * from a valid JSON object, then there is a  parse error for trailing junk.   
-//     * @param reader
-//     * @param function
-//     * @throws IOException
-//     */
-//    private static void readProcess(Reader reader, Consumer<Object> function) throws IOException {
-//        final JsonParser jp = JSON_FACTORY.createParser(reader);
-//        Object rval ;
-//        final JsonToken initialToken = jp.nextToken();
-//
-//        if (initialToken == JsonToken.START_ARRAY) {
-//            rval = jp.readValueAs(List.class);
-//        } else if (initialToken == JsonToken.START_OBJECT) {
-//            rval = jp.readValueAs(Map.class);
-//        } else if (initialToken == JsonToken.VALUE_STRING) {
-//            rval = jp.readValueAs(String.class);
-//        } else if (initialToken == JsonToken.VALUE_FALSE || initialToken == JsonToken.VALUE_TRUE) {
-//            rval = jp.readValueAs(Boolean.class);
-//        } else if (initialToken == JsonToken.VALUE_NUMBER_FLOAT
-//                || initialToken == JsonToken.VALUE_NUMBER_INT) {
-//            rval = jp.readValueAs(Number.class);
-//        } else if (initialToken == JsonToken.VALUE_NULL) {
-//            rval = null;
-//        } else {
-//            throw new JsonParseException("document doesn't start with a valid json element : "
-//                    + initialToken, jp.getCurrentLocation());
+//        try {
+//            Object jsonObject = JsonUtils.fromInputStream(in) ;
+//            read$(jsonObject, baseURI, ct, output, context) ;
 //        }
-//        
-//        function.accept(rval);
-//        
-//        JsonToken t ;
-//        try { t = jp.nextToken(); }
-//        catch (JsonParseException ex) {
-//            throw new JsonParseException("Document contains more content after json-ld element - (possible mismatched {}?)",
-//                                         jp.getCurrentLocation());
+//        catch (JsonProcessingException ex) {    
+//            // includes JsonParseException
+//            // The Jackson JSON parser, or addition JSON-level check, throws up something.
+//            JsonLocation loc = ex.getLocation() ;
+//            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
+//            throw new RiotException(ex.getOriginalMessage()) ;
+//        }
+//        catch (IOException e) {
+//            errorHandler.error(e.getMessage(), -1, -1); 
+//            IO.exception(e) ;
 //        }
-//        if ( t != null )
-//            throw new JsonParseException("Document contains possible json content after the json-ld element - (possible mismatched {}?)",
-//                                             jp.getCurrentLocation());
 //    }
     
+    // This addresses jsonld-java issue #144 prior to jsonld-java release 0.6.0 in
+    // Jena code so that we get triples/quads out then there is a parse error.
+    // Even if it is fixed in jsonld-java, it would mean that no triples would
+    // be produced - all the JSON parsing is done before JSON-LD processing.
+    // Here we process the first JSON object, which causes triples to be
+    // generated then decide whether to throw a parse error. This is more in the
+    // style of other syntaxes and stream parsing.
+    //
+    // This fix is in jsonld-java itself release 0.6.0 and later.
+    // But.
+    // The fix in jsonld-java is the "readProcess" code JsonUtils.fromReader
+    // without the Consumer. It parses all the JSON, checks for trailing junk,
+    // then returns an object that is converted to RDF objects.  All bad JSON
+    // causes no triples or quads.
+    //
+    // The code here extracts the JSON object, generates RDF, then checks for
+    // trailing junk so produces triples/quads then an exception.
+    
+    @Override
+    public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {
+        try {
+            readProcess(reader, 
+                       (jsonObject)->read$(jsonObject, baseURI, ct, output, context)) ;
+        }
+        catch (JsonProcessingException ex) {    
+            // includes JsonParseException
+            // The Jackson JSON parser, or addition JSON-level check, throws up something.
+            JsonLocation loc = ex.getLocation() ;
+            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
+            throw new RiotException(ex.getOriginalMessage()) ;
+        }
+        catch (IOException e) {
+            errorHandler.error(e.getMessage(), -1, -1); 
+            IO.exception(e) ;
+        }
+    }
+
+    @Override
+    public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
+        Reader r = FileUtils.asBufferedUTF8(in) ;
+        read(r, baseURI, ct, output, context) ;
+    }
+
+    // From JsonUtils.fromReader in the jsonld-java codebase.
+    // Note that jsonld-java always uses a reader.
+    private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
+    private static final JsonFactory JSON_FACTORY = new JsonFactory(JSON_MAPPER);
+    
+    /** Read a JSON object from the reader, acall the prcoessing function, then
+     * check for trailing content. For Jena, this means tripes/quads are generated
+     * from a valid JSON object, then there is a  parse error for trailing junk.   
+     * @param reader
+     * @param function
+     * @throws IOException
+     */
+    private static void readProcess(Reader reader, Consumer<Object> function) throws IOException {
+        final JsonParser jp = JSON_FACTORY.createParser(reader);
+        Object rval ;
+        final JsonToken initialToken = jp.nextToken();
+
+        if (initialToken == JsonToken.START_ARRAY) {
+            rval = jp.readValueAs(List.class);
+        } else if (initialToken == JsonToken.START_OBJECT) {
+            rval = jp.readValueAs(Map.class);
+        } else if (initialToken == JsonToken.VALUE_STRING) {
+            rval = jp.readValueAs(String.class);
+        } else if (initialToken == JsonToken.VALUE_FALSE || initialToken == JsonToken.VALUE_TRUE) {
+            rval = jp.readValueAs(Boolean.class);
+        } else if (initialToken == JsonToken.VALUE_NUMBER_FLOAT
+                || initialToken == JsonToken.VALUE_NUMBER_INT) {
+            rval = jp.readValueAs(Number.class);
+        } else if (initialToken == JsonToken.VALUE_NULL) {
+            rval = null;
+        } else {
+            throw new JsonParseException("document doesn't start with a valid json element : "
+                    + initialToken, jp.getCurrentLocation());
+        }
+        
+        function.accept(rval);
+        
+        JsonToken t ;
+        try { t = jp.nextToken(); }
+        catch (JsonParseException ex) {
+            throw new JsonParseException("Document contains more content after json-ld element - (possible mismatched {}?)",
+                                         jp.getCurrentLocation());
+        }
+        if ( t != null )
+            throw new JsonParseException("Document contains possible json content after the json-ld element - (possible mismatched {}?)",
+                                             jp.getCurrentLocation());
+    }
+    
     private void read$(Object jsonObject, String baseURI, ContentType ct, final StreamRDF output, Context context) {
         if ( parserProfile == null )
             parserProfile = RiotLib.profile(RDFLanguages.JSONLD, baseURI, errorHandler) ;


[2/5] jena git commit: JENA-1049: Implement remaining Ops

Posted by an...@apache.org.
JENA-1049: Implement remaining Ops

Because of inner selects, all optimziation ops can also be present in
the form being classified, and hence passed to VarFinder.

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

Branch: refs/heads/master
Commit: 4dbae033d54c15c12a9ce389ff20ec097e8416ef
Parents: 4c9cda4
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Oct 3 10:33:59 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Oct 3 10:33:59 2015 +0100

----------------------------------------------------------------------
 .../jena/sparql/engine/main/VarFinder.java      | 44 ++++++++++--------
 .../sparql/algebra/optimize/TestOptimizer.java  | 49 +++++++++++++++++++-
 2 files changed, 71 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/4dbae033/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
index 9e60fae..a65b73c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
@@ -30,7 +30,6 @@ import java.util.Map ;
 import java.util.Map.Entry ;
 import java.util.Set ;
 
-import org.apache.jena.atlas.lib.NotImplemented ;
 import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.OpVisitor ;
 import org.apache.jena.sparql.algebra.op.* ;
@@ -164,15 +163,24 @@ public class VarFinder
 
         @Override
         public void visit(OpMinus opMinus) {
-            mergeVars(opMinus.getLeft()) ;
-            VarUsageVisitor usage = VarUsageVisitor.apply(opMinus.getRight());
+            mergeMinusDiff(opMinus.getLeft(), opMinus.getRight()) ;
+        }
+
+        @Override
+        public void visit(OpDiff opDiff) { 
+            mergeMinusDiff(opDiff.getLeft(), opDiff.getRight()) ;
+        }
+        
+        private void mergeMinusDiff(Op left, Op right) {
+            mergeVars(left) ;
+            VarUsageVisitor usage = VarUsageVisitor.apply(right);
             // Everything in the right side is really a filter.  
             filterMentions.addAll(usage.defines) ;
             filterMentions.addAll(usage.optDefines) ;
             filterMentions.addAll(usage.filterMentions) ;
             filterMentions.addAll(usage.assignMentions) ;
         }
-        
+
         @Override
         public void visit(OpConditional opLeftJoin) {
             leftJoin(opLeftJoin.getLeft(), opLeftJoin.getRight(), null);
@@ -292,6 +300,12 @@ public class VarFinder
         public void visit(OpList opList)            { mergeVars(opList.getSubOp()) ; }
         
         @Override
+        public void visit(OpService opService)      { mergeVars(opService.getSubOp()) ; }
+        
+        @Override
+        public void visit(OpTopN opTop)             { mergeVars(opTop.getSubOp()) ; }
+        
+        @Override
         public void visit(OpOrder opOrder) { 
             mergeVars(opOrder.getSubOp()) ;
             opOrder.getConditions().forEach(sc-> {
@@ -314,22 +328,12 @@ public class VarFinder
             addVar(defines, dsNames.getGraphNode()) ;
         }
 
-        // Not implemented: with checking. 
-
-        private void no() { 
-            throw new NotImplemented() ;
-        }
-        
         @Override
-        public void visit(OpProcedure opProc) { no() ; }
-
-        @Override
-        public void visit(OpService opService) { no(); }
-
-        @Override
-        public void visit(OpDiff opDiff) { no(); }
-        
-        @Override
-        public void visit(OpTopN opTop) { no(); }
+        public void visit(OpProcedure opProc) { 
+            for ( Expr expr :  opProc.getArgs() ) {
+                Set<Var> vars = expr.getVarsMentioned() ;
+                defines.addAll(vars) ;
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/4dbae033/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
index 947bbe4..b8656d0 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
@@ -24,7 +24,6 @@ import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.op.OpAssign ;
 import org.apache.jena.sparql.algebra.op.OpExtend ;
 import org.apache.jena.sparql.algebra.op.OpTable ;
-import org.apache.jena.sparql.algebra.optimize.TransformExtendCombine ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
 import org.apache.jena.sparql.expr.ExprVar ;
@@ -292,7 +291,7 @@ public class TestOptimizer extends AbstractTestTransform
         // JENA-809 : check no changes to input.
         String x = "(project (?x) (extend ((?bar 2)) (extend ((?foo 1)) (table unit))))" ;
         String y = "(project (?x) (extend ((?foo 1) (?bar 2)) (table unit)))" ;
-        AbstractTestTransform.checkAlgebra(x, new TransformExtendCombine(), y);
+        checkAlgebra(x, new TransformExtendCombine(), y);
     }
 
         
@@ -362,5 +361,51 @@ public class TestOptimizer extends AbstractTestTransform
         AbstractTestTransform.checkAlgebra(x, new TransformExtendCombine(), y);
     }
 
+    // Nested
+/*
+ *    String qs = StrUtils.strjoinNL
+            ("select *",  
+             "where {",  
+             "  { select * { ?id ?p ?label } order by ?label limit 5 }",  
+             "  OPTIONAL { OPTIONAL { ?s ?p ?label }}",   
+             "}"
+                );    
+ */
+    // Derived from JENA-1041 (inner TopN)
+    @Test public void subselect_01() {
+        String qs = StrUtils.strjoinNL
+            ("select *",  
+             "where {",  
+             "  { select * { ?id ?p ?label } order by ?label limit 5 }",  
+             "  ?s ?p ?label",   
+             "}"
+                );
+        String expected = StrUtils.strjoinNL
+            ("(sequence"
+            ,"  (top (5 ?label)"
+            ,"    (bgp (triple ?id ?p ?label)))"
+            ,"  (bgp (triple ?s ?p ?label)))") ;
+        check(qs, expected) ;
+    }
+    
+    // Derived from JENA-1041 (inner TopN)
+    @Test public void subselect_02() {
+        // Has a blocking optional pattern for the join strategy.
+        String qs = StrUtils.strjoinNL
+            ("select *",  
+             "where {",  
+             "  { select * { ?id ?p ?label } order by ?label limit 5 }",  
+             "  OPTIONAL { OPTIONAL { ?s ?p ?label }}",   
+             "}"
+                );
+        String expected = StrUtils.strjoinNL
+            ("(leftjoin"
+            ,"  (top (5 ?label)"
+            ,"    (bgp (triple ?id ?p ?label)))"
+            ,"  (conditional"
+            ,"    (table unit)"
+            ,"    (bgp (triple ?s ?p ?label))))") ;
+        check(qs, expected) ;
+    }
 
 }


[3/5] jena git commit: JENA-1038: Convert Jackson JSON parsing exceptions to RiotException.

Posted by an...@apache.org.
JENA-1038: Convert Jackson JSON parsing exceptions to RiotException.

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

Branch: refs/heads/master
Commit: d21445922b371f9a56cb20df72cd3dae50db0306
Parents: 4dbae03
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Oct 3 11:28:18 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Oct 3 11:28:18 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/riot/lang/JsonLDReader.java | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d2144592/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
index 367e7fd..cca0f77 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/JsonLDReader.java
@@ -25,6 +25,9 @@ import java.util.List ;
 import java.util.Map ;
 import java.util.Map.Entry;
 import java.util.Objects;
+
+import com.fasterxml.jackson.core.JsonLocation ;
+import com.fasterxml.jackson.core.JsonProcessingException ;
 import com.github.jsonldjava.core.* ;
 import com.github.jsonldjava.utils.JsonUtils ;
 
@@ -60,6 +63,13 @@ public class JsonLDReader implements ReaderRIOT
             Object jsonObject = JsonUtils.fromReader(reader) ;
             read$(jsonObject, baseURI, ct, output, context) ;
         }
+        catch (JsonProcessingException ex) {    
+            // includes JsonParseException
+            // The Jackson JSON parser, or addition JSON-level check, throws up something.
+            JsonLocation loc = ex.getLocation() ;
+            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
+            throw new RiotException(ex.getOriginalMessage()) ;
+        }
         catch (IOException e) {
             IO.exception(e) ;
         }
@@ -71,18 +81,26 @@ public class JsonLDReader implements ReaderRIOT
             Object jsonObject = JsonUtils.fromInputStream(in) ;
             read$(jsonObject, baseURI, ct, output, context) ;
         }
+        catch (JsonProcessingException ex) {    
+            // includes JsonParseException
+            // The Jackson JSON parser, or addition JSON-level check, throws up something.
+            JsonLocation loc = ex.getLocation() ;
+            errorHandler.error(ex.getOriginalMessage(), loc.getLineNr(), loc.getColumnNr()); 
+            throw new RiotException(ex.getOriginalMessage()) ;
+        }
         catch (IOException e) {
             IO.exception(e) ;
         }
     }
     
-    // This addresses jsonld-java issue #144 pre jsonld-java relase 0.6.0 in
+    // This addresses jsonld-java issue #144 prior to jsonld-java release 0.6.0 in
     // Jena code so that we get triples/quads out then there is a parse error.
     // Even if it is fixed in jsonld-java, it would mean that no triples would
     // be produced - all the JSON parsing is done before JSON-LD processing.
     // Here we process the first JSON object, which causes triples to be
     // generated then decide whether to throw a parse error. This is more in the
     // style of other syntaxes and stream parsing.
+    // This fix is in jsonld-java itself release 0.6.0 and later.
     
 //    @Override
 //    public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {