/// <summary> /// Generates the Output for a Graph as a String in CSV syntax /// </summary> /// <param name="globalContext">Context for writing the Store</param> /// <param name="context">Context for writing the Graph</param> /// <returns></returns> private String GenerateGraphOutput(ThreadedStoreWriterContext globalContext, BaseWriterContext context) { if (!WriterHelper.IsDefaultGraph(context.Graph.BaseUri)) { //Named Graphs have a fourth context field added foreach (Triple t in context.Graph.Triples) { this.GenerateNodeOutput(context, t.Subject, TripleSegment.Subject); context.Output.Write(','); this.GenerateNodeOutput(context, t.Predicate, TripleSegment.Predicate); context.Output.Write(','); this.GenerateNodeOutput(context, t.Object, TripleSegment.Object); context.Output.Write(','); context.Output.Write(this._formatter.FormatUri(context.Graph.BaseUri)); context.Output.Write("\r\n"); } } else { //Default Graph has an empty field added foreach (Triple t in context.Graph.Triples) { this.GenerateNodeOutput(context, t.Subject, TripleSegment.Subject); context.Output.Write(','); this.GenerateNodeOutput(context, t.Predicate, TripleSegment.Predicate); context.Output.Write(','); this.GenerateNodeOutput(context, t.Object, TripleSegment.Object); context.Output.Write(','); context.Output.Write("\r\n"); } } return(context.Output.ToString()); }
/// <summary> /// Thread Worker method which writes Graphs to the output /// </summary> /// <param name="globalContext">Context for writing the Store</param> private void SaveGraphs(TriGWriterContext globalContext) { try { Uri u = globalContext.GetNextUri(); while (u != null) { //Get the Graph from the Store if (WriterHelper.IsDefaultGraph(u) && !globalContext.Store.HasGraph(u)) { u = null; } IGraph g = globalContext.Store.Graphs[u]; //Generate the Graph Output and add to Stream TurtleWriterContext context = new TurtleWriterContext(g, new System.IO.StringWriter(), globalContext.PrettyPrint, globalContext.HighSpeedModePermitted); if (globalContext.CompressionLevel > WriterCompressionLevel.None) { context.NodeFormatter = new TurtleFormatter(globalContext.QNameMapper); } else { context.NodeFormatter = new UncompressedTurtleFormatter(); } String graphContent = this.GenerateGraphOutput(globalContext, context); try { Monitor.Enter(globalContext.Output); globalContext.Output.WriteLine(graphContent); globalContext.Output.Flush(); } catch { throw; } finally { Monitor.Exit(globalContext.Output); } //Get the Next Uri u = globalContext.GetNextUri(); } } catch (ThreadAbortException) { //We've been terminated, don't do anything #if !SILVERLIGHT Thread.ResetAbort(); #endif } catch (Exception ex) { throw new RdfStorageException("Error in Threaded Writer in Thread ID " + Thread.CurrentThread.ManagedThreadId, ex); } }
/// <summary> /// Thread Worker method which writes Graphs to the output /// </summary> /// <param name="globalContext">Context for writing the Store</param> private void SaveGraphs(ThreadedStoreWriterContext globalContext) { try { Uri u = globalContext.GetNextUri(); while (u != null) { //Get the Graph from the Store if (WriterHelper.IsDefaultGraph(u) && !globalContext.Store.HasGraph(u)) { u = null; } IGraph g = globalContext.Store.Graphs[u]; //Generate the Graph Output and add to Stream NTriplesWriterContext context = new NTriplesWriterContext(g, new System.IO.StringWriter(), globalContext.PrettyPrint, globalContext.HighSpeedModePermitted); String graphContent = this.GraphToNQuads(globalContext, context); if (!graphContent.Equals(String.Empty)) { try { Monitor.Enter(globalContext.Output); globalContext.Output.WriteLine(graphContent); globalContext.Output.Flush(); } catch { throw; } finally { Monitor.Exit(globalContext.Output); } } //Get the Next Uri u = globalContext.GetNextUri(); } } catch (ThreadAbortException) { //We've been terminated, don't do anything #if !SILVERLIGHT Thread.ResetAbort(); #endif } catch (Exception ex) { throw new RdfStorageException("Error in Threaded Writer in Thread ID " + Thread.CurrentThread.ManagedThreadId, ex); } }
private String GraphToNQuads(ThreadedStoreWriterContext globalContext, NTriplesWriterContext context) { if (context.Graph.IsEmpty) { return(String.Empty); } if (context.PrettyPrint && !WriterHelper.IsDefaultGraph(context.Graph.BaseUri)) { context.Output.WriteLine("# Graph: " + context.Graph.BaseUri.ToString()); } foreach (Triple t in context.Graph.Triples) { context.Output.WriteLine(this.TripleToNQuads(context, t)); } context.Output.WriteLine(); return(context.Output.ToString()); }
/// <summary> /// Converts a Triple into relevant NQuads Syntax /// </summary> /// <param name="context">Writer Context</param> /// <param name="t">Triple to convert</param> /// <returns></returns> private String TripleToNQuads(NTriplesWriterContext context, Triple t) { StringBuilder output = new StringBuilder(); output.Append(this.NodeToNTriples(context, t.Subject, TripleSegment.Subject)); output.Append(" "); output.Append(this.NodeToNTriples(context, t.Predicate, TripleSegment.Predicate)); output.Append(" "); output.Append(this.NodeToNTriples(context, t.Object, TripleSegment.Object)); if (t.GraphUri != null && !WriterHelper.IsDefaultGraph(t.GraphUri)) { output.Append(" <"); output.Append(context.UriFormatter.FormatUri(t.GraphUri)); output.Append(">"); } output.Append(" ."); return(output.ToString()); }
private void GraphToTriX(IGraph g, XmlWriter writer) { //Create the <graph> element writer.WriteStartElement("graph"); //Is the Graph Named? if (!WriterHelper.IsDefaultGraph(g.BaseUri)) { if (!g.BaseUri.ToString().StartsWith("trix:local:")) { writer.WriteStartElement("uri"); writer.WriteRaw(WriterHelper.EncodeForXml(g.BaseUri.ToString())); writer.WriteEndElement(); } else { writer.WriteStartElement("id"); writer.WriteRaw(WriterHelper.EncodeForXml(g.BaseUri.ToString().Substring(11))); writer.WriteEndElement(); } } //Output the Triples foreach (Triple t in g.Triples) { writer.WriteStartElement("triple"); this.NodeToTriX(t.Subject, writer); this.NodeToTriX(t.Predicate, writer); this.NodeToTriX(t.Object, writer); //</triple> writer.WriteEndElement(); } //</graph> writer.WriteEndElement(); }
/// <summary> /// Generates the Output for a Graph as a String in TriG syntax /// </summary> /// <param name="globalContext">Context for writing the Store</param> /// <param name="context">Context for writing the Graph</param> /// <returns></returns> private String GenerateGraphOutput(TriGWriterContext globalContext, TurtleWriterContext context) { if (!WriterHelper.IsDefaultGraph(context.Graph.BaseUri)) { //Named Graph String gname; String sep = (globalContext.N3CompatabilityMode) ? " = " : " "; if (globalContext.CompressionLevel > WriterCompressionLevel.None && globalContext.QNameMapper.ReduceToQName(context.Graph.BaseUri.ToString(), out gname)) { if (TurtleSpecsHelper.IsValidQName(gname)) { context.Output.WriteLine(gname + sep + "{"); } else { context.Output.WriteLine("<" + context.UriFormatter.FormatUri(context.Graph.BaseUri) + ">" + sep + "{"); } } else { context.Output.WriteLine("<" + context.UriFormatter.FormatUri(context.Graph.BaseUri) + ">" + sep + "{"); } } else { context.Output.WriteLine("{"); } //Generate Triples this.GenerateTripleOutput(globalContext, context); //Close the Graph context.Output.WriteLine("}"); return(context.Output.ToString()); }