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/20 19:03:35 UTC

[1/3] jena git commit: Add missing operation. Order in file systematically.

Repository: jena
Updated Branches:
  refs/heads/master 880ab7c9e -> d8fb3175a


Add missing operation. Order in file systematically.

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

Branch: refs/heads/master
Commit: fdd77f9b59ee72a56b8a21e44632c0a9ca7e6d61
Parents: 880ab7c
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 16:14:32 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 16:14:32 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/riot/RDFDataMgr.java   | 30 +++++++++++++-------
 1 file changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/fdd77f9b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
index 3a511f8..d9c4823 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
@@ -640,6 +640,16 @@ public class RDFDataMgr
      * @param uri       URI to read from (includes file: and a plain file name).
      * @param base      Base URI (defaults to uri).
      * @param hintLang  Hint for the syntax
+     */
+    public static void parse(StreamRDF sink, String uri, String base, Lang hintLang) {
+        parse(sink, uri, uri, hintLang, null) ;
+    }
+    
+    /** Read RDF data.
+     * @param sink     Destination for the RDF read.
+     * @param uri       URI to read from (includes file: and a plain file name).
+     * @param base      Base URI (defaults to uri).
+     * @param hintLang  Hint for the syntax
      * @param context   Content object to control reading process.
      */
     public static void parse(StreamRDF sink, String uri, String base, Lang hintLang, Context context) {
@@ -677,13 +687,13 @@ public class RDFDataMgr
 
     /** Read RDF data.
      * @param sink      Destination for the RDF read.
-     * @param in        StringReader
+     * @param in        Bytes to read.
      * @param base      Base URI (defaults to uri).
      * @param hintLang  Hint for the syntax
      * @param context   Content object to control reading process.
      */
-    public static void parse(StreamRDF sink, StringReader in, String base, Lang hintLang, Context context) {
-        process(sink, in, base, hintLang, context) ;
+    public static void parse(StreamRDF sink, InputStream in, String base, Lang hintLang, Context context) {
+        process(sink, new TypedInputStream(in), base, hintLang, context) ;
     }
 
     /** Read RDF data.
@@ -707,14 +717,12 @@ public class RDFDataMgr
 
     /** Read RDF data.
      * @param sink      Destination for the RDF read.
-     * @param in        Reader
+     * @param in        StringReader
      * @param base      Base URI (defaults to uri).
      * @param hintLang  Hint for the syntax
      * @param context   Content object to control reading process.
-     * @deprecated     Use an InputStream or a StringReader. 
      */
-    @Deprecated
-    public static void parse(StreamRDF sink, Reader in, String base, Lang hintLang, Context context) {
+    public static void parse(StreamRDF sink, StringReader in, String base, Lang hintLang, Context context) {
         process(sink, in, base, hintLang, context) ;
     }
 
@@ -743,13 +751,15 @@ public class RDFDataMgr
 
     /** Read RDF data.
      * @param sink      Destination for the RDF read.
-     * @param in        Bytes to read.
+     * @param in        Reader
      * @param base      Base URI (defaults to uri).
      * @param hintLang  Hint for the syntax
      * @param context   Content object to control reading process.
+     * @deprecated     Use an InputStream or a StringReader. 
      */
-    public static void parse(StreamRDF sink, InputStream in, String base, Lang hintLang, Context context) {
-        process(sink, new TypedInputStream(in), base, hintLang, context) ;
+    @Deprecated
+    public static void parse(StreamRDF sink, Reader in, String base, Lang hintLang, Context context) {
+        process(sink, in, base, hintLang, context) ;
     }
 
     /** Read RDF data.


Re: [1/3] jena git commit: Add missing operation. Order in file systematically.

Posted by Andy Seaborne <an...@apache.org>.
On 20/08/15 18:33, Rob Vesse wrote:
> This looks slightly odd:
>
> On 20/08/2015 10:03, "andy@apache.org" <an...@apache.org> wrote:
>
>> +     */
>> +    public static void parse(StreamRDF sink, String uri, String base,
>> Lang hintLang) {
>> +        parse(sink, uri, uri, hintLang, null) ;
>> +    }
>
> Shouldn't base be passed through as well instead of passing through uri
> twice?
>
> Rob

Yes! - autocomplete and rushing => disaster.

Thanks for spotting that

	Andy

>
>
>
>


Re: [1/3] jena git commit: Add missing operation. Order in file systematically.

Posted by Rob Vesse <rv...@dotnetrdf.org>.
This looks slightly odd:

On 20/08/2015 10:03, "andy@apache.org" <an...@apache.org> wrote:

>+     */
>+    public static void parse(StreamRDF sink, String uri, String base,
>Lang hintLang) {
>+        parse(sink, uri, uri, hintLang, null) ;
>+    }

Shouldn't base be passed through as well instead of passing through uri
twice?

Rob





[3/3] jena git commit: JENA-1012 clean tests ; DRY code; prefer use of RDFDataMgr.

Posted by an...@apache.org.
JENA-1012 clean tests ; DRY code; prefer use of RDFDataMgr.


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

Branch: refs/heads/master
Commit: d8fb3175a20c518eef372b8c881b6526977d8bc0
Parents: 85b9243
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 17:55:46 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 17:56:40 2015 +0100

----------------------------------------------------------------------
 .../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/TestReaderNTriples.java      |  24 --
 .../apache/jena/riot/lang/TestTurtleTerms.java  |   3 +-
 10 files changed, 354 insertions(+), 403 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
new file mode 100644
index 0000000..c31c16d
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/ParserTestBaseLib.java
@@ -0,0 +1,76 @@
+/**
+ * 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.riot.lang;
+
+import java.io.StringReader ;
+
+import org.apache.jena.atlas.lib.StrUtils ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.ReaderRIOT ;
+import org.apache.jena.riot.system.ParserProfile ;
+import org.apache.jena.riot.system.RiotLib ;
+import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.system.StreamRDFLib ;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.DatasetGraphFactory ;
+import org.apache.jena.sparql.graph.GraphFactory ;
+
+/** Helper code for RIOT language parsing tests */
+class ParserTestBaseLib {
+    
+    /** Parse for a language - convert errors.wranigns to ErrorHandlerEx */
+    static Graph parseGraph(Lang lang, String ...strings) {
+        Graph graph = GraphFactory.createDefaultGraph() ;
+        StreamRDF dest = StreamRDFLib.graph(graph) ;
+        parse(lang, dest, strings) ;
+        return graph ;
+    }
+
+    /** Parse for a language - convert errors.wranigns to ErrorHandlerEx */
+    static DatasetGraph parseDataset(Lang lang, String ...strings) {
+        DatasetGraph dsg = DatasetGraphFactory.createMem() ;
+        StreamRDF dest = StreamRDFLib.dataset(dsg) ;
+        parse(lang, dest, strings) ;
+        return dsg ;
+    }
+
+    /** Parse strings to destination (chekcing on, URI resolution off) */ 
+    static void parse(Lang lang, StreamRDF dest, String... strings) {
+        String string = StrUtils.strjoin("\n", strings) ;
+        StringReader reader = new StringReader(string) ;
+        String baseIRI = "http://base/" ;
+        ReaderRIOT r = RDFDataMgr.createReader(lang) ;
+        //ParserProfile profile = RiotLib.profile(lang, baseIRI, new ErrorHandlerEx());
+        ParserProfile profile = RiotLib.profile(baseIRI, false, true, new ErrorHandlerEx());
+        r.setParserProfile(profile) ;
+        r.setErrorHandler(new ErrorHandlerEx()); // WHY?
+        r.read(reader, baseIRI, null, dest, null);
+    }
+
+    /** Parse for a language - convert errors.wranigns to ErrorHandlerEx */
+    static long parseCount(Lang lang, String ...strings) {
+        StreamRDFCounting dest = StreamRDFLib.count() ;
+        parse(lang, dest, strings) ;
+        return dest.count() ;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNQuads.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNQuads.java
index dff0392..1c6e721 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNQuads.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNQuads.java
@@ -20,75 +20,49 @@ package org.apache.jena.riot.lang;
 
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
-import org.apache.jena.riot.RiotReader ;
-import org.apache.jena.riot.system.StreamRDF ;
-import org.apache.jena.riot.system.StreamRDFLib ;
-import org.apache.jena.riot.tokens.Tokenizer ;
+import org.apache.jena.riot.Lang ;
 import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.DatasetGraphFactory ;
 import org.junit.Test ;
 
 /** Test of syntax by a quads parser (does not include node validitiy checking) */ 
 
 public class TestLangNQuads extends TestLangNTuples
 {
-    
-    @Test
-    public void quad_1()
-    {
-        parseCount("<x> <p> <s> <g> .") ; 
-    }
-    
-    @Test(expected=ExFatal.class)
-    public void quad_2()
-    {
-        parseCount("<x> <p> <s> <g>") ;        // No trailing DOT
+    @Override
+    protected Lang getLang() {
+        return Lang.NQUADS ;
     }
-    
 
-    @Test(expected=ExFatal.class) 
-    public void nq_only_1()
-    {
-        parseCount("<x> <p> <s> <g> <c> .") ; 
+    @Test
+    public void quad_1() {
+        parseCount("<x> <p> <s> <g> .");
     }
 
-    @Test(expected=ExFatal.class) 
-    public void nq_only_2()
-    {
-        parseCount("@base <http://example/> . <x> <p> <s> .") ; 
+    @Test(expected = ExFatal.class)
+    public void quad_2() {
+        parseCount("<x> <p> <s> <g>"); // No trailing DOT
     }
 
-    
-    @Test
-    public void dataset_1()
-    {
-        // This must parse to <g> 
-        DatasetGraph dsg = parseToDataset("<x> <p> <s> <g> .") ;
-        assertEquals(1,dsg.size()) ;
-        assertEquals(1, dsg.getGraph(NodeFactory.createURI("g")).size()) ;
-        assertEquals(0, dsg.getDefaultGraph().size()) ;
+    @Test(expected = ExFatal.class)
+    public void nq_only_1() {
+        parseCount("<x> <p> <s> <g> <c> .");
     }
 
-    @Override
-    protected long parseCount(String... strings)
-    {
-        StreamRDFCounting sink = StreamRDFLib.count() ;
-        parse(sink, strings) ;
-        return sink.count() ;
+    @Test(expected = ExFatal.class)
+    public void nq_only_2() {
+        parseCount("@base <http://example/> . <x> <p> <s> .");
     }
-    
-    private DatasetGraph parseToDataset(String string)
-    {
-        DatasetGraph dsg = DatasetGraphFactory.createMem() ;
-        StreamRDF dest = StreamRDFLib.dataset(dsg) ;
-        parse(dest, string) ;
-        return dsg ;
+
+    @Test
+    public void dataset_1() {
+        // This must parse to <g>
+        DatasetGraph dsg = parseToDataset("<x> <p> <s> <g> .");
+        assertEquals(1, dsg.size());
+        assertEquals(1, dsg.getGraph(NodeFactory.createURI("g")).size());
+        assertEquals(0, dsg.getDefaultGraph().size());
     }
 
-    @Override
-    protected LangRIOT createParser(Tokenizer tokenizer, StreamRDF sink)
-    {
-        return RiotReader.createParserNQuads(tokenizer, sink) ;
+    private DatasetGraph parseToDataset(String string) {
+        return ParserTestBaseLib.parseDataset(Lang.NQUADS, string);
     }
-    
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
index feb5fa1..55b9bd6 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
@@ -24,14 +24,10 @@ import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.rdf.model.ModelFactory ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.riot.RiotException;
-import org.apache.jena.riot.RiotReader ;
+import org.apache.jena.riot.* ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
 import org.apache.jena.riot.out.CharSpace;
-import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
 import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.sparql.sse.SSE ;
@@ -42,87 +38,79 @@ import org.junit.Test ;
 public class TestLangNTriples extends TestLangNTuples
 {
     // Test streaming interface.
-    
-    @Test public void nt_reader_twice()
-    {
-        String s = "_:a <p> 'foo' . " ;
-        StringReader r = new StringReader(s) ;
-        Model m = ModelFactory.createDefaultModel() ;
-        
-        RDFDataMgr.read(m, r, null, RDFLanguages.NTRIPLES) ;
-        assertEquals(1, m.size()) ;
-        
-        String x = m.listStatements().next().getSubject().getId().getLabelString() ;
-        assertNotEquals(x, "a") ;
-        
-        // reset - reread -  new bNode.
-        r = new StringReader(s) ;
-        RDFDataMgr.read(m, r, null, RDFLanguages.NTRIPLES) ;
-        assertEquals(2, m.size()) ;
+
+    @Override
+    protected Lang getLang() {
+        return Lang.NTRIPLES ;
     }
 
     @Test
-    public void nt_model_1()
-    {
-        Model m1 = parseToModel("<x> <p> \"abc-\\u00E9\". ") ;
-        assertEquals(1, m1.size()) ;
-        Model m2 = parseToModel("<x> <p> \"abc-\\u00E9\". ") ;
-        assertTrue(m1.isIsomorphicWith(m2)) ;
-        Graph g1 = SSE.parseGraph("(graph (triple <x> <p> \"abc-é\"))") ;
-        assertTrue(g1.isIsomorphicWith(m1.getGraph())) ;
+    public void nt_reader_twice() {
+        String s = "_:a <p> 'foo' . ";
+        StringReader r = new StringReader(s);
+        Model m = ModelFactory.createDefaultModel();
+
+        RDFDataMgr.read(m, r, null, RDFLanguages.NTRIPLES);
+        assertEquals(1, m.size());
+
+        String x = m.listStatements().next().getSubject().getId().getLabelString();
+        assertNotEquals(x, "a");
+
+        // reset - reread - new bNode.
+        r = new StringReader(s);
+        RDFDataMgr.read(m, r, null, RDFLanguages.NTRIPLES);
+        assertEquals(2, m.size());
     }
 
-    @Test(expected=ExFatal.class) 
-    public void nt_only_1()
-    {
-        parseCount("<x> <p> <s> <g> .") ; 
+    @Test
+    public void nt_model_1() {
+        Model m1 = parseToModel("<x> <p> \"abc-\\u00E9\". ");
+        assertEquals(1, m1.size());
+        Model m2 = parseToModel("<x> <p> \"abc-\\u00E9\". ");
+        assertTrue(m1.isIsomorphicWith(m2));
+        Graph g1 = SSE.parseGraph("(graph (triple <x> <p> \"abc-é\"))");
+        assertTrue(g1.isIsomorphicWith(m1.getGraph()));
     }
 
-    @Test(expected=ExFatal.class) 
-    public void nt_only_2()
-    {
-        parseCount("@base <http://example/> . <x> <p> <s> .") ; 
+    @Test(expected = ExFatal.class)
+    public void nt_only_1() {
+        parseCount("<x> <p> <s> <g> .");
     }
 
-    @Test
-    public void nt_only_5()
-    {
-        parseCount("<x> <p> \"é\" .") ; 
+    @Test(expected = ExFatal.class)
+    public void nt_only_2() {
+        parseCount("@base <http://example/> . <x> <p> <s> .");
     }
-    
-    @Test(expected = RiotException.class)
-    public void nt_only_5b()
-    {
-        parseCount(CharSpace.ASCII, "<x> <p> \"é\" .") ; 
+
+    @Test
+    public void nt_only_5() {
+        parseCount("<x> <p> \"é\" .");
     }
-    
+
     @Override
     protected long parseCount(String... strings) {
-        return parseCount(CharSpace.UTF8, strings);
+        return ParserTestBaseLib.parseCount(Lang.NTRIPLES, strings) ;
+    }
+
+    @Test(expected = RiotException.class)
+    public void nt_only_5b() {
+        parseCount(CharSpace.ASCII, "<x> <p> \"é\" .");
     }
-    
-    private long parseCount(CharSpace charSpace, String... strings)
-    {
-        String string = StrUtils.strjoin("\n", strings) ;
-        Tokenizer tokenizer = tokenizer(charSpace, string) ;
-        StreamRDFCounting sink = StreamRDFLib.count() ;
-        LangNTriples x = RiotReader.createParserNTriples(tokenizer, sink) ;
-        x.getProfile().setHandler(new ErrorHandlerEx()) ;
-        x.parse() ;
-        return sink.count() ;
+
+    private long parseCount(CharSpace charSpace, String... strings) {
+        String string = StrUtils.strjoin("\n", strings);
+        Tokenizer tokenizer = tokenizer(charSpace, string);
+        StreamRDFCounting sink = StreamRDFLib.count();
+        LangNTriples x = RiotParsers.createParserNTriples(tokenizer, sink);
+        x.getProfile().setHandler(new ErrorHandlerEx());
+        x.parse();
+        return sink.count();
     }
 
-    @Override
-    protected LangRIOT createParser(Tokenizer tokenizer, StreamRDF sink)
-    {
-        return RiotReader.createParserNTriples(tokenizer, sink) ;
-    } 
-
-    protected Model parseToModel(String string)
-    {
-        StringReader r = new StringReader(string) ;
-        Model model = ModelFactory.createDefaultModel() ;
-        RDFDataMgr.read(model, r, null, RDFLanguages.NTRIPLES) ;
-        return model ;
+    protected Model parseToModel(String string) {
+        StringReader r = new StringReader(string);
+        Model model = ModelFactory.createDefaultModel();
+        RDFDataMgr.read(model, r, null, RDFLanguages.NTRIPLES);
+        return model;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
index a401195..d75987c 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
@@ -26,20 +26,36 @@ import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExError;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExWarning;
-import org.apache.jena.riot.* ;
+import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.out.CharSpace;
+import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.riot.system.RiotLib ;
-import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
 import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.riot.tokens.TokenizerFactory ;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
 import org.junit.Test ;
-
+import static org.apache.jena.riot.system.ErrorHandlerFactory.errorHandlerNoLogging ;
+import static org.apache.jena.riot.system.ErrorHandlerFactory.getDefaultErrorHandler ;
+import static org.apache.jena.riot.system.ErrorHandlerFactory.setDefaultErrorHandler ;
 /** Test of syntax by a tuples parser (does not include node validitiy checking) */ 
 
 abstract public class TestLangNTuples extends BaseTest
 {
     // Test streaming interface.
+
+    private static ErrorHandler errorhandler = null ;
+    @BeforeClass public static void beforeClass()
+    { 
+        errorhandler = getDefaultErrorHandler() ;
+        setDefaultErrorHandler(errorHandlerNoLogging) ;
+    }
+
+    @AfterClass public static void afterClass()
+    { 
+        setDefaultErrorHandler(errorhandler) ;
+    }
     
     @Test public void tuple_0()
     {
@@ -162,7 +178,7 @@ abstract public class TestLangNTuples extends BaseTest
         Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(in) : TokenizerFactory.makeTokenizerUTF8(in) ;
         return tokenizer ;
     }
-    
+//    
     static protected Tokenizer tokenizer(String string)
     {
         // UTF-8
@@ -171,28 +187,47 @@ abstract public class TestLangNTuples extends BaseTest
         Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(in) ;
         return tokenizer ;
     }
-    
-    protected void parse(StreamRDF sink, String... strings ) 
-    {
-        String string = StrUtils.strjoin("\n", strings) ;
-        Tokenizer tokenizer = tokenizer(string) ;
-        LangRIOT parser = createParser(tokenizer(string), sink) ;
-        parser.getProfile().setHandler(new ErrorHandlerEx()) ;
-        parser.parse() ;
-    }
-    
-    protected abstract LangRIOT createParser(Tokenizer tokenizer, StreamRDF sink) ;
-
+//    
+//    protected void parse(StreamRDF sink, String... strings ) {
+//        ParserTestBaseLib.parse(getLang(), sink, strings);
+//    }
+//
+//    protected void parseASCII(StreamRDF sink, String string) {
+//        Tokenizer tokenizer = tokenizer(CharSpace.ASCII, string) ;
+//        LangRIOT parser = RiotParsers.createParserNTriples(tokenizer, sink) ;
+//        parser.getProfile().setHandler(new ErrorHandlerEx()) ;
+//        parser.parse() ;
+//    }
+//
+//    
+//    {
+//        String string = StrUtils.strjoin("\n", strings) ;
+//        Tokenizer tokenizer = tokenizer(string) ;
+//        LangRIOT parser = createParser(tokenizer(string), sink) ;
+//        parser.getProfile().setHandler(new ErrorHandlerEx()) ;
+//        parser.parse() ;
+//    }
+//    
+////   protected abstract LangRIOT createParser(Tokenizer tokenizer, StreamRDF sink) ;
+//
     final protected void parseCheck(String... strings)
     {
         String string = StrUtils.strjoin("\n", strings) ;
         Tokenizer tokenizer = tokenizer(string) ;
         StreamRDFCounting sink = StreamRDFLib.count() ;
-        LangRIOT x = RiotReader.createParserNQuads(tokenizer, sink) ;
+        LangRIOT x = RiotParsers.createParserNQuads(tokenizer, sink) ;
         x.setProfile(RiotLib.profile(null, false, true, new ErrorHandlerEx())) ;
         x.parse() ;
     }
-
+//    
+    protected abstract Lang getLang() ;
+    
+    protected long parseCount(String... strings) {
+        return ParserTestBaseLib.parseCount(getLang(), strings) ;
+    }
     
-    protected abstract long parseCount(String... strings) ;
+//    protected void parseCheck(String... strings) {
+//        ParserTestBaseLib.parseCount(getLang(), strings) ;
+//    }
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangRdfJson.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangRdfJson.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangRdfJson.java
index 91a0202..d0a47b6 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangRdfJson.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangRdfJson.java
@@ -21,15 +21,13 @@ package org.apache.jena.riot.lang;
 import java.io.ByteArrayInputStream ;
 import java.io.StringReader ;
 
-import org.apache.jena.atlas.io.PeekReader ;
-import org.apache.jena.atlas.json.io.parser.TokenizerJSON ;
 import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.StrUtils ;
+import org.apache.jena.graph.Graph ;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.rdf.model.ModelFactory ;
-import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
-import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
 import org.apache.jena.riot.* ;
+import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
 import org.apache.jena.riot.system.StreamRDFLib ;
 import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.riot.tokens.TokenizerFactory ;
@@ -337,199 +335,143 @@ public class TestLangRdfJson extends BaseTest
 		assertTrue(m.isIsomorphicWith(m2)) ;
 	}
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_empty_string()
-	{
-		String s = "";
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_unterminated_graph()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } " ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_missing_colon_after_subject()
-	{
-		String s = "{ \"http://example.org/subject\"  { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_missing_colon_after_predicate()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\"  [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_missing_colon_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\"  \"uri\" , \"value\" : \"http://example.org/object\" } ] } }" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_unterminated_predicateobjectlist_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ]" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_unterminated_objectlist_array()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } } }" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_unterminated_object_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\"" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_trailing_comma_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" , } ] } }" ;
-
-		parseCount(s) ;
-	}
-
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_trailing_comma_after_subject()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } , }" ;
-
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_empty_string() {
+        String s = "";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_trailing_comma_after_predicate()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] , } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_unterminated_graph() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } ";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_missing_colon_after_subject() {
+        String s = "{ \"http://example.org/subject\"  { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_property_names_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"name\" : \"value\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_missing_colon_after_predicate() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\"  [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_missing_colon_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\"  \"uri\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_lang_and_datatype_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"literal\" , \"value\" : \"some text\" , \"lang\" : \"en\" , \"datatype\" : \"http://example.org/datatype\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_unterminated_predicateobjectlist_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ]";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_unterminated_objectlist_array() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_lang_and_datatype_in_object2()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"literal\" , \"value\" : \"some text\" , \"datatype\" : \"http://example.org/datatype\" , \"lang\" : \"en\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_unterminated_object_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\"";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_trailing_comma_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" , } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_repeated_property_type_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_trailing_comma_after_subject() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } , }";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_trailing_comma_after_predicate() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] , } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_repeated_property_value_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" , \"value\" : \"http://example.org/object\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_property_names_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"name\" : \"value\" } ] } }";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_lang_and_datatype_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"literal\" , \"value\" : \"some text\" , \"lang\" : \"en\" , \"datatype\" : \"http://example.org/datatype\" } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_value_type_in_object()
-	{
-		String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"other\" , \"value\" : \"http://example.org/object\" } ] } }" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_lang_and_datatype_in_object2() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"literal\" , \"value\" : \"some text\" , \"datatype\" : \"http://example.org/datatype\" , \"lang\" : \"en\" } ] } }";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_repeated_property_type_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_array_toplevel()
-	{
-		String s = "[]" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_repeated_property_value_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"uri\" , \"value\" : \"http://example.org/object\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-		parseCount(s) ;
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_value_type_in_object() {
+        String s = "{ \"http://example.org/subject\" : { \"http://example.org/predicate\" : [ { \"type\" : \"other\" , \"value\" : \"http://example.org/object\" } ] } }";
+        parseCount(s);
+    }
 
-	@Test(expected=ExFatal.class)
-	public void rdfjson_invalid_trailing_content()
-	{
-		String s = "{}{}" ;
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_array_toplevel() {
+        String s = "[]";
+        parseCount(s);
+    }
 
-		parseCount(s);
-	}
+    @Test(expected = ExFatal.class)
+    public void rdfjson_invalid_trailing_content() {
+        String s = "{}{}";
+        parseCount(s);
+    }
 
 	@Test(expected=IllegalArgumentException.class)
-	public void rdfjson_invalid_tokenizer()
-	{
+	public void rdfjson_invalid_tokenizer() {
 		byte b[] = StrUtils.asUTF8bytes("") ;
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
 		Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(in) ;
         StreamRDFCounting sink = StreamRDFLib.count() ;
-		LangRDFJSON parser = RiotReader.createParserRdfJson(tokenizer, sink) ;
+		LangRDFJSON parser = RiotParsers.createParserRdfJson(tokenizer, sink) ;
 	}
 
-    private long parseCount(String string)
-    {
-        Tokenizer tokenizer = tokenizer(string) ;
-        StreamRDFCounting sink = StreamRDFLib.count() ;
-        LangRDFJSON x = RiotReader.createParserRdfJson(tokenizer, sink) ;
-        x.getProfile().setHandler(new ErrorHandlerEx()) ;
-        x.parse() ;
-        return sink.count() ;
+    private long parseCount(String string) {
+        return ParserTestBaseLib.parseCount(Lang.RDFJSON, string) ;
     }
-
-    private Model parseToModelNTriples(String string)
-    {
-        StringReader r = new StringReader(string) ;
-        Model model = ModelFactory.createDefaultModel() ;
-        RDFDataMgr.read(model, r, null, RDFLanguages.NTRIPLES) ;
-        return model ;
-    }
-
-    private Model parseToModelRdfJson(String string)
-    {
-        StringReader r = new StringReader(string) ;
-        Model model = ModelFactory.createDefaultModel() ;
-        RDFDataMgr.read(model, r, null, RDFLanguages.RDFJSON) ;
-        return model ;
+    
+    private Model parseToModelNTriples(String string) {
+        StringReader r = new StringReader(string);
+        Model model = ModelFactory.createDefaultModel();
+        RDFDataMgr.read(model, r, null, RDFLanguages.NTRIPLES);
+        return model;
     }
 
-    private Tokenizer tokenizer(String str)
-    {
-        byte b[] = StrUtils.asUTF8bytes(str) ;
-        ByteArrayInputStream in = new ByteArrayInputStream(b) ;
-        Tokenizer tokenizer = new TokenizerJSON(PeekReader.makeUTF8(in)) ;
-        return tokenizer ;
+    private Model parseToModelRdfJson(String string) {
+        Graph g = ParserTestBaseLib.parseGraph(RDFLanguages.RDFJSON, string);
+        Model model = ModelFactory.createModelForGraph(g);
+        return model;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTrig.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTrig.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTrig.java
index bb04e29..87de918 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTrig.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTrig.java
@@ -19,18 +19,12 @@
 package org.apache.jena.riot.lang;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.* ;
-import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
+import org.apache.jena.riot.ErrorHandlerTestLib ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExWarning ;
-import org.apache.jena.riot.system.StreamRDF ;
-import org.apache.jena.riot.system.StreamRDFLib ;
-import org.apache.jena.riot.tokens.Tokenizer ;
-import org.apache.jena.riot.tokens.TokenizerFactory ;
+import org.apache.jena.riot.Lang ;
 import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.DatasetGraphFactory ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.junit.Test ;
 
@@ -84,18 +78,8 @@ public class TestLangTrig extends BaseTest
     @Test (expected=ExWarning.class)
     public void trig_23()     { parse("@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .", "{ <x> <p> 'number'^^xsd:byte }") ; }
 
-    //Check reading into a dataset.
-    
-    private static DatasetGraph parse(String... strings)
-    {
-        String string = StrUtils.strjoin("\n", strings) ;
-        DatasetGraph dsg = DatasetGraphFactory.createMem() ;
-        StreamRDF sink = StreamRDFLib.dataset(dsg) ;
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(string) ;
-        LangTriG parser = RiotReader.createParserTriG(tokenizer, "http://base/", sink) ;
-        parser.getProfile().setHandler(new ErrorHandlerEx()) ;
-        parser.parse();
-        return dsg ;
+    private static DatasetGraph parse(String... strings) {
+        return ParserTestBaseLib.parseDataset(Lang.TRIG, strings) ;
     }
     
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTurtle.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTurtle.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTurtle.java
index be1bdc0..18a9319 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTurtle.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangTurtle.java
@@ -25,23 +25,19 @@ import static org.apache.jena.riot.system.ErrorHandlerFactory.setDefaultErrorHan
 import java.io.StringReader ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Triple ;
 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.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
 import org.apache.jena.riot.ErrorHandlerTestLib.ExWarning ;
-import org.apache.jena.riot.* ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.RDFLanguages ;
+import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.system.ErrorHandler ;
-import org.apache.jena.riot.system.StreamRDF ;
-import org.apache.jena.riot.system.StreamRDFLib ;
-import org.apache.jena.riot.tokens.Tokenizer ;
-import org.apache.jena.riot.tokens.TokenizerFactory ;
-import org.apache.jena.sparql.graph.GraphFactory ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.junit.AfterClass ;
 import org.junit.BeforeClass ;
@@ -131,19 +127,8 @@ public class TestLangTurtle extends BaseTest
     
     // Call parser directly.
     
-    private static Graph parse(String ...strings)
-    {
-        String string = StrUtils.strjoin("\n", strings) ;
-        StringReader reader = new StringReader(string) ;
-        String baseIRI = "http://base/" ;
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizer(reader) ;
-        
-        Graph graph = GraphFactory.createDefaultGraph() ;
-        StreamRDF sink = StreamRDFLib.graph(graph) ;
-        LangTurtle parser = RiotReader.createParserTurtle(tokenizer, "http://base/", sink) ;
-        parser.getProfile().setHandler(new ErrorHandlerEx()) ;
-        parser.parse() ; 
-        return graph ;
+    private static Graph parse(String ...strings) {
+        return ParserTestBaseLib.parseGraph(Lang.TURTLE, strings) ;
     }
     
     private static Triple parseOneTriple(String ...strings)
@@ -153,16 +138,6 @@ public class TestLangTurtle extends BaseTest
         return graph.find(null, null, null).next();
     }
     
-//    private static void parseSilent(String string)
-//    {
-//        Reader reader = new StringReader(string) ;
-//        Tokenizer tokenizer = TokenizerFactory.makeTokenizer(reader) ;
-//        String baseIRI = "http://base/" ;
-//        LangTurtle parser = RiotReader.createParserTurtle(tokenizer, baseIRI, new SinkNull<Triple>()) ;
-//        parser.setProfile(RiotReader.profile(RDFLanguages.Turtle, baseIRI, ErrorHandlerLib.errorHandlerNoLogging)) ;
-//        parser.parse() ;
-//    }
-
     @Test
     public void triple()                    { parse("<s> <p> <o> .") ; }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
index 6e0f77b..22503c5 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestParserFactory.java
@@ -18,13 +18,15 @@
 
 package org.apache.jena.riot.lang;
 
+import java.io.StringReader ;
 import java.util.ArrayList ;
 import java.util.List ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.RiotReader ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.riot.tokens.TokenizerFactory ;
@@ -64,7 +66,7 @@ public class TestParserFactory extends BaseTest
         Tokenizer tokenizer = TokenizerFactory.makeTokenizerString("<x> <p> <q> .") ;
         CatchParserOutput sink = new CatchParserOutput() ;
         
-        LangRIOT parser = RiotReader.createParserNTriples(tokenizer, sink) ;
+        LangRIOT parser = RiotParsers.createParserNTriples(tokenizer, sink) ;
         parserSetup(parser) ;
         parser.parse();
         assertEquals(1, sink.startCalled) ;
@@ -78,7 +80,7 @@ public class TestParserFactory extends BaseTest
     {
         Tokenizer tokenizer = TokenizerFactory.makeTokenizerString("<x> <p> <q> .") ; 
         CatchParserOutput sink = new CatchParserOutput() ;
-        LangRIOT parser = RiotReader.createParserTurtle(tokenizer, "http://base/", sink) ;
+        LangRIOT parser = RiotParsers.createParserTurtle(tokenizer, "http://base/", sink) ;
         parserSetup(parser) ;
         parser.parse();
         assertEquals(1, sink.startCalled) ;
@@ -92,7 +94,7 @@ public class TestParserFactory extends BaseTest
     {
         Tokenizer tokenizer = TokenizerFactory.makeTokenizerString("<x> <p> <q> <g>.") ; 
         CatchParserOutput sink = new CatchParserOutput() ;
-        LangRIOT parser = RiotReader.createParserNQuads(tokenizer, sink) ;
+        LangRIOT parser = RiotParsers.createParserNQuads(tokenizer, sink) ;
         parserSetup(parser) ;
         parser.parse();
         assertEquals(1, sink.startCalled) ;
@@ -105,11 +107,8 @@ public class TestParserFactory extends BaseTest
 
     @Test public void trig_01() 
     {
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizerString("{ <x> <p> <q> }") ; 
-        CatchParserOutput sink = new CatchParserOutput() ;
-        LangRIOT parser = RiotReader.createParserTriG(tokenizer, "http://base/", sink) ;
-        parserSetup(parser) ;
-        parser.parse();
+        String s = "{ <x> <p> <q> }" ; 
+        CatchParserOutput sink = parseCapture(s) ;
         assertEquals(1, sink.startCalled) ;
         assertEquals(1, sink.finishCalled) ;
         assertEquals(0, sink.triples.size()) ;
@@ -122,20 +121,23 @@ public class TestParserFactory extends BaseTest
     
     @Test public void trig_02() 
     {
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizerString("<g> { <x> <p> <q> }") ; 
-        CatchParserOutput sink = new CatchParserOutput() ;
-        LangRIOT parser = RiotReader.createParserTriG(tokenizer, "http://base/", sink) ;
-        parserSetup(parser) ;
-        parser.parse();
+        String s = "<g> { <x> <p> <q> }" ;
+        CatchParserOutput sink = parseCapture(s) ;
         assertEquals(1, sink.startCalled) ;
         assertEquals(1, sink.finishCalled) ;
         assertEquals(0, sink.triples.size()) ;
         assertEquals(1, sink.quads.size()) ;
-        
+
         Quad q = SSE.parseQuad("(<http://base/g> <http://base/x> <http://base/p> <http://base/q>)") ;
         assertEquals(q, last(sink.quads)) ;
     }
 
+    private CatchParserOutput parseCapture(String s) {
+        CatchParserOutput sink = new CatchParserOutput() ;
+        RDFDataMgr.parse(sink, new StringReader(s), "http://base/", Lang.TRIG) ;
+        return sink ;
+    }
+
     private static <T> T last(List<T> list) 
     { 
         if ( list.isEmpty() ) return null ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestReaderNTriples.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestReaderNTriples.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestReaderNTriples.java
deleted file mode 100644
index 004db22..0000000
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestReaderNTriples.java
+++ /dev/null
@@ -1,24 +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.riot.lang;
-
-public class TestReaderNTriples
-{
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/d8fb3175/jena-arq/src/test/java/org/apache/jena/riot/lang/TestTurtleTerms.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestTurtleTerms.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestTurtleTerms.java
index 3a0f21d..1986495 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestTurtleTerms.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestTurtleTerms.java
@@ -19,7 +19,6 @@
 package org.apache.jena.riot.lang;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.riot.RiotReader ;
 import org.apache.jena.riot.system.PrefixMap ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
@@ -244,7 +243,7 @@ public class TestTurtleTerms extends BaseTest
 	    
 	    Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(testString) ;
 	    StreamRDF sink = StreamRDFLib.sinkNull() ;
-	    LangTurtle parser = RiotReader.createParserTurtle(tokenizer, "http://base/", sink) ;
+	    LangTurtle parser = RiotParsers.createParserTurtle(tokenizer, "http://base/", sink) ;
 	    PrefixMap prefixMap = parser.getProfile().getPrologue().getPrefixMap() ;
 
 	    prefixMap.add("a", "http://host/a#") ;


[2/3] jena git commit: JENA-1012 : RiotParser class to hide implementation details.

Posted by an...@apache.org.
JENA-1012 : RiotParser class to hide implementation details.


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

Branch: refs/heads/master
Commit: 85b9243cbdfae2f1c6dcf148ac242e7c3d768877
Parents: fdd77f9
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Aug 20 17:54:47 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Aug 20 17:56:30 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/riot/RDFParserRegistry.java |  10 +-
 .../java/org/apache/jena/riot/ReaderRIOT.java   |   4 +-
 .../java/org/apache/jena/riot/RiotReader.java   | 218 +-----------------
 .../org/apache/jena/riot/lang/RiotParsers.java  | 230 +++++++++++++++++++
 4 files changed, 251 insertions(+), 211 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/85b9243c/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
index 9ba05c8..e88d14a 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserRegistry.java
@@ -31,6 +31,7 @@ import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.riot.lang.JsonLDReader ;
 import org.apache.jena.riot.lang.LangRIOT ;
 import org.apache.jena.riot.lang.ReaderTriX ;
+import org.apache.jena.riot.lang.RiotParsers ;
 import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.riot.system.ErrorHandlerFactory ;
 import org.apache.jena.riot.system.ParserProfile ;
@@ -167,7 +168,7 @@ public class RDFParserRegistry
         @Override
         public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
             @SuppressWarnings("deprecation")
-            LangRIOT parser = RiotReader.createParser(in, lang, baseURI, output) ;
+            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output) ;
             if ( parserProfile != null )
                 parser.setProfile(parserProfile);
             if ( errorHandler != null )
@@ -178,7 +179,7 @@ public class RDFParserRegistry
         @Override
         public void read(Reader in, String baseURI, ContentType ct, StreamRDF output, Context context) {
             @SuppressWarnings("deprecation")
-            LangRIOT parser = RiotReader.createParser(in, lang, baseURI, output) ;
+            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output) ;
             parser.getProfile().setHandler(errorHandler) ; 
             parser.parse() ;
         }
@@ -187,7 +188,10 @@ public class RDFParserRegistry
         @Override public void setErrorHandler(ErrorHandler errorHandler)    { this.errorHandler = errorHandler ; }
 
         @Override public ParserProfile getParserProfile()                   { return parserProfile ; } 
-        @Override public void setParserProfile(ParserProfile parserProfile) { this.parserProfile = parserProfile ; }
+        @Override public void setParserProfile(ParserProfile parserProfile) { 
+            this.parserProfile = parserProfile ;
+            this.errorHandler = parserProfile.getHandler() ;
+        }
     }
 
     private static class ReaderRIOTFactoryJSONLD implements ReaderRIOTFactory {

http://git-wip-us.apache.org/repos/asf/jena/blob/85b9243c/jena-arq/src/main/java/org/apache/jena/riot/ReaderRIOT.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/ReaderRIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/ReaderRIOT.java
index 2179608..a9f3be7 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/ReaderRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/ReaderRIOT.java
@@ -62,8 +62,8 @@ public interface ReaderRIOT
     public ErrorHandler getErrorHandler() ;
     public void setErrorHandler(ErrorHandler errorHandler) ;
     
-    /** Get the parser profile.  Not all parser have parser profiles so this may be null */
+    /** Get the parser profile.  Not all parsers have parser profiles so this may be null */
     public ParserProfile getParserProfile() ;
-    /** Set the parser profile.  Not all parser have parser profiles so this may be a no-op */
+    /** Set the parser profile.  Not all parsers have parser profiles so this may be a no-op */
     public void setParserProfile(ParserProfile profile) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/85b9243c/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 4b7faa1..df7d7e5 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
@@ -18,36 +18,19 @@
 
 package org.apache.jena.riot;
 
-import static org.apache.jena.riot.RDFLanguages.CSV;
-import static org.apache.jena.riot.RDFLanguages.N3 ;
-import static org.apache.jena.riot.RDFLanguages.NQUADS ;
 import static org.apache.jena.riot.RDFLanguages.NTRIPLES ;
-import static org.apache.jena.riot.RDFLanguages.RDFJSON ;
-import static org.apache.jena.riot.RDFLanguages.RDFXML ;
-import static org.apache.jena.riot.RDFLanguages.TRIG ;
-import static org.apache.jena.riot.RDFLanguages.TURTLE ;
-import static org.apache.jena.riot.RDFLanguages.RDFNULL ;
 import static org.apache.jena.riot.RDFLanguages.filenameToLang ;
 
 import java.io.InputStream ;
-import java.io.Reader ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.atlas.io.PeekReader ;
 import org.apache.jena.atlas.iterator.IteratorResourceClosing ;
-import org.apache.jena.atlas.json.io.parser.TokenizerJSON ;
 import org.apache.jena.atlas.lib.Sink ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.riot.lang.* ;
-import org.apache.jena.riot.out.CharSpace;
-import org.apache.jena.riot.system.ErrorHandlerFactory ;
-import org.apache.jena.riot.system.IRIResolver ;
-import org.apache.jena.riot.system.RiotLib ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
-import org.apache.jena.riot.tokens.Tokenizer ;
-import org.apache.jena.riot.tokens.TokenizerFactory ;
 import org.apache.jena.sparql.core.Quad ;
 
 /** Operations to access RIOT parsers and send the output to 
@@ -63,7 +46,9 @@ public class RiotReader
      * Must be in a triples syntax.
      * @param filename 
      * @param dest  Where to send the triples from the parser.
+     * @deprecated Use {@link RDFDataMgr#parse(StreamRDF, String)}
      */
+    @Deprecated
     public static void parse(String filename, StreamRDF dest)
     { parse(filename, null, null, dest) ; }
 
@@ -72,7 +57,9 @@ public class RiotReader
      * @param filename 
      * @param lang      Language, or null for "guess from URL" (e.g. file extension)
      * @param dest      Where to send the triples from the parser.
-     */  
+     * @deprecated Use {@link RDFDataMgr#parse(StreamRDF, String, Lang)}
+     */
+    @Deprecated
     public static void parse(String filename, Lang lang, StreamRDF dest)
     {
         parse(filename, lang, null, dest) ;
@@ -84,7 +71,9 @@ public class RiotReader
      * @param lang      Language, or null for "guess from URL" (e.g. file extension)
      * @param baseIRI   Base IRI, or null for based on input filename
      * @param dest      Where to send the triples from the parser.
-     */  
+     * @deprecated Use {@link RDFDataMgr#parse(StreamRDF, String, String, Lang)}
+     */
+    @Deprecated
     public static void parse(String filename, Lang lang, String baseIRI, StreamRDF dest)
     {
         if ( lang == null )
@@ -119,73 +108,6 @@ public class RiotReader
 
     // -------- Parsers
     
-    /** Create a parser 
-     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
-     */
-    @Deprecated
-    public static LangRIOT createParser(InputStream input, Lang lang, String baseIRI, StreamRDF dest)
-    {
-        if ( lang == RDFXML )
-        {
-            if ( baseIRI != null )
-                baseIRI = IRIResolver.resolveString(baseIRI) ;
-            return LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
-        } else if ( lang == CSV){
-        	return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
-        }
-        Tokenizer tokenizer = ( lang == RDFJSON ) ?
-            new TokenizerJSON(PeekReader.makeUTF8(input)) :
-                TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParser(tokenizer, lang, baseIRI, dest) ;
-    }
-
-    /** Create a parser 
-     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
-     */
-    @Deprecated
-    public static LangRIOT createParser(Reader input, Lang lang, String baseIRI, StreamRDF dest)
-    {
-        if ( lang == RDFXML )
-        {
-            if ( baseIRI != null )
-                baseIRI = IRIResolver.resolveStringSilent(baseIRI) ;
-            return LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
-        } else if ( lang == CSV){
-        	return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
-        }
-        Tokenizer tokenizer = ( lang == RDFJSON ) ?
-            new TokenizerJSON(PeekReader.make(input)) :
-                TokenizerFactory.makeTokenizer(input) ;
-        return createParser(tokenizer, lang, baseIRI, dest) ;
-    }
-
-    /** Create a parser 
-     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
-     */
-    @Deprecated  
-    public static LangRIOT createParser(Tokenizer tokenizer, Lang lang, String baseIRI, StreamRDF dest)
-    {
-        if ( RDFLanguages.sameLang(RDFXML, lang) )
-            throw new RiotException("Not possible - can't parse RDF/XML from a RIOT token stream") ;
-        if ( RDFLanguages.sameLang(TURTLE, lang) || RDFLanguages.sameLang(N3,  lang) ) 
-                return createParserTurtle(tokenizer, baseIRI, dest) ;
-        if ( RDFLanguages.sameLang(NTRIPLES, lang) )
-                return createParserNTriples(tokenizer, dest) ;
-        if ( RDFLanguages.sameLang(RDFJSON, lang) )
-            // But it must be a JSON tokenizer ...
-            return createParserRdfJson(tokenizer, dest) ;
-        
-        if ( RDFLanguages.sameLang(NQUADS, lang) )
-            return createParserNQuads(tokenizer, dest) ;
-        if ( RDFLanguages.sameLang(TRIG, lang) )
-            return createParserTriG(tokenizer, baseIRI, dest) ;
-        
-        if ( RDFLanguages.sameLang(RDFNULL, lang) )
-            return new LangNull() ;
-        
-        return null ;
-    }
-
     /** Parse a file, sending triples to a sink.
      * Must be in a triples syntax.
      * @param filename 
@@ -270,7 +192,7 @@ public class RiotReader
         // Special case N-Triples, because the RIOT reader has a pull interface
         if ( RDFLanguages.sameLang(RDFLanguages.NTRIPLES, lang) )
         {
-            return new IteratorResourceClosing<>(createParserNTriples(input, null), input);
+            return new IteratorResourceClosing<>(RiotParsers.createParserNTriples(input, null), input);
         }
         else
         {
@@ -285,7 +207,7 @@ public class RiotReader
                 {
                     out.start();
                     parse(input, lang, baseIRI, out);
-                    // Unsafe: out.finish() ;
+                    out.finish() ;
                 }
             });
             t.start();
@@ -306,7 +228,7 @@ public class RiotReader
         // Special case N-Quads, because the RIOT reader has a pull interface
         if ( RDFLanguages.sameLang(RDFLanguages.NQUADS, lang) )
         {
-            return new IteratorResourceClosing<>(createParserNQuads(input, null), input);
+            return new IteratorResourceClosing<>(RiotParsers.createParserNQuads(input, null), input);
         }
         else
         {
@@ -321,7 +243,7 @@ public class RiotReader
                 {
                     out.start();
                     parse(input, lang, baseIRI, out);
-                    // Unsafe: out.finish() ;
+                    out.finish() ;
                 }
             });
             t.start();
@@ -329,120 +251,4 @@ public class RiotReader
             return it;
         }
     }
-    
-    /** Create a parser for Turtle
-     * @deprecated use an RDFDataMgr operation with argument Lang.Turtle
-     */
-    @Deprecated
-    public static LangTurtle createParserTurtle(InputStream input, String baseIRI, StreamRDF dest)
-    {
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParserTurtle(tokenizer, baseIRI, dest) ;
-    }
-    
-    /** Create a parser for Turtle */
-    public static LangTurtle createParserTurtle(Tokenizer tokenizer, String baseIRI, StreamRDF dest)
-    {
-        RiotLib.profile(RDFLanguages.TURTLE, baseIRI) ;
-        LangTurtle parser = new LangTurtle(tokenizer, RiotLib.profile(RDFLanguages.TURTLE, baseIRI), dest) ;
-        return parser ;
-    }
-
-    /** Create a parser for RDF/XML
-     * @deprecated use an RDFDataMgr operation with argument Lang.RDFXML
-     */
-    @Deprecated
-    public static LangRDFXML createParserRDFXML(InputStream input, String baseIRI, StreamRDF dest)
-    {
-        if ( baseIRI == null )
-            baseIRI = SysRIOT.chooseBaseIRI() ;
-        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
-        return parser ;
-    }
-
-    /** Create parsers for RDF/JSON */
-    public static LangRDFJSON createParserRdfJson(Tokenizer tokenizer, StreamRDF dest)
-    {
-    	LangRDFJSON parser = new LangRDFJSON(tokenizer, RiotLib.profile(RDFLanguages.RDFJSON, null), dest) ;
-    	return parser;
-    }
-    
-    /**
-     * @deprecated use RDFDataMgr and Lang.RDFJSON
-     */
-    @Deprecated
-    public static LangRDFJSON createParserRdfJson(InputStream input, StreamRDF dest)
-    {
-        TokenizerJSON tokenizer = new TokenizerJSON(PeekReader.makeUTF8(input)) ;
-        return createParserRdfJson(tokenizer, dest) ;
-    }
-    
-    /** Create a parser for TriG
-     * @deprecated use an RDFDataMgr operation with argument Lang.TRIG
-     */
-    @Deprecated
-    public static LangTriG createParserTriG(InputStream input, String baseIRI, StreamRDF dest)
-    {
-        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParserTriG(tokenizer, baseIRI, dest) ;
-    }
-    
-    /** Create a parser for TriG */
-    public static LangTriG createParserTriG(Tokenizer tokenizer, String baseIRI, StreamRDF dest)
-    {
-        LangTriG parser = new LangTriG(tokenizer, RiotLib.profile(RDFLanguages.TRIG, baseIRI), dest) ;
-        return parser ;
-    }
-
-    /** Create a parser for N-Triples
-     * @deprecated use an RDFDataMgr operation with argument Lang.NTRIPLES
-     */
-    @Deprecated
-    public static LangNTriples createParserNTriples(InputStream input, StreamRDF dest)
-    {
-        return createParserNTriples(input, CharSpace.UTF8, dest) ;
-    }
-    
-    /** Create a parser for N-Triples
-     * @deprecated use an RDFDataMgr operation with argument Lang.NTRIPLES
-     */
-    @Deprecated
-    public static LangNTriples createParserNTriples(InputStream input, CharSpace charSpace, StreamRDF dest)
-    {
-        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParserNTriples(tokenizer, dest) ;
-    }
-    
-    /** Create a parser for N-Triples */
-    public static LangNTriples createParserNTriples(Tokenizer tokenizer, StreamRDF dest)
-    {
-        LangNTriples parser = new LangNTriples(tokenizer, RiotLib.profile(RDFLanguages.NTRIPLES, null), dest) ;
-        return parser ;
-    }
-    
-    /** Create a parser for NQuads
-     * @deprecated use an RDFDataMgr operation with argument Lang.NQUADS)
-     */
-    @Deprecated
-    public static LangNQuads createParserNQuads(InputStream input, StreamRDF dest)
-    {
-        return createParserNQuads(input, CharSpace.UTF8, dest) ;
-    }
-    
-    /** Create a parser for NQuads
-     * @deprecated use an RDFDataMgr operation with argument Lang.NQUADS)
-     */
-    @Deprecated
-    public static LangNQuads createParserNQuads(InputStream input, CharSpace charSpace, StreamRDF dest)
-    {
-        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParserNQuads(tokenizer, dest) ;
-    }
-    
-    /** Create a parser for NQuads */
-    public static LangNQuads createParserNQuads(Tokenizer tokenizer, StreamRDF dest)
-    {
-        LangNQuads parser = new LangNQuads(tokenizer, RiotLib.profile(RDFLanguages.NQUADS, null), dest) ;
-        return parser ;
-    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/85b9243c/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
new file mode 100644
index 0000000..306d61b
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
@@ -0,0 +1,230 @@
+/**
+ * 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.riot.lang;
+
+import static org.apache.jena.riot.RDFLanguages.CSV ;
+import static org.apache.jena.riot.RDFLanguages.N3 ;
+import static org.apache.jena.riot.RDFLanguages.NQUADS ;
+import static org.apache.jena.riot.RDFLanguages.NTRIPLES ;
+import static org.apache.jena.riot.RDFLanguages.RDFJSON ;
+import static org.apache.jena.riot.RDFLanguages.RDFNULL ;
+import static org.apache.jena.riot.RDFLanguages.RDFXML ;
+import static org.apache.jena.riot.RDFLanguages.TRIG ;
+import static org.apache.jena.riot.RDFLanguages.TURTLE ;
+
+import java.io.InputStream ;
+import java.io.Reader ;
+
+import org.apache.jena.atlas.io.PeekReader ;
+import org.apache.jena.atlas.json.io.parser.TokenizerJSON ;
+import org.apache.jena.riot.* ;
+import org.apache.jena.riot.out.CharSpace ;
+import org.apache.jena.riot.system.ErrorHandlerFactory ;
+import org.apache.jena.riot.system.IRIResolver ;
+import org.apache.jena.riot.system.RiotLib ;
+import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.tokens.Tokenizer ;
+import org.apache.jena.riot.tokens.TokenizerFactory ;
+
+public class RiotParsers {
+
+    /** Create a parser for Turtle
+     * @deprecated use an RDFDataMgr operation with argument Lang.Turtle
+     */
+    @Deprecated
+    public static LangTurtle createParserTurtle(InputStream input, String baseIRI, StreamRDF dest)
+    {
+        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+        return createParserTurtle(tokenizer, baseIRI, dest) ;
+    }
+
+    /** Create a parser for Turtle */
+    public static LangTurtle createParserTurtle(Tokenizer tokenizer, String baseIRI, StreamRDF dest)
+    {
+        RiotLib.profile(RDFLanguages.TURTLE, baseIRI) ;
+        LangTurtle parser = new LangTurtle(tokenizer, RiotLib.profile(RDFLanguages.TURTLE, baseIRI), dest) ;
+        return parser ;
+    }
+
+    /** Create a parser for RDF/XML
+     * @deprecated use an RDFDataMgr operation with argument Lang.RDFXML
+     */
+    @Deprecated
+    public static LangRDFXML createParserRDFXML(InputStream input, String baseIRI, StreamRDF dest)
+    {
+        if ( baseIRI == null )
+            baseIRI = SysRIOT.chooseBaseIRI() ;
+        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+        return parser ;
+    }
+
+    /** Create parsers for RDF/JSON */
+    public static LangRDFJSON createParserRdfJson(Tokenizer tokenizer, StreamRDF dest)
+    {
+    	LangRDFJSON parser = new LangRDFJSON(tokenizer, RiotLib.profile(RDFLanguages.RDFJSON, null), dest) ;
+    	return parser;
+    }
+
+    /**
+     * @deprecated use RDFDataMgr and Lang.RDFJSON
+     */
+    @Deprecated
+    public static LangRDFJSON createParserRdfJson(InputStream input, StreamRDF dest)
+    {
+        TokenizerJSON tokenizer = new TokenizerJSON(PeekReader.makeUTF8(input)) ;
+        return createParserRdfJson(tokenizer, dest) ;
+    }
+
+    /** Create a parser for TriG
+     * @deprecated use an RDFDataMgr operation with argument Lang.TRIG
+     */
+    @Deprecated
+    public static LangTriG createParserTriG(InputStream input, String baseIRI, StreamRDF dest)
+    {
+        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+        return createParserTriG(tokenizer, baseIRI, dest) ;
+    }
+
+    /** Create a parser for TriG.
+     * @deprecated use an RDFDataMgr operation with argument Lang.TRIG
+     */
+    @Deprecated
+    public static LangTriG createParserTriG(Tokenizer tokenizer, String baseIRI, StreamRDF dest)
+    {
+        LangTriG parser = new LangTriG(tokenizer, RiotLib.profile(RDFLanguages.TRIG, baseIRI), dest) ;
+        return parser ;
+    }
+
+    /** Create a parser for N-Triples
+     * Normally, use an RDFDataMgr operation with argument Lang.NTRIPLES
+     */
+    public static LangNTriples createParserNTriples(InputStream input, StreamRDF dest)
+    {
+        return createParserNTriples(input, CharSpace.UTF8, dest) ;
+    }
+
+    /** Create a parser for N-Triples
+     * Normally, use an RDFDataMgr operation with argument Lang.NTRIPLES
+     */
+    public static LangNTriples createParserNTriples(InputStream input, CharSpace charSpace, StreamRDF dest)
+    {
+        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
+        return createParserNTriples(tokenizer, dest) ;
+    }
+
+    /** Create a parser for N-Triples */
+    public static LangNTriples createParserNTriples(Tokenizer tokenizer, StreamRDF dest)
+    {
+        LangNTriples parser = new LangNTriples(tokenizer, RiotLib.profile(RDFLanguages.NTRIPLES, null), dest) ;
+        return parser ;
+    }
+
+    /** Create a parser for NQuads
+     * Normally, use an RDFDataMgr operation with argument Lang.NQUADS
+     */
+    public static LangNQuads createParserNQuads(InputStream input, StreamRDF dest)
+    {
+        return createParserNQuads(input, CharSpace.UTF8, dest) ;
+    }
+
+    /** Create a parser for NQuads
+     * Normally, use an RDFDataMgr operation with argument Lang.NQUADS
+     */
+    public static LangNQuads createParserNQuads(InputStream input, CharSpace charSpace, StreamRDF dest)
+    {
+        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
+        return createParserNQuads(tokenizer, dest) ;
+    }
+
+    /** Create a parser for NQuads */
+    public static LangNQuads createParserNQuads(Tokenizer tokenizer, StreamRDF dest)
+    {
+        LangNQuads parser = new LangNQuads(tokenizer, RiotLib.profile(RDFLanguages.NQUADS, null), dest) ;
+        return parser ;
+    }
+
+    /** Create a parser 
+     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
+     */
+    @Deprecated
+    public static LangRIOT createParser(InputStream input, Lang lang, String baseIRI, StreamRDF dest)
+    {
+        if ( lang == RDFXML )
+        {
+            if ( baseIRI != null )
+                baseIRI = IRIResolver.resolveString(baseIRI) ;
+            return LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+        } else if ( lang == CSV){
+        	return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
+        }
+        Tokenizer tokenizer = ( lang == RDFJSON ) ?
+            new TokenizerJSON(PeekReader.makeUTF8(input)) :
+                TokenizerFactory.makeTokenizerUTF8(input) ;
+        return createParser(tokenizer, lang, baseIRI, dest) ;
+    }
+
+    /** Create a parser 
+     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
+     */
+    @Deprecated
+    public static LangRIOT createParser(Reader input, Lang lang, String baseIRI, StreamRDF dest)
+    {
+        if ( lang == RDFXML )
+        {
+            if ( baseIRI != null )
+                baseIRI = IRIResolver.resolveStringSilent(baseIRI) ;
+            return LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+        } else if ( lang == CSV){
+        	return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
+        }
+        Tokenizer tokenizer = ( lang == RDFJSON ) ?
+            new TokenizerJSON(PeekReader.make(input)) :
+                TokenizerFactory.makeTokenizer(input) ;
+        return createParser(tokenizer, lang, baseIRI, dest) ;
+    }
+
+    /** Create a parser 
+     * @deprecated Use {@link RDFDataMgr#createReader(Lang)}
+     */
+    @Deprecated  
+    public static LangRIOT createParser(Tokenizer tokenizer, Lang lang, String baseIRI, StreamRDF dest)
+    {
+        if ( RDFLanguages.sameLang(RDFXML, lang) )
+            throw new RiotException("Not possible - can't parse RDF/XML from a RIOT token stream") ;
+        if ( RDFLanguages.sameLang(TURTLE, lang) || RDFLanguages.sameLang(N3,  lang) ) 
+                return createParserTurtle(tokenizer, baseIRI, dest) ;
+        if ( RDFLanguages.sameLang(NTRIPLES, lang) )
+                return createParserNTriples(tokenizer, dest) ;
+        if ( RDFLanguages.sameLang(RDFJSON, lang) )
+            // But it must be a JSON tokenizer ...
+            return createParserRdfJson(tokenizer, dest) ;
+        
+        if ( RDFLanguages.sameLang(NQUADS, lang) )
+            return createParserNQuads(tokenizer, dest) ;
+        if ( RDFLanguages.sameLang(TRIG, lang) )
+            return createParserTriG(tokenizer, baseIRI, dest) ;
+        
+        if ( RDFLanguages.sameLang(RDFNULL, lang) )
+            return new LangNull() ;
+        
+        return null ;
+    }
+
+}
+