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 2013/03/05 00:22:55 UTC

svn commit: r1452591 [1/4] - in /jena/branches/arq-riot-output: src-examples/arq/examples/riot/ src-examples/arq/examples/update/ src/main/java/com/hp/hpl/jena/sparql/engine/binding/ src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/ src/main/java/...

Author: andy
Date: Mon Mar  4 23:22:53 2013
New Revision: 1452591

URL: http://svn.apache.org/r1452591
Log:
Initial integration.

Added:
    jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out1.java
    jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out2.java
    jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out3.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/StringWriterI.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterI.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterIBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormat.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormatVariant.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterMgr.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/WriterDatasetRIOT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/WriterDatasetRIOTFactory.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/WriterGraphRIOT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/WriterGraphRIOTFactory.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/WriterRIOT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/adapters/AdapterRDFWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/adapters/RDFWriterRIOT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/other/
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/other/BatchedStreamRDF.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/other/GLib.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/other/StreamRDFBatchHandler.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/OutputUtils.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/system/IO_Jena2.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/system/RiotWriterLib.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/NullWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/RDFJSONWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/RDFXMLAbbrevWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/RDFXMLPlainWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/SinkEntityOutput.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TriGWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TriGWriterBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TurtleShell.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TurtleWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TurtleWriterBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterConst.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterDatasetRIOTBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterGraphRIOTBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStream.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFFlat.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFTuples.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/AbstractWriterTest.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/TS_RiotWriter.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/TestJenaWriters.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/TestRiotWriterDataset.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/TestRiotWriterGraph.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/writer/TestWriterRegistration.java
    jena/branches/arq-riot-output/testing/RIOT/Writer/
      - copied from r1443261, jena/Experimental/riot-output/testing/RIOT/Writer/
    jena/branches/arq-riot-output/testing/RIOT/Writer/README.txt
      - copied unchanged from r1447079, jena/Experimental/riot-output/testing/RIOT/Writer/README.txt
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-jena.ttl
      - copied unchanged from r1447079, jena/Experimental/riot-output/testing/RIOT/Writer/writer-jena.ttl
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-rt-17.ttl
      - copied unchanged from r1448354, jena/Experimental/riot-output/testing/RIOT/Writer/writer-rt-17.ttl
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-rt-20.trig
      - copied unchanged from r1444417, jena/Experimental/riot-output/testing/RIOT/Writer/writer-rt-20.trig
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-rt-21.trig
      - copied unchanged from r1444417, jena/Experimental/riot-output/testing/RIOT/Writer/writer-rt-21.trig
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-rt-22.trig
      - copied unchanged from r1444417, jena/Experimental/riot-output/testing/RIOT/Writer/writer-rt-22.trig
    jena/branches/arq-riot-output/testing/RIOT/Writer/writer-rt-23.trig
      - copied unchanged from r1444417, jena/Experimental/riot-output/testing/RIOT/Writer/writer-rt-23.trig
Modified:
    jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateExecuteOperations.java
    jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateProgrammatic.java
    jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateReadFromFile.java
    jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/binding/BindingOutputStream.java
    jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/Pattern.java
    jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVOutput.java
    jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java
    jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IO.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IndentedWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/Writer2.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RIOT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RiotWriter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/EscapeStr.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/NodeFmtLib.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/NodeFormatter.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/NodeFormatterBase.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/NodeFormatterNT.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/NodeFormatterTTL.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/SinkQuadOutput.java
    jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/out/SinkTripleOutput.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/query/TestParameterizedSparqlString.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/expr/TestExprLib.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/function/user/TestUserDefinedFunctionFactory.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/function/user/TestUserFunctionsInSparql.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/graph/TestDatasets.java
    jena/branches/arq-riot-output/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/TC_Riot.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/TestParserRegistry.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/lang/TestPipedRDFIterators.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java
    jena/branches/arq-riot-output/src/test/java/org/apache/jena/riot/web/TestWebContent.java

Added: jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out1.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out1.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out1.java (added)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out1.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,52 @@
+/**
+ * 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 arq.examples.riot;
+
+import org.apache.jena.riot.* ;
+
+import com.hp.hpl.jena.rdf.model.Model ;
+
+/** Example writing a model with RIOT */
+public class ExRIOT_out1
+{
+    public static void main(String[] args)
+    {
+        RIOT.init() ;
+        RDFWriterRegistry.init() ;
+        
+        Model model = RDFDataMgr.loadModel("D.ttl") ;
+        
+        System.out.println() ;
+        System.out.println("#### ---- Write as Turtle") ;
+        System.out.println() ;
+        RDFWriterMgr.write(System.out, model, Lang.TURTLE) ;
+        
+        System.out.println() ;
+        System.out.println("#### ---- Write as Turtle (streaming)") ;
+        System.out.println() ;
+        RDFWriterMgr.write(System.out, model, RDFFormat.TURTLE_BLOCKS) ;
+        
+        System.out.println() ;
+        System.out.println("#### ---- Write as Turtle via model.write") ;
+        System.out.println() ;
+        model.write(System.out, "TTL") ;
+    }
+
+}
+

Added: jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out2.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out2.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out2.java (added)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out2.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,50 @@
+/**
+ * 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 arq.examples.riot;
+
+import org.apache.jena.riot.* ;
+
+import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.rdf.model.Model ;
+
+/** Other writer examples */
+public class ExRIOT_out2
+{
+    public static void main(String[] args)
+    {
+        RIOT.init() ;
+        RDFWriterRegistry.init() ;
+        
+        Model model = RDFDataMgr.loadModel("D.ttl") ;
+        System.out.println() ;
+        System.out.println("#### ---- Write as TriG") ;
+        System.out.println() ;
+        // This wil be the default graph of the dataset written.
+        RDFWriterMgr.write(System.out, model, Lang.TRIG) ;
+        
+        // Loading Turtle as Trig reads into the default graph.
+        Dataset dataset = RDFDataMgr.loadDataset("D.ttl") ;
+        System.out.println() ;
+        System.out.println("#### ---- Write as NQuads") ;
+        System.out.println() ;
+        RDFWriterMgr.write(System.out, dataset, Lang.NQUADS) ;
+    }
+
+}
+

Added: jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out3.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out3.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out3.java (added)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/riot/ExRIOT_out3.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,111 @@
+/**
+ * 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 arq.examples.riot;
+
+import java.io.OutputStream ;
+import java.io.Writer ;
+
+import org.apache.jena.atlas.io.IndentedWriter ;
+import org.apache.jena.riot.* ;
+import org.apache.jena.riot.adapters.RDFWriterRIOT ;
+import org.apache.jena.riot.system.PrefixMap ;
+import org.apache.jena.riot.system.RiotWriterLib ;
+import org.apache.jena.riot.writer.WriterGraphRIOTBase ;
+
+import com.hp.hpl.jena.graph.Graph ;
+import com.hp.hpl.jena.rdf.model.Model ;
+import com.hp.hpl.jena.sparql.sse.SSE ;
+import com.hp.hpl.jena.sparql.util.Context ;
+
+/** Example of registering a new writer with RIOT */
+public class ExRIOT_out3
+{
+    // See also ExRIOT_5
+    public static void main(String[] args)
+    {
+        RIOT.init() ;
+        RDFWriterRegistry.init() ;
+        
+        System.out.println("## Example of a registering a new language with RIOT") ; 
+        System.out.println() ;
+        
+        // Register the language
+        Lang lang = LangBuilder.create("SSE", "text/x-sse").addFileExtensions("rsse").build() ;
+        RDFLanguages.register(lang) ;
+
+        // Create format and register the association of language and default format.
+        // We are creating only one format here but in geenral theer can be variants
+        // (e.g. TURTLE - pretty printed or streamed) 
+        RDFFormat format = new RDFFormat(lang) ;
+        RDFWriterRegistry.register(lang, format)  ;
+        
+        // Register the writer factory
+        RDFWriterRegistry.register(format, new SSEWriterFactory()) ;
+
+        // ---- Use the register writer
+        Model model = RDFDataMgr.loadModel("D.ttl") ;
+        // Write
+        System.out.println("## Write by format") ;
+        RDFWriterMgr.write(System.out, model, format) ;
+        System.out.println() ;
+        System.out.println("## Write by language") ;
+        RDFWriterMgr.write(System.out, model, lang) ;
+        
+        // ---- Register for use with Model.read
+        // because naming is explicit, need to register an adapter.  
+        IO_Jena.registerForModelWrite("SSE", RDFWriterSSE.class) ;
+        
+        // and use it
+        model.write(System.out, "SSE") ;
+    }
+    
+    static class SSEWriterFactory implements WriterGraphRIOTFactory
+    {
+        @Override
+        public WriterGraphRIOT create(RDFFormat syntaxForm)
+        {
+            return new SSEWriter() ;
+        }
+    }
+    
+    static class SSEWriter extends WriterGraphRIOTBase
+    {
+        // Ignore externally provided prefix map and baseURI
+        @Override
+        public void write(OutputStream out, Graph graph, PrefixMap prefixMap, String baseURI, Context context)
+        {
+            SSE.write(out, graph) ;
+        }
+
+        @Override
+        public Lang getLang()   { return  RDFLanguages.contentTypeToLang("text/x-sse") ; }
+
+        @Override
+        public void write(Writer out, Graph graph, PrefixMap prefixMap, String baseURI, Context context)
+        {
+            // Writers are discouraged : just hope the charset is UTF-8.
+            IndentedWriter x = RiotWriterLib.create(out) ;
+            SSE.write(x, graph) ;
+        }
+    }
+
+    // Model.write adapter - must be public.
+    public static class RDFWriterSSE extends RDFWriterRIOT { public RDFWriterSSE() { super("SSE") ; } } 
+}
+

Modified: jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateExecuteOperations.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateExecuteOperations.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateExecuteOperations.java (original)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateExecuteOperations.java Mon Mar  4 23:22:53 2013
@@ -19,14 +19,11 @@
 package arq.examples.update;
 
 import org.apache.jena.atlas.lib.StrUtils ;
-import org.apache.jena.riot.RiotWriter ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFWriterMgr ;
 
 import com.hp.hpl.jena.sparql.sse.SSE ;
-import com.hp.hpl.jena.update.GraphStore ;
-import com.hp.hpl.jena.update.GraphStoreFactory ;
-import com.hp.hpl.jena.update.UpdateAction ;
-import com.hp.hpl.jena.update.UpdateFactory ;
-import com.hp.hpl.jena.update.UpdateRequest ;
+import com.hp.hpl.jena.update.* ;
 
 /** Build an update request up out of indvidiual Updates specified as strings.
  *  See UpdatePorgrammatic for another way to build up a request. 
@@ -85,7 +82,6 @@ public class UpdateExecuteOperations
         System.out.println();
         
         System.out.println("# N-Quads: S P O G") ;
-        RiotWriter.writeNQuads(System.out, graphStore) ;
-
+        RDFWriterMgr.write(System.out, graphStore, Lang.NQUADS) ;
     }
 }

Modified: jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateProgrammatic.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateProgrammatic.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateProgrammatic.java (original)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateProgrammatic.java Mon Mar  4 23:22:53 2013
@@ -18,18 +18,15 @@
 
 package arq.examples.update;
 
-import org.apache.jena.riot.RiotWriter ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFWriterMgr ;
 
 import com.hp.hpl.jena.sparql.modify.request.Target ;
 import com.hp.hpl.jena.sparql.modify.request.UpdateCreate ;
 import com.hp.hpl.jena.sparql.modify.request.UpdateDrop ;
 import com.hp.hpl.jena.sparql.modify.request.UpdateLoad ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
-import com.hp.hpl.jena.update.GraphStore ;
-import com.hp.hpl.jena.update.GraphStoreFactory ;
-import com.hp.hpl.jena.update.UpdateAction ;
-import com.hp.hpl.jena.update.UpdateFactory ;
-import com.hp.hpl.jena.update.UpdateRequest ;
+import com.hp.hpl.jena.update.* ;
 
 /** Build an update request up out of indvidiual Update objects, not by parsing.
  *  This is quite low-level.
@@ -56,7 +53,6 @@ public class UpdateProgrammatic
         System.out.println();
         
         System.out.println("# N-Quads: S P O G") ;
-        RiotWriter.writeNQuads(System.out, graphStore) ;
-
+        RDFWriterMgr.write(System.out, graphStore, Lang.NQUADS) ;
     }
 }

Modified: jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateReadFromFile.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateReadFromFile.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateReadFromFile.java (original)
+++ jena/branches/arq-riot-output/src-examples/arq/examples/update/UpdateReadFromFile.java Mon Mar  4 23:22:53 2013
@@ -18,14 +18,11 @@
 
 package arq.examples.update;
 
-import org.apache.jena.riot.RiotWriter ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFWriterMgr ;
 
 import com.hp.hpl.jena.sparql.sse.SSE ;
-import com.hp.hpl.jena.update.GraphStore ;
-import com.hp.hpl.jena.update.GraphStoreFactory ;
-import com.hp.hpl.jena.update.UpdateAction ;
-import com.hp.hpl.jena.update.UpdateFactory ;
-import com.hp.hpl.jena.update.UpdateRequest ;
+import com.hp.hpl.jena.update.* ;
 
 /** Simple example of SPARQL/Update : read a update script from a file and execute it */ 
 public class UpdateReadFromFile
@@ -52,6 +49,6 @@ public class UpdateReadFromFile
         System.out.println();
         
         System.out.println("# N-Quads: S P O G") ;
-        RiotWriter.writeNQuads(System.out, graphStore) ;
+        RDFWriterMgr.write(System.out, graphStore, Lang.NQUADS) ;
     }
 }

Modified: jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/binding/BindingOutputStream.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/binding/BindingOutputStream.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/binding/BindingOutputStream.java (original)
+++ jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/binding/BindingOutputStream.java Mon Mar  4 23:22:53 2013
@@ -18,28 +18,29 @@
 
 package com.hp.hpl.jena.sparql.engine.binding;
 
-import java.io.* ;
+import java.io.IOException ;
+import java.io.OutputStream ;
+import java.io.Writer ;
 import java.util.List ;
 import java.util.Map ;
 
-
-import com.hp.hpl.jena.graph.Node ;
-
 import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.io.WriterI ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Sink ;
 import org.apache.jena.iri.IRI ;
 import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.out.NodeFormatter ;
 import org.apache.jena.riot.out.NodeFormatterTTL ;
-import org.apache.jena.riot.system.PrefixMap;
+import org.apache.jena.riot.system.PrefixMap ;
 
+import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.sparql.core.Var ;
 
 /** Parser for the RDF Tuples language */
 public class BindingOutputStream implements Sink<Binding>
 {
-    private final Writer bw ;
+    private final WriterI bw ;
     private Binding lastBinding = null ;
     private List<Var> vars = null ;
     private PrefixMap pmap ;
@@ -70,7 +71,7 @@ public class BindingOutputStream impleme
     
     private BindingOutputStream(Writer out, List<Var> variables, PrefixMap prefixMapping)
     {
-        bw = out ;
+        bw = IO.wrap(out) ;
         vars = variables ;
         pmap = prefixMapping ;
         

Modified: jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/Pattern.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/Pattern.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/Pattern.java (original)
+++ jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/engine/optimizer/Pattern.java Mon Mar  4 23:22:53 2013
@@ -58,7 +58,7 @@ public class Pattern implements Printabl
         out.print(objItem.toString()) ;
         out.print(")") ;
         out.print(" ") ;
-        out.print(weight) ;
+        out.print(Double.toString(weight)) ;
         out.print(")") ;
     }
 }

Modified: jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVOutput.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVOutput.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVOutput.java (original)
+++ jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVOutput.java Mon Mar  4 23:22:53 2013
@@ -18,13 +18,13 @@
 
 package com.hp.hpl.jena.sparql.resultset;
 
-import java.io.BufferedWriter ;
 import java.io.IOException ;
 import java.io.OutputStream ;
-import java.io.Writer ;
 import java.util.ArrayList ;
 import java.util.List ;
 
+import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.io.WriterI ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.riot.out.NodeFormatterTTL ;
 
@@ -33,7 +33,6 @@ import com.hp.hpl.jena.query.ResultSet ;
 import com.hp.hpl.jena.sparql.ARQException ;
 import com.hp.hpl.jena.sparql.core.Var ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
-import com.hp.hpl.jena.util.FileUtils ;
 
 /**
  * Tab Separated Values.
@@ -52,57 +51,51 @@ public class TSVOutput extends OutputBas
     @Override
     public void format(OutputStream out, ResultSet resultSet)
     {
-        try {
-        	//Use a Turtle formatter to format terms
-        	NodeFormatterTTL formatter = new NodeFormatterTTL(null, null);
-        	
-            Writer w = FileUtils.asUTF8(out) ;
-            w = new BufferedWriter(w) ;
-            
-            String sep = null ;
-            List<String> varNames = resultSet.getResultVars() ;
-            List<Var> vars = new ArrayList<Var>(varNames.size()) ;
-            
-            // writes the variables on the first line
-            for( String v : varNames )
+        //Use a Turtle formatter to format terms
+        NodeFormatterTTL formatter = new NodeFormatterTTL(null, null);
+
+        WriterI w = IO.wrapUTF8(out) ; 
+
+        String sep = null ;
+        List<String> varNames = resultSet.getResultVars() ;
+        List<Var> vars = new ArrayList<Var>(varNames.size()) ;
+
+        // writes the variables on the first line
+        for( String v : varNames )
+        {
+            if ( sep != null )
+                w.write(sep) ;
+            else
+                sep = SEP ;
+            Var var = Var.alloc(v) ;
+            w.write(var.toString()) ; 
+            vars.add(var) ;
+        }
+        w.write(NL) ;
+
+        // writes one binding by line
+        for ( ; resultSet.hasNext() ; )
+        {
+            sep = null ;
+            Binding b = resultSet.nextBinding() ;
+
+            for( Var v : vars )
             {
                 if ( sep != null )
                     w.write(sep) ;
-                else
-                    sep = SEP ;
-                Var var = Var.alloc(v) ;
-                w.write(var.toString()) ; 
-                vars.add(var) ;
-            }
-            w.write(NL) ;
-            
-            // writes one binding by line
-            for ( ; resultSet.hasNext() ; )
-            {
-                sep = null ;
-                Binding b = resultSet.nextBinding() ;
-                
-                for( Var v : vars )
+                sep = SEP ;
+
+                Node n = b.get(v) ;
+                if ( n != null )
                 {
-                    if ( sep != null )
-                        w.write(sep) ;
-                    sep = SEP ;
-                    
-                    Node n = b.get(v) ;
-                    if ( n != null )
-                    {
-                        // This will not include a raw tab.
-                        formatter.format(w, n);
-                    }
+                    // This will not include a raw tab.
+                    formatter.format(w, n);
                 }
-                w.write(NL) ;
             }
-            
-            w.flush() ;
-        } catch (IOException ex)
-        {
-            throw new ARQException(ex) ;
+            w.write(NL) ;
         }
+
+        w.flush() ;
     }
 
     static final byte[] headerBytes = StrUtils.asUTF8bytes("?_askResult" + NL);

Modified: jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java (original)
+++ jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java Mon Mar  4 23:22:53 2013
@@ -296,7 +296,7 @@ public class QuerySerializer implements 
         for ( Var v : variables )
         {
             out.print(" ") ;
-            out.print(v) ;
+            out.print(v.toString()) ;
         }
         out.print(" )") ;
         out.print(" {") ;

Modified: jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java (original)
+++ jena/branches/arq-riot-output/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java Mon Mar  4 23:22:53 2013
@@ -440,7 +440,7 @@ public class WriterOp
                     Var v = agg.getVar() ;
                     String str = agg.getAggregator().toPrefixString() ;
                     start() ;
-                    out.print(v) ;
+                    out.print(v.toString()) ;
                     out.print(" ") ;
                     out.print(str) ;
                     finish() ;

Modified: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IO.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IO.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IO.java (original)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IO.java Mon Mar  4 23:22:53 2013
@@ -128,11 +128,29 @@ public class IO
         return new BufferedWriter(w) ;
     }
 
+    /** Wrap in a general writer interface */ 
+    static public WriterI wrap(Writer w)            
+    { 
+        return Writer2.wrap(w) ;
+    }
+    
+    /** Wrap in a general writer interface */ 
+    static public WriterI wrapUTF8(OutputStream out)    { return wrap(asUTF8(out)); } 
+    
     /** Create a print writer that uses UTF-8 encoding */ 
-
     static public PrintWriter asPrintWriterUTF8(OutputStream out) {
         return new PrintWriter(asUTF8(out)); 
     }
+
+    public static void close(org.apache.jena.atlas.lib.Closeable resource)
+    {
+        resource.close() ;
+    }
+
+    public static void closeSilent(org.apache.jena.atlas.lib.Closeable resource)
+    {
+        try { resource.close(); } catch (Exception ex) { }
+    }
     
     public static void close(java.io.Closeable resource)
     {
@@ -148,6 +166,12 @@ public class IO
         try { resource.close(); } catch (IOException ex) { }
     }
     
+    public static void closeSilent(IndentedWriter resource)
+    {
+        if ( resource == null )
+            return ;
+        try { resource.close();  } catch (Exception ex) { }
+    }
 
     public static void exception(IOException ex)
     {
@@ -173,6 +197,13 @@ public class IO
         try { out.flush(); } catch (IOException ex) { exception(ex) ; } 
     }
 
+    public static void flush(WriterI out)
+    {
+        if ( out == null )
+            return ;
+        out.flush(); 
+    }
+
     private static final int BUFFER_SIZE = 8*1024 ; 
     
     public static byte[] readWholeFile(InputStream in) 

Modified: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IndentedWriter.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IndentedWriter.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IndentedWriter.java (original)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/IndentedWriter.java Mon Mar  4 23:22:53 2013
@@ -24,12 +24,13 @@ import java.io.OutputStream ;
 import java.io.Writer ;
 
 import org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.atlas.lib.Closeable ;
 
 /** A writer that records what the current indentation level is, and
  *  uses that to insert a prefix at each line. 
  *  It can also insert line numbers at the beginning of lines. */
 
-public class IndentedWriter
+public class IndentedWriter extends WriterIBase implements WriterI, Closeable
 {
     /** Stdout wrapped in an IndentedWriter - no line numbers */
     public static final IndentedWriter stdout = new IndentedWriter(System.out) ; 
@@ -84,33 +85,57 @@ public class IndentedWriter
         startingNewLine = true ;
     }
 
-    public void print(Object obj) 
+    @Override
+    public void print(String str) 
     {
-        String s = "null" ;
-        if ( obj != null )
-            s = obj.toString() ;
+        if ( str == null )
+            str = "null" ;
         if ( false )
         {
             // Don't check for embedded newlines.
-            write(s) ;
+            write$(str) ;
             return ;
         }
-        for ( int i = 0 ; i < s.length() ; i++ )
-            printOneChar(s.charAt(i)) ;
+        for ( int i = 0 ; i < str.length() ; i++ )
+            printOneChar(str.charAt(i)) ;
     }
     
+    @Override
     public void printf(String formatStr, Object... args)
     {
         print(format(formatStr, args)) ;
     }
     
+    @Override
     public void print(char ch) { printOneChar(ch) ; }
     
-    public void println(Object obj) { print(obj) ; newline() ; }
+    @Override
+    public void println(String str) { print(str) ; newline() ; }
     public void println(char ch)  { print(ch) ; newline() ; }
 
+    @Override
     public void println() { newline() ; }
     
+    @Override
+    public void print(char[] cbuf)
+    {
+        for ( int i = 0 ; i < cbuf.length ; i++ )
+            printOneChar(cbuf[i]) ;
+    }
+
+    /** Print a string N times */
+    public void print(String s, int n)
+    {
+        for ( int i = 0 ; i < n ; i++ ) print(s) ;
+    }
+
+    /** Print a char N times */
+    public void print(char ch, int n)
+    {
+        lineStart() ;
+        for ( int i = 0 ; i < n ; i++ ) printOneChar(ch) ;
+    }
+
     private char lastChar = '\0' ;
     // Worker
     private void printOneChar(char ch) 
@@ -132,29 +157,16 @@ public class IndentedWriter
             newline() ;
             return ;
         }
-        write(ch) ;
+        write$(ch) ;
         column += 1 ;
     }
 
-    private void write(char ch) 
+    private void write$(char ch) 
     { try { out.write(ch) ; } catch (IOException ex) { throw new AtlasException(ex) ; } }
     
-    private void write(String s) 
+    private void write$(String s) 
     { try { out.write(s) ; } catch (IOException ex) { throw new AtlasException(ex) ; } }
     
-    /** Print a string N times */
-    public void print(String s, int n)
-    {
-        for ( int i = 0 ; i < n ; i++ ) print(s) ;
-    }
-
-    /** Print a char N times */
-    public void print(char ch, int n)
-    {
-        lineStart() ;
-        for ( int i = 0 ; i < n ; i++ ) printOneChar(ch) ;
-    }
-    
     public void newline()
     {
         lineStart() ; 
@@ -162,7 +174,7 @@ public class IndentedWriter
         if ( endOfLineMarker != null )
             print(endOfLineMarker) ;
         if ( ! flatMode )
-            write('\n') ;
+            write$('\n') ;
         startingNewLine = true ;
         row++ ;
         column = 0 ;
@@ -179,7 +191,10 @@ public class IndentedWriter
             newline() ;
     }
     
+    @Override
     public void close() { try { out.close(); } catch (IOException ex) {} }
+    
+    @Override
     public void flush() { try { out.flush(); } catch (IOException ex) {} }
     
     /** Pad to the indent (if we are before it) */
@@ -209,7 +224,7 @@ public class IndentedWriter
         int spaces = col - column  ;
         for ( int i = 0 ; i < spaces ; i++ )
         {
-            write(' ') ;        // Always a space.
+            write$(' ') ;        // Always a space.
             column++ ;
         }
     }
@@ -221,7 +236,7 @@ public class IndentedWriter
         {
             for ( int i = column ; i < currentIndent ; i++ )
             {
-                write(padChar) ;
+                write$(padChar) ;
                 column++ ;
             }
         }
@@ -229,7 +244,7 @@ public class IndentedWriter
         {
             for ( int i = column ; i < currentIndent ; i += padString.length() )
             {
-                write(padString) ;
+                write$(padString) ;
                 column += padString.length() ;
             }
         }
@@ -303,9 +318,9 @@ public class IndentedWriter
         currentIndent -= x ;
     }
     
-    public void setUnitIndent(int x) { unitIndent = x ; }
-    public int  getUnitIndent() { return unitIndent ; }
-    public boolean atLineStart() { return startingNewLine ; }
+    public void setUnitIndent(int x)    { unitIndent = x ; }
+    public int  getUnitIndent()         { return unitIndent ; }
+    public boolean atLineStart()        { return startingNewLine ; }
     
     private void lineStart()
     {
@@ -313,7 +328,7 @@ public class IndentedWriter
         {
             if ( startingNewLine && row > 1 )
                 // Space between each line.
-                write(' ') ;
+                write$(' ') ;
             startingNewLine = false ;
             return ;
         }
@@ -334,9 +349,9 @@ public class IndentedWriter
             return ;
         String s = Integer.toString(row) ;
         for ( int i = 0 ; i < WidthLineNumber-s.length() ; i++ )
-            write(' ') ;
-        write(s) ;
-        write(' ') ;
+            write$(' ') ;
+        write$(s) ;
+        write$(' ') ;
     }
     
     @Override

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/StringWriterI.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/StringWriterI.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/StringWriterI.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/StringWriterI.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,30 @@
+/**
+ * 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.atlas.io;
+
+import java.io.StringWriter ;
+
+public class StringWriterI extends Writer2
+{
+    public StringWriterI()
+    {
+        super(new StringWriter()) ;
+    }
+}
+

Modified: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/Writer2.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/Writer2.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/Writer2.java (original)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/Writer2.java Mon Mar  4 23:22:53 2013
@@ -18,6 +18,7 @@
 
 package org.apache.jena.atlas.io;
 
+import java.io.BufferedWriter ;
 import java.io.IOException ;
 import java.io.Writer ;
 
@@ -25,36 +26,68 @@ import org.apache.jena.atlas.lib.Closeab
 
 /** A Writer, without the checked exceptions. */
 
-public final class Writer2 implements Closeable
+public class Writer2 extends WriterIBase implements WriterI, Closeable
 {
-    private final Writer writer ;
+    protected final Writer writer ;
 
-    public static Writer2 wrap(Writer writer) { return new Writer2(writer) ; }
-    
-    public Writer2(Writer writer) { this.writer = writer ; }
+    public static Writer2 wrap(Writer writer)
+    {
+        if ( ! ( writer instanceof BufferedWriter ) )
+            writer = new BufferedWriter(writer) ;
+        return new Writer2(writer) ;
+    }
     
+    protected Writer2(Writer writer) { this.writer = writer ; }
 
-    public void output(int ch)
-    { try { writer.write(ch) ; } catch (IOException ex) { IO.exception(ex) ; } }
+    @Override
+    public void print(char ch)
+    { 
+        try { writer.write(ch) ; } catch (IOException ex) { IO.exception(ex) ; }
+    }
 
-    public void output(String string)
-    { try { writer.write(string) ; } catch (IOException ex) { IO.exception(ex) ; } }
+    @Override
+    public void print(String string)
+    { 
+        try { writer.write(string) ; } catch (IOException ex) { IO.exception(ex) ; }
+    }
 
-    public void output(String string, int off, int len)
-    { try { writer.write(string, off, len) ; } catch (IOException ex) { IO.exception(ex) ; } }
-    
-    public void output(char[] cbuf)
-    { try { writer.write(cbuf) ; } catch (IOException ex) { IO.exception(ex) ; } }
+    @Override
+    public void print(char[] cbuf)
+    {
+        try { writer.write(cbuf) ; } catch (IOException ex) { IO.exception(ex) ; }
+    }
 
-    public void output(char[] cbuf, int off, int len)
-    { try { writer.write(cbuf, off, len) ; } catch (IOException ex) { IO.exception(ex) ; } }
-    
+    @Override
     public void flush()
-    { try { writer.flush() ; } catch (IOException ex) { IO.exception(ex) ; } }
+    {
+        try { writer.flush() ; } catch (IOException ex) { IO.exception(ex) ; }
+    }
 
     @Override
     public void close()
-    { try { writer.close() ; } catch (IOException ex) { IO.exception(ex) ; } }
+    {
+        try { writer.close() ; } catch (IOException ex) { IO.exception(ex) ; }
+    }
 
+    @Override
+    public void printf(String fmt, Object... args)
+    {
+        print(String.format(fmt, args)) ;
+    }
+
+    @Override
+    public void println(String obj)
+    {
+        print(obj) ; print("\n") ;
+    }
+
+    @Override
+    public void println()
+    {
+        print("\n") ;
+    }
+    
+    @Override
+    public String toString() { return writer.toString() ; }
 }
 

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterI.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterI.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterI.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterI.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,43 @@
+/**
+ * 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.atlas.io;
+
+import org.apache.jena.atlas.lib.Closeable ;
+
+
+/** Simple abstraction of a string/character output stream */
+
+public interface WriterI extends Closeable
+{
+    public void write(char ch) ;
+    public void write(char[] cbuf) ; 
+    public void write(String string) ;
+
+    public void print(char ch) ;
+    public void print(char[] cbuf) ; 
+    public void print(String string) ;
+    public void printf(String fmt, Object ...arg) ;
+    public void println(String object) ;
+    public void println() ;
+    
+    public void flush() ;
+    @Override
+    public void close() ;
+}
+

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterIBase.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterIBase.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterIBase.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/io/WriterIBase.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,33 @@
+/**
+ * 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.atlas.io;
+
+
+/** Simple abstraction of a string/character output stream */
+
+public abstract class WriterIBase implements WriterI
+{
+    @Override
+    public final void write(char ch)          { print(ch) ; }
+    @Override
+    public final void write(char[] cbuf)      { print(cbuf) ; }
+    @Override
+    public final void write(String string)    { print(string) ; }
+}
+

Modified: jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/lib/ListUtils.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/lib/ListUtils.java (original)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/atlas/lib/ListUtils.java Mon Mar  4 23:22:53 2013
@@ -107,7 +107,7 @@ public class ListUtils
             public void apply(T item)
             {
                 if ( ! first ) out.print(sep) ;
-                out.print(item) ;
+                out.print(item.toString()) ;
                 first = false ;
             }
         } ;

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormat.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormat.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormat.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormat.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,118 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot;
+
+import org.apache.jena.atlas.lib.Lib ;
+
+/** Constants for writable formats */  
+public class RDFFormat
+{
+    /** Pretty printing variant */
+    public static RDFFormatVariant PRETTY       = new RDFFormatVariant("pretty" ) ;
+    /** Print in blocks, typically all triples with teh same subject in an incoming triple/quad stream */
+    public static RDFFormatVariant BLOCKS       = new RDFFormatVariant("blocks" ) ;
+    /** Print out one per line */
+    public static RDFFormatVariant FLAT         = new RDFFormatVariant("flat" ) ;
+    
+    public static RDFFormat TURTLE_PRETTY       = new RDFFormat(Lang.TURTLE, PRETTY) ;
+    public static RDFFormat TURTLE              = TURTLE_PRETTY ;
+    public static RDFFormat TTL                 = TURTLE_PRETTY ;
+    public static RDFFormat TURTLE_BLOCKS       = new RDFFormat(Lang.TURTLE, BLOCKS) ;
+    public static RDFFormat TURTLE_FLAT         = new RDFFormat(Lang.TURTLE, FLAT) ;
+    
+    public static RDFFormat NTRIPLES            = new RDFFormat(Lang.NTRIPLES) ;
+    public static RDFFormat NT                  = NTRIPLES ;
+    
+    public static RDFFormat NQUADS              = new RDFFormat(Lang.NQUADS) ;
+    public static RDFFormat NQ                  = NQUADS ;
+    
+    public static RDFFormat TRIG_PRETTY         = new RDFFormat(Lang.TRIG, PRETTY) ;
+    public static RDFFormat TRIG                = TRIG_PRETTY ;
+    public static RDFFormat TRIG_BLOCKS         = new RDFFormat(Lang.TRIG, BLOCKS) ;
+    public static RDFFormat TRIG_FLAT           = new RDFFormat(Lang.TRIG, FLAT) ;
+    
+    /** RDF/XML ABBREV variant*/
+    public static RDFFormatVariant ABBREV       = new RDFFormatVariant("pretty" ) ;
+    /** Basic RDF/XML variant */
+    public static RDFFormatVariant PLAIN        = new RDFFormatVariant("plain" ) ;
+    
+    public static RDFFormat RDFXML_PRETTY       = new RDFFormat(Lang.RDFXML, ABBREV) ;
+    public static RDFFormat RDFXML_ABBREV       = RDFXML_PRETTY ;
+    public static RDFFormat RDFXML              = RDFXML_PRETTY ;
+    public static RDFFormat RDFXML_PLAIN        = new RDFFormat(Lang.RDFXML, PLAIN) ;
+    
+    public static RDFFormat RDFJSON             = new RDFFormat(Lang.RDFJSON) ;
+    
+    /** The "null" output format (a sink that prints nothing, usually quite efficiently) */
+    public static RDFFormat RDFNULL             = new RDFFormat(Lang.RDFNULL) ;
+
+    private final Lang lang ;
+    private final RDFFormatVariant variant ;
+
+    public RDFFormat(Lang lang) { this(lang, null) ; }
+    
+    public RDFFormat(Lang lang, RDFFormatVariant variant)
+    {
+        this.lang = lang ;
+        this.variant = variant ;
+    }
+
+    public Lang getLang()
+    {
+        return lang ;
+    }
+
+    public RDFFormatVariant getVariant()
+    {
+        return variant ;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31 ;
+        int result = 1 ;
+        result = prime * result + ((lang == null) ? 0 : lang.hashCode()) ;
+        result = prime * result + ((variant == null) ? 0 : variant.hashCode()) ;
+        return result ;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true ;
+        if (obj == null) return false ;
+        if (getClass() != obj.getClass()) return false ;
+        RDFFormat other = (RDFFormat)obj ;
+        if ( ! Lib.equal(lang, other.lang) )
+            return false ;
+        if ( ! Lib.equal(variant, other.variant) )
+            return false ;
+        return true ;
+    }
+    
+    @Override
+    public String toString()
+    {
+        if ( variant == null )
+            return lang.getName() ;
+        return lang.getName()+"/"+variant ;
+    }
+}
+

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormatVariant.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormatVariant.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormatVariant.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFFormatVariant.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,59 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot;
+
+import org.apache.jena.atlas.lib.Lib ;
+
+import com.hp.hpl.jena.sparql.util.Symbol ;
+
+public class RDFFormatVariant
+{
+    private final Symbol symbol ;
+    
+    public RDFFormatVariant(String name)
+    {
+        symbol = Symbol.create(name) ;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31 ;
+        int result = 1 ;
+        result = prime * result + ((symbol == null) ? 0 : symbol.hashCode()) ;
+        return result ;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true ;
+        if (obj == null) return false ;
+        if (getClass() != obj.getClass()) return false ;
+        RDFFormatVariant other = (RDFFormatVariant)obj ;
+        if ( ! Lib.equal(symbol, other.symbol) ) return false ;
+        return true ;
+    }
+
+    @Override
+    public String toString()
+    {
+        return symbol.getSymbol() ;
+    }
+}

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterMgr.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterMgr.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterMgr.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterMgr.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,331 @@
+/** ;
+ * Licensed to the Apache Software Foundation (ASF) under 
+one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot;
+
+import java.io.OutputStream ;
+import java.io.StringWriter ;
+import java.io.Writer ;
+
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.system.RiotWriterLib ;
+
+import com.hp.hpl.jena.graph.Graph ;
+import com.hp.hpl.jena.query.Dataset ;
+import com.hp.hpl.jena.rdf.model.Model ;
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+
+public class RDFWriterMgr
+{
+    /** Write the model to the output stream in the default serialization for the language.
+     * @param out       OutputStream
+     * @param model     Graph to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(OutputStream out, Model model, Lang lang)
+    {
+        write(out, model.getGraph(), lang) ;
+    }
+
+    /** Write the model to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param model         Model to write
+     * @param serialization Serialization format
+     */
+    public static void write(OutputStream out, Model model, RDFFormat serialization)
+    {
+        write(out, model.getGraph(), serialization) ;
+    }
+    
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param model         Model to write
+     * @param lang          Serialization format
+     */
+    public static void write(StringWriter out, Model model, Lang lang)
+    {
+        write(out, model.getGraph(), lang) ;
+    }
+    
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param model         Model to write
+     * @param serialization Serialization format
+     */
+    public static void write(StringWriter out, Model model, RDFFormat serialization)
+    {
+        write(out, model.getGraph(), serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param model         Model to write
+     * @param serialization Serialization format
+     * @deprecated Use of writers is deprecated - use an OutputStream
+     */
+    @Deprecated
+    public static void write(Writer out, Model model, RDFFormat serialization)
+    {
+        write(out, model.getGraph(), serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out       OutputStream
+     * @param graph     Graph to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(OutputStream out, Graph graph, Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        write(out, graph, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param graph         Graph to write
+     * @param serialization Serialization format
+     */
+    public static void write(OutputStream out, Graph graph, RDFFormat serialization)
+    {
+        write$(out, graph, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param graph         Graph to write
+     * @param lang          Serialization format
+     */
+    public static void write(StringWriter out, Graph graph, Lang lang)
+    {
+        // Only known reasonable use of a Writer
+        write$(out, graph, RDFWriterRegistry.defaultSerialization(lang)) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param graph         Graph to write
+     * @param serialization Serialization format
+     */
+    public static void write(StringWriter out, Graph graph, RDFFormat serialization)
+    {
+        // Only known reasonable use of a Writer
+        write$(out, graph, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param graph         Graph to write
+     * @param serialization Serialization format
+     * @deprecated Use of writers is deprecated - use an OutputStream
+     */
+    @Deprecated
+    public static void write(Writer out, Graph graph, RDFFormat serialization)
+    {
+        write$(out, graph, serialization) ;
+    }
+    
+    /** Write the Dataset to the output stream in the default serialization for the language.
+     * @param out       OutputStream
+     * @param dataset   Dataset to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(OutputStream out, Dataset dataset, Lang lang)
+    {
+        write(out, dataset.asDatasetGraph(), lang) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param dataset       Dataset to write
+     * @param serialization Serialization format
+     */
+    public static void write(OutputStream out, Dataset dataset, RDFFormat serialization)
+    {
+        write(out, dataset.asDatasetGraph(), serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           Writer
+     * @param dataset       Dataset to write
+     * @param serialization Serialization format
+     */
+    public static void write(StringWriter out, Dataset dataset, RDFFormat serialization)
+    {
+        write$(out, dataset.asDatasetGraph(), serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           StringWriter
+     * @param dataset       Dataset to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(StringWriter out, Dataset dataset, Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        write$(out, dataset.asDatasetGraph(), serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           Writer
+     * @param dataset       Dataset to write
+     * @param serialization Serialization format
+     * @deprecated Use of writers is deprecated - use an OutputStream
+     */
+    @Deprecated
+    public static void write(Writer out, Dataset dataset, RDFFormat serialization)
+    {
+        write$(out, dataset.asDatasetGraph(), serialization) ;
+    }
+
+    /** Write the DatasetGraph to the output stream in the default serialization for the language.
+     * @param out       OutputStream
+     * @param dataset   DatasetGraph to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(OutputStream out, DatasetGraph dataset, Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        write(out, dataset, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           OutputStream
+     * @param dataset       DatasetGraph to write
+     * @param serialization Serialization format
+     */
+    public static void write(OutputStream out, DatasetGraph dataset, RDFFormat serialization)
+    {
+        write$(out, dataset, serialization) ;
+    }
+
+    /** Write the DatasetGraph to the output stream in the default serialization for the language.
+     * @param out       StringWriter
+     * @param dataset   DatasetGraph to write
+     * @param lang      Language for the seralization.
+     */
+    public static void write(StringWriter out, DatasetGraph dataset, Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        write(out, dataset, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           StringWriter
+     * @param dataset       DatasetGraph to write
+     * @param serialization Serialization format
+     */
+    public static void write(StringWriter out, DatasetGraph dataset, RDFFormat serialization)
+    {
+        write$(out, dataset, serialization) ;
+    }
+
+    /** Write the graph to the output stream in the default serialization for the language.
+     * @param out           Writer
+     * @param dataset       DatasetGraph to write
+     * @param serialization Serialization format
+     * @deprecated Use of writers is deprecated - use an OutputStream
+     */
+    @Deprecated
+    public static void write(Writer out, DatasetGraph dataset, RDFFormat serialization)
+    {
+        write$(out, dataset, serialization) ;
+    }
+
+    /** Create a writer for an RDF language
+     * @param lang   Language for the seralization.
+     * @return WriterGraphRIOT
+     */
+    
+    public static WriterGraphRIOT createGraphWriter(Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        return createGraphWriter$(serialization) ;    
+    }
+    
+    /** Create a writer for an RDF language
+     * @param serialization Serialization format
+     * @return WriterGraphRIOT
+     */
+    public static WriterGraphRIOT createGraphWriter(RDFFormat serialization)
+    {
+        return createGraphWriter$(serialization) ;    
+    }
+
+    /** Create a writer for an RDF language
+     * @param lang   Language for the seralization.
+     * @return WriterGraphRIOT
+     */
+    
+    public static WriterDatasetRIOT createDatasetWriter(Lang lang)
+    {
+        RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ;
+        return createDatasetWriter$(serialization) ;    
+    }
+    
+    /** Create a writer for an RDF language
+     * @param serialization Serialization format
+     * @return WriterGraphRIOT
+     */
+    public static WriterDatasetRIOT createDatasetWriter(RDFFormat serialization)
+    {
+        return createDatasetWriter$(serialization) ;    
+    }
+    
+    private static WriterGraphRIOT createGraphWriter$(RDFFormat serialization)
+    {
+        WriterGraphRIOTFactory wf = RDFWriterRegistry.getWriterGraphFactory(serialization) ;
+        if ( wf == null )
+            throw new RiotException("No graph writer for "+serialization) ; 
+        return wf.create(serialization) ;
+    }
+
+    private static WriterDatasetRIOT createDatasetWriter$(RDFFormat serialization)
+    {
+        WriterDatasetRIOTFactory wf = RDFWriterRegistry.getWriterDatasetFactory(serialization) ;
+        if ( wf == null )
+            throw new RiotException("No dataset writer for "+serialization) ; 
+        return wf.create(serialization) ;
+    }
+
+    private static void write$(OutputStream out, Graph graph, RDFFormat serialization)
+    {
+        WriterGraphRIOT w = createGraphWriter$(serialization) ;
+        w.write(out, graph, RiotWriterLib.prefixMap(graph), null, null) ;
+    }
+
+    private static void write$(Writer out, Graph graph, RDFFormat serialization)
+    {
+        WriterGraphRIOT w = createGraphWriter$(serialization) ;
+        w.write(out, graph, RiotWriterLib.prefixMap(graph), null, null) ;
+    }
+
+    private static void write$(OutputStream out, DatasetGraph dataset, RDFFormat serialization)
+    {
+        WriterDatasetRIOT w = createDatasetWriter$(serialization) ;
+        w.write(out, dataset, RiotWriterLib.prefixMap(dataset), null, null) ;
+    }
+
+    private static void write$(Writer out, DatasetGraph dataset, RDFFormat serialization)
+    {
+        WriterDatasetRIOT w = createDatasetWriter$(serialization) ;
+        w.write(out, dataset, RiotWriterLib.prefixMap(dataset), null, null) ;
+    }
+}
+

Added: jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java?rev=1452591&view=auto
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java (added)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java Mon Mar  4 23:22:53 2013
@@ -0,0 +1,228 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot;
+
+import java.util.Collection ;
+import java.util.Collections ;
+import java.util.HashMap ;
+import java.util.Map ;
+
+import org.apache.jena.atlas.lib.Lib ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RIOT ;
+import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.system.RiotWriterLib ;
+
+public class RDFWriterRegistry
+{
+    // All mention and use of Writers is purely for compatibility.
+    // They are not a good idea (StringWriter is an exception).
+    // Let the serializer deal with the character issues.
+    // UTF-8 is universal - but UTF-8 is not the default in Java ("platform encoding" is).
+    
+    static { RIOT.init() ; }
+
+    private static Map<RDFFormat, WriterGraphRIOTFactory> registryGraph     = new HashMap<RDFFormat, WriterGraphRIOTFactory>() ;
+    private static Map<RDFFormat, WriterDatasetRIOTFactory> registryDataset = new HashMap<RDFFormat, WriterDatasetRIOTFactory>() ;
+    private static Map<Lang, RDFFormat> langToFormat                        = new HashMap<Lang, RDFFormat>() ;
+    
+    // Writing a graph
+    static WriterGraphRIOTFactory wgfactory = new WriterGraphRIOTFactory() {
+        @Override
+        public WriterGraphRIOT create(RDFFormat serialization)
+        {
+            // Built-ins
+            if ( Lib.equal(RDFFormat.TURTLE_PRETTY, serialization) )
+                return RiotWriter.createTurtle() ;
+            if ( Lib.equal(RDFFormat.TURTLE_BLOCKS, serialization) )
+                return RiotWriter.createTurtleStreaming() ;
+            if ( Lib.equal(RDFFormat.TURTLE_FLAT, serialization) )
+                return RiotWriter.createTurtleFlat() ;
+            if ( Lib.equal(RDFFormat.NTRIPLES, serialization) )
+                return RiotWriter.createNTriples() ;
+            if ( Lib.equal(RDFFormat.RDFJSON, serialization) )
+                return RiotWriter.createRDFJSON() ;
+            if ( Lib.equal(RDFFormat.RDFXML_PRETTY, serialization) )
+                return RiotWriter.createRDFXMLAbbrev() ;
+            if ( Lib.equal(RDFFormat.RDFXML_PLAIN, serialization) )
+                return RiotWriter.createRDFXMLPlain() ;
+            
+            WriterDatasetRIOT dsw = wdsfactory.create(serialization) ;
+            if ( dsw != null )
+                return RiotWriterLib.adapter(dsw) ;
+            return null ;
+    }} ;
+        
+    
+    // Writing a dataset
+    static WriterDatasetRIOTFactory wdsfactory = new WriterDatasetRIOTFactory() {
+        @Override
+        public WriterDatasetRIOT create(RDFFormat serialization)
+        {
+            if ( Lib.equal(RDFFormat.TRIG_PRETTY, serialization) )
+                return RiotWriter.createTrig() ;
+            if ( Lib.equal(RDFFormat.TRIG_BLOCKS, serialization) )
+                return RiotWriter.createTrigStreaming() ;
+            if ( Lib.equal(RDFFormat.TRIG_FLAT, serialization) )
+                return RiotWriter.createTrigFlat() ;
+            if ( Lib.equal(RDFFormat.NQUADS, serialization) )
+                return RiotWriter.createNQuads() ;
+            if ( Lib.equal(RDFFormat.RDFNULL, serialization) )
+                return RiotWriter.createRDFNULL() ;
+            return null ;
+    }} ;
+
+     public static void init() {}
+     static { init$() ; }
+     private static void init$()
+     {
+         // Language to format.
+         register(Lang.TURTLE,      RDFFormat.TURTLE) ;
+         register(Lang.N3,          RDFFormat.TURTLE) ;
+         register(Lang.NTRIPLES,    RDFFormat.NTRIPLES) ;
+         register(Lang.RDFXML,      RDFFormat.RDFXML) ;
+         register(Lang.RDFJSON,     RDFFormat.RDFJSON) ;
+
+         register(Lang.TRIG,        RDFFormat.TRIG) ;
+         register(Lang.NQUADS,      RDFFormat.NQUADS) ;
+         register(Lang.RDFNULL,     RDFFormat.RDFNULL) ;
+
+         // Writer factories.
+         register(RDFFormat.TURTLE_PRETTY,  wgfactory) ;
+         register(RDFFormat.TURTLE_BLOCKS,  wgfactory) ;
+         register(RDFFormat.TURTLE_FLAT,    wgfactory) ;
+
+         register(RDFFormat.NTRIPLES,       wgfactory) ;
+         register(RDFFormat.RDFJSON,        wgfactory) ;
+
+         register(RDFFormat.RDFXML_PRETTY,  wgfactory) ;
+         register(RDFFormat.RDFXML_PLAIN,   wgfactory) ;
+
+         // Graphs in a quad format.
+         register(RDFFormat.TRIG_PRETTY,    wgfactory) ;
+         register(RDFFormat.TRIG_BLOCKS,    wgfactory) ;
+         register(RDFFormat.TRIG_FLAT,      wgfactory) ;
+
+         register(RDFFormat.NQUADS,         wgfactory) ;
+         register(RDFFormat.RDFNULL,        wgfactory) ;
+         
+         // Datasets
+         register(RDFFormat.TRIG_PRETTY,    wdsfactory) ;
+         register(RDFFormat.TRIG_BLOCKS,    wdsfactory) ;
+         register(RDFFormat.TRIG_FLAT,      wdsfactory) ;
+
+         register(RDFFormat.NQUADS,         wdsfactory) ;
+         register(RDFFormat.RDFNULL,        wdsfactory) ;
+     }
+    
+    /** Register the serialization for graphs and it's associated factory
+     * @param serialization         RDFFormat for the output format.
+     * @param graphWriterFactory    Source of writer engines
+     */
+    public static void register(RDFFormat serialization, WriterGraphRIOTFactory graphWriterFactory)
+    {
+        registryGraph.put(serialization, graphWriterFactory) ;
+    }
+
+    /** Register the serialization for datasets and it's associated factory
+     * @param serialization         RDFFormat for the output format.
+     * @param datasetWriterFactory    Source of writer engines
+     */
+    public static void register(RDFFormat serialization, WriterDatasetRIOTFactory datasetWriterFactory)
+    {
+        registryDataset.put(serialization, datasetWriterFactory) ;
+    }
+
+    /** Register an RDFFormat */
+    private static void register(RDFFormat serialization)
+    { }
+    
+    /** Register the default serialization for the language
+     * @param lang      Languages
+     * @param format    The serialization forma to use when the language is used for writing.
+     */
+    public static void register(Lang lang, RDFFormat format)
+    {
+        register(format) ;
+        langToFormat.put(lang, format) ;
+    }
+    
+    /** Return the format registered as the default for the language */ 
+    public static RDFFormat defaultSerialization(Lang lang)
+    {
+        return langToFormat.get(lang) ;
+    }
+
+    /** Does the language have a registerdd output format? */
+    public static boolean contains(Lang lang)
+    { 
+        if ( ! langToFormat.containsKey(lang) ) return false ;
+        
+        RDFFormat fmt = langToFormat.get(lang) ;
+        return contains(fmt) ;
+    }
+
+    /** Is the RDFFormat registered for use? */ 
+    public static boolean contains(RDFFormat format)
+    { return langToFormat.containsKey(format.getLang()) && (registryGraph.containsKey(format) || registryDataset.containsKey(format)); }
+
+
+    /** All registered graph formats */ 
+    public static Collection<RDFFormat> registeredGraphFormats() {
+        return Collections.unmodifiableSet(registryGraph.keySet()) ;
+    }
+
+    /** All registered dataset formats */ 
+    public static Collection<RDFFormat> registeredDatasetFormats() {
+        return Collections.unmodifiableSet(registryDataset.keySet()) ;
+    }
+    
+    /** Get the graph writer factory asscoiated with the language */
+    public static WriterGraphRIOTFactory getWriterGraphFactory(Lang lang)
+    {
+        RDFFormat serialization = defaultSerialization(lang) ;
+        if ( serialization == null )
+            throw new RiotException("No default serialization for language "+lang) ;
+        return getWriterGraphFactory(serialization) ;
+    }
+
+    /** Get the graph writer factory asscoiated with the output format */
+    public static WriterGraphRIOTFactory getWriterGraphFactory(RDFFormat serialization)
+    {
+        return registryGraph.get(serialization) ;
+    }
+    
+    /** Get the dataset writer factory asscoiated with the language */
+    public static WriterDatasetRIOTFactory getWriterDatasetFactory(Lang lang)
+    {
+        RDFFormat serialization = defaultSerialization(lang) ;
+        if ( serialization == null )
+            throw new RiotException("No default serialization for language "+lang) ;
+        return getWriterDatasetFactory(serialization) ;  
+    }
+
+    /** Get the dataset writer factory asscoiated with the output format */
+    public static WriterDatasetRIOTFactory getWriterDatasetFactory(RDFFormat serialization)
+    {
+        if ( serialization == null )
+            return null ; 
+        return registryDataset.get(serialization) ;
+    }
+}
+

Modified: jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RIOT.java
URL: http://svn.apache.org/viewvc/jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RIOT.java?rev=1452591&r1=1452590&r2=1452591&view=diff
==============================================================================
--- jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RIOT.java (original)
+++ jena/branches/arq-riot-output/src/main/java/org/apache/jena/riot/RIOT.java Mon Mar  4 23:22:53 2013
@@ -19,6 +19,8 @@
 package org.apache.jena.riot;
 
 
+import org.apache.jena.riot.system.IO_Jena2 ;
+
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.sparql.SystemARQ ;
 import com.hp.hpl.jena.sparql.mgt.ARQMgt ;
@@ -69,6 +71,10 @@ public class RIOT
             RDFParserRegistry.init() ;
             IO_Jena.wireIntoJena() ;
 
+            // Writers
+            RDFWriterRegistry.init() ;
+            IO_Jena2.wireIntoJenaW() ;
+            
             // Don't register JMX info with ARQ as it may not be initialized
             // itself and we can get into a circularity.
             // This is done in ARQ.init at the proper moment.