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 2020/11/18 13:58:10 UTC

[jena] branch master updated: JENA-1997: Remove old Turtle/N3 writer

This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/master by this push:
     new d65ae5e  JENA-1997: Remove old Turtle/N3 writer
     new 6774bb3  Merge pull request #867 from afs/n3-writer
d65ae5e is described below

commit d65ae5ee8e2cfddd8f007d43fac614568effdf7e
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Nov 15 12:18:28 2020 +0000

    JENA-1997: Remove old Turtle/N3 writer
    
    Remaining Turtle parser supports jena-core tests.
    Rename private TTL parser as org.apache.jena.ttl
    Remove deprecated RDFFactoryF methods - includes changes to ModelCom.
---
 .../jena/riot/adapters/RDFReaderFactoryRIOT.java   |  15 -
 .../jena/riot/adapters/RDFWriterFactoryRIOT.java   |  16 -
 .../jena/riot/lang/extra/TurtleParserBase.java     |   2 +-
 .../apache/jena/riot/system/IO_JenaWriters.java    |   7 -
 .../jena/riot/system/stream/StreamManager.java     |   2 +-
 .../org/apache/jena/sparql/lang/ParserBase.java    |   2 +-
 .../jena/riot/system/TestIO_JenaWriters.java       |   9 +-
 .../java/org/apache/jena/atlas/logging/Log.java    |   3 +-
 .../java/org/apache/jena/n3/N3IndentedWriter.java  |  92 --
 .../main/java/org/apache/jena/n3/N3JenaWriter.java | 169 ----
 .../org/apache/jena/n3/N3JenaWriterCommon.java     | 964 ---------------------
 .../java/org/apache/jena/n3/N3JenaWriterPP.java    | 633 --------------
 .../java/org/apache/jena/n3/N3JenaWriterPlain.java |  29 -
 .../org/apache/jena/n3/N3JenaWriterTriples.java    |  64 --
 .../org/apache/jena/n3/N3TurtleJenaWriter.java     |  40 -
 .../java/org/apache/jena/rdf/model/RDFReaderF.java |  25 -
 .../java/org/apache/jena/rdf/model/RDFWriterF.java |  33 +-
 .../org/apache/jena/rdf/model/impl/ModelCom.java   |  43 -
 .../apache/jena/rdf/model/impl/RDFReaderFImpl.java |  25 +-
 .../apache/jena/rdf/model/impl/RDFWriterFImpl.java |  66 +-
 .../apache/jena/{n3 => ttl}/JenaReaderBase.java    |   2 +-
 .../apache/jena/{n3 => ttl}/JenaURIException.java  |   2 +-
 .../org/apache/jena/{n3 => ttl}/N3IRIResolver.java |   2 +-
 .../jena/{n3 => ttl}/RelativeURIException.java     |   2 +-
 .../java/org/apache/jena/{n3 => ttl}/package.html  |   0
 .../jena/{n3 => ttl}/turtle/LabelToNodeMap.java    |   2 +-
 .../apache/jena/{n3 => ttl}/turtle/ParserBase.java |   6 +-
 .../jena/{n3 => ttl}/turtle/ParserTurtle.java      |   8 +-
 .../jena/{n3 => ttl}/turtle/Turtle2NTriples.java   |   4 +-
 .../jena/{n3 => ttl}/turtle/TurtleEventDump.java   |   2 +-
 .../{n3 => ttl}/turtle/TurtleEventHandler.java     |   2 +-
 .../jena/{n3 => ttl}/turtle/TurtleEventNull.java   |   2 +-
 .../{n3 => ttl}/turtle/TurtleParseException.java   |   2 +-
 .../{n3 => ttl}/turtle/TurtleRDFGraphInserter.java |   2 +-
 .../jena/{n3 => ttl}/turtle/TurtleReader.java      |   4 +-
 .../{n3 => ttl}/turtle/parser/JavaCharStream.java  |   2 +-
 .../{n3 => ttl}/turtle/parser/ParseException.java  |   2 +-
 .../jena/{n3 => ttl}/turtle/parser/Token.java      |   2 +-
 .../{n3 => ttl}/turtle/parser/TokenMgrError.java   |   2 +-
 .../{n3 => ttl}/turtle/parser/TurtleParser.java    |   4 +-
 .../turtle/parser/TurtleParserConstants.java       |   2 +-
 .../turtle/parser/TurtleParserTokenManager.java    |   2 +-
 .../org/apache/jena/n3/N3ExternalTestsCom.java     |  99 ---
 .../java/org/apache/jena/n3/N3JenaWriterTests.java | 117 ---
 .../test/java/org/apache/jena/n3/N3TestSuite.java  |  40 -
 .../apache/jena/rdf/model/test/TestModelRead.java  |   2 +-
 .../jena/rdf/model/test/TestRDFWriterMap.java      |  16 +-
 .../java/org/apache/jena/test/TestPackage.java     |   3 +-
 .../TestN3IRIResolver.java}                        |   6 +-
 .../org/apache/jena/{n3 => ttl}/TupleItem.java     |   2 +-
 .../java/org/apache/jena/{n3 => ttl}/TupleSet.java |   2 +-
 .../jena/{n3 => ttl}/turtle/TestBadSyntax.java     |   2 +-
 .../apache/jena/{n3 => ttl}/turtle/TestSyntax.java |   2 +-
 .../apache/jena/{n3 => ttl}/turtle/TestTurtle.java |   2 +-
 .../jena/{n3 => ttl}/turtle/TestTurtleReader.java  |   2 +-
 .../{n3 => ttl}/turtle/TurtleInternalTests.java    |   4 +-
 .../jena/{n3 => ttl}/turtle/TurtleTestFactory.java |   2 +-
 .../jena/{n3 => ttl}/turtle/TurtleTestSuite.java   |   2 +-
 .../jena/{n3 => ttl}/turtle/TurtleTestVocab.java   |   2 +-
 .../org/apache/jena/util/junit/ManifestOld.java    |   2 +-
 .../jena/permissions/model/SecuredModel.java       |  22 -
 .../permissions/model/impl/SecuredModelImpl.java   |  40 -
 62 files changed, 68 insertions(+), 2598 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderFactoryRIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderFactoryRIOT.java
index b49ee9c..2c1e24b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderFactoryRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFReaderFactoryRIOT.java
@@ -36,19 +36,4 @@ public class RDFReaderFactoryRIOT implements RDFReaderF {
         // For RIOT, the language name is a hint.
         return new RDFReaderRIOT(langname);
     }
-
-    @Override
-    public String setReaderClassName(String lang, String className) {
-        return null;
-    }
-
-    @Override
-    public void resetRDFReaderF() {
-        // does nothing as the reader can not be modified.
-    }
-
-    @Override
-    public String removeReader(String lang) throws IllegalArgumentException {
-        return null;
-    }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFWriterFactoryRIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFWriterFactoryRIOT.java
index 7d6a730..2b66a03 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFWriterFactoryRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/adapters/RDFWriterFactoryRIOT.java
@@ -34,20 +34,4 @@ public class RDFWriterFactoryRIOT implements RDFWriterF {
     public RDFWriter getWriter(String langname) {
         return new RDFWriterRIOT(langname);
     }
-
-    @Override
-    public String setWriterClassName(String lang, String className) {
-        return null;
-    }
-
-    @Override
-    public void resetRDFWriterF() {
-        // does nothing as the reader can not be modified.
-
-    }
-
-    @Override
-    public String removeWriter(String lang) {
-        return null;
-    }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/TurtleParserBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/TurtleParserBase.java
index f7a7705..2588a84 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/TurtleParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/TurtleParserBase.java
@@ -25,7 +25,6 @@ import org.apache.jena.graph.Triple;
 import org.apache.jena.iri.IRI;
 import org.apache.jena.iri.IRIFactory;
 import org.apache.jena.iri.ViolationCodes;
-import org.apache.jena.n3.JenaURIException;
 import org.apache.jena.riot.RiotException;
 import org.apache.jena.riot.RiotParseException;
 import org.apache.jena.riot.system.IRIResolver;
@@ -34,6 +33,7 @@ import org.apache.jena.riot.system.StreamRDF;
 import org.apache.jena.sparql.core.Prologue;
 import org.apache.jena.sparql.graph.NodeConst;
 import org.apache.jena.sparql.lang.ParserBase;
+import org.apache.jena.ttl.JenaURIException;
 import org.apache.jena.vocabulary.RDF;
 
 @SuppressWarnings("hiding")
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/IO_JenaWriters.java b/jena-arq/src/main/java/org/apache/jena/riot/system/IO_JenaWriters.java
index e8e287f..937dda4 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/IO_JenaWriters.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/IO_JenaWriters.java
@@ -39,12 +39,5 @@ public class IO_JenaWriters
         isWiredIn = false ;
         RDFWriterFImpl.alternative(null);
     }
-
-    /** Register for use with Model.write  (old style compatibility) */
-    @Deprecated
-    public static void registerForModelWrite(String name, Class<?> cls)
-    {
-        RDFWriterFImpl.setBaseWriterClassName(name, cls.getName()) ;
-    }
 }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java
index ff6aa4e..8adb72d 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/stream/StreamManager.java
@@ -60,7 +60,7 @@ public class StreamManager {
         return streamManager ;
     }
 
-    /** @deprecate Use {@link #createStd()} */
+    /** @deprecated Use {@link #createStd()} */
     @Deprecated
     public static StreamManager makeDefaultStreamManager() { return createStd() ; }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
index c03e4f8..e3892ad 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserBase.java
@@ -32,7 +32,6 @@ 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.n3.JenaURIException ;
 import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.QueryParseException ;
 import org.apache.jena.riot.checker.CheckerIRI ;
@@ -52,6 +51,7 @@ import org.apache.jena.sparql.path.Path ;
 import org.apache.jena.sparql.syntax.* ;
 import org.apache.jena.sparql.util.ExprUtils ;
 import org.apache.jena.sparql.util.LabelToNodeMap ;
+import org.apache.jena.ttl.JenaURIException;
 import org.apache.jena.vocabulary.RDF ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/system/TestIO_JenaWriters.java b/jena-arq/src/test/java/org/apache/jena/riot/system/TestIO_JenaWriters.java
index fde180a..7656ce7 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/system/TestIO_JenaWriters.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/system/TestIO_JenaWriters.java
@@ -69,10 +69,11 @@ public class TestIO_JenaWriters {
         assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("N-Triples").getClass());
         assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("N-TRIPLE").getClass());
 
-        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("N3").getClass());
-        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("TURTLE").getClass());
-        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("Turtle").getClass());
-        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("TTL").getClass());
+        //N3 , Turtle in jena-core removed.
+//        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("N3").getClass());
+//        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("TURTLE").getClass());
+//        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("Turtle").getClass());
+//        assertNotEquals(RDFWriterRIOT.class, writerF.getWriter("TTL").getClass());
 
         try { writerF.getWriter("NT"); fail("Exception expected") ; } catch (NoWriterForLangException ex) {}
         try { writerF.getWriter("RDF/JSON") ; fail("Exception expected") ; } catch (NoWriterForLangException ex) {}
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/logging/Log.java b/jena-base/src/main/java/org/apache/jena/atlas/logging/Log.java
index c89749c..2453e5b 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/logging/Log.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/logging/Log.java
@@ -28,7 +28,8 @@ import org.slf4j.LoggerFactory ;
  * operations find/create the logger by name, or by the class of some object, or an
  * org.slf4j.Logger object.
  * 
- * @See FmtLog
+ * @see LogCtl
+ * @see FmtLog
  */
 public class Log {
     private Log() {}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3IndentedWriter.java b/jena-core/src/main/java/org/apache/jena/n3/N3IndentedWriter.java
deleted file mode 100644
index bbbf28e..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3IndentedWriter.java
+++ /dev/null
@@ -1,92 +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.n3;
-
-import java.io.* ;
-
-import org.apache.jena.JenaRuntime ;
-import org.apache.jena.shared.JenaException ;
-
-/** Simple class that provides output with moving left margin.
- *  Does not cope with tabs or newlines in output strings.
- */
-
-// Not robust/complete enough for public use
-public class N3IndentedWriter
-{
-	String lineSeparator = JenaRuntime.getLineSeparator() ;
-	
-	Writer writer ;
-	int column ;
-	int row ;
-	int currentIndent ;
-	
-	public N3IndentedWriter(Writer w)
-	{
-		writer = w ;
-		column = 0 ; 
-		row = 0 ;
-		currentIndent = 0 ;
-	}
-
-    public Writer getWriter() { return writer ; }
-
-	public int getRow() { return row ; }
-	public int getCol() { return column ; }
-	public int getIndent() { return currentIndent ; }
-	
-	public void incIndent(int x) { currentIndent += x ; }
-	public void decIndent(int x) { currentIndent -= x ; }
-	public void setIndent(int x) { currentIndent = x ; }
-	
-	public void print(String s)
-	{
-		try { writer.write(s); column += s.length() ; }
-		catch (java.io.IOException ex) { throw new JenaException(ex) ; }
-	}
-
-	public void println(String s)
-	{
-		try { writer.write(s);	println() ; }
-		catch (java.io.IOException ex) { throw new JenaException(ex) ; }
-	}
-	
-	public void println()
-	{
-		try {
-			writer.write(lineSeparator); 
-			writer.flush() ;
-			column = 0 ;
-			row++ ; 
-			padTo() ;
-		}
-		catch (java.io.IOException ex) { throw new JenaException(ex) ; }
-	}
-	
-	public void padTo() throws IOException
-	{
-		for ( int i = 0 ; i < currentIndent ; i++ )
-			writer.write(' ') ;
-		column = column + currentIndent ;
-	}
-	
-	public void flush() { try { writer.flush() ; } catch (IOException ioEx) { throw new JenaException(ioEx) ; } }
-	public void close() { try { writer.close() ; } catch (IOException ioEx) { throw new JenaException(ioEx) ; } }
-
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriter.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriter.java
deleted file mode 100644
index b61d4b8..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriter.java
+++ /dev/null
@@ -1,169 +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.
- */
-
-// To do:
-//   Better detection of illegal characters in qnames (? and = for example) 
-
-package org.apache.jena.n3;
-
-//import org.apache.commons.logging.*;
-import java.io.OutputStream;
-import java.io.Writer;
-
-import org.apache.jena.JenaRuntime ;
-import org.apache.jena.rdf.model.* ;
-
-/** Entry point for N3 writers.  This writer will choose the actual writer
- *  to use by looking at the system property
- *  <code>org.apache.jena.n3.N3JenaWriter.writer</code> to get the
- *  writer name.
- *  <p>
- *  The following N3 writers are provided:
- *  <ul>
- *  <li>N3-PP: Pretty Printer (the default)</li>
- *  <li>N3-PLAIN: Plain, record/frame-oriented format</li> 
- *  <li>N3-TRIPLES: Triples, with prefixes.</li>
- *  </ul>
- *  </p>
- */
-
-
-
-public class N3JenaWriter implements RDFWriter
-{
-    //static Logger logger = LoggerFactory.getLogger(N3JenaWriter.class) ;
-    static public boolean DEBUG = false ;
-    
-    // Note: properties are URIs, not java convention package/class names.
-    static protected final String propBase = "http://jena.hpl.hp.com/n3/properties/" ;
-    
-    /** System property name that sets the default N3 writer name */   
-    static public final String propWriterName = propBase+"writer" ;
-
-    /**
-     * General name for the N3 writer.  Will make a decision on exactly which
-     * writer to use (pretty writer, plain writer or simple writer) when created.
-     * Default is the pretty writer but can be overridden with system property
-     * <code>org.apache.jena.n3.N3JenaWriter.writer</code>.  
-     */
-     
-    static public final String n3Writer              = "N3" ;
-
-    /**
-     * Turtle writer.
-     */
-    static public final String turtleWriter          = "TURTLE" ;
-    static public final String turtleWriterAlt1      = "Turtle" ;
-    static public final String turtleWriterAlt2      = "TTL" ;
-    
-    protected N3JenaWriterCommon writer = null ;
-    
-    public N3JenaWriter() { writer = chooseWriter() ; }
-    public N3JenaWriter(N3JenaWriterCommon w) { writer = w ;}
-    
-    N3JenaWriterCommon chooseWriter()
-    {
-        // Choose the writer
-        String writerName = JenaRuntime.getSystemProperty(propWriterName) ;
-        if ( writerName == null )
-            return new N3JenaWriterPP() ;
-        if ( writerName.equals("N3") )
-            return new N3JenaWriterPP() ;
-        
-//        if ( writerName.equals(n3WriterPrettyPrinter) )
-//            return new N3JenaWriterPP() ;
-//        
-//        if ( writerName.equalsIgnoreCase(n3WriterPlain) )
-//            return new N3JenaWriterCommon() ;
-//        
-//        if ( writerName.equalsIgnoreCase(n3WriterTriples) ||
-//             writerName.equalsIgnoreCase(n3WriterTriplesAlt) )
-//            return new N3JenaWriterTriples() ;
-            
-        if ( writerName.equalsIgnoreCase(turtleWriter) )
-        {
-            N3JenaWriterPP w = new N3JenaWriterPP() ;
-            w.useWellKnownPropertySymbols = false ;
-            return w ;
-        }
-        
-        // Don't know or default.
-        return new N3JenaWriterPP() ;
-    }
-    
-    
-    /** Write the model out in N3, encoded in in UTF-8
-     * @see #write(Model,Writer,String)
-     */
-
-    @Override
-    public void write(Model model, Writer out, String base) 
-    {
-        writer.write(model, out, base) ;
-    }
-
-    /** Write the model out in N3.  The writer should be one suitable for UTF-8 which
-    * excludes a PrintWriter or a FileWriter which use default character set.
-    *
-    * Examples:
-    * <pre>
-    * try {
-    *      Writer w =  new BufferedWriter(new OutputStreamWriter(output, "UTF-8")) ;
-    *      model.write(w, base) ;
-    *      try { w.flush() ; } catch (IOException ioEx) {...}
-    *  } catch (java.io.UnsupportedEncodingException ex) {} //UTF-8 is required so can't happen
-    * </pre>
-    * or
-    * <pre>
-    * try {
-    *     OutputStream out = new FileOutputStream(file) ;
-    *     Writer w =  new BufferedWriter(new OutputStreamWriter(out, "UTF-8")) ;
-    *     model.write(w, base) ;
-    * }
-    * catch (java.io.UnsupportedEncodingException ex) {}
-    * catch (java.io.FileNotFoundException noFileEx) { ... }
-    * </pre>
-    * @see #write(Model,Writer,String)
-    */
-
-    @Override
-    public void write(Model model, OutputStream out, String base) 
-    {
-        writer.write(model, out, base) ;
-   }
-
-
-    /**
-     * @see org.apache.jena.rdf.model.RDFWriter#setProperty(java.lang.String, java.lang.Object)
-     */
-    @Override
-    public Object setProperty(String propName, Object propValue) 
-    {
-        return writer.setProperty(propName, propValue) ;
-    }
-
-    /**
-     * @see org.apache.jena.rdf.model.RDFWriter#setErrorHandler(org.apache.jena.rdf.model.RDFErrorHandler)
-     */
-    @Override
-    public RDFErrorHandler setErrorHandler(RDFErrorHandler errHandler)
-    {
-        return writer.setErrorHandler(errHandler) ;
-    }
-   
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java
deleted file mode 100644
index 9806fe1..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java
+++ /dev/null
@@ -1,964 +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.n3;
-
-import java.io.*;
-import java.math.BigDecimal;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.charset.StandardCharsets;
-import java.text.CharacterIterator;
-import java.text.StringCharacterIterator;
-import java.util.*;
-import java.util.Map.Entry;
-
-import org.apache.jena.JenaRuntime ;
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.rdf.model.impl.Util ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.util.iterator.ClosableIterator ;
-import org.apache.jena.util.iterator.WrappedIterator ;
-import org.apache.jena.vocabulary.OWL ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.XSD ;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/** Common framework for implementing N3 writers.
- */
-
-public class N3JenaWriterCommon implements RDFWriter
-{
-    static Logger logger = LoggerFactory.getLogger(N3JenaWriterCommon.class) ;
-    
-	// N3 writing proceeds in 2 stages.
-    // First, it analysis the model to be written to extract information
-    // that is going to be specially formatted (RDF lists, one ref anon nodes)
-    // Second do the writing walk.
-    
-    // The simple N3 writer does nothing during preparation.
-    
-    protected Map<String, Object> writerPropertyMap = null ;
-
-// BaseURI - <#>    
-//    final boolean doAbbreviatedBaseURIref = getBooleanValue("abbrevBaseURI", true) ; 
-    protected boolean alwaysAllocateBNodeLabel = false ;
-    
-    // Common variables
-    protected RDFErrorHandler errorHandler = null;
-
-    protected Map<String, String> prefixMap 	   	= new HashMap<>() ;	// Prefixes to actually use
-    protected Map<String, String> reversePrefixMap  = new HashMap<>() ;   // URI->prefix
-	protected Map<Resource, String>	bNodesMap       = null ;		    // BNodes seen.
-	protected int bNodeCounter    = 0 ;
-
-    // Specific properties that have a short form.
-	// Not Turtle.
-    protected static final String NS_W3_log = "http://www.w3.org/2000/10/swap/log#" ;
-    
-	protected static Map<String, String> wellKnownPropsMapN3 = new HashMap<>() ;
-	static {
-	    wellKnownPropsMapN3.put(NS_W3_log+"implies",		"=>" ) ;
-	    wellKnownPropsMapN3.put(OWL.sameAs.getURI(),	    "="  ) ;
-	    wellKnownPropsMapN3.put(RDF.type.getURI(),		"a"  ) ;
-	}
-
-    protected static Map<String, String> wellKnownPropsMapTurtle = new HashMap<>() ;
-    static {
-        //wellKnownPropsMapTurtle.put(OWL.sameAs.getURI(),      "="  ) ;
-        wellKnownPropsMapTurtle.put(RDF.type.getURI(),        "a"  ) ;
-    }
-
-    protected Map<String, String> wellKnownPropsMap = wellKnownPropsMapN3 ;
-    
-	// Work variables controlling the output
-	protected N3IndentedWriter out = null ;
-	//Removed base URI specials - look for  "// BaseURI - <#>" & doAbbreviatedBaseURIref
-	//String baseURIref = null ;
-    //String baseURIrefHash = null ;
-
-    // Min spacing of items    
-	protected int minGap = getIntValue("minGap", 1) ;
-	protected String minGapStr = pad(minGap) ;
-
-    // Gap from subject to property
-	protected int indentProperty = getIntValue("indentProperty", 6) ;
-    
-    // Width of property before wrapping.
-    // This is not necessarily a control of total width
-    // e.g. the pretty writer may be writing properties inside indented one ref bNodes 
-	protected int widePropertyLen = getIntValue("widePropertyLen", 20) ;
-    
-    // Column for property when an object follows a property on the same line
-	protected int propertyCol = getIntValue("propertyColumn", 8) ;
-    
-    // Minimum gap from property to object when object on a new line.
-    protected int indentObject = propertyCol ;
-    
-    // If a subject is shorter than this, the first property may go on same line.
-    protected int subjectColumn = getIntValue("subjectColumn", indentProperty) ; 
-    // Require shortSubject < subjectCol (strict less than)
-    protected int shortSubject = subjectColumn-minGap;
-    
-    protected boolean useWellKnownPropertySymbols = getBooleanValue("usePropertySymbols", true) ;
-    
-    protected boolean allowTripleQuotedStrings = getBooleanValue("useTripleQuotedStrings", true) ;
-    protected boolean allowDoubles   = getBooleanValue("useDoubles", true) ;
-    protected boolean allowDecimals  = getBooleanValue("useDecimals", true) ;
-    
-    // ----------------------------------------------------
-    // Jena RDFWriter interface
-
-	@Override
-    public RDFErrorHandler setErrorHandler(RDFErrorHandler errHandler)
-	{
-		RDFErrorHandler old = errorHandler;
-		errorHandler = errHandler;
-		return old;
-	}
-
-    @Override
-    public Object setProperty(String propName, Object propValue) 
-    {
-        if ( ! ( propValue instanceof String ) )
-        {
-            logger.warn("N3.setProperty: Property for '"+propName+"' is not a string") ;
-            propValue = propValue.toString() ;
-        }
-        
-        // Store absolute name of property 
-        propName = absolutePropName(propName) ;
-        if ( writerPropertyMap == null )
-            writerPropertyMap = new HashMap<>() ;
-        Object oldValue = writerPropertyMap.get(propName);
-        writerPropertyMap.put(propName, propValue);
-        return oldValue;
-   }
-
-    /** Write the model out in N3.  The writer should be one suitable for UTF-8 which
-    * excludes a PrintWriter or a FileWriter which use default character set.
-    *
-    * Examples:
-    * <pre>
-    * try {
-    *      Writer w =  new BufferedWriter(new OutputStreamWriter(output, "UTF-8")) ;
-    *      model.write(w, base) ;
-    *      try { w.flush() ; } catch (IOException ioEx) {...}
-    *  } catch (java.io.UnsupportedEncodingException ex) {} //UTF-8 is required so can't happen
-    * </pre>
-    * or
-    * <pre>
-    * try {
-    *     OutputStream out = new FileOutputStream(file) ;
-    *     Writer w =  new BufferedWriter(new OutputStreamWriter(out, "UTF-8")) ;
-    *     model.write(w, base) ;
-    * }
-    * catch (java.io.UnsupportedEncodingException ex) {}
-    * catch (java.io.FileNotFoundException noFileEx) { ... }
-    * </pre>
-    * @see #write(Model,Writer,String)
-    */
-
-    @Override
-    public void write(Model baseModel, Writer _out, String base) 
-    {
-        if (!(_out instanceof BufferedWriter))
-            _out = new BufferedWriter(_out);
-        out = new N3IndentedWriter(_out);
-
-// BaseURI - <#>        
-//        if ( base != null )
-//        {
-//            baseURIref = base ;
-//            if ( !base.endsWith("#") &&! isOpaque(base) )
-//                baseURIrefHash = baseURIref+"#" ;
-//        }
-        
-        processModel(baseModel) ;
-    }
-    
-	/** Write the model out in N3, encoded in in UTF-8
-	 * @see #write(Model,Writer,String)
-	 */
-
-	@Override
-    public synchronized void write(Model model, OutputStream output, String base) 
-	{
-	    Writer w =  new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8)) ;
-	    write(model, w, base) ;
-	    try { w.flush() ; } catch (IOException ioEx) { throw new JenaException(ioEx) ; }
-	}
-
-    // ----------------------------------------------------
-    // The assumed processing model is:
-    // Writing N3 involves ordering the graph into:
-    // -- Subjects
-    // -- Property lists within subjects
-    // -- Object lists with in properties
-    
-    //  A derived class may choose to intercept and implement at any of these levels. 
-     
-    // Standard layout is:
-    // subject
-    //    property1 value1 ;
-    //    property2 value2 ;
-    //    property3 value3 .
-    
-    // Normal hook points for subclasses.
-
-    protected void startWriting() {}
-    protected void finishWriting() {}
-    protected void prepare(Model model) {}
-    
-    protected void processModel(Model model)
-    {
-        prefixMap = model.getNsPrefixMap() ;
-        bNodesMap = new HashMap<>() ;
-
-        for ( Iterator<Entry<String, String>> iter = prefixMap.entrySet().iterator() ; iter.hasNext() ; )
-        {
-            Entry<String, String> e = iter.next() ;
-            String prefix = e.getKey() ;
-            String uri = e.getValue(); 
-            
-            // XML namespaces name can include '.'
-            // Turtle prefixed names can't.
-            if ( ! checkPrefixPart(prefix) ) 
-                iter.remove() ;
-            else
-            {
-                if ( checkPrefixPart(prefix) )
-                    // Build acceptable reverse mapping  
-                    reversePrefixMap.put(uri, prefix) ;
-            }
-        }
-        
-        startWriting() ;
-        prepare(model) ;
-
-        writeHeader(model) ;
-        writePrefixes(model) ;
-        
-        if (prefixMap.size() != 0)
-            out.println();
-
-        // Do the output.
-        writeModel(model) ;
-
-        // Release intermediate memory - allows reuse of a writer
-        finishWriting() ;
-        bNodesMap = null ;
-    }
-
-    protected void writeModel(Model model)
-    {
-       // Needed only for no prefixes, no blank first line. 
-        boolean doingFirst = true;
-        ResIterator rIter = listSubjects(model);
-        for (; rIter.hasNext();)
-        {
-            // Subject:
-            // First - it is something we will write out as a structure in an object field?
-            // That is, a RDF list or the object of exactly one statement.
-            Resource subject = rIter.nextResource();
-            if ( skipThisSubject(subject) )
-            {
-                if (N3JenaWriter.DEBUG)
-                    out.println("# Skipping: " + formatResource(subject));
-                continue;
-            }
-
-            // We really are going to print something via writeTriples
-            if (doingFirst)
-                doingFirst = false;
-            else
-                out.println();
-
-            writeOneGraphNode(subject) ;
-            
-            
-        }
-        rIter.close();
-    } 
-    
-    protected ResIterator listSubjects(Model model) { return model.listSubjects(); }
-
-    protected void writeOneGraphNode(Resource subject)
-    {
-        // New top level item.
-        // Does not take effect until newline.
-        out.incIndent(indentProperty) ;
-        writeSubject(subject);
-        ClosableIterator<Property> iter = preparePropertiesForSubject(subject);
-        writePropertiesForSubject(subject, iter) ;
-        out.decIndent(indentProperty) ; 
-        out.println(" .");
-    }
-
-    protected void writePropertiesForSubject(Resource subj, ClosableIterator<Property> iter)
-    {
-        // For each property.
-        for (; iter.hasNext();)
-        {
-            Property property = iter.next();
-
-            // Object list
-            writeObjectList(subj, property);
-
-            if (iter.hasNext())
-                out.println(" ;");
-        }
-        iter.close();
-    }
-
-    // Hook called on every resource.
-    // Since there is spacing bewteen resource frames, need to know
-    // whether an item will cause any output.   
-    protected boolean skipThisSubject(Resource r) { return false ; }
-
-
-    // This is the hook called within writeModel.  
-    // NB May not be at the top level (indent = 0)
-    
-    protected void writeSubject(Resource subject)
-    {
-        String subjStr = formatResource(subject);
-        out.print(subjStr);
-        // May be very short : if so, stay on this line.
-        
-        // Currently at end of subject.
-        // NB shortSubject is (subjectColumn-minGap) so there is a gap.
-
-        if (subjStr.length() < shortSubject )
-        {
-            out.print(pad(subjectColumn - subjStr.length()) );
-        }
-        else
-            // Does not fit this line.
-            out.println();
-    }
-    
-    protected void writeHeader(Model model)
-    {
-// BaseURI - <#>
-//        if (baseURIref != null && !baseURIref.equals("") )
-//            out.println("# Base: " + baseURIref);
-    }
-    
-    protected N3IndentedWriter getOutput() { return out ; }
-    protected Map<String, String> getPrefixes() { return prefixMap ; }
-    
-    protected void writePrefixes(Model model)
-    {
-        for ( Entry<String, String> entry : prefixMap.entrySet() )
-        {
-            String u = entry.getValue();
-            String p = entry.getKey();            
-
-// BaseURI - <#>            
-//            // Special cases: N3 handling of base names.
-//            if (doAbbreviatedBaseURIref && p.equals(""))
-//            {
-//                if (baseURIrefHash != null && u.equals(baseURIrefHash))
-//                    u = "#";
-//                if (baseURIref != null && u.equals(baseURIref))
-//                    u = "";
-//            }
-
-            String tmp = "@prefix " + p + ": ";
-            out.print( tmp );
-            out.print( pad( 16 - tmp.length() ) );
-            // NB Starts with a space to ensure a gap.
-            out.println( " <" + u + "> ." );
-        }
-
-    }
-    
-    protected void writeObjectList(Resource subject, Property property)
-    {
-        String propStr = formatProperty(property) ;
-
-//        if (wellKnownPropsMap.containsKey(property.getURI()))
-//            propStr = (String) wellKnownPropsMap.get(property.getURI());
-//        else
-//            propStr = formatResource(property);
-
-        // Write with object lists as clusters of statements with the same property
-        // Looks more like a machine did it but fewer bad cases.
-
-        StmtIterator sIter = subject.listProperties(property);
-        for (; sIter.hasNext();)
-        {
-            Statement stmt = sIter.nextStatement() ;
-            String objStr = formatNode(stmt.getObject()) ;
-            
-            out.print(propStr);
-            out.incIndent(indentObject);
-
-            if ( (propStr.length()+minGap) <= widePropertyLen )
-            {
-                // Property col allows for min gap but widePropertyLen > propertyCol 
-                // (which looses alignment - this is intentional.
-                // Ensure there is at least min gap.
-                
-                int padding = calcPropertyPadding(propStr) ;
-                out.print(pad(padding)) ;
-                
-//                if ( propStr.length() < propertyWidth ) 
-//                    out.print( pad(propertyCol-minGap-propStr.length()) ) ;
-//                out.print(minGapStr) ;
-            }
-            else
-                // Does not fit this line.
-                out.println();
-
-            // Write one object - simple writing.
-            
-            out.print(objStr) ;
-            out.decIndent(indentObject);
-
-            if ( sIter.hasNext() )
-            {
-                out.println(" ;") ;
-            }
-        }
-        sIter.close() ;
-
-    }
-
-    protected String formatNode(RDFNode node)
-    {
-        if (node instanceof Literal)
-            return formatLiteral((Literal) node);
-        else
-            return formatResource((Resource)node) ;
-    }
-
-    protected void writeObject(RDFNode node)
-    {
-        if (node instanceof Literal)
-        {
-            writeLiteral((Literal) node);
-            return;
-        }
-
-        Resource rObj = (Resource) node;
-
-        out.print(formatResource(rObj));
-    }
-    
-    protected void writeLiteral(Literal literal) 
-    {
-        out.print(formatLiteral(literal)) ;
-    }
-    
-    protected ClosableIterator<Property> preparePropertiesForSubject(Resource r)
-    {
-        // Properties to do.
-        Set<Property> properties = new HashSet<>() ;
-
-        StmtIterator sIter = r.listProperties();
-        for ( ; sIter.hasNext() ; )
-            properties.add(sIter.nextStatement().getPredicate()) ;
-        sIter.close() ;
-        return WrappedIterator.create(properties.iterator()) ;
-    }
-    
-    
-    // Utility operations
-    protected String formatResource(Resource r)
-	{
-		if ( r.isAnon() )
-		{
-            if ( ! alwaysAllocateBNodeLabel )
-            {
-                // Does anything point to it?
-                StmtIterator sIter = r.getModel().listStatements(null, null, r) ;
-    
-                if ( ! sIter.hasNext() )
-                {
-                    sIter.close() ;
-                    // This bNode is not referenced so don't need the bNode Id.
-                    // Must be a subject - indent better be zero!
-                    // This only happens for subjects because object bNodes
-                    // referred to once (the other case for [] syntax)
-                    // are handled elsewhere (by oneRef set)
-    
-                    // Later: use [ prop value ] for this.
-                    return "[]" ;
-                }
-                sIter.close() ;
-            }
-			if ( ! bNodesMap.containsKey(r) )
-				bNodesMap.put(r, "_:b"+(++bNodeCounter)) ;
-			return bNodesMap.get(r) ;
-
-		}
-
-		// It has a URI.
-        
-		if ( r.equals(RDF.nil) )
-			return "()" ;
-
-        return formatURI(r.getURI()) ;
-    }
-
-    protected String formatLiteral(Literal literal)
-    {
-        String datatype = literal.getDatatypeURI() ;
-        String lang = literal.getLanguage() ;
-    	String s = literal.getLexicalForm() ;
-    
-        if ( datatype != null )
-        {
-            // Special form we know how to handle?
-            // Assume valid text
-            if ( datatype.equals(XSD.integer.getURI()) )
-            {
-                try {
-                    new java.math.BigInteger(s) ;
-                    return s ;
-                } catch (NumberFormatException nfe) {}
-                // No luck.  Continue.
-                // Continuing is always safe.
-            }
-                
-            if ( datatype.equals(XSD.decimal.getURI()) )
-            {
-                // Must have ., can't have e or E
-                if ( s.indexOf('.') >= 0 &&
-                     s.indexOf('e') == -1 && s.indexOf('E') == -1 )
-                {
-                    // Turtle - N3 does not allow .3 +.3 or -.3
-                    // See if parsable.
-                    try {
-                        new BigDecimal(s);
-                        return s ;
-                    } catch (NumberFormatException nfe) {}
-                }
-            }
-            
-            if ( this.allowDoubles && datatype.equals(XSD.xdouble.getURI()) )
-            {
-                // Must have 'e' or 'E' (N3 and Turtle now read 2.3 as a decimal).
-                if ( s.indexOf('e') >= 0 ||
-                     s.indexOf('E') >= 0 )
-                {
-                    try {
-                        // Validate it.
-                        Double.parseDouble(s) ;
-                        return s ;
-                    } catch (NumberFormatException nfe) {}
-                    // No luck.  Continue.
-                }
-            }
-        }
-        // Format the text - with escaping.
-        StringBuffer sbuff = new StringBuffer() ;
-        boolean singleQuoteLiteral = true ;
-        
-        String quoteMarks = "\"" ;
-        
-        // Things that force the use of """ strings
-        if ( this.allowTripleQuotedStrings &&
-             ( s.indexOf("\n") != -1 ||
-               s.indexOf("\r") != -1 ||
-               s.indexOf("\f") != -1 ) )
-        {
-            quoteMarks = "\"\"\"" ;
-            singleQuoteLiteral = false ;
-        }
-        
-        sbuff.append(quoteMarks);
-        string(sbuff, s, singleQuoteLiteral) ;
-        sbuff.append(quoteMarks);
-    
-        if ( Util.isLangString(literal) ) {
-            sbuff.append("@") ;
-            sbuff.append(lang) ;
-        } else if ( ! Util.isSimpleString(literal) ) {
-            sbuff.append("^^") ;
-            sbuff.append(formatURI(datatype)) ;
-        }
-        return sbuff.toString() ;
-    }
-    
-    protected String formatProperty(Property p)
-    {
-        String prop = p.getURI() ;
-        if ( this.useWellKnownPropertySymbols && wellKnownPropsMap.containsKey(prop) )
-            return wellKnownPropsMap.get(prop);
-
-        return formatURI(prop) ;
-    }
-    
-    protected String formatURI(String uriStr)
-    {
-		
-
-// BaseURI - <#>		
-//        if ( doAbbreviatedBaseURIref && uriStr.equals(baseURIref) )
-//            return "<>" ;
-
-		// Try for a prefix and write as prefixed name.
-		// 1/ Try splitting as a prefixed name
-		// 2/ Search for possibilities
-		
-		// Stage 1.
-		int idx = splitIdx(uriStr) ;
-		// Depends on legal URIs.
-		if ( idx >= 0 )
-		{
-		    // Include the # itself.
-		    String x = uriStr.substring(0,idx+1) ;
-		    String prefix = reversePrefixMap.get(x) ;
-		    if ( prefix != null )
-		    {
-		        String localPart = uriStr.substring(idx+1) ;
-		        if ( checkNamePart(localPart) )
-		            return prefix+':'+localPart ;
-		    }
-		}
-		
-		// Unsplit. Could just return here. 
-//		// Find the longest if several.
-//        // Possible optimization: split URI and have URI=> ns: map.
-//        // Ordering prefixes by length, then first hit is better.
-//        // 
-//        // Also: could just assume that the split is on / or #
-//        // Means we need to find a prefix just once. 
-//		for ( Iterator<String> pIter = prefixMap.keySet().iterator() ; pIter.hasNext() ; )
-//		{
-//			String p = pIter.next() ;
-//			String u = prefixMap.get(p) ;
-//			if ( uriStr.startsWith(u) )
-//				if ( matchURI.length() < u.length() )
-//				{
-//					matchPrefix = p ;
-//					matchURI = u ;
-//				}
-//		}
-//		if ( matchPrefix != null )
-//		{
-//			String localname = uriStr.substring(matchURI.length()) ;
-//            
-//            if ( checkPrefixedName(matchPrefix, localname) )
-//                return matchPrefix+":"+localname ;
-//
-//            // Continue and return quoted URIref
-//		}
-
-		// Not as a prefixed name - write as a quoted URIref
-        // It should be right - the writer should be UTF-8 on output.
-		return "<"+uriStr+">" ;
-	}
-
-    protected static int splitIdx(String uriStr)
-    {
-        int idx = uriStr.lastIndexOf('#') ;
-        if ( idx >= 0 )
-            return idx ;
-        // No # - try for /
-        idx = uriStr.lastIndexOf('/') ;
-        return idx ;
-    }
-    
-    // Checks of prefixed names
-    // These tests must agree, or be more restrictive, than the parser. 
-    protected static boolean checkPrefixedName(String ns, String local)
-    {
-        return checkPrefixPart(ns) && checkNamePart(local) ;
-    }
-    
-    /* http://www.w3.org/TeamSubmission/turtle/#sec-grammar-grammar
-     * [27]    qname           ::=     prefixName? ':' name?
-     * [30]    nameStartChar   ::=     [A-Z] | "_" | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-     * [31]    nameChar        ::=     nameStartChar | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
-     * [32]    name            ::=     nameStartChar nameChar*
-     * [33]    prefixName      ::=     ( nameStartChar - '_' ) nameChar*
-     */
-    
-    protected static boolean checkPrefixPart(String s)
-    {
-        if ( s.length() == 0 )
-            return true;
-        CharacterIterator cIter = new StringCharacterIterator(s) ;
-        char ch = cIter.first() ;
-        if ( ! checkNameStartChar(ch) )
-            return false ;
-        if ( ch == '_' )    // Can't start with _ (bnodes labels handled separately) 
-            return false ;
-        return checkNameTail(cIter) ;
-    }
-    
-    protected static boolean checkNamePart(String s)
-    {
-        if ( s.length() == 0 )
-            return true; 
-        CharacterIterator cIter = new StringCharacterIterator(s) ;
-        char ch = cIter.first() ;
-        if ( ! checkNameStartChar(ch) )
-            return false ;
-        return checkNameTail(cIter) ;
-    }
-    
-    private static boolean checkNameTail(CharacterIterator cIter)
-    {
-        // Assumes cIter.first already called but nothing else.
-        // Skip first char.
-        char ch = cIter.next() ;
-        for ( ; ch != java.text.CharacterIterator.DONE ; ch = cIter.next() )
-        {
-            if ( ! checkNameChar(ch) )
-                return false ;
-        } 
-        return true ;
-    }
-
-    protected static boolean checkNameStartChar(char ch)
-    {
-        if ( Character.isLetter(ch) )
-            return true ;
-        if ( ch == '_' )
-            return true ;
-        return false ;
-    }
-
-    protected static boolean checkNameChar(char ch)
-    {
-        if ( Character.isLetterOrDigit(ch) )
-            return true ;
-        if ( ch == '_' )
-            return true ;
-        if ( ch == '-' )
-            return true ;
-        return false ;
-    }
-
-    
-    protected final static String WS = "\n\r\t" ;
-
-	protected static void string(StringBuffer sbuff, String s, boolean singleQuoteLiteral)
-    {
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-
-            // Escape escapes and quotes
-            if (c == '\\' || c == '"' )
-            {
-                sbuff.append('\\') ;
-                sbuff.append(c) ;
-                continue ;
-            }
-            
-            // Characters to literally output.
-            // This would generate 7-bit safe files 
-//            if (c >= 32 && c < 127)
-//            {
-//                sbuff.append(c) ;
-//                continue;
-//            }    
-
-            // Whitespace
-            if ( singleQuoteLiteral && ( c == '\n' || c == '\r' || c == '\f' ) )
-            {
-                if (c == '\n') sbuff.append("\\n");
-                if (c == '\t') sbuff.append("\\t");
-                if (c == '\r') sbuff.append("\\r");
-                if (c == '\f') sbuff.append("\\f");
-                continue ;
-            }
-            
-            // Output as is (subject to UTF-8 encoding on output that is)
-            sbuff.append(c) ;
-            
-//            // Unicode escapes
-//            // c < 32, c >= 127, not whitespace or other specials
-//            String hexstr = Integer.toHexString(c).toUpperCase();
-//            int pad = 4 - hexstr.length();
-//            sbuff.append("\\u");
-//            for (; pad > 0; pad--)
-//                sbuff.append("0");
-//            sbuff.append(hexstr);
-        }
-    }
-    
-    protected int calcPropertyPadding(String propStr)
-    {
-        int padding = propertyCol - propStr.length();
-        if (padding < minGap)
-            padding = minGap;
-        return padding ;
-    }
-     
-	protected static String pad(int cols)
-	{
-		StringBuffer sb = new StringBuffer() ;
-		for ( int i = 0 ; i < cols ; i++ )
-			sb.append(' ') ;
-		return sb.toString() ;
-	}
-
-	// Utilities
-
-    protected int countProperties(Resource r) 
-	{
-		int numProp = 0 ;
-		StmtIterator sIter = r.listProperties() ;
-		for ( ; sIter.hasNext() ; )
-		{
-			sIter.nextStatement() ;
-			numProp++ ;
-		}
-		sIter.close() ;
-		return numProp ;
-	}
-
-    protected int countProperties(Resource r, Property p) 
-	{
-		int numProp = 0 ;
-		StmtIterator sIter = r.listProperties(p) ;
-		for ( ; sIter.hasNext() ; )
-		{
-			sIter.nextStatement() ;
-			numProp++ ;
-		}
-		sIter.close() ;
-		return numProp ;
-	}
-
-
-    protected int countArcsTo(Resource resource) 
-	{
-		return countArcsTo(null, resource) ;
-	}
-
-    protected int countArcsTo(Property prop, Resource resource) 
-	{
-		int numArcs = 0 ;
-		StmtIterator sIter = resource.getModel().listStatements(null, prop, resource) ;
-		for ( ; sIter.hasNext() ; )
-		{
-			sIter.nextStatement() ;
-			numArcs++ ;
-		}
-		sIter.close() ;
-		return numArcs ;
-	}
-
-
-    protected Iterator<RDFNode> rdfListIterator(Resource r)
-	{
-		List<RDFNode> list = new ArrayList<>() ;
-
-		for ( ; ! r.equals(RDF.nil); )
-		{
-			StmtIterator sIter = r.getModel().listStatements(r, RDF.first, (RDFNode)null) ;
-			list.add(sIter.nextStatement().getObject()) ;
-			if ( sIter.hasNext() )
-				// @@ need to cope with this (unusual) case
-				throw new JenaException("N3: Multi valued list item") ;
-			sIter = r.getModel().listStatements(r, RDF.rest, (RDFNode)null) ;
-			r = (Resource)sIter.nextStatement().getObject() ;
-			if ( sIter.hasNext() )
-				throw new JenaException("N3: List has two tails") ;
-		}
-		return list.iterator() ;
-	}
-    
-    // Convenience operations for accessing system properties.
-    
-    protected String getStringValue(String prop, String defaultValue)
-    {
-        String p = getPropValue(prop) ;
-        
-        if ( p == null )
-            return defaultValue ;
-        return p ;
-    }
-     
-    protected boolean getBooleanValue(String prop, boolean defaultValue)
-    {
-        String p = getPropValue(prop) ;
-        
-        if ( p == null )
-            return defaultValue ;
-            
-        if ( p.equalsIgnoreCase("true") )
-            return true ;
-        
-        if ( p.equals("1") )
-            return true ;
-            
-        return false ;
-    }        
-
-    protected int getIntValue(String prop, int defaultValue)
-    {
-        String p = getPropValue(prop) ;
-        if ( p == null )
-            return defaultValue ;
-        try {
-            return Integer.parseInt(p) ;
-        } catch (NumberFormatException ex)
-        {
-            logger.warn("Format error for property: "+prop) ;
-            return defaultValue ;
-        }
-    }
-    
-    // May be the absolute or local form of the property name
-    
-    protected String getPropValue(String prop)
-    {
-        prop = absolutePropName(prop) ;
-        if ( writerPropertyMap != null && writerPropertyMap.containsKey(prop) )
-        {
-            Object obj = writerPropertyMap.get(prop) ;
-            if ( ! ( obj instanceof String ) )
-                logger.warn("getPropValue: N3 Property for '"+prop+"' is not a string") ;
-            return (String)obj ; 
-        }
-        String s = JenaRuntime.getSystemProperty(prop) ;
-        if ( s == null )
-            s = JenaRuntime.getSystemProperty(localPropName(prop)) ;
-        return s ;
-    }
-    
-    protected String absolutePropName(String propName)
-    {
-        if ( propName.indexOf(':') == -1 )
-            return N3JenaWriter.propBase + propName ;
-        return propName ;
-    }
-    
-    protected String localPropName(String propName)
-    {
-        if ( propName.startsWith(N3JenaWriter.propBase) )
-            propName = propName.substring(N3JenaWriter.propBase.length()) ;
-        return propName ;
-    }
-    
-    private boolean isOpaque(String uri)
-    {
-        try {
-            return new URI(uri).isOpaque() ;
-        } catch (URISyntaxException ex) { return true ; }
-    }
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPP.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPP.java
deleted file mode 100644
index b7d9df4..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPP.java
+++ /dev/null
@@ -1,633 +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.n3;
-
-//import org.apache.commons.logging.*;
-import java.util.* ;
-
-import org.apache.jena.rdf.model.* ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.util.iterator.* ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
-
-/** An N3 pretty printer.
- *  Tries to make N3 data look readable - works better on regular data.
- */
-
-
-
-public class N3JenaWriterPP extends N3JenaWriterCommon
-    /*implements RDFWriter*/
-{
-	// This N3 writer proceeds in 2 stages.  First, it analysises the model to be
-	// written to extract information that is going to be specially formatted
-	// (RDF lists, small anon nodes) and to calculate the prefixes that will be used.
-
-    final protected boolean doObjectListsAsLists = getBooleanValue("objectLists", true) ;
-    
-	// Data structures used in controlling the formatting
-
-    protected Set<Resource> rdfLists      	= null ; 		// Heads of lists
-    protected Set<Resource> rdfListsAll   	= null ;		// Any resources in a collection
-    protected Set<Resource> rdfListsDone  	= null ;		// RDF lists written
-    protected Set<RDFNode>  oneRefObjects 	= null ;		// Bnodes referred to once as an object - can inline
-    protected Set<Resource> oneRefDone   	= null ;		// Things done - so we can check for missed items
-
-    // Do we do nested (one reference) nodes?
-    protected boolean allowDeep = true ;
-    
-    static final protected String objectListSep = " , " ;
-    
-    // ----------------------------------------------------
-    // Prepatation stage
-
-	@Override
-    protected void prepare(Model model)
-	{
-		prepareLists(model) ;
-		prepareOneRefBNodes(model) ;
-	}
-
-	// Find well-formed RDF lists - does not find empty lists (this is intentional)
-	// Works by finding all tails, and work backwards to the head.
-    // RDF lists may, or may not, have a type element.
-    // Should do this during preparation, not as objects found during the write
-    // phase.   
-
-	protected void prepareLists(Model model)
-	{
-		Set<Resource> thisListAll = new HashSet<>();
-
-		StmtIterator listTailsIter = model.listStatements(null, RDF.rest, RDF.nil);
-
-		// For every tail of a list
-		//tailLoop:
-		for ( ; listTailsIter.hasNext() ; )
-		{
-			// The resource for the current element being considered.
-			Resource listElement  = listTailsIter.nextStatement().getSubject() ;
-            // The resource pointing to the link we have just looked at.
-            Resource validListHead = null ;
-
-			// Chase to head of list
-			for ( ; ; )
-			{
-				boolean isOK = checkListElement(listElement) ;
-				if ( ! isOK )
-					break ;
-
-				// At this point the element is exactly a collection element.
-				if ( N3JenaWriter.DEBUG ) out.println("# RDF list all: "+formatResource(listElement)) ;
-				validListHead = listElement ;
-				thisListAll.add(listElement) ;
-
-				// Find the previous node.
-				StmtIterator sPrev = model.listStatements(null, RDF.rest, listElement) ;
-
-				if ( ! sPrev.hasNext() )
-					// No rdf:rest link
-					break ;
-
-				// Valid pretty-able list.  Might be longer.
-				listElement = sPrev.nextStatement().getSubject() ;
-				if ( sPrev.hasNext() )
-				{
-					if ( N3JenaWriter.DEBUG ) out.println("# RDF shared tail from "+formatResource(listElement)) ;
-					break ;
-				}
-			}
-			// At head of a pretty-able list - add its elements and its head.
-			if ( N3JenaWriter.DEBUG ) out.println("# Collection list head: "+formatResource(validListHead)) ;
-			rdfListsAll.addAll(thisListAll) ;
-			if ( validListHead != null )
-				rdfLists.add(validListHead) ;
-		}
-		listTailsIter.close() ;
-	}
-
-	// Validate one list element.
-	protected boolean checkListElement(Resource listElement) 
-	{
-	    // Must be a blank node for abbreviated form.
-        if ( ! listElement.isAnon() )
-            return false ;
-
-        if (!listElement.hasProperty(RDF.rest)
-			|| !listElement.hasProperty(RDF.first))
-		{
-			if (N3JenaWriter.DEBUG)
-				out.println(
-					"# RDF list element does not have required properties: "
-						+ formatResource(listElement));
-			return false;
-		}
-
-        // Must be exactly two properties (the ones we just tested for)
-        // or three including the RDF.type RDF.List statement.
-        int numProp = countProperties(listElement);
-
-        if ( numProp == 2)
-            // Must have exactly the properties we just tested for.
-            return true ;
-
-        // rdf:type is not implicit.
-//        if (numProp == 3)
-//        {
-//            if (listElement.hasProperty(RDF.type, RDF.List))
-//                return true;
-//            if (N3JenaWriter.DEBUG)
-//                out.println(
-//                    "# RDF list element: 3 properties but no rdf:type rdf:List"
-//                        + formatResource(listElement));
-//            return false;
-//        }
-
-        if (N3JenaWriter.DEBUG)
-            out.println(
-                "# RDF list element does not right number of properties: "
-                    + formatResource(listElement));
-        return false;
-	}
-
-	// Find bnodes that are objects of only one statement (and hence can be inlined)
-	// which are not RDF lists.
-    // Could do this testing at write time (unlike lists)
-
-	protected void prepareOneRefBNodes(Model model) 
-	{
-
-		NodeIterator objIter = model.listObjects() ;
-		for ( ; objIter.hasNext() ; )
-		{
-			RDFNode n = objIter.nextNode() ;
-            
-            if ( testOneRefBNode(n) )
-                oneRefObjects.add(n) ; 
-            objIter.close() ;
-
-            // N3JenaWriter.DEBUG
-            if ( N3JenaWriter.DEBUG )
-            {
-                out.println("# RDF Lists      = "+rdfLists.size()) ;
-                out.println("# RDF ListsAll   = "+rdfListsAll.size()) ;
-                out.println("# oneRefObjects  = "+oneRefObjects.size()) ;
-            }
-        }
-    }
-    
-	protected boolean testOneRefBNode(RDFNode n)
-    {
-		if ( ! ( n instanceof Resource ) )
-			return false ;
-
-		Resource obj = (Resource)n ;
-
-		if ( ! obj.isAnon() )
-            return false ;
-
-        // In a list - done as list, not as embedded bNode.
-		if ( rdfListsAll.contains(obj) )
-			// RDF list (head or element)
-            return false ;
-
-		StmtIterator pointsToIter = obj.getModel().listStatements(null, null, obj) ;
-		if ( ! pointsToIter.hasNext() )
-			// Corrupt graph!
-			throw new JenaException("N3: found object with no arcs!") ;
-
-		pointsToIter.nextStatement() ;
-               
-		if ( pointsToIter.hasNext() )
-            return false ;
-
-    	if ( N3JenaWriter.DEBUG )
-			out.println("# OneRef: "+formatResource(obj)) ;
-		return true ; 
-	}
-  
-    // ----------------------------------------------------
-    // Output stage 
-    
-    // Property order is:
-    // 1 - rdf:type (as "a")
-    // 2 - other rdf: rdfs: namespace items (sorted)
-    // 3 - all other properties, sorted by URI (not qname)  
-    
-
-    
-    @Override
-    protected ClosableIterator<Property> preparePropertiesForSubject(Resource r)
-    {
-        Set<Property> seen = new HashSet<>() ;
-        boolean hasTypes = false ;
-        SortedMap<String, Property> tmp1 = new TreeMap<>() ;
-        SortedMap<String, Property> tmp2 = new TreeMap<>() ;
-        
-        StmtIterator sIter = r.listProperties();
-        for ( ; sIter.hasNext() ; )
-        {
-            Property p = sIter.nextStatement().getPredicate() ;
-            if ( seen.contains(p) )
-                continue ;
-            seen.add(p) ;
-            
-            if ( p.equals(RDF.type) )
-            {
-                hasTypes = true ;
-                continue ;
-            }
-            
-            if ( p.getURI().startsWith(RDF.getURI()) ||  
-                 p.getURI().startsWith(RDFS.getURI()) )
-            {
-                tmp1.put(p.getURI(), p) ;
-                continue ;
-            }
-            
-            tmp2.put(p.getURI(), p) ;        
-        }
-        sIter.close() ;
-        
-        ExtendedIterator<Property> eIter = null ;
-        
-        if ( hasTypes )
-            eIter = new SingletonIterator<>(RDF.type) ;
-
-        ExtendedIterator<Property> eIter2 = WrappedIterator.create(tmp1.values().iterator()) ;
-            
-        eIter = (eIter == null) ? eIter2 : eIter.andThen(eIter2) ;
-                    
-        eIter2 = WrappedIterator.create(tmp2.values().iterator()) ;
-        
-        eIter = (eIter == null) ? eIter2 : eIter.andThen(eIter2) ;
-        return eIter ;
-    }
-    
-    @Override
-    protected boolean skipThisSubject(Resource subj)
-    {
-        return rdfListsAll.contains(subj)   ||
-               oneRefObjects.contains(subj)  ;
-    }
-
-//    protected void writeModel(Model model)
-//	{
-//        super.writeModel(model) ;
-//
-//
-
-    // Before ... 
-
-    @Override
-    protected void startWriting()
-    {
-        allocateDatastructures() ;
-    }
-
-    // Flush any unwritten objects.
-    // 1 - OneRef objects
-    //     Normally there are "one ref" objects left
-    //     However loops of "one ref" are possible.
-    // 2 - Lists
-
-    @Override
-    protected void finishWriting()
-    {
- 
-        // Are there any unattached RDF lists?
-        // e..g ([] [] []) . in the data.
-        // We missed these earlier.
-        for ( Resource r : rdfLists )
-        {
-            if ( rdfListsDone.contains( r ) )
-            {
-                continue;
-            }
-            out.println();
-            if ( N3JenaWriter.DEBUG )
-            {
-                out.println( "# RDF List" );
-            }
-
-            // Includes the case of shared lists-as-objects. 
-//            if (!r.isAnon() || countArcsTo(r) > 0 )
-//            {
-//                // Name it.
-//                out.print(formatResource(r));
-//                out.print(" :- ");
-//            }
-//            writeList(r);
-//            out.println(" .");
-            // Turtle does not have :-
-            writeListUnpretty( r );
-        }
-
-        // Finally, panic.
-        // Dump anything that has not been output yet. 
-        oneRefObjects.removeAll(oneRefDone);
-        for ( RDFNode oneRefObject : oneRefObjects )
-        {
-            out.println();
-            if ( N3JenaWriter.DEBUG )
-            {
-                out.println( "# One ref" );
-            }
-            // Don't allow further one ref objects to be inlined.
-            allowDeep = false;
-            writeOneGraphNode( (Resource) oneRefObject );
-            allowDeep = true;
-        }
-
-        //out.println() ;
-        //writeModelSimple(model,  bNodesMap, base) ;
-        out.flush();
-        clearDatastructures() ;
-    }
-
-
-
-	// Need to decide between one line or many.
-    // Very hard to do a pretty thing here because the objects may be large or small or a mix.
-
-    @Override
-    protected void writeObjectList(Resource subject, Property property)
-    {
-//        if ( ! doObjectListsAsLists )
-//        {
-//            super.writeObjectList(resource, property) ;
-//            return ;
-//        }
-
-        String propStr = formatProperty(property);
-        
-        // Find which objects are simple (i.e. not nested structures)             
-
-        StmtIterator sIter = subject.listProperties(property);
-        Set<RDFNode> simple = new HashSet<>() ;
-        Set<RDFNode> complex = new HashSet<>() ;
-
-        for (; sIter.hasNext();)
-        {
-            Statement stmt = sIter.nextStatement();
-            RDFNode obj = stmt.getObject() ;
-            if ( isSimpleObject(obj) )
-                simple.add(obj) ;
-            else
-                complex.add(obj) ;
-        }
-        sIter.close() ;
-        // Write property/simple objects
-        
-        if ( simple.size() > 0 )
-        {
-            String padSp = null ;
-            // Simple objects - allow property to be long and alignment to be lost
-            if ((propStr.length()+minGap) <= widePropertyLen)
-                padSp = pad(calcPropertyPadding(propStr)) ;
-            
-            if ( doObjectListsAsLists )
-            {
-                // Write all simple objects as one list. 
-                out.print(propStr);
-                out.incIndent(indentObject) ; 
-            
-                if ( padSp != null )
-                    out.print(padSp) ;
-                else
-                    out.println() ;
-            
-                for (Iterator<RDFNode> iter = simple.iterator(); iter.hasNext();)
-                {
-                    RDFNode n = iter.next();
-                    writeObject(n);
-                    
-                    // As an object list
-                    if (iter.hasNext())
-                        out.print(objectListSep);
-                }
-                
-                out.decIndent(indentObject) ;
-            }
-            else
-            {
-                for (Iterator<RDFNode> iter = simple.iterator(); iter.hasNext();)
-                {
-                    // This is also the same as the complex case 
-                    // except the width the property can go in is different.
-                    out.print(propStr);
-                    out.incIndent(indentObject) ; 
-                    if ( padSp != null )
-                        out.print(padSp) ;
-                    else
-                        out.println() ;
-                    
-                    RDFNode n = iter.next();
-                    writeObject(n);
-                    out.decIndent(indentObject) ;
-                    
-                    // As an object list
-                    if (iter.hasNext())
-                        out.println(" ;");
-                   }
-                
-            }
-        }        
-        // Now do complex objects.
-        // Write property each time for a complex object.
-        // Do not allow over long properties but same line objects.
-
-        if (complex.size() > 0)
-        {
-            // Finish the simple list if there was one
-            if ( simple.size() > 0 )
-                out.println(" ;");
-            
-            int padding = -1 ;
-            String padSp = null ;
-            
-            // Can we fit teh start of teh complex object on this line?
-
-            // Complex objects - do not allow property to be long and alignment to be lost
-            if ((propStr.length()+minGap) <= propertyCol)
-            {
-                padding = calcPropertyPadding(propStr) ;
-                padSp = pad(padding) ;
-            }
-
-            for (Iterator<RDFNode> iter = complex.iterator(); iter.hasNext();)
-            {
-                int thisIndent = indentObject ;
-                //if ( i )
-                out.incIndent(thisIndent);
-                out.print(propStr);
-                if ( padSp != null )
-                    out.print(padSp) ;
-                else
-                    out.println() ;
-            
-                RDFNode n = iter.next();
-                writeObject(n);
-                out.decIndent(thisIndent);
-                if ( iter.hasNext() )
-                    out.println(" ;");
-            }
-        }
-        return;
-	}
-
-
-    protected boolean isSimpleObject(RDFNode node)
-    {
-        if (node instanceof Literal)
-            return true ;
-        Resource rObj = (Resource) node;
-        if ( allowDeep && oneRefObjects.contains(rObj) )
-            return false ;
-        return true ;
-    }
-
-    @Override
-    protected void writeObject(RDFNode node)
-	{
-		if (node instanceof Literal)
-		{
-			writeLiteral((Literal) node);
-			return;
-		}
-
-		Resource rObj = (Resource) node;
-		if ( allowDeep && ! isSimpleObject(rObj))
-		{
-			oneRefDone.add(rObj);
-	        ClosableIterator<Property> iter = preparePropertiesForSubject(rObj);
-	        if (! iter.hasNext() )
-	        {
-	            // No properties.
-	            out.print("[]");
-	        }
-	        else
-	        {
-    			out.print("[ ");
-    			out.incIndent(2);
-    			writePropertiesForSubject(rObj, iter);
-                out.decIndent(2);
-                out.println() ;
-                // Line up []
-    			out.print("]");
-	        }
-	        iter.close();
-			return ;
-		}
-
-		if (rdfLists.contains(rObj))
-			if (countArcsTo(rObj) <= 1)
-			{
-				writeList(rObj);
-				return;
-			}
-
-		out.print(formatResource(rObj));
-	}
-
-
-
-	// Need to out.print in short (all on one line) and long forms (multiple lines)
-    protected void writeList(Resource resource)
-	{
-		out.print( "(");
-		out.incIndent(2) ;
-		boolean listFirst = true;
-		for (Iterator<RDFNode> iter = rdfListIterator(resource); iter.hasNext();)
-		{
-			if (!listFirst)
-				out.print( " ");
-			listFirst = false;
-			RDFNode n = iter.next();
-			writeObject(n) ;
-		}
-		out.print( ")");
-		out.decIndent(2) ;
-		rdfListsDone.add(resource);
-
-	}
-    
-    // Need to out.print in long (triples) form.
-    protected void writeListUnpretty(Resource r)
-    {
-        //for ( ; ! r.equals(RDF.nil); )
-        {
-            // Write statements at this node.
-            StmtIterator sIter = r.getModel().listStatements(r, null, (RDFNode)null) ;
-            for ( ; sIter.hasNext() ; )
-            {
-                Statement s = sIter.next() ;
-                writeStatement(s) ;
-            }
-
-            // Look for rdf:rest.
-            sIter = r.getModel().listStatements(r, RDF.rest, (RDFNode)null) ;
-            for ( ; sIter.hasNext() ; )
-            {
-                Statement s = sIter.next() ;
-                RDFNode nextNode = s.getObject() ;
-                if ( nextNode instanceof Resource )
-                {
-                    Resource r2 = (Resource)nextNode ;
-                    writeListUnpretty(r2) ;
-                }
-                else
-                    writeStatement(s) ;
-            }
-        }
-    }
-
-    private void writeStatement(Statement s)
-    {
-        out.print(formatResource(s.getSubject()));
-        out.print(" ") ;
-
-        out.print(formatResource(s.getPredicate())) ;
-        out.print(" ") ;
-        
-        out.print(formatNode(s.getObject())) ;
-        out.println(" .") ;
-        
-    }
-
-    // Called before each writing run.
-	protected void allocateDatastructures()
-	{
-		rdfLists 		= new HashSet<>() ;
-		rdfListsAll 	= new HashSet<>() ;
-		rdfListsDone 	= new HashSet<>() ;
-		oneRefObjects 	= new HashSet<>() ;
-		oneRefDone 		= new HashSet<>() ;
-	}
-
-	// Especially release large intermediate memory objects
-	protected void clearDatastructures()
-	{
-		rdfLists 		= null ;
-		rdfListsAll 	= null ;
-		rdfListsDone 	= null ;
-		oneRefObjects 	= null ;
-		oneRefDone 		= null ;
-	}
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPlain.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPlain.java
deleted file mode 100644
index 3e7ef6e..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterPlain.java
+++ /dev/null
@@ -1,29 +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.n3;
-
-/** An simple N3 writer - writes N3 out as records, one per subject in the graph.
- */
-
-
-
-public class N3JenaWriterPlain extends N3JenaWriterCommon
-{
- 
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterTriples.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterTriples.java
deleted file mode 100644
index b71d7cc..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterTriples.java
+++ /dev/null
@@ -1,64 +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.n3;
-
-//import org.apache.commons.logging.*;
-import org.apache.jena.rdf.model.* ;
-
-/** A simple N3 writer - writes N3 out as triples with prefixes done.
- *  "N3 triples" - triples with N3 abbreviations and prefixes.
- *  Very simple.  
- */
-
-public class N3JenaWriterTriples extends N3JenaWriterCommon
-{
-    static public final int colWidth = 8 ; 
-    
-    @Override
-    protected void writeModel(Model model)
-    {
-        alwaysAllocateBNodeLabel = true ;
-        StmtIterator sIter = model.listStatements() ;
-        for ( ; sIter.hasNext() ; )
-        {
-            Statement stmt = sIter.nextStatement() ;
-            String subjStr = formatResource(stmt.getSubject()) ;
-            
-            out.print(subjStr) ;
-            padCol(subjStr) ; 
-            out.print(minGapStr) ;
-            
-            
-            String predStr = formatProperty(stmt.getPredicate()) ;
-            out.print(predStr) ;
-            padCol(predStr) ;
-            out.print(minGapStr) ;
-            
-            out.print( formatNode(stmt.getObject()) ) ;
-            out.println(" .") ; 
-        }
-        sIter.close() ;
-    }
-    
-    private void padCol(String tmp)
-    {
-        if ( tmp.length() < (colWidth) )
-            out.print(pad( colWidth - tmp.length())) ;
-    }
-}
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3TurtleJenaWriter.java b/jena-core/src/main/java/org/apache/jena/n3/N3TurtleJenaWriter.java
deleted file mode 100644
index 64114e9..0000000
--- a/jena-core/src/main/java/org/apache/jena/n3/N3TurtleJenaWriter.java
+++ /dev/null
@@ -1,40 +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.
- */
-
-// To do:
-//   Better detection of illegal characters in qnames (? and = for example) 
-
-package org.apache.jena.n3;
-
-
-/** Turtle writer */
-
-
-
-public class N3TurtleJenaWriter extends N3JenaWriter
-{
-    public N3TurtleJenaWriter()
-    {
-        super() ;
-//        if ( writer.getPropValue("usePropertySymbols") == null )
-//            writer.useWellKnownPropertySymbols = false ;
-        // Only allow "a" for rdf:type.
-        writer.wellKnownPropsMap = N3JenaWriterPP.wellKnownPropsMapTurtle ;
-        writer.allowTripleQuotedStrings = true ;
-    }
-}
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/RDFReaderF.java b/jena-core/src/main/java/org/apache/jena/rdf/model/RDFReaderF.java
index aaab438..240b3e1 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/RDFReaderF.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/RDFReaderF.java
@@ -54,29 +54,4 @@ public interface RDFReaderF {
  
  */    
     public RDFReader getReader(String lang) ;
-    
-/** set the class name for the RDFReader for a language
- * @param lang the language for which this class should be used
- * @param className the class name for readers for this language
- * @return the old class name for this language
- */    
-    @Deprecated
-    public String setReaderClassName(String lang, String className);
-    
-    /**
-     * Resets the values to the initial condition.
-     */
-    @Deprecated
-    public void resetRDFReaderF();
-    
-    /**
-     * Remove lang from list of readers..
-     * Must be one of the classes that was added using setReaderClassName()
-     * @param lang The lang to remove.
-     * @return the old class name for this language
-     * @throws IllegalArgumentException if lang is one of the initial languages
-     */
-    @Deprecated
-    public String removeReader( String lang ) throws IllegalArgumentException;
- 
 }
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/RDFWriterF.java b/jena-core/src/main/java/org/apache/jena/rdf/model/RDFWriterF.java
index ad2b949..3bf07d7 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/RDFWriterF.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/RDFWriterF.java
@@ -21,17 +21,15 @@ package org.apache.jena.rdf.model;
 /** An RDFWriter factory interface.
  *
  * <p>The factory will create an appropriate writer for the particular
- *   serialization language being read.  Predefined languages include:</p>
+ *   serialization language being read.  Predefined languages:</p>
  * <ul>
  * <li>RDF/XML - default</li>
  * <li>RDF/XML-ABBREV</li>
  * <li>N-TRIPLE</li>
- * <li>N3</li>
  * </ul>
  *<p>System wide defaults for classes to use as readers for these languages
- *are defined.  These defaults may be overridden by setting a system property
- *with a name of the form org.apache.jena.readers.<lang> to the class
- *name.</p>
+ *are defined.
+ *</p>
  *<p><b>NOTE:</b> All settings are global in nature</p>
  */
 
@@ -48,29 +46,4 @@ public interface RDFWriterF {
  * @return the RDFWriter instance
  */    
     public RDFWriter getWriter(String lang); 
-    
-/** set the class name for the RDFWriter for a language
- * @param lang the language for which this class should be used
- * @param className the class name for writers for this language
- * @throws NullPointerException if lang or classname is null.
- * @return the old class name for this language
- */    
-    @Deprecated
-    public String setWriterClassName(String lang, String className);
-    
-    /**
-     * Resets the values to the initial condition.
-     */
-    @Deprecated
-    public void resetRDFWriterF();
-    
-    /**
-     * Remove lang from list of writers.
-     * Must be one of the classes that was added using setWriterClassName()
-     * @param lang The lang to remove.
-     * @return the old class name for this language
-     * @throws IllegalArgumentException if lang is one of the initial languages
-     */
-    @Deprecated
-    public String removeWriter( String lang ) throws IllegalArgumentException;
 }
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index f989380..eb4b5f4 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -236,28 +236,6 @@ implements Model, PrefixMapping, Lock
         return readerFactory.getReader(lang);
     }
 
-    /** @deprecated Use {@code org.apache.jena.riot.RDFParserRegistry.register}
-     */
-    @Override
-    @Deprecated
-    public String setReaderClassName(String lang, String className) {
-        return readerFactory.setReaderClassName(lang, className);
-    } 
-    
-    @Override
-    @Deprecated
-    public void resetRDFReaderF()
-    {
-    	readerFactory.resetRDFReaderF();
-    }
-    
-    @Override
-    @Deprecated
-    public String removeReader( String lang ) throws IllegalArgumentException
-    {
-    	return readerFactory.removeReader(lang);
-    }
-
     @Override
     public Model read(String url)  {
         readerFactory .getReader() .read(this, url);
@@ -324,27 +302,6 @@ implements Model, PrefixMapping, Lock
         return writerFactory.getWriter(lang);
     }
 
-
-    /** @deprecated Use {@code org.apache.jena.riot.RDFWriterRegistry.register}
-     */
-    @Override
-    @Deprecated
-    public String setWriterClassName(String lang, String className) {
-        return writerFactory.setWriterClassName(lang, className);
-    }
-
-    @Override
-    @Deprecated
-    public void resetRDFWriterF()  {
-    	writerFactory.resetRDFWriterF();
-    }
-    
-    @Override
-    @Deprecated
-    public String removeWriter( String lang ) throws IllegalArgumentException {
-    	return writerFactory.removeWriter( lang );
-    }
-    
     @Override
     public Model write(Writer writer) 
     {
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFReaderFImpl.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFReaderFImpl.java
index 3fb35ce..3a5e0fe 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFReaderFImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFReaderFImpl.java
@@ -70,19 +70,6 @@ public class RDFReaderFImpl extends Object implements RDFReaderF {
 
     /**
      * Use RIOT to add custom RDF parsers. See
-     * {@code RDFParserRegistry.registerLangTriples} and
-     * {@code RDFParserRegistry.registerLangQuads}
-     * 
-     * @deprecated Register with RIOT.
-     */
-    @Override
-    @Deprecated
-    public String setReaderClassName(String lang, String className) {
-        return setBaseReaderClassName(lang, className);
-    }
-
-    /**
-     * Use RIOT to add custom RDF parsers. See
      * {@code RDFParserRegistry.registerLang}
      * 
      * @deprecated Register with RIOT.
@@ -108,16 +95,6 @@ public class RDFReaderFImpl extends Object implements RDFReaderF {
         }
     }
 
-    @Override
-    public void resetRDFReaderF() {
-        reset();
-    }
-
-    @Override
-    public String removeReader(String lang) throws IllegalArgumentException {
-        return remove(lang);
-    }
-
     static { 
         // static initializer - set default readers
         reset();
@@ -126,7 +103,7 @@ public class RDFReaderFImpl extends Object implements RDFReaderF {
     private static void reset() {
         Class<? extends RDFReader> rdfxmlReader = org.apache.jena.rdfxml.xmlinput.JenaReader.class;
         Class<? extends RDFReader> ntReader = org.apache.jena.rdf.model.impl.NTripleReader.class;
-        Class<? extends RDFReader> turtleReader = org.apache.jena.n3.turtle.TurtleReader.class;
+        Class<? extends RDFReader> turtleReader = org.apache.jena.ttl.turtle.TurtleReader.class;
 
         custom.put("RDF", rdfxmlReader);
         custom.put("RDF/XML", rdfxmlReader);
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFWriterFImpl.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFWriterFImpl.java
index d2847bd..6f075e8 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFWriterFImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/RDFWriterFImpl.java
@@ -22,10 +22,8 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.n3.N3JenaWriter;
 import org.apache.jena.rdf.model.RDFWriter;
 import org.apache.jena.rdf.model.RDFWriterF;
-import org.apache.jena.shared.ConfigException;
 import org.apache.jena.shared.JenaException;
 import org.apache.jena.shared.NoWriterForLangException ;
 
@@ -42,7 +40,12 @@ public class RDFWriterFImpl extends Object implements RDFWriterF {
     public static void alternative(RDFWriterF other) {
         rewiredAlternative = other ;
     }
-    
+
+    /** Return the the current "rewiredAlternative" which may be null, meaning {@code RDFWriterFImpl} is in use. */
+    public static RDFWriterF getCurrentRDFWriterF(RDFWriterF other) {
+        return rewiredAlternative;
+    }
+
     /** Creates new RDFReaderFImpl */
     public RDFWriterFImpl() {}
 
@@ -69,55 +72,7 @@ public class RDFWriterFImpl extends Object implements RDFWriterF {
         }
     }
 
-    /**
-     * Use RIOT to add custom RDF parsers. See
-     * {@code RDFWriterRegistry.registerLang}
-     * 
-     * @deprecated Register with RIOT.
-     */
-    @Override
-    @Deprecated
-    public String setWriterClassName(String lang, String className) {
-        return setBaseWriterClassName(lang, className);
-    }
-
-    /**
-     * Use RIOT to add custom RDF parsers. See
-     * {@code RDFWriterRegistry.registerLang}
-     * 
-     * @deprecated Register with RIOT.
-     */
-    @Deprecated
-    public static String setBaseWriterClassName(String lang, String className) {
-        if ( rewiredAlternative != null )
-            Log.error(RDFWriterFImpl.class, "Rewired RDFWriterFImpl2 - configuration changes have no effect on writing");
-        String oldClassName = currentEntry(lang);
-        try {
-            @SuppressWarnings("unchecked")
-            Class<? extends RDFWriter> newClass = (Class<? extends RDFWriter>)Class.forName(className, false,
-                                                                                            Thread.currentThread().getContextClassLoader());
-            custom.put(lang, newClass);
-            return oldClassName;
-        }
-        catch (ClassNotFoundException e) {
-            throw new ConfigException("Reader not found on classpath", e);
-        }
-        catch (Exception e) {
-            throw new JenaException(e);
-        }
-    }
-
-    @Override
-    public void resetRDFWriterF() {
-        reset();
-    }
-
-    @Override
-    public String removeWriter(String lang) throws IllegalArgumentException {
-        return remove(lang);
-    }
-
-    static { // static initializer - set default readers
+    static { 
         reset();
     }
 
@@ -125,7 +80,6 @@ public class RDFWriterFImpl extends Object implements RDFWriterF {
         Class<? extends RDFWriter> rdfxmlWriter = org.apache.jena.rdfxml.xmloutput.impl.Basic.class;
         Class<? extends RDFWriter> rdfxmlAbbrevWriter = org.apache.jena.rdfxml.xmloutput.impl.Abbreviated.class;
         Class<? extends RDFWriter> ntWriter = org.apache.jena.rdf.model.impl.NTripleWriter.class;
-        Class<? extends RDFWriter> ttlWriter = org.apache.jena.n3.N3TurtleJenaWriter.class;
 
         custom.put("RDF/XML", rdfxmlWriter);
         custom.put("RDF/XML-ABBREV", rdfxmlAbbrevWriter);
@@ -133,12 +87,6 @@ public class RDFWriterFImpl extends Object implements RDFWriterF {
         custom.put("N-TRIPLE",  ntWriter);
         custom.put("N-TRIPLES", ntWriter);
         custom.put("N-Triples", ntWriter);
-
-        custom.put("N3",        org.apache.jena.n3.N3JenaWriter.class);
-
-        custom.put(N3JenaWriter.turtleWriter, ttlWriter);
-        custom.put(N3JenaWriter.turtleWriterAlt1, ttlWriter);
-        custom.put(N3JenaWriter.turtleWriterAlt2, ttlWriter);
     }
 
     private static String currentEntry(String lang) {
diff --git a/jena-core/src/main/java/org/apache/jena/n3/JenaReaderBase.java b/jena-core/src/main/java/org/apache/jena/ttl/JenaReaderBase.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/JenaReaderBase.java
rename to jena-core/src/main/java/org/apache/jena/ttl/JenaReaderBase.java
index 3bb56a4..e808e9b 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/JenaReaderBase.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/JenaReaderBase.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 import java.net.* ;
 import java.nio.charset.StandardCharsets ;
diff --git a/jena-core/src/main/java/org/apache/jena/n3/JenaURIException.java b/jena-core/src/main/java/org/apache/jena/ttl/JenaURIException.java
similarity index 97%
rename from jena-core/src/main/java/org/apache/jena/n3/JenaURIException.java
rename to jena-core/src/main/java/org/apache/jena/ttl/JenaURIException.java
index 6087bc9..e4288a3 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/JenaURIException.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/JenaURIException.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 import org.apache.jena.shared.JenaException ;
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3IRIResolver.java b/jena-core/src/main/java/org/apache/jena/ttl/N3IRIResolver.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/N3IRIResolver.java
rename to jena-core/src/main/java/org/apache/jena/ttl/N3IRIResolver.java
index 2084604..4c21261 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/N3IRIResolver.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/N3IRIResolver.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 
 import java.io.File;
diff --git a/jena-core/src/main/java/org/apache/jena/n3/RelativeURIException.java b/jena-core/src/main/java/org/apache/jena/ttl/RelativeURIException.java
similarity index 96%
rename from jena-core/src/main/java/org/apache/jena/n3/RelativeURIException.java
rename to jena-core/src/main/java/org/apache/jena/ttl/RelativeURIException.java
index 9ffbb6c..890b242 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/RelativeURIException.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/RelativeURIException.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 public class RelativeURIException extends JenaURIException
 {
diff --git a/jena-core/src/main/java/org/apache/jena/n3/package.html b/jena-core/src/main/java/org/apache/jena/ttl/package.html
similarity index 100%
rename from jena-core/src/main/java/org/apache/jena/n3/package.html
rename to jena-core/src/main/java/org/apache/jena/ttl/package.html
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/LabelToNodeMap.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/LabelToNodeMap.java
similarity index 97%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/LabelToNodeMap.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/LabelToNodeMap.java
index c8eef67..c49c536 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/LabelToNodeMap.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/LabelToNodeMap.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/ParserBase.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserBase.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/ParserBase.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserBase.java
index 197e231..af9f04e 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/ParserBase.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserBase.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.datatypes.TypeMapper ;
@@ -24,10 +24,10 @@ 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.n3.N3IRIResolver ;
-import org.apache.jena.n3.JenaURIException ;
 import org.apache.jena.shared.PrefixMapping ;
 import org.apache.jena.shared.impl.PrefixMappingImpl ;
+import org.apache.jena.ttl.JenaURIException;
+import org.apache.jena.ttl.N3IRIResolver;
 import org.apache.jena.vocabulary.RDF ;
 
 @SuppressWarnings("deprecation")
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/ParserTurtle.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserTurtle.java
similarity index 89%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/ParserTurtle.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserTurtle.java
index bdab061..86776bf 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/ParserTurtle.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/ParserTurtle.java
@@ -16,15 +16,15 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import java.io.InputStream ;
 import java.io.Reader ;
 
 import org.apache.jena.graph.Graph ;
-import org.apache.jena.n3.turtle.parser.ParseException ;
-import org.apache.jena.n3.turtle.parser.TokenMgrError ;
-import org.apache.jena.n3.turtle.parser.TurtleParser ;
+import org.apache.jena.ttl.turtle.parser.ParseException;
+import org.apache.jena.ttl.turtle.parser.TokenMgrError;
+import org.apache.jena.ttl.turtle.parser.TurtleParser;
 import org.apache.jena.util.FileUtils ;
 
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/Turtle2NTriples.java
similarity index 98%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/Turtle2NTriples.java
index cdec2d9..67dc8a1 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/Turtle2NTriples.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import java.io.PrintStream;
 import java.io.PrintWriter;
@@ -30,7 +30,7 @@ import org.apache.jena.graph.Triple ;
 public class Turtle2NTriples implements TurtleEventHandler
 {
     PrintStream out = System.out ;
-    public Turtle2NTriples(PrintStream out) { this.out = out ; }
+    public Turtle2NTriples(int x, PrintStream out) { this.out = out ; }
     
     @Override
     public void triple(int line, int col, Triple triple)
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventDump.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventDump.java
similarity index 97%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventDump.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventDump.java
index 8fc3faa..10d5757 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventDump.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventDump.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.graph.Triple ;
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventHandler.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventHandler.java
similarity index 96%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventHandler.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventHandler.java
index 199528d..a1ee0af 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventHandler.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventHandler.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.graph.Triple ;
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventNull.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventNull.java
similarity index 97%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventNull.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventNull.java
index 6db4306..193b0ae 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleEventNull.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleEventNull.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.graph.Triple ;
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleParseException.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleParseException.java
similarity index 97%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleParseException.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleParseException.java
index 7365bc6..76a8468 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleParseException.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleParseException.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.shared.JenaException ;
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleRDFGraphInserter.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleRDFGraphInserter.java
similarity index 98%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleRDFGraphInserter.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleRDFGraphInserter.java
index 4b9d50d..7545e11 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleRDFGraphInserter.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleRDFGraphInserter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleReader.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleReader.java
similarity index 93%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleReader.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleReader.java
index 3f00b15..e76030e 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/TurtleReader.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/TurtleReader.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import java.io.Reader;
 
-import org.apache.jena.n3.JenaReaderBase ;
 import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.ttl.JenaReaderBase;
 
 
 public class TurtleReader extends JenaReaderBase
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/JavaCharStream.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/JavaCharStream.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/JavaCharStream.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/JavaCharStream.java
index 5f0a3f8..e0243db 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/JavaCharStream.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/JavaCharStream.java
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 /**
  * An implementation of interface CharStream, where the stream is assumed to
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/ParseException.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/ParseException.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/ParseException.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/ParseException.java
index 8754ba3..afb1491 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/ParseException.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/ParseException.java
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 /**
  * This exception is thrown when parse errors are encountered.
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/Token.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/Token.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/Token.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/Token.java
index 57cc0d3..23ee505 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/Token.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/Token.java
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 /**
  * Describes the input token stream.
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TokenMgrError.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TokenMgrError.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TokenMgrError.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TokenMgrError.java
index 749d201..d94406d 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TokenMgrError.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TokenMgrError.java
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 /** Token Manager Error. */
 public class TokenMgrError extends Error
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParser.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParser.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParser.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParser.java
index b2141e5..f798386 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParser.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParser.java
@@ -17,10 +17,10 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 import org.apache.jena.graph.* ;
-import org.apache.jena.n3.turtle.ParserBase ;
+import org.apache.jena.ttl.turtle.ParserBase;
 
 public class TurtleParser extends ParserBase implements TurtleParserConstants {
 
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserConstants.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserConstants.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserConstants.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserConstants.java
index 36cfcab..826cce1 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserConstants.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserConstants.java
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 
 /**
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserTokenManager.java b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserTokenManager.java
similarity index 99%
rename from jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserTokenManager.java
rename to jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserTokenManager.java
index 3a3921e..e14c0a9 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/parser/TurtleParserTokenManager.java
+++ b/jena-core/src/main/java/org/apache/jena/ttl/turtle/parser/TurtleParserTokenManager.java
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle.parser ;
+package org.apache.jena.ttl.turtle.parser ;
 
 
 
diff --git a/jena-core/src/test/java/org/apache/jena/n3/N3ExternalTestsCom.java b/jena-core/src/test/java/org/apache/jena/n3/N3ExternalTestsCom.java
deleted file mode 100644
index 48915a9..0000000
--- a/jena-core/src/test/java/org/apache/jena/n3/N3ExternalTestsCom.java
+++ /dev/null
@@ -1,99 +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.n3;
-
-import java.io.* ;
-import java.util.List ;
-
-import junit.framework.TestSuite ;
-import org.apache.jena.shared.JenaException ;
-import org.apache.jena.util.FileUtils ;
-
-
-public abstract class N3ExternalTestsCom extends TestSuite
-{
-	// List of places
-	static protected final String dirbases[] = {".", "testN3",
-                                                // Jena2: correct location
-                                                "testing/Turtle/N3", } ;
-	
-	// Record where we find the file in the constructor
-	protected String basedir = null ;
-	protected String testFile ;
-	
-	public N3ExternalTestsCom(String testName, String filename)
-	{
-		super(testName) ;
-		testFile = findFile(filename) ;
-		if ( testFile == null )
-			throw new JenaException("No such file: "+filename) ;
-		TupleSet tests = null ;
-		try {
-			Reader r = new BufferedReader(new FileReader(testFile)) ;
-			tests = new TupleSet(r) ;
-		} catch (IOException ioEx)
-		{
-			System.err.println("IO exception: "+ioEx) ;
-			return ;
-		}
-		
-		for ( ; tests.hasNext() ; )
-		{
-			List<TupleItem> l = tests.next() ;
-			if ( l.size() != 2 )
-			{
-				System.err.println("Error in N3 test configuration file: "+filename+": length of an entry is "+l.size()) ;
-				return ;
-			}
-			String n3File = l.get(0).get() ;
-			String resultsFile = l.get(1).get() ;
-
-			makeTest(n3File, resultsFile) ;
-		}
-	}
-
-	abstract protected void makeTest(String n3File, String resultsFile) ;
-	
-	protected String findFile(String fname)
-	{
-        for ( String dirbase : dirbases )
-        {
-            String maybeFile = dirbase + "/" + fname;
-            File f = new File( maybeFile );
-            if ( f.exists() )
-            {
-                basedir = dirbase;
-                return f.getAbsolutePath();
-            }
-        }
-		return null ;
-	}
-
-	// Utilities.
-		
-	static protected PrintWriter makeWriter(OutputStream out)
-	{
-        return FileUtils.asPrintWriterUTF8(out) ;
-	}
-
-	static protected BufferedReader makeReader(InputStream in)
-	{
-	    return new BufferedReader(FileUtils.asUTF8(in)) ;
-	}
-}
diff --git a/jena-core/src/test/java/org/apache/jena/n3/N3JenaWriterTests.java b/jena-core/src/test/java/org/apache/jena/n3/N3JenaWriterTests.java
deleted file mode 100644
index ba8e78b..0000000
--- a/jena-core/src/test/java/org/apache/jena/n3/N3JenaWriterTests.java
+++ /dev/null
@@ -1,117 +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.n3 ;
-
-import java.io.* ;
-
-import junit.framework.* ;
-import org.apache.jena.rdf.model.* ;
-
-public class N3JenaWriterTests extends N3ExternalTestsCom
-{
-	/* JUnit swingUI needed this */
-    static public TestSuite suite() {
-        return new N3JenaWriterTests() ;
-    }
-	
-    static final String uriBase = "http://host/base/" ;
-	
-	public N3JenaWriterTests()
-	{
-		this("n3-writer-tests") ;
-	}
-	
-	public N3JenaWriterTests(String filename)
-	{
-		super("N3 Jena Writer tests", filename) ;
-	}
-
-	
-	@Override
-    protected void makeTest(String inputFile, String resultsFile)
-	{
-		String testName = inputFile ;
-
-		if ( basedir != null )
-			inputFile = basedir+"/"+inputFile ;
-
-		if ( basedir != null && resultsFile != null && !resultsFile.equals("") )
-			resultsFile = basedir + "/" + resultsFile ;
-			
-        // Run on each of the writers
-		addTest(new Test(testName, inputFile, resultsFile, N3JenaWriter.n3Writer));
-        
-	}
-
-	static class Test extends TestCase
-	{
-        String writerName = null ;
-		String testName = null ;
-		String basename = null ;
-		String inputFile = null ;
-		String resultsFile = null ;	
-		Reader data = null ;
-		
-		
-		Test(String _testName, String _inputFile, String _resultsFile, String wName)
-		{
-			super("N3 Jena Writer test: "+_testName+"-"+wName) ;
-			testName = _testName ;
-			inputFile = _inputFile ;
-			resultsFile = _resultsFile ;
-            writerName = wName ;
-		}
-		
-		@Override
-        protected void runTest() throws Throwable
-		{
-			try {
-				data = makeReader(new FileInputStream(inputFile)) ;
-			} catch (IOException ioEx)
-			{
-				fail("File does not exist: "+inputFile) ;
-				return ;
-			}
-
-			// Test: write model to a string, read it again and see if same/isomorphic
-			
-			Model model_1 = ModelFactory.createDefaultModel() ;
-			model_1.read(data, uriBase, "N3") ;
-            
-			String tmpStr ;
-			try ( StringWriter w = new StringWriter() ){
-			    model_1.write(w, writerName, uriBase) ;
-			    tmpStr = w.toString() ;
-			}
-			Model model_2 = ModelFactory.createDefaultModel() ;
-			try ( StringReader r = new StringReader(tmpStr) ) {
-			    model_2.read(r, uriBase, "N3") ;
-			}
-			if ( ! model_1.isIsomorphicWith(model_2) )
-			{
-				System.out.println("#### ---- "+testName+" ------------------------------") ;
-                System.out.println("#### Model 1 ---- "+testName+" ------------------------------") ;
-                model_1.write(System.out, "N3") ;
-                System.out.println("#### Model 2 --- "+testName+" ------------------------------") ;
-                model_2.write(System.out, "N3") ;
-                assertTrue("Models don't match: "+testName, false) ;
-			}
-		}
-	}
-}
diff --git a/jena-core/src/test/java/org/apache/jena/n3/N3TestSuite.java b/jena-core/src/test/java/org/apache/jena/n3/N3TestSuite.java
deleted file mode 100644
index 9f9e2a5..0000000
--- a/jena-core/src/test/java/org/apache/jena/n3/N3TestSuite.java
+++ /dev/null
@@ -1,40 +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.n3;
-
-import junit.framework.* ;
-
-public class N3TestSuite extends TestSuite
-{
-	/* JUnit swingUI needed this */
-    static public TestSuite suite() {
-        return new N3TestSuite() ;
-    }
-	
-	
-	private N3TestSuite()
-	{
-		super("N3") ;
-        addTest(TestResolver.suite()) ;
-//		addTest(new N3InternalTests()) ;
-//		addTest(new N3ExternalTests()) ;
-//		addTest(new N3JenaReaderTests()) ;
-		addTest(new N3JenaWriterTests()) ;
-	}
-}
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelRead.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelRead.java
index 4551fee..73f4b1a 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelRead.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestModelRead.java
@@ -69,7 +69,7 @@ public class TestModelRead extends AbstractModelTestBase
     @SuppressWarnings("deprecation")
     public void testSimpleLoadImplictBase() throws IRIException {
         final Model mBasedImplicit = createModel() ;
-        String fn=org.apache.jena.n3.N3IRIResolver.resolveGlobal(getFileName("modelReading/based.n3"));
+        String fn=org.apache.jena.ttl.N3IRIResolver.resolveGlobal(getFileName("modelReading/based.n3"));
         final Model wanted = createModel().add(ModelHelper.resource(fn), ModelHelper.property("ja:predicate"),
                                                ModelHelper.resource("ja:object")) ;
         mBasedImplicit.read(fn, "N3") ;
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestRDFWriterMap.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestRDFWriterMap.java
index be08455..0a851ad 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestRDFWriterMap.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestRDFWriterMap.java
@@ -79,9 +79,7 @@ public class TestRDFWriterMap extends JenaTestBase
             setWriterClassName(TestRDFWriterMap.NTRIPLES,       Jena.PATH + ".rdf.model.impl.NTripleWriter");
 		}
 
-		@Override
-		public String setWriterClassName( final String lang,
-				final String className )
+		private String setWriterClassName( final String lang, String className )
 		{
 			try
 			{
@@ -100,18 +98,6 @@ public class TestRDFWriterMap extends JenaTestBase
 				throw new JenaException(e);
 			}
 		}
-
-		@Override
-		public void resetRDFWriterF() {
-			// TODO Auto-generated method stub
-
-		}
-
-		@Override
-		public String removeWriter(String lang) throws IllegalArgumentException {
-			// TODO Auto-generated method stub
-			return null;
-		}
 	}
 
 	public static final String RDF_XML = "RDF/XML";
diff --git a/jena-core/src/test/java/org/apache/jena/test/TestPackage.java b/jena-core/src/test/java/org/apache/jena/test/TestPackage.java
index 334e815..4ba9ee9 100644
--- a/jena-core/src/test/java/org/apache/jena/test/TestPackage.java
+++ b/jena-core/src/test/java/org/apache/jena/test/TestPackage.java
@@ -40,8 +40,7 @@ public class TestPackage extends TestCase {
         addTest(ts,  "Mem", org.apache.jena.mem.test.TestMemPackage.suite() );
         addTest(ts,  "Mem2", org.apache.jena.mem.test.TestGraphMemPackage.suite() );
         addTest(ts,  "Model", org.apache.jena.rdf.model.test.TestPackage.suite());
-        addTest(ts,  "N3", org.apache.jena.n3.N3TestSuite.suite());
-        addTest(ts,  "Turtle", org.apache.jena.n3.turtle.TurtleTestSuite.suite()) ;
+        addTest(ts,  "Turtle", org.apache.jena.ttl.turtle.TurtleTestSuite.suite()) ;
         addTest(ts,  "XML Output", org.apache.jena.rdfxml.xmloutput.TestPackage.suite());
         addTest(ts,  "Util", org.apache.jena.util.TestPackage.suite());
         addTest(ts,  "Jena iterator", org.apache.jena.util.iterator.test.TestPackage.suite() );
diff --git a/jena-core/src/test/java/org/apache/jena/n3/TestResolver.java b/jena-core/src/test/java/org/apache/jena/ttl/TestN3IRIResolver.java
similarity index 98%
rename from jena-core/src/test/java/org/apache/jena/n3/TestResolver.java
rename to jena-core/src/test/java/org/apache/jena/ttl/TestN3IRIResolver.java
index 961959f..0c6760f 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/TestResolver.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/TestN3IRIResolver.java
@@ -16,17 +16,17 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 @SuppressWarnings("deprecation")
 // Tests the old N3IRIResolver which is now only used for tests. 
-public class TestResolver extends TestCase
+public class TestN3IRIResolver extends TestCase
 {
     public static TestSuite suite()
     {
-        TestSuite ts = new TestSuite(TestResolver.class) ;
+        TestSuite ts = new TestSuite(TestN3IRIResolver.class) ;
         ts.setName("TestURI") ;
         return ts ;
     }
diff --git a/jena-core/src/test/java/org/apache/jena/n3/TupleItem.java b/jena-core/src/test/java/org/apache/jena/ttl/TupleItem.java
similarity index 98%
rename from jena-core/src/test/java/org/apache/jena/n3/TupleItem.java
rename to jena-core/src/test/java/org/apache/jena/ttl/TupleItem.java
index 0d75ea5..dad914f 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/TupleItem.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/TupleItem.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3;
+package org.apache.jena.ttl;
 
 /**
  * The unit found in a line of a tuple.
diff --git a/jena-core/src/test/java/org/apache/jena/n3/TupleSet.java b/jena-core/src/test/java/org/apache/jena/ttl/TupleSet.java
similarity index 99%
rename from jena-core/src/test/java/org/apache/jena/n3/TupleSet.java
rename to jena-core/src/test/java/org/apache/jena/ttl/TupleSet.java
index ebbe678..d36f54c 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/TupleSet.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/TupleSet.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3 ;
+package org.apache.jena.ttl ;
 
 import java.io.* ;
 import java.util.* ;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestBadSyntax.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestBadSyntax.java
similarity index 97%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TestBadSyntax.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TestBadSyntax.java
index 5c46c14..51717b5 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestBadSyntax.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestBadSyntax.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.TestCase;
 import org.apache.jena.rdf.model.* ;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestSyntax.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestSyntax.java
similarity index 97%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TestSyntax.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TestSyntax.java
index 341c3db..5927669 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestSyntax.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestSyntax.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.TestCase;
 import org.apache.jena.rdf.model.* ;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtle.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtle.java
similarity index 98%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtle.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtle.java
index 1939862..3cc6f5b 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtle.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtle.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 
 import junit.framework.TestCase;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtleReader.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtleReader.java
similarity index 97%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtleReader.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtleReader.java
index 7f37261..b9008a2 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TestTurtleReader.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TestTurtleReader.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleInternalTests.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleInternalTests.java
similarity index 99%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleInternalTests.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleInternalTests.java
index 1e3d4dc..7a94be2 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleInternalTests.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleInternalTests.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.* ;
 
 import java.io.* ;
 
-import org.apache.jena.n3.turtle.parser.TurtleParser ;
+import org.apache.jena.ttl.turtle.parser.TurtleParser;
 import org.apache.jena.util.junit.TestUtils ;
 
 public class TurtleInternalTests extends TestSuite
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestFactory.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestFactory.java
similarity index 98%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestFactory.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestFactory.java
index b959185..9ad3b55 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestFactory.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestFactory.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestSuite.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestSuite.java
similarity index 97%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestSuite.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestSuite.java
index 468c553..055b78e 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestSuite.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestSuite.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle;
+package org.apache.jena.ttl.turtle;
 
 import junit.framework.* ;
 
diff --git a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestVocab.java b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestVocab.java
similarity index 98%
rename from jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestVocab.java
rename to jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestVocab.java
index a8688f4..09bd84c 100644
--- a/jena-core/src/test/java/org/apache/jena/n3/turtle/TurtleTestVocab.java
+++ b/jena-core/src/test/java/org/apache/jena/ttl/turtle/TurtleTestVocab.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.jena.n3.turtle ;
+package org.apache.jena.ttl.turtle ;
 
 import org.apache.jena.rdf.model.* ;
  
diff --git a/jena-core/src/test/java/org/apache/jena/util/junit/ManifestOld.java b/jena-core/src/test/java/org/apache/jena/util/junit/ManifestOld.java
index 02c2f83..96f8218 100644
--- a/jena-core/src/test/java/org/apache/jena/util/junit/ManifestOld.java
+++ b/jena-core/src/test/java/org/apache/jena/util/junit/ManifestOld.java
@@ -51,7 +51,7 @@ public class ManifestOld
     public ManifestOld(String fn)
     {
         log.debug("Manifest = "+fn ) ;
-        filename = org.apache.jena.n3.N3IRIResolver.resolveGlobal(fn) ;
+        filename = org.apache.jena.ttl.N3IRIResolver.resolveGlobal(fn) ;
         log.debug("         = "+filename ) ;
         manifest = FileManager.getInternal().loadModelInternal(filename) ;
         parseIncludes() ;
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
index 4a64e71..0f51e26 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
@@ -1792,28 +1792,6 @@ public interface SecuredModel extends Model, SecuredPrefixMapping {
 
 	/**
 	 * 
-	 * @sec.graph Update
-	 * @throws UpdateDeniedException
-	 * @throws AuthenticationRequiredException
-	 *             if user is not authenticated and is required to be.
-	 */
-	@Override
-	public String setReaderClassName(final String lang, final String className)
-			throws UpdateDeniedException, AuthenticationRequiredException;
-
-	/**
-	 * 
-	 * @sec.graph Update
-	 * @throws UpdateDeniedException
-	 * @throws AuthenticationRequiredException
-	 *             if user is not authenticated and is required to be.
-	 */
-	@Override
-	public String setWriterClassName(final String lang, final String className)
-			throws UpdateDeniedException, AuthenticationRequiredException;
-
-	/**
-	 * 
 	 * @sec.graph Read
 	 * @throws ReadDeniedException
 	 * @throws AuthenticationRequiredException
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
index f172038..81dbeec 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
@@ -1209,18 +1209,6 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 		return holder.getBaseItem().getReader(lang);
 	}
 
-	@SuppressWarnings("deprecation")
-	@Override
-	public void resetRDFReaderF() {
-		holder.getBaseItem().resetRDFReaderF();
-	}
-
-	@SuppressWarnings("deprecation")
-	@Override
-	public String removeReader(String lang) throws IllegalArgumentException {
-		return holder.getBaseItem().removeReader(lang);
-	}
-
 	@Override
 	public SecuredStatement getRequiredProperty(final Resource s, final Property p)
 			throws ReadDeniedException, AuthenticationRequiredException {
@@ -1284,18 +1272,6 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 		return holder.getBaseItem().getWriter(lang);
 	}
 
-	@SuppressWarnings("deprecation")
-	@Override
-	public void resetRDFWriterF() {
-		holder.getBaseItem().resetRDFWriterF();
-	}
-
-	@SuppressWarnings("deprecation")
-	@Override
-	public String removeWriter(String lang) throws IllegalArgumentException {
-		return holder.getBaseItem().removeWriter(lang);
-	}
-
 	@Override
 	public boolean independent() {
 		return false;
@@ -1950,22 +1926,6 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 		return holder.getSecuredItem();
 	}
 
-	@SuppressWarnings("deprecation")
-	@Override
-	public String setReaderClassName(final String lang, final String className)
-			throws UpdateDeniedException, AuthenticationRequiredException {
-		checkUpdate();
-		return holder.getBaseItem().setReaderClassName(lang, className);
-	}
-
-	@SuppressWarnings("deprecation")
-	@Override
-	public String setWriterClassName(final String lang, final String className)
-			throws UpdateDeniedException, AuthenticationRequiredException {
-		checkUpdate();
-		return holder.getBaseItem().setWriterClassName(lang, className);
-	}
-
 	@Override
 	public String shortForm(final String uri) throws ReadDeniedException, AuthenticationRequiredException {
 		checkRead();