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 2017/04/11 10:05:34 UTC

[07/17] jena git commit: Internal reorganisation in RIOT.

Internal reorganisation in RIOT.

Isolate use of ParerProfile prior to removal.
LangCSV becomes ReaderRIOTCSV.
Deprecate reading CSV files as RDF (use jena-csv).


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

Branch: refs/heads/master
Commit: 1f90685f35914b9c7ea6f74bcfb8b8bc4e3e3b37
Parents: 04c8a51
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Apr 7 18:38:44 2017 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Apr 7 18:38:44 2017 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/riot/Lang.java    |   6 +
 .../java/org/apache/jena/riot/RDFDataMgr.java   |  15 +-
 .../java/org/apache/jena/riot/RDFLanguages.java |   2 +
 .../org/apache/jena/riot/RDFParserRegistry.java |  47 +-
 .../java/org/apache/jena/riot/ReaderRIOT.java   |   4 -
 .../org/apache/jena/riot/lang/JsonLDReader.java |   5 +-
 .../org/apache/jena/riot/lang/LangBase.java     |  11 +-
 .../org/apache/jena/riot/lang/LangEngine.java   | 202 ++++----
 .../org/apache/jena/riot/lang/LangNQuads.java   |   5 +-
 .../org/apache/jena/riot/lang/LangNTuple.java   |   4 +-
 .../org/apache/jena/riot/lang/LangTriG.java     |   4 +-
 .../apache/jena/riot/lang/LangTurtleBase.java   |  43 +-
 .../apache/jena/riot/lang/ReaderRDFNULL.java    |   9 -
 .../org/apache/jena/riot/lang/ReaderRDFXML.java |  75 +++
 .../org/apache/jena/riot/lang/ReaderTriX.java   |  10 -
 .../org/apache/jena/riot/lang/RiotParsers.java  | 468 +++++++++++++------
 .../jena/riot/resultset/ResultSetLang.java      |  15 +-
 .../org/apache/jena/riot/system/MakerRDF.java   |  13 +
 .../apache/jena/riot/system/MakerRDFStd.java    |  17 +-
 .../apache/jena/riot/system/ParserProfile.java  |   6 +-
 .../jena/riot/system/ParserProfileBase.java     |  12 +-
 .../jena/riot/system/ParserProfileBase2.java    | 225 +++++++++
 .../org/apache/jena/riot/system/RiotLib.java    |  11 +-
 .../engine/binding/BindingInputStream.java      |   4 +-
 .../apache/jena/riot/ErrorHandlerTestLib.java   |   2 +
 .../org/apache/jena/riot/lang/TestLangCSV.java  |   4 +-
 .../apache/jena/riot/lang/TestLangNTriples.java |  16 +-
 .../apache/jena/riot/lang/TestLangNTuples.java  |  33 +-
 .../apache/jena/riot/lang/TestLangRdfJson.java  |   3 +-
 .../apache/jena/riot/lang/TestLangTurtle.java   |   3 +-
 .../jena/riot/lang/TestParserFactory.java       |  45 +-
 .../apache/jena/riot/lang/TestTurtleTerms.java  |   6 +-
 32 files changed, 902 insertions(+), 423 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/Lang.java b/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
index d9e8b10..62a2838 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/Lang.java
@@ -80,6 +80,12 @@ public class Lang
 
     //** The RDF syntax "RDF Thrift" : see http://jena.apache.org/documentation/io */ 
     public static Lang RDFTHRIFT ;
+    
+    /** "CSV" - CSV data read into an RDF model with simple conversion : See Jena-625.
+     *  @deprecated Use jena-csv {@code org.apache.jena.lang.csv.CSVRDF.CSV}
+     */
+    @Deprecated
+    public static Lang CSV ;
 
     /** <a href="http://www.hpl.hp.com/techreports/2004/HPL-2004-56.html">TriX</a> */
     public static Lang TRIX ;

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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 509c1a4..6b93989 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
@@ -35,10 +35,8 @@ import org.apache.jena.rdf.model.ModelFactory ;
 import org.apache.jena.riot.lang.PipedQuadsStream ;
 import org.apache.jena.riot.lang.PipedRDFIterator ;
 import org.apache.jena.riot.lang.PipedTriplesStream ;
-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.riot.lang.RiotParsers;
+import org.apache.jena.riot.system.*;
 import org.apache.jena.riot.system.stream.StreamManager ;
 import org.apache.jena.riot.writer.NQuadsWriter ;
 import org.apache.jena.riot.writer.NTriplesWriter ;
@@ -1249,7 +1247,7 @@ public class RDFDataMgr
     public static Iterator<Triple> createIteratorTriples(InputStream input, Lang lang, String baseIRI) {
         // Special case N-Triples, because the RIOT reader has a pull interface
         if ( RDFLanguages.sameLang(RDFLanguages.NTRIPLES, lang) )
-            return new IteratorResourceClosing<>(org.apache.jena.riot.lang.RiotParsers.createIteratorNTriples(input, null), input);
+            return new IteratorResourceClosing<>(RiotParsers.createIteratorNTriples(input, null), input);
         // Otherwise, we have to spin up a thread to deal with it
         PipedRDFIterator<Triple> it = new PipedRDFIterator<>();
         PipedTriplesStream out = new PipedTriplesStream(it);
@@ -1267,8 +1265,11 @@ public class RDFDataMgr
      */
     public static Iterator<Quad> createIteratorQuads(InputStream input, Lang lang, String baseIRI) {
         // Special case N-Quads, because the RIOT reader has a pull interface
-        if ( RDFLanguages.sameLang(RDFLanguages.NQUADS, lang) )
-            return new IteratorResourceClosing<>(org.apache.jena.riot.lang.RiotParsers.createIteratorNQuads(input, null), input);
+        if ( RDFLanguages.sameLang(RDFLanguages.NQUADS, lang) ) {
+            return new IteratorResourceClosing<>(
+                RiotParsers.createIteratorNQuads(input, null, RiotLib.dftMakerRDF()),
+                input);
+        }
         // Otherwise, we have to spin up a thread to deal with it
         final PipedRDFIterator<Quad> it = new PipedRDFIterator<>();
         final PipedQuadsStream out = new PipedQuadsStream(it);

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
index 3c2a2cf..c093cc6 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
@@ -188,6 +188,7 @@ public class RDFLanguages
     public static void init() {}
     static { init$() ; }
     
+    @SuppressWarnings("deprecation")
     private static synchronized void init$()
     {
         initStandard() ;
@@ -206,6 +207,7 @@ public class RDFLanguages
         Lang.RDFTHRIFT  = RDFLanguages.THRIFT ;
         Lang.TRIX       = RDFLanguages.TRIX ;
         Lang.RDFNULL    = RDFLanguages.RDFNULL ;
+        Lang.CSV        = RDFLanguages.CSV ;
     }
     // ----------------------
     

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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 19f6f97..53becb3 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
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot;
 
-import static org.apache.jena.riot.RDFLanguages.* ;
+import static org.apache.jena.riot.RDFLanguages.*;
 
 import java.io.InputStream ;
 import java.io.Reader ;
@@ -30,7 +30,8 @@ import java.util.Set ;
 import org.apache.jena.atlas.lib.InternalErrorException ;
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.riot.lang.* ;
-import org.apache.jena.riot.system.*;
+import org.apache.jena.riot.system.ParserProfile;
+import org.apache.jena.riot.system.StreamRDF;
 import org.apache.jena.riot.thrift.BinRDF ;
 import org.apache.jena.sparql.util.Context ;
 
@@ -62,6 +63,7 @@ public class RDFParserRegistry
     private static ReaderRIOTFactory parserFactoryThrift    = new ReaderRIOTFactoryThrift() ;
     private static ReaderRIOTFactory parserFactoryTriX      = new ReaderRIOTFactoryTriX() ;
     private static ReaderRIOTFactory parserFactoryRDFNULL   = new ReaderRIOTFactoryRDFNULL() ;
+    private static ReaderRIOTFactory parserFactoryCSV       = new ReaderRIOTCSV.Factory() ;
         
     private static boolean initialized = false ;
     static { init() ; }
@@ -72,6 +74,7 @@ public class RDFParserRegistry
         initStandard() ;
     }
     
+    @SuppressWarnings("deprecation")
     private static void initStandard()
     {
         // Make sure the constants are initialized.
@@ -83,7 +86,7 @@ public class RDFParserRegistry
         registerLangTriples(TURTLE,     parserFactory) ;
         registerLangTriples(JSONLD,     parserFactoryJsonLD) ;
         registerLangTriples(RDFJSON,    parserFactory) ;
-        registerLangTriples(CSV,        parserFactory) ;
+        registerLangTriples(CSV,        parserFactoryCSV) ;
         registerLangTriples(THRIFT,     parserFactoryThrift) ;
         registerLangTriples(TRIX,       parserFactoryTriX) ;
         registerLangTriples(RDFNULL,    parserFactoryRDFNULL) ;
@@ -156,50 +159,42 @@ public class RDFParserRegistry
         public ReaderRIOT create(Lang lang, ParserProfile parserProfile) {
             return new ReaderRIOTLang(lang, parserProfile) ;
         }
-
     }
 
     private static class ReaderRIOTLang implements ReaderRIOT
     {
         private final Lang lang ;
-        private ErrorHandler errorHandler ; 
         private ParserProfile parserProfile = null ;
 
         ReaderRIOTLang(Lang lang) {
             this.lang = lang ;
-            errorHandler = ErrorHandlerFactory.getDefaultErrorHandler() ;
         }
 
         ReaderRIOTLang(Lang lang, ParserProfile parserProfile) {
             this.lang = lang ;
             this.parserProfile = parserProfile;
-            this.errorHandler = parserProfile.getHandler();
         }
 
         @Override
         public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
-            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output) ;
-            if ( parserProfile != null )
-                parser.setProfile(parserProfile);
-            if ( errorHandler != null )
-                parser.getProfile().setHandler(errorHandler) ;
+            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output, parserProfile);
             parser.parse() ;
         }
 
         @Override
         public void read(Reader in, String baseURI, ContentType ct, StreamRDF output, Context context) {
-            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output) ;
-            parser.getProfile().setHandler(errorHandler) ; 
+            LangRIOT parser = RiotParsers.createParser(in, lang, baseURI, output, parserProfile);
             parser.parse() ;
         }
 
-        @Override public ErrorHandler getErrorHandler()                     { return errorHandler ; }
-        @Override public void setErrorHandler(ErrorHandler errorHandler)    { this.errorHandler = errorHandler ; }
+        @Override
+        public ParserProfile getParserProfile() {
+            return parserProfile;
+        }
 
-        @Override public ParserProfile getParserProfile()                   { return parserProfile ; } 
-        @Override public void setParserProfile(ParserProfile parserProfile) { 
-            this.parserProfile = parserProfile ;
-            this.errorHandler = parserProfile.getHandler() ;
+        @Override
+        public void setParserProfile(ParserProfile parserProfile) {
+            this.parserProfile = parserProfile;
         }
     }
 
@@ -208,7 +203,7 @@ public class RDFParserRegistry
         public ReaderRIOT create(Lang language, ParserProfile profile) {
             if ( !Lang.JSONLD.equals(language) )
                 throw new InternalErrorException("Attempt to parse " + language + " as JSON-LD") ;
-            return new JsonLDReader(language, profile, profile.getHandler());
+            return new JsonLDReader(language, profile, profile.getErrorHandler());
         }
     }
  
@@ -231,14 +226,6 @@ public class RDFParserRegistry
         }
 
         @Override
-        public ErrorHandler getErrorHandler() {
-            return null ;
-        }
-
-        @Override
-        public void setErrorHandler(ErrorHandler errorHandler) {}
-
-        @Override
         public ParserProfile getParserProfile() {
             return null ;
         }
@@ -251,7 +238,7 @@ public class RDFParserRegistry
     private static class ReaderRIOTFactoryTriX implements ReaderRIOTFactory {
         @Override
         public ReaderRIOT create(Lang language, ParserProfile profile) {
-            return new ReaderTriX(profile, profile.getHandler());
+            return new ReaderTriX(profile, profile.getErrorHandler());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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 a9f3be7..f248100 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
@@ -22,7 +22,6 @@ import java.io.InputStream ;
 import java.io.Reader ;
 
 import org.apache.jena.atlas.web.ContentType ;
-import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.riot.system.ParserProfile ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.sparql.util.Context ;
@@ -59,9 +58,6 @@ public interface ReaderRIOT
      */
     public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) ;
     
-    public ErrorHandler getErrorHandler() ;
-    public void setErrorHandler(ErrorHandler errorHandler) ;
-    
     /** Get the parser profile.  Not all parsers have parser profiles so this may be null */
     public ParserProfile getParserProfile() ;
     /** Set the parser profile.  Not all parsers have parser profiles so this may be a no-op */

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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 06ba468..7edf6ce 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
@@ -58,14 +58,11 @@ public class JsonLDReader implements ReaderRIOT
     private /*final*/ ErrorHandler errorHandler = ErrorHandlerFactory.getDefaultErrorHandler() ;
     private /*final*/ MakerRDF maker;
     
-    @Override public ErrorHandler getErrorHandler() { return errorHandler ; }
-    @Override public void setErrorHandler(ErrorHandler errorHandler) { this.errorHandler = errorHandler ; }
-    
     @Override public ParserProfile getParserProfile()                   { return (MakerRDFStd)maker ; }
 
     @Override
     public void setParserProfile(ParserProfile parserProfile) {
-        this.errorHandler = parserProfile.getHandler();
+        this.errorHandler = parserProfile.getErrorHandler();
         this.maker = parserProfile;
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangBase.java
index 9125eda..1ae9423 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangBase.java
@@ -26,10 +26,12 @@ import org.apache.jena.riot.tokens.Tokenizer ;
 public abstract class LangBase extends LangEngine implements LangRIOT
 {
     protected final StreamRDF dest;
+    protected final boolean isStrictMode; 
 
     protected LangBase(Tokenizer tokens, ParserProfile profile, StreamRDF dest) {
-        super(tokens, profile);
+        super(tokens, profile, profile.getHandler());
         this.dest = dest;
+        this.isStrictMode = profile.isStrictMode();
     }
 
     @Override
@@ -48,11 +50,16 @@ public abstract class LangBase extends LangEngine implements LangRIOT
 
     @Override
     public ParserProfile getProfile() {
-        return profile;
+        // XXX Temp - for migration ParserProfile
+        if ( profile instanceof ParserProfile )
+            return (ParserProfile)profile;
+        return null;
     }
 
     @Override
     public void setProfile(ParserProfile profile) {
+        // XXX Temp - for migration ParserProfile
         super.profile = profile;
+        super.errorHandler = profile.getHandler();
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
index 24746b4..cda6e88 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java
@@ -18,151 +18,139 @@
 
 package org.apache.jena.riot.lang;
 
-import static org.apache.jena.riot.tokens.TokenType.EOF ;
-import static org.apache.jena.riot.tokens.TokenType.NODE ;
-
-import org.apache.jena.atlas.AtlasException ;
-import org.apache.jena.atlas.iterator.PeekIterator ;
-import org.apache.jena.riot.RiotParseException ;
-import org.apache.jena.riot.system.ErrorHandler ;
-import org.apache.jena.riot.system.ParserProfile ;
-import org.apache.jena.riot.tokens.Token ;
-import org.apache.jena.riot.tokens.TokenType ;
-import org.apache.jena.riot.tokens.Tokenizer ;
-
-/** Common operations for RIOT parsers - not the implementation LangRIOT  */
-public class LangEngine
-{
-    protected ParserProfile profile ;
-    protected final Tokenizer tokens ;
-    private PeekIterator<Token> peekIter ;
-
-    protected LangEngine(Tokenizer tokens, ParserProfile profile)
-    {
-        this.tokens = tokens ;
-        this.profile = profile ;
+import static org.apache.jena.riot.tokens.TokenType.EOF;
+import static org.apache.jena.riot.tokens.TokenType.NODE;
+
+import java.util.Objects;
+
+import org.apache.jena.atlas.AtlasException;
+import org.apache.jena.atlas.iterator.PeekIterator;
+import org.apache.jena.riot.RiotParseException;
+import org.apache.jena.riot.system.ErrorHandler;
+import org.apache.jena.riot.system.MakerRDF;
+import org.apache.jena.riot.tokens.Token;
+import org.apache.jena.riot.tokens.TokenType;
+import org.apache.jena.riot.tokens.Tokenizer;
+
+/** Common operations for RIOT token stream parsing - not the implementation LangRIOT. */
+public class LangEngine {
+    protected MakerRDF          profile;
+    protected ErrorHandler      errorHandler;
+    protected final Tokenizer   tokens;
+    private PeekIterator<Token> peekIter;
+
+    protected LangEngine(Tokenizer tokens, MakerRDF profile, ErrorHandler errorHandler) {
+        this.tokens = Objects.requireNonNull(tokens);
+        this.profile = Objects.requireNonNull(profile);
+        this.errorHandler = errorHandler;
         // The PeekIterator is always loaded with the next token until the end
-        // (for simplicity) but it means this can throw an exception. 
-        try { this.peekIter = new PeekIterator<>(tokens) ; }
-        catch (RiotParseException ex) { raiseException(ex) ; }
+        // (for simplicity) but it means this can throw an exception.
+        try {
+            this.peekIter = new PeekIterator<>(tokens);
+        }
+        catch (RiotParseException ex) {
+            raiseException(ex);
+        }
     }
-    
+
     // ---- Managing tokens.
-    
-    protected final Token peekToken()
-    {
+
+    protected final Token peekToken() {
         // Avoid repeating.
-        if ( eof() ) return tokenEOF ;
-        return peekIter.peek() ;
+        if ( eof() )
+            return tokenEOF;
+        return peekIter.peek();
     }
-    
+
     // Set when we get to EOF to record line/col of the EOF.
-    private Token tokenEOF = null ;
+    private Token tokenEOF = null;
 
-    protected final boolean eof()
-    {
+    protected final boolean eof() {
         if ( tokenEOF != null )
-            return true ;
-        
-        if ( ! moreTokens() )
-        {
-            tokenEOF = new Token(tokens.getLine(), tokens.getColumn()) ;
-            tokenEOF.setType(EOF) ;
-            return true ;
+            return true;
+
+        if ( !moreTokens() ) {
+            tokenEOF = new Token(tokens.getLine(), tokens.getColumn());
+            tokenEOF.setType(EOF);
+            return true;
         }
-        return false ;
+        return false;
     }
 
-    protected final boolean moreTokens() 
-    {
-        return peekIter.hasNext() ;
+    protected final boolean moreTokens() {
+        return peekIter.hasNext();
     }
-    
-    protected final boolean lookingAt(TokenType tokenType)
-    {
+
+    protected final boolean lookingAt(TokenType tokenType) {
         if ( eof() )
-            return tokenType == EOF ;
+            return tokenType == EOF;
         if ( tokenType == NODE )
-            return peekToken().isNode() ;
-        return peekToken().hasType(tokenType) ;
+            return peekToken().isNode();
+        return peekToken().hasType(tokenType);
     }
-    
-    // Remember line/col of last token for messages 
-    protected long currLine = -1 ;
-    protected long currCol = -1 ;
-    
-    protected final Token nextToken()
-    {
+
+    // Remember line/col of last token for messages
+    protected long currLine = -1;
+    protected long currCol  = -1;
+
+    protected final Token nextToken() {
         if ( eof() )
-            return tokenEOF ;
-        
+            return tokenEOF;
+
         // Tokenizer errors appear here!
         try {
-            Token t = peekIter.next() ;
-            currLine = t.getLine() ;
-            currCol = t.getColumn() ;
-            return t ;
-        } catch (RiotParseException ex)
-        {
+            Token t = peekIter.next();
+            currLine = t.getLine();
+            currCol = t.getColumn();
+            return t;
+        }
+        catch (RiotParseException ex) {
             // Intercept to log it.
-            raiseException(ex) ;
-            throw ex ;
+            raiseException(ex);
+            throw ex;
         }
-        catch (AtlasException ex)
-        {
+        catch (AtlasException ex) {
             // Bad I/O
-            RiotParseException ex2 = new RiotParseException(ex.getMessage(), -1, -1) ;
-            raiseException(ex2) ;
-            throw ex2 ;
+            RiotParseException ex2 = new RiotParseException(ex.getMessage(), -1, -1);
+            raiseException(ex2);
+            throw ex2;
         }
     }
 
-//    protected final Node scopedBNode(Node scopeNode, String label)
-//    {
-//        return profile.getLabelToNode().get(scopeNode, label) ;
-//    }
-//    
-    protected final void expectOrEOF(String msg, TokenType tokenType)
-    {
+    protected final void expectOrEOF(String msg, TokenType tokenType) {
         // DOT or EOF
         if ( eof() )
-            return ;
-        expect(msg, tokenType) ;
+            return;
+        expect(msg, tokenType);
     }
-    
+
     protected final void skipIf(TokenType ttype) {
         if ( lookingAt(ttype) )
-            nextToken() ;
+            nextToken();
     }
-    
-    protected final void expect(String msg, TokenType ttype)
-    {
-        if ( ! lookingAt(ttype) )
-        {
-            Token location = peekToken() ;
-            exception(location, msg) ;
+
+    protected final void expect(String msg, TokenType ttype) {
+        if ( !lookingAt(ttype) ) {
+            Token location = peekToken();
+            exception(location, msg);
         }
-        nextToken() ;
+        nextToken();
     }
 
-    protected final void exception(Token token, String msg, Object... args)
-    { 
+    protected final void exception(Token token, String msg, Object... args) {
         if ( token != null )
-            exceptionDirect(String.format(msg, args), token.getLine(), token.getColumn()) ;
+            exceptionDirect(String.format(msg, args), token.getLine(), token.getColumn());
         else
-            exceptionDirect(String.format(msg, args), -1, -1) ;
+            exceptionDirect(String.format(msg, args), -1, -1);
     }
 
-    protected final void exceptionDirect(String msg, long line, long col)
-    { 
-        raiseException(new RiotParseException(msg, line, col)) ;
+    protected final void exceptionDirect(String msg, long line, long col) {
+        raiseException(new RiotParseException(msg, line, col));
     }
-    
-    protected final void raiseException(RiotParseException ex)
-    { 
-        ErrorHandler errorHandler = profile.getHandler() ; 
+
+    protected final void raiseException(RiotParseException ex) {
         if ( errorHandler != null )
-            errorHandler.fatal(ex.getOriginalMessage(), ex.getLine(), ex.getCol()) ;
-        throw ex ;
+            errorHandler.fatal(ex.getOriginalMessage(), ex.getLine(), ex.getCol());
+        throw ex;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNQuads.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNQuads.java
index 581d028..fafa1e7 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNQuads.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNQuads.java
@@ -115,8 +115,7 @@ public class LangNQuads extends LangNTuple<Quad>
     }
     
     @Override
-    protected final Node tokenAsNode(Token token) 
-    {
-        return profile.create(currentGraph, token) ;
+    protected final Node tokenAsNode(Token token) {
+        return profile.create(currentGraph, token);
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNTuple.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNTuple.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNTuple.java
index 40768fb..337fd83 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNTuple.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangNTuple.java
@@ -76,7 +76,7 @@ public abstract class LangNTuple<X> extends LangBase implements Iterator<X>
     
     /** Note a tuple not being output */
     protected void skipOne(X object, String printForm, long line, long col) {
-        profile.getHandler().warning("Skip: " + printForm, line, col);
+        errorHandler.warning("Skip: " + printForm, line, col);
     }
 
     protected abstract Node tokenAsNode(Token token) ;
@@ -115,7 +115,7 @@ public abstract class LangNTuple<X> extends LangBase implements Iterator<X>
     private void checkString(Token token) {
         if ( token.isLongString() )
             exception(token, "Triple quoted string not permitted: %s", token) ;
-        if ( profile.isStrictMode() && ! token.hasStringType(StringType.STRING2) )
+        if ( isStrictMode && ! token.hasStringType(StringType.STRING2) )
             exception(token, "Not a \"\"-quoted string: %s", token); 
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTriG.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTriG.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTriG.java
index 0160fa7..e058957 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTriG.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTriG.java
@@ -188,7 +188,7 @@ public class LangTriG extends LangTurtleBase {
 
         // = is optional and old style.
         if ( lookingAt(EQUALS) ) {
-            if ( profile.isStrictMode() )
+            if ( isStrictMode )
                 exception(token, "Use of = {} is not part of standard TriG: " + graphNode) ;
             // Skip.
             nextToken() ;
@@ -218,7 +218,7 @@ public class LangTriG extends LangTurtleBase {
         if ( lookingAt(RBRACE) )
             exception(token, "Expected end of graph: got %s", token) ;
 
-        if ( !profile.isStrictMode() ) {
+        if ( !isStrictMode ) {
             // Skip DOT after {}
             token = peekToken() ;
             if ( lookingAt(DOT) )

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTurtleBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTurtleBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTurtleBase.java
index 0f13ee1..9673b8b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTurtleBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangTurtleBase.java
@@ -36,9 +36,7 @@ import static org.apache.jena.riot.tokens.TokenType.SEMICOLON ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.iri.IRI ;
-import org.apache.jena.riot.system.ParserProfile ;
-import org.apache.jena.riot.system.Prologue;
-import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.system.*;
 import org.apache.jena.riot.tokens.Token ;
 import org.apache.jena.riot.tokens.TokenType ;
 import org.apache.jena.riot.tokens.Tokenizer ;
@@ -58,6 +56,8 @@ public abstract class LangTurtleBase extends LangBase {
     // protected final static boolean CHECKING = true ;
     // Current graph - null for default graph
     private Node                   currentGraph   = null ;
+    
+    protected /*final*/ PrefixMap prefixMap;
 
     public final Node getCurrentGraph() {
         return currentGraph ;
@@ -69,9 +69,17 @@ public abstract class LangTurtleBase extends LangBase {
 
     protected LangTurtleBase(Tokenizer tokens, ParserProfile profile, StreamRDF dest) {
         super(tokens, profile, dest) ;
+        // Shared with the MakerRDF
+        prefixMap = profile.getPrefixMap();
     }
 
     @Override
+    public void setProfile(ParserProfile profile) {
+        super.setProfile(profile);
+        prefixMap = profile.getPrefixMap();
+    }
+    
+    @Override
     protected final void runParser() {
         while (moreTokens()) {
             Token t = peekToken() ;
@@ -128,7 +136,7 @@ public abstract class LangTurtleBase extends LangBase {
 
         if ( x.equals("base") ) {
             directiveBase() ;
-            if ( profile.isStrictMode() )
+            if ( isStrictMode )
                 // The line number is probably one ahead due to the newline
                 expect("Base directive not terminated by a dot", DOT) ;
             else
@@ -138,7 +146,7 @@ public abstract class LangTurtleBase extends LangBase {
 
         if ( x.equals("prefix") ) {
             directivePrefix() ;
-            if ( profile.isStrictMode() )
+            if ( isStrictMode )
                 // The line number is probably one ahead due to the newline
                 expect("Prefix directive not terminated by a dot", DOT) ;   
             else
@@ -160,7 +168,7 @@ public abstract class LangTurtleBase extends LangBase {
             exception(peekToken(), "@prefix requires an IRI (found '" + peekToken() + "')") ;
         String iriStr = peekToken().getImage() ;
         IRI iri = profile.makeIRI(iriStr, currLine, currCol) ;
-        profile.getPrologue().getPrefixMap().add(prefix, iri) ;
+        prefixMap.add(prefix, iri) ;
         emitPrefix(prefix, iri.toString()) ;
         nextToken() ;
     }
@@ -173,18 +181,12 @@ public abstract class LangTurtleBase extends LangBase {
         IRI baseIRI = profile.makeIRI(baseStr, currLine, currCol) ;
         emitBase(baseIRI.toString()) ;
         nextToken() ;
-        //profile.getPrologue().setBaseURI(baseIRI) ;
-        // XXX [ParserRDF]
-        // This creates a new resolver but MakerRDFStd has a copy of the resolver object
-        Prologue prologue = profile.getPrologue();
-        prologue.setBaseURI(baseIRI);
-        profile.setPrologue(prologue);
+        IRIResolver newResolver = IRIResolver.create(baseIRI) ;
+        profile.setIRIResolver(newResolver);
     }
 
-    
-
     // Unlike many operations in this parser suite
-    // this does not assume that we have definitely
+    // this does not assume that we are definitely
     // entering this state. It does checks and may
     // signal a parse exception.
 
@@ -215,7 +217,7 @@ public abstract class LangTurtleBase extends LangBase {
             // There must be a predicate and object.
 
             // -- If strict turtle.
-            if ( profile.isStrictMode() && maybeList ) {
+            if ( isStrictMode && maybeList ) {
                 if ( peekPredicate() ) {
                     predicateObjectList(n) ;
                     expectEndOfTriples() ;
@@ -264,7 +266,7 @@ public abstract class LangTurtleBase extends LangBase {
     // It is not in N3 and SPARQL.
     
     protected void expectEndOfTriplesTurtle() {
-        if ( profile.isStrictMode() )
+        if ( isStrictMode )
             expect("Triples not terminated by DOT", DOT) ;
         else
             expectOrEOF("Triples not terminated by DOT", DOT) ;
@@ -301,7 +303,7 @@ public abstract class LangTurtleBase extends LangBase {
         Token t = peekToken() ;
 
         if ( t.hasType(TokenType.KEYWORD) ) {
-            boolean strict = profile.isStrictMode() ;
+            boolean strict = isStrictMode ;
             Token tErr = peekToken() ;
             String image = peekToken().getImage() ;
             if ( image.equals(KW_A) )
@@ -323,12 +325,11 @@ public abstract class LangTurtleBase extends LangBase {
     protected final boolean peekPredicate() {
         if ( lookingAt(TokenType.KEYWORD) ) {
             String image = peekToken().getImage() ;
-            boolean strict = profile.isStrictMode() ;
             if ( image.equals(KW_A) )
                 return true ;
-            if ( !strict && image.equals(KW_SAME_AS) )
+            if ( !isStrictMode && image.equals(KW_SAME_AS) )
                 return true ;
-            if ( !strict && image.equals(KW_LOG_IMPLIES) )
+            if ( !isStrictMode && image.equals(KW_LOG_IMPLIES) )
                 return true ;
             return false ;
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFNULL.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFNULL.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFNULL.java
index e5964c4..29a44af 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFNULL.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFNULL.java
@@ -22,7 +22,6 @@ import java.io.Reader ;
 
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.riot.ReaderRIOT ;
-import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.riot.system.ParserProfile ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.sparql.util.Context ;
@@ -36,14 +35,6 @@ public class ReaderRDFNULL implements ReaderRIOT {
     public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {}
 
     @Override
-    public ErrorHandler getErrorHandler() {
-        return null;
-    }
-
-    @Override
-    public void setErrorHandler(ErrorHandler errorHandler) {}
-
-    @Override
     public ParserProfile getParserProfile() {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFXML.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFXML.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFXML.java
new file mode 100644
index 0000000..a69c8a4
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRDFXML.java
@@ -0,0 +1,75 @@
+/*
+ * 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.InputStream ;
+import java.io.Reader ;
+
+import org.apache.jena.atlas.web.ContentType ;
+import org.apache.jena.riot.ReaderRIOT ;
+import org.apache.jena.riot.SysRIOT;
+import org.apache.jena.riot.system.*;
+import org.apache.jena.sparql.util.Context ;
+
+public class ReaderRDFXML implements ReaderRIOT {
+    private /*final*/ ErrorHandler errorHandler;
+    private /*final*/ MakerRDF maker;
+    
+    public ReaderRDFXML(MakerRDF maker, ErrorHandler errorHandler) {
+        this.maker = maker;
+        this.errorHandler = errorHandler;
+    }
+
+    @Override
+    public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
+        baseURI = baseURI_RDFXML(baseURI) ;
+        LangRDFXML parser = LangRDFXML.create(in, baseURI, baseURI, ErrorHandlerFactory.getDefaultErrorHandler(), output) ;
+        parser.parse();
+    }
+        
+    @Override
+    public void read(Reader reader, String baseURI, ContentType ct, StreamRDF output, Context context) {
+        baseURI = baseURI_RDFXML(baseURI) ;
+        LangRDFXML parser = LangRDFXML.create(reader, baseURI, baseURI, ErrorHandlerFactory.getDefaultErrorHandler(), output) ;
+        parser.parse();
+    }
+    
+    @Override
+    public ParserProfile getParserProfile() {
+        if ( maker instanceof ParserProfile )
+            return (ParserProfile)maker;
+        throw new UnsupportedOperationException() ;
+    }
+
+    @Override
+    public void setParserProfile(ParserProfile profile) {
+        maker = profile ;
+    }
+    
+    /** Sort out the base URI for RDF/XML parsing. */
+    private static String baseURI_RDFXML(String baseIRI) {
+        // LangRIOT derived from LangEngine do this in ParserProfile 
+        if ( baseIRI == null )
+            return SysRIOT.chooseBaseIRI() ;
+        else
+            // This normalizes the URI.
+            return SysRIOT.chooseBaseIRI(baseIRI) ;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderTriX.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderTriX.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderTriX.java
index e169e30..4c475f3 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderTriX.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderTriX.java
@@ -423,16 +423,6 @@ public class ReaderTriX implements ReaderRIOT {
     }
 
     @Override
-    public ErrorHandler getErrorHandler() {
-        return errorHandler ;
-    }
-
-    @Override
-    public void setErrorHandler(ErrorHandler errorHandler) { 
-        this.errorHandler = errorHandler;
-    }
-
-    @Override
     public ParserProfile getParserProfile() {
         if ( maker instanceof ParserProfile )
             return (ParserProfile)maker;

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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
index 5b86aa0..b3b278a 100644
--- 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
@@ -18,7 +18,6 @@
 
 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 ;
@@ -29,20 +28,18 @@ import static org.apache.jena.riot.RDFLanguages.TURTLE ;
 
 import java.io.InputStream ;
 import java.io.Reader ;
-import java.util.Iterator ;
+import java.util.Iterator;
 
 import org.apache.jena.atlas.io.PeekReader ;
 import org.apache.jena.atlas.json.io.parser.TokenizerJSON ;
-import org.apache.jena.atlas.lib.CharSpace ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.* ;
-import org.apache.jena.riot.system.ErrorHandlerFactory ;
-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.graph.Triple;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.riot.SysRIOT;
+import org.apache.jena.riot.system.*;
 import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.riot.tokens.TokenizerFactory ;
-import org.apache.jena.sparql.core.Quad ;
+import org.apache.jena.sparql.core.Quad;
 
 /** Use RDFDataMgr operations.
  * 
@@ -51,151 +48,312 @@ import org.apache.jena.sparql.core.Quad ;
 public class RiotParsers {
     // package statics -- for the tests to create exactly what they test.
     private RiotParsers() {}
-    
-    /** Create a parser 
-     * Use {@link RDFDataMgr#createReader(Lang)}
-     */
-    public static LangRIOT createParser(InputStream input, Lang lang, String baseIRI, StreamRDF dest) {
-        if ( lang == RDFXML )
-            return createParserRDFXML(input, baseIRI, dest) ;
-        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 
-     */
-    public static LangRIOT createParser(Reader input, Lang lang, String baseIRI, StreamRDF dest) {
-        if ( lang == RDFXML )
-            return createParserRDFXML(input, baseIRI, dest) ;
-        if ( lang == CSV)
-            return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
-        
-        @SuppressWarnings("deprecation")
-        Tokenizer tokenizer = ( lang == RDFJSON ) ?
-            new TokenizerJSON(PeekReader.make(input)) :
-                TokenizerFactory.makeTokenizer(input) ;
-        return createParser(tokenizer, lang, baseIRI, dest) ;
-    }
-
-    /** Create an iterator for parsing N-Triples. */
-    public static Iterator<Triple> createIteratorNTriples(InputStream input, StreamRDF dest) {
-        // LangNTriples supports iterator use.
-        return createParserNTriples(input, dest) ;
-    }
-
-    /** Create an iterator for parsing N-Quads. */
-    public static Iterator<Quad> createIteratorNQuads(InputStream input, StreamRDF dest) {
-        // LangNQuads supports iterator use.
-        return createParserNQuads(input, dest) ;
-    }
-
-    private static LangRDFXML createParserRDFXML(InputStream input, String baseIRI, StreamRDF dest) {
-        baseIRI = baseURI_RDFXML(baseIRI) ;
-        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
-        return parser ;
-    }
-
-    private static LangRDFXML createParserRDFXML(Reader input, String baseIRI, StreamRDF dest) {
-        baseIRI = baseURI_RDFXML(baseIRI) ;
-        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
-        return parser ;
-    }
-
-//    /*package*/ static LangTurtle createParserTurtle(InputStream input, String baseIRI, StreamRDF dest) {
-//        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
-//        return createParserTurtle(tokenizer, baseIRI, dest) ;
-//    }
-
-//    /*package*/ static LangRDFJSON createParserRdfJson(InputStream input, StreamRDF dest) {
-//        TokenizerJSON tokenizer = new TokenizerJSON(PeekReader.makeUTF8(input)) ;
-//        return createParserRdfJson(tokenizer, dest) ;
-//    }
-//
-//    /*package*/ static LangTriG createParserTriG(InputStream input, String baseIRI, StreamRDF dest) {
-//        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
-//        return createParserTriG(tokenizer, baseIRI, dest) ;
-//    }
-//
-    private static LangNTriples createParserNTriples(InputStream input, StreamRDF dest) {
-        return createParserNTriples(input, CharSpace.UTF8, dest);
-    }
-
-    private static  LangNTriples createParserNTriples(InputStream input, CharSpace charSpace, StreamRDF dest) {
-        Tokenizer tokenizer = charSpace == CharSpace.ASCII
-            ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input);
-        return createParserNTriples(tokenizer, dest) ;
-    }
-
-    private static LangNQuads createParserNQuads(InputStream input, StreamRDF dest) {
-        return createParserNQuads(input, CharSpace.UTF8, dest) ;
-    }
-
-    private static LangNQuads createParserNQuads(InputStream input, CharSpace charSpace, StreamRDF dest) {
-        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
-        return createParserNQuads(tokenizer, dest) ;
-    }
-
-    private 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) ;
-        return null ;
-    }
-
-    /*package*/ static LangNTriples createParserNTriples(Tokenizer tokenizer, StreamRDF dest) {
-        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.NTRIPLES, null) ;
-        LangNTriples parser = new LangNTriples(tokenizer, profile, dest) ;
-        return parser ;
-    }
-
-    /*package*/ static LangNQuads createParserNQuads(Tokenizer tokenizer, StreamRDF dest) {
-        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.NQUADS, null) ;
-        LangNQuads parser = new LangNQuads(tokenizer, profile, dest) ;
-        return parser ;
-    }
-
-    /*package*/ static LangTurtle createParserTurtle(Tokenizer tokenizer, String baseIRI, StreamRDF dest) {
-        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.TURTLE, baseIRI) ;
-        LangTurtle parser = new LangTurtle(tokenizer, profile, dest) ;
-        return parser ;
-    }
-
-    /*package*/ static LangTriG createParserTriG(Tokenizer tokenizer, String baseIRI, StreamRDF dest) {
-        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.TRIG, baseIRI);
-        LangTriG parser = new LangTriG(tokenizer, profile, dest) ;
-        return parser ;
-    }
-
-    /*package*/ static LangRDFJSON createParserRdfJson(Tokenizer tokenizer, StreamRDF dest) {
-        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.RDFJSON, null);
-        LangRDFJSON parser = new LangRDFJSON(tokenizer, profile, dest) ;
-    	return parser;
-    }
-
-    /** Sort out the base URI for RDF/XML parsing. */
-    private static String baseURI_RDFXML(String baseIRI) {
-        // LangRIOT derived from LangEngine do this in ParserProfile 
-        if ( baseIRI == null )
-            return SysRIOT.chooseBaseIRI() ;
-        else
-            // This normalizes the URI.
-            return SysRIOT.chooseBaseIRI(baseIRI) ;
-    }
+//      // Adapter code.
+//      public static LangRIOT createParser2(InputStream input, Lang lang, String baseIRI, StreamRDF dest, ParserProfile profile) {
+//          if ( profile instanceof ParserProfileChecker )
+//              throw new InternalError("No long used: ParserProfileChecker");
+//          if ( profile == null )
+//              profile = RiotLib.profile(lang, baseIRI);
+//          return createParser2(input, lang, baseIRI, dest, profile.getHandler(), profile);
+//      }
+      
+      /** InputStream input */
+      public static LangRIOT createParser(InputStream input, Lang lang, String baseIRI, StreamRDF dest, MakerRDF maker) {
+          if ( lang == RDFXML )
+              return createParserRDFXML(input, baseIRI, dest) ;
+          if ( RDFLanguages.sameLang(RDFJSON, lang) ) {
+              Tokenizer tokenizer = new TokenizerJSON(PeekReader.makeUTF8(input));
+              return createParserRdfJson(tokenizer, dest, maker);
+          }
+
+          Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+          if ( RDFLanguages.sameLang(TURTLE, lang) || RDFLanguages.sameLang(N3,  lang) ) 
+              return createParserTurtle(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(NTRIPLES, lang) )
+              return createParserNTriples(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(NQUADS, lang) )
+              return createParserNQuads(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(TRIG, lang) )
+              return createParserTriG(tokenizer, dest, maker) ;
+          return null ;
+      }
+      
+      /** Reader input */
+      public static LangRIOT createParser(Reader input, Lang lang, String baseIRI, StreamRDF dest, MakerRDF maker) {
+          if ( lang == RDFXML )
+              return createParserRDFXML(input, baseIRI, dest) ;
+          if ( RDFLanguages.sameLang(RDFJSON, lang) ) {
+              Tokenizer tokenizer = new TokenizerJSON(PeekReader.make(input));
+              return createParserRdfJson(tokenizer, dest, maker);
+          }
+
+          @SuppressWarnings("deprecation")
+          Tokenizer tokenizer = TokenizerFactory.makeTokenizer(input) ;
+          if ( RDFLanguages.sameLang(TURTLE, lang) || RDFLanguages.sameLang(N3,  lang) ) 
+              return createParserTurtle(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(NTRIPLES, lang) )
+              return createParserNTriples(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(NQUADS, lang) )
+              return createParserNQuads(tokenizer, dest, maker) ;
+          if ( RDFLanguages.sameLang(TRIG, lang) )
+              return createParserTriG(tokenizer, dest, maker) ;
+          return null ;
+      }
+      
+      private static ParserProfile makeParserProfile(MakerRDF maker) {
+          if ( maker instanceof ParserProfile )
+              return (ParserProfile)maker;
+          ParserProfile profile = new ParserProfileBase2(maker.getPrologue(), maker.getErrorHandler(), maker);
+          return profile;
+      }
+      
+      // XXX Each "Old World" needs the constructor changing.
+      
+      public /* For Elephas */ 
+      /*package*/ static LangNTriples createParserNTriples(Tokenizer tokenizer, StreamRDF dest, MakerRDF maker) {
+          // XXX Old world. Change LangNTriples(tokenizer, maker, errorHandler, dest);
+          ParserProfile profile = makeParserProfile(maker);
+          LangNTriples parser = new LangNTriples(tokenizer, profile, dest) ;
+          return parser ;
+      }
+
+      public /* For Elephas */
+      /*package*/ static LangNQuads createParserNQuads(Tokenizer tokenizer, StreamRDF dest, MakerRDF maker) {
+          // XXX Old world
+          ParserProfile profile = makeParserProfile(maker);
+          LangNQuads parser = new LangNQuads(tokenizer, profile, dest) ;
+          return parser ;
+      }
+
+      /*package*/ static LangTurtle createParserTurtle(Tokenizer tokenizer, StreamRDF dest, MakerRDF maker) {
+          // XXX Old world
+          ParserProfile profile = makeParserProfile( maker);
+          LangTurtle parser = new LangTurtle(tokenizer, profile, dest) ;
+          return parser ;
+      }
+
+      /*package*/ static LangTriG createParserTriG(Tokenizer tokenizer, StreamRDF dest, MakerRDF maker) {
+          // XXX Old world
+          ParserProfile profile = makeParserProfile( maker);
+          LangTriG parser = new LangTriG(tokenizer, profile, dest) ;
+          return parser ;
+      }
+
+      /*package*/ static LangRDFJSON createParserRdfJson(Tokenizer tokenizer, StreamRDF dest, MakerRDF maker) {
+          // XXX Old world
+          ParserProfile profile = makeParserProfile( maker);
+          LangRDFJSON parser = new LangRDFJSON(tokenizer, profile, dest) ;
+          return parser;
+      }
+
+      /** Create an iterator for parsing N-Triples. */
+      public static Iterator<Triple> createIteratorNTriples(InputStream input, StreamRDF dest) {
+          return createIteratorNTriples(input, dest, RiotLib.dftMakerRDF());
+      }
+
+      /** Create an iterator for parsing N-Triples. */
+      public static Iterator<Triple> createIteratorNTriples(InputStream input, StreamRDF dest, MakerRDF maker) {
+          // LangNTriples supports iterator use.
+          Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+          return createParserNTriples(tokenizer, null,  maker) ;
+      }
+
+      /** Create an iterator for parsing N-Quads. */
+      public static Iterator<Quad> createIteratorNQuads(InputStream input, StreamRDF dest) {
+          return createIteratorNQuads(input, dest, RiotLib.dftMakerRDF());
+      }
+      
+      /** Create an iterator for parsing N-Quads. */
+      public static Iterator<Quad> createIteratorNQuads(InputStream input, StreamRDF dest, MakerRDF maker) {
+          // LangNQuads supports iterator use.
+          Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+          return createParserNQuads(tokenizer, null,  maker) ;
+      }
+
+      private static LangRDFXML createParserRDFXML(InputStream input, String baseIRI, StreamRDF dest) {
+          baseIRI = baseURI_RDFXML(baseIRI) ;
+          LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+          return parser ;
+      }
+
+      private static LangRDFXML createParserRDFXML(Reader input, String baseIRI, StreamRDF dest) {
+          baseIRI = baseURI_RDFXML(baseIRI) ;
+          LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+          return parser ;
+      }
+
+      /** Sort out the base URI for RDF/XML parsing. */
+      private static String baseURI_RDFXML(String baseIRI) {
+          // LangRIOT derived from LangEngine do this in ParserProfile 
+          if ( baseIRI == null )
+              return SysRIOT.chooseBaseIRI() ;
+          else
+              // This normalizes the URI.
+              return SysRIOT.chooseBaseIRI(baseIRI) ;
+      }
+    
+//    /** Create a parser engine.
+//     * Use {@link RDFDataMgr#createReader(Lang)}
+//     * @Deprecated Do not use - to be removed.
+//     */
+//    public static LangRIOT createParser(InputStream input, Lang lang, String baseIRI, StreamRDF dest) {
+//        return createLangRIOT(input, lang, baseIRI, dest);
+//    }
+//    
+//    /** Create a parser engine.
+//     * Use {@link RDFDataMgr#createReader(Lang)}
+//     *  <b>Not part of the public API.</b>
+//     */
+//    public static LangRIOT createLangRIOT(InputStream input, Lang lang, String baseIRI, StreamRDF dest) {
+//        if ( lang == RDFXML )
+//            return createParserRDFXML(input, baseIRI, dest) ;
+//        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 engine
+//    *  @Deprecated Do not use - to be removed.
+//    */
+//    public static LangRIOT createParser(Reader input, Lang lang, String baseIRI, StreamRDF dest) {
+//        return createLangRIOT(input, lang, baseIRI, dest);
+//    }
+//        
+//    /** Create a parser engine
+//     *  <b>Not part of the public API.</b>
+//     */
+//    public static LangRIOT createLangRIOT(Reader input, Lang lang, String baseIRI, StreamRDF dest) {
+//        if ( lang == RDFXML )
+//            return createParserRDFXML(input, baseIRI, dest) ;
+//        if ( lang == CSV)
+//            return new LangCSV (input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(),  dest);
+//        
+//        @SuppressWarnings("deprecation")
+//        Tokenizer tokenizer = ( lang == RDFJSON ) ?
+//            new TokenizerJSON(PeekReader.make(input)) :
+//                TokenizerFactory.makeTokenizer(input) ;
+//        return createParser(tokenizer, lang, baseIRI, dest) ;
+//    }
+//
+//    /** Create an iterator for parsing N-Triples. */
+//    public static Iterator<Triple> createIteratorNTriples(InputStream input, StreamRDF dest) {
+//        // LangNTriples supports iterator use.
+//        return createParserNTriples(input, dest) ;
+//    }
+//
+//    /** Create an iterator for parsing N-Quads. */
+//    public static Iterator<Quad> createIteratorNQuads(InputStream input, StreamRDF dest) {
+//        // LangNQuads supports iterator use.
+//        return createParserNQuads(input, dest) ;
+//    }
+//
+//    private static LangRDFXML createParserRDFXML(InputStream input, String baseIRI, StreamRDF dest) {
+//        baseIRI = baseURI_RDFXML(baseIRI) ;
+//        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+//        return parser ;
+//    }
+//
+//    private static LangRDFXML createParserRDFXML(Reader input, String baseIRI, StreamRDF dest) {
+//        baseIRI = baseURI_RDFXML(baseIRI) ;
+//        LangRDFXML parser = LangRDFXML.create(input, baseIRI, baseIRI, ErrorHandlerFactory.getDefaultErrorHandler(), dest) ;
+//        return parser ;
+//    }
+//
+////    /*package*/ static LangTurtle createParserTurtle(InputStream input, String baseIRI, StreamRDF dest) {
+////        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+////        return createParserTurtle(tokenizer, baseIRI, dest) ;
+////    }
+//
+////    /*package*/ static LangRDFJSON createParserRdfJson(InputStream input, StreamRDF dest) {
+////        TokenizerJSON tokenizer = new TokenizerJSON(PeekReader.makeUTF8(input)) ;
+////        return createParserRdfJson(tokenizer, dest) ;
+////    }
+////
+////    /*package*/ static LangTriG createParserTriG(InputStream input, String baseIRI, StreamRDF dest) {
+////        Tokenizer tokenizer = TokenizerFactory.makeTokenizerUTF8(input) ;
+////        return createParserTriG(tokenizer, baseIRI, dest) ;
+////    }
+////
+//    private static LangNTriples createParserNTriples(InputStream input, StreamRDF dest) {
+//        return createParserNTriples(input, CharSpace.UTF8, dest);
+//    }
+//
+//    private static  LangNTriples createParserNTriples(InputStream input, CharSpace charSpace, StreamRDF dest) {
+//        Tokenizer tokenizer = charSpace == CharSpace.ASCII
+//            ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input);
+//        return createParserNTriples(tokenizer, dest) ;
+//    }
+//
+//    private static LangNQuads createParserNQuads(InputStream input, StreamRDF dest) {
+//        return createParserNQuads(input, CharSpace.UTF8, dest) ;
+//    }
+//
+//    private static LangNQuads createParserNQuads(InputStream input, CharSpace charSpace, StreamRDF dest) {
+//        Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(input) : TokenizerFactory.makeTokenizerUTF8(input) ;
+//        return createParserNQuads(tokenizer, dest) ;
+//    }
+//
+//    private 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) ;
+//        return null ;
+//    }
+//
+//    /*package*/ static LangNTriples createParserNTriples(Tokenizer tokenizer, StreamRDF dest) {
+//        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.NTRIPLES, null) ;
+//        LangNTriples parser = new LangNTriples(tokenizer, profile, dest) ;
+//        return parser ;
+//    }
+//
+//    /*package*/ static LangNQuads createParserNQuads(Tokenizer tokenizer, StreamRDF dest) {
+//        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.NQUADS, null) ;
+//        LangNQuads parser = new LangNQuads(tokenizer, profile, dest) ;
+//        return parser ;
+//    }
+//
+//    /*package*/ static LangTurtle createParserTurtle(Tokenizer tokenizer, String baseIRI, StreamRDF dest) {
+//        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.TURTLE, baseIRI) ;
+//        LangTurtle parser = new LangTurtle(tokenizer, profile, dest) ;
+//        return parser ;
+//    }
+//
+//    /*package*/ static LangTriG createParserTriG(Tokenizer tokenizer, String baseIRI, StreamRDF dest) {
+//        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.TRIG, baseIRI);
+//        LangTriG parser = new LangTriG(tokenizer, profile, dest) ;
+//        return parser ;
+//    }
+//
+//    /*package*/ static LangRDFJSON createParserRdfJson(Tokenizer tokenizer, StreamRDF dest) {
+//        /* XXX */ ParserProfile profile = RiotLib.profile(RDFLanguages.RDFJSON, null);
+//        LangRDFJSON parser = new LangRDFJSON(tokenizer, profile, dest) ;
+//    	return parser;
+//    }
+//
+//    /** Sort out the base URI for RDF/XML parsing. */
+//    private static String baseURI_RDFXML(String baseIRI) {
+//        // LangRIOT derived from LangEngine do this in ParserProfile 
+//        if ( baseIRI == null )
+//            return SysRIOT.chooseBaseIRI() ;
+//        else
+//            // This normalizes the URI.
+//            return SysRIOT.chooseBaseIRI(baseIRI) ;
+//    }
 }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java b/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
index e8e13f5..a9d1f89 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
@@ -18,8 +18,6 @@
 
 package org.apache.jena.riot.resultset;
 
-import static org.apache.jena.riot.WebContent.contentTypeTextCSV;
-
 import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.LangBuilder ;
 import org.apache.jena.riot.RDFLanguages ;
@@ -39,11 +37,14 @@ public class ResultSetLang {
                      .addFileExtensions("srj")
                      .build() ;
     
-    public static final Lang SPARQLResultSetCSV 
-        = LangBuilder.create("SPARQL-Results-CSV", contentTypeTextCSV)
-                     .addAltNames("CSV")   
-                     .addFileExtensions("csv")
-                     .build() ;
+    @SuppressWarnings("deprecation")
+    public static final Lang SPARQLResultSetCSV = Lang.CSV;
+    
+//    public static final Lang SPARQLResultSetCSV 
+//        = LangBuilder.create("SPARQL-Results-CSV", contentTypeTextCSV)
+//                     .addAltNames("CSV")   
+//                     .addFileExtensions("csv")
+//                     .build() ;
     
     public static final Lang SPARQLResultSetTSV
         = LangBuilder.create("SPARQL-Results-TSV", WebContent.contentTypeTextTSV)

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDF.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDF.java b/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDF.java
index a58da54..e6d30b3 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDF.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDF.java
@@ -42,6 +42,9 @@ public interface MakerRDF {
     /** Create an IRI */
     public IRI makeIRI(String uriStr, long line, long col);
 
+    /* Reset the resolver used to process IRIs. */
+    public void setIRIResolver(IRIResolver resolver);
+
     /** Create a triple */
     public Triple createTriple(Node subject, Node predicate, Node object, long line, long col);
 
@@ -74,4 +77,14 @@ public interface MakerRDF {
 
     /** Make any node from a token as appropriate */
     public Node create(Node currentGraph, Token token);
+    
+    /* Return the prefix map, if any, used for mapping tokens into Nodes. */
+    public PrefixMap getPrefixMap();
+    
+    /* XXX Temporary [RDFParser] */
+    public Prologue getPrologue();
+    
+    /* XXX Temporary [RDFParser] */
+    public ErrorHandler getErrorHandler();
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDFStd.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDFStd.java b/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDFStd.java
index d0f0cd3..83c8c03 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDFStd.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/MakerRDFStd.java
@@ -75,16 +75,11 @@ public class MakerRDFStd implements MakerRDF /*To be removed*/, ParserProfile/*
     }
 
     @Deprecated @Override /* ParserProfile - to be removed */
-    public ErrorHandler getHandler() {
-        return getErrorHandler();
-    }
-
-    @Deprecated @Override /* ParserProfile - to be removed */
     public void setHandler(ErrorHandler handler) {
         //Ignore
     }
 
-    // XXX @Override?
+    @Override
     public ErrorHandler getErrorHandler() {
         return errorHandler;
     }
@@ -120,6 +115,11 @@ public class MakerRDFStd implements MakerRDF /*To be removed*/, ParserProfile/*
     }
 
     @Override
+    public void setIRIResolver(IRIResolver resolver) {
+        this.resolver = resolver; 
+    }
+
+    @Override
     public IRI makeIRI(String uriStr, long line, long col) {
         IRI iri = resolver.resolveSilent(uriStr);
         // Some specific problems and specific error messages,.
@@ -267,6 +267,11 @@ public class MakerRDFStd implements MakerRDF /*To be removed*/, ParserProfile/*
         }
     }
 
+    @Override
+    public PrefixMap getPrefixMap() {
+        return prefixMap;
+    }
+
     private String expandPrefixedName(String prefix, String localPart, Token token) {
         String expansion = prefixMap.expand(prefix, localPart);
         if ( expansion == null ) {

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
index a82194d..e8dba6e 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java
@@ -54,9 +54,13 @@ public interface ParserProfile extends MakerRDF
 //    /** Make any node from a token as appropriate */
 //    public Node create(Node currentGraph, Token token) ;
 
-    public ErrorHandler getHandler() ;
+    public default ErrorHandler getHandler() { return getErrorHandler(); }
+    
+    @Override
+    public ErrorHandler getErrorHandler() ;
     public void setHandler(ErrorHandler handler) ;
     
+    @Override
     public Prologue getPrologue() ;
     public void setPrologue(Prologue prologue) ;
     

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
index 1c837c6..a61e1f5 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase.java
@@ -57,7 +57,7 @@ public class ParserProfileBase implements ParserProfile {
     }
 
     @Override
-    public ErrorHandler getHandler() {
+    public ErrorHandler getErrorHandler() {
         return errorHandler ;
     }
 
@@ -80,6 +80,11 @@ public class ParserProfileBase implements ParserProfile {
     public String resolveIRI(String uriStr, long line, long col) {
         return prologue.getResolver().resolveToString(uriStr) ;
     }
+    
+    @Override
+    public void setIRIResolver(IRIResolver resolver) {
+        prologue.setBaseURI(resolver);
+    }
 
     @Override
     public IRI makeIRI(String uriStr, long line, long col) {
@@ -142,6 +147,11 @@ public class ParserProfileBase implements ParserProfile {
         return create(this, currentGraph, token) ;
     }
         
+    @Override
+    public PrefixMap getPrefixMap() {
+        return prologue.getPrefixMap();
+    }
+
     private static Node create(ParserProfile pp, Node currentGraph, Token token) {
         // Dispatches to the underlying ParserProfile operation
         long line = token.getLine() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase2.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase2.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase2.java
new file mode 100644
index 0000000..844ddbd
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfileBase2.java
@@ -0,0 +1,225 @@
+/*
+ * 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.system ;
+
+import java.util.Objects ;
+
+import org.apache.jena.datatypes.RDFDatatype ;
+import org.apache.jena.datatypes.xsd.XSDDatatype ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.NodeFactory ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.iri.IRI ;
+import org.apache.jena.query.ARQ ;
+import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.SysRIOT ;
+import org.apache.jena.riot.tokens.Token ;
+import org.apache.jena.riot.tokens.TokenType ;
+import org.apache.jena.sparql.core.Quad ;
+
+/**
+ * Basic profile of things, with key operations based on a simple use of the
+ * parse elements into Nodes
+ */
+public class ParserProfileBase2 implements ParserProfile {
+    protected ErrorHandler errorHandler ;
+    protected Prologue     prologue ;
+    protected boolean      strictMode = SysRIOT.isStrictMode() ;
+    protected MakerRDF     factory ;
+
+    public ParserProfileBase2(Prologue prologue, ErrorHandler errorHandler, MakerRDF factory) {
+        Objects.requireNonNull(prologue) ;
+        Objects.requireNonNull(errorHandler) ;
+        Objects.requireNonNull(factory) ;
+        this.prologue = prologue ;
+        this.errorHandler = errorHandler ;
+        this.factory = factory ;
+    }
+
+    @Override
+    public ErrorHandler getErrorHandler() {
+        return errorHandler ;
+    }
+
+    @Override
+    public void setHandler(ErrorHandler handler) {
+        errorHandler = handler ;
+    }
+
+    @Override
+    public Prologue getPrologue() {
+        return prologue ;
+    }
+
+    @Override
+    public void setPrologue(Prologue p) {
+        prologue = p ;
+    }
+
+    @Override
+    public String resolveIRI(String uriStr, long line, long col) {
+        return prologue.getResolver().resolveToString(uriStr) ;
+    }
+    
+    @Override
+    public void setIRIResolver(IRIResolver resolver) {
+        prologue.setBaseURI(resolver);
+    }
+
+    @Override
+    public IRI makeIRI(String uriStr, long line, long col) {
+        return prologue.getResolver().resolve(uriStr) ;
+    }
+
+    @Override
+    public Quad createQuad(Node g, Node s, Node p, Node o, long line, long col) {
+        return factory.createQuad(g, s, p, o, line, col);
+    }
+
+    @Override
+    public Triple createTriple(Node s, Node p, Node o, long line, long col) {
+        return factory.createTriple(s, p, o, line, col);
+    }
+
+    @Override
+    public Node createURI(String uriStr, long line, long col) {
+        return factory.createURI(uriStr, line, col);
+    }
+
+    @Override
+    public Node createBlankNode(Node scope, String label, long line, long col) {
+        return factory.createBlankNode(scope, label, line, col);
+    }
+
+    @Override
+    public Node createBlankNode(Node scope, long line, long col) {
+        return factory.createBlankNode(scope, line, col);
+    }
+
+    @Override
+    public Node createTypedLiteral(String lexical, RDFDatatype dt, long line, long col) {
+        return factory.createTypedLiteral(lexical, dt, line, col);
+    }
+
+    @Override
+    public Node createLangLiteral(String lexical, String langTag, long line, long col) {
+        return factory.createLangLiteral(lexical, langTag, line, col);
+    }
+
+    @Override
+    public Node createStringLiteral(String lexical, long line, long col) {
+        return factory.createStringLiteral(lexical, line, col);
+    }
+  
+    /** Special token forms */
+    @Override
+    public Node createNodeFromToken(Node scope, Token token, long line, long col) {
+        // OFF - Don't produce Node.ANY by default.
+        if (false && token.getType() == TokenType.KEYWORD) {
+            if (Token.ImageANY.equals(token.getImage()))
+                return Node.ANY ;
+        }
+        return null ;
+    }
+
+    @Override
+    public Node create(Node currentGraph, Token token) {
+        return create(this, currentGraph, token) ;
+    }
+        
+    @Override
+    public PrefixMap getPrefixMap() {
+        return prologue.getPrefixMap();
+    }
+
+    private static Node create(ParserProfile pp, Node currentGraph, Token token) {
+        // Dispatches to the underlying ParserProfile operation
+        long line = token.getLine() ;
+        long col = token.getColumn() ;
+        String str = token.getImage() ;
+        switch (token.getType()) {
+            case BNODE :
+                return pp.createBlankNode(currentGraph, str, line, col) ;
+            case IRI :
+                return pp.createURI(str, line, col) ;
+            case PREFIXED_NAME : {
+                String prefix = str ;
+                String suffix = token.getImage2() ;
+                String expansion = expandPrefixedName(pp, prefix, suffix, token) ;
+                return pp.createURI(expansion, line, col) ;
+            }
+            case DECIMAL :
+                return pp.createTypedLiteral(str, XSDDatatype.XSDdecimal, line, col) ;
+            case DOUBLE :
+                return pp.createTypedLiteral(str, XSDDatatype.XSDdouble, line, col) ;
+            case INTEGER :
+                return pp.createTypedLiteral(str, XSDDatatype.XSDinteger, line, col) ;
+            case LITERAL_DT : {
+                Token tokenDT = token.getSubToken2() ;
+                String uriStr ;
+
+                switch (tokenDT.getType()) {
+                    case IRI :
+                        uriStr = tokenDT.getImage() ;
+                        break ;
+                    case PREFIXED_NAME : {
+                        String prefix = tokenDT.getImage() ;
+                        String suffix = tokenDT.getImage2() ;
+                        uriStr = expandPrefixedName(pp, prefix, suffix, tokenDT) ;
+                        break ;
+                    }
+                    default :
+                        throw new RiotException("Expected IRI for datatype: " + token) ;
+                }
+
+                uriStr = pp.resolveIRI(uriStr, tokenDT.getLine(), tokenDT.getColumn()) ;
+                RDFDatatype dt = NodeFactory.getType(uriStr) ;
+                return pp.createTypedLiteral(str, dt, line, col) ;
+            }
+
+            case LITERAL_LANG :
+                return pp.createLangLiteral(str, token.getImage2(), line, col) ;
+
+            case STRING :
+                return pp.createStringLiteral(str, line, col) ;
+            default : {
+                Node x = pp.createNodeFromToken(currentGraph, token, line, col) ;
+                if (x != null)
+                    return x ;
+                pp.getHandler().fatal("Not a valid token for an RDF term: " + token, line, col) ;
+                return null ;
+            }
+        }
+    }
+
+    private static String expandPrefixedName(ParserProfile pp, String prefix, String localPart, Token token) {
+        String expansion = pp.getPrologue().getPrefixMap().expand(prefix, localPart) ;
+        if (expansion == null) {
+            if ( ARQ.isTrue(ARQ.fixupUndefinedPrefixes) )
+                return RiotLib.fixupPrefixIRI(prefix, localPart) ;
+            pp.getHandler().fatal("Undefined prefix: " + prefix, token.getLine(), token.getColumn()) ;
+        }
+        return expansion ;
+    }
+
+    @Override
+    public boolean isStrictMode() {
+        return strictMode ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
index 67524e4..75a5fdc 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java
@@ -203,16 +203,21 @@ public class RiotLib
         return factoryRDF(SyntaxLabels.createLabelToNode());
     }
 
-    /** Create an {@link MakerRDF} with default settings. */ 
+    /** Create a {@link MakerRDF} with default settings. */
     public static MakerRDF dftMakerRDF() {
+        return dftMakerRDF(ErrorHandlerFactory.errorHandlerStd);
+    }
+
+    /** Create a {@link MakerRDF} with default settings, and a specific error handler. */
+    public static MakerRDF dftMakerRDF(ErrorHandler errorHandler) {
         return new MakerRDFStd(RiotLib.factoryRDF(), 
-                               ErrorHandlerFactory.errorHandlerStd,
+                               errorHandler,
                                IRIResolver.create(),
                                PrefixMapFactory.createForInput(),
                                RIOT.getContext().copy(),
                                true, false) ;
     }
-
+    
     /** Get triples with the same subject */
     public static Collection<Triple> triplesOfSubject(Graph graph, Node subj) {
         return triples(graph, subj, Node.ANY, Node.ANY) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
index 1b61563..05236f6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/BindingInputStream.java
@@ -96,7 +96,7 @@ public class BindingInputStream extends LangEngine implements Iterator<Binding>,
     
     private BindingInputStream(Tokenizer tokenizer, ParserProfile profile)
     {
-        super(tokenizer, profile) ;
+        super(tokenizer, profile, profile.getHandler()) ;
         iter = new IteratorTuples() ;
     }
 
@@ -244,7 +244,7 @@ public class BindingInputStream extends LangEngine implements Iterator<Binding>,
                 exception(peekToken(), "@prefix requires an IRI (found '"+peekToken()+"')") ;
             String iriStr = peekToken().getImage() ;
             IRI iri = profile.makeIRI(iriStr, currLine, currCol) ;
-            profile.getPrologue().getPrefixMap().add(prefix, iri) ;
+            profile.getPrefixMap().add(prefix, iri) ;
             nextToken() ;
             expect("PREFIX directive not terminated by a dot", DOT) ;
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/test/java/org/apache/jena/riot/ErrorHandlerTestLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/ErrorHandlerTestLib.java b/jena-arq/src/test/java/org/apache/jena/riot/ErrorHandlerTestLib.java
index 9e48127..feca07f 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/ErrorHandlerTestLib.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/ErrorHandlerTestLib.java
@@ -34,6 +34,8 @@ public class ErrorHandlerTestLib
 
     public static class ErrorHandlerEx implements ErrorHandler
     {
+        public ErrorHandlerEx() {}
+        
         @Override
         public void warning(String message, long line, long col)
         { throw new ExWarning(message) ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangCSV.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangCSV.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangCSV.java
index aa34376..1b8c7e4 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangCSV.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangCSV.java
@@ -73,9 +73,10 @@ public class TestLangCSV extends BaseTest {
 		assertIsomorphicWith(s1, s2);
 	}
 	
+    @SuppressWarnings("deprecation")
 	@Test
 	public void RDFDataMgrReadTest() {
-		Model m1 = RDFDataMgr.loadModel(FILE_NAME, RDFLanguages.CSV);
+        Model m1 = RDFDataMgr.loadModel(FILE_NAME, RDFLanguages.CSV);
 		Model m2 = ModelFactory.createDefaultModel();
 		m2.read(FILE_NAME, "CSV");
 		assertEquals(12, m1.size());
@@ -90,6 +91,7 @@ public class TestLangCSV extends BaseTest {
 		return model;
 	}
 	
+    @SuppressWarnings("deprecation")
 	private void assertIsomorphicWith(String[] s1, String[] s2){
 		Model m1 = parseToModel(s1, RDFLanguages.CSV);
 		Model m2 = parseToModel(s2, RDFLanguages.TURTLE);

http://git-wip-us.apache.org/repos/asf/jena/blob/1f90685f/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 5377522..d993ea9 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.CharSpace ;
 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.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.StreamRDFLib ;
-import org.apache.jena.riot.tokens.Tokenizer ;
 import org.apache.jena.sparql.sse.SSE ;
 import org.junit.Test ;
 
@@ -94,21 +90,11 @@ public class TestLangNTriples extends TestLangNTuples
         return ParserTestBaseLib.parseCount(Lang.NTRIPLES, strings) ;
     }
 
-    @Test(expected = RiotException.class)
+    @Test(expected = ExFatal.class)
     public void nt_only_5b() {
         parseCount(CharSpace.ASCII, "<x> <p> \"�\" .");
     }
 
-    private long parseCount(CharSpace charSpace, String... strings) {
-        String string = String.join("\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();
-    }
-
     protected Model parseToModel(String string) {
         StringReader r = new StringReader(string);
         Model model = ModelFactory.createDefaultModel();