/// <summary> /// Generates Output for Nodes in Notation 3 syntax. /// </summary> /// <param name="context">Writer Context.</param> /// <param name="n">Node to generate output for.</param> /// <param name="segment">Segment of the Triple being output.</param> /// <param name="indent">Indent to use for pretty printing.</param> /// <returns></returns> private String GenerateNodeOutput(CompressingTurtleWriterContext context, INode n, TripleSegment segment, int indent) { StringBuilder output = new StringBuilder(); switch (n.NodeType) { case NodeType.Blank: if (context.Collections.ContainsKey(n)) { output.Append(GenerateCollectionOutput(context, context.Collections[n], indent)); } else { return(context.NodeFormatter.Format(n, segment)); } break; case NodeType.GraphLiteral: if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.GraphLiteralPredicatesUnserializable("Notation 3")); } output.Append("{"); IGraphLiteralNode glit = (IGraphLiteralNode)n; StringBuilder temp = new StringBuilder(); CompressingTurtleWriterContext subcontext = new CompressingTurtleWriterContext(glit.SubGraph, new System.IO.StringWriter(temp)); subcontext.NodeFormatter = context.NodeFormatter; bool contextWritten = false; // Write Triples 1 at a Time on a single line foreach (Triple t in subcontext.Graph.Triples) { if (!contextWritten && t.Context != null && t.Context is VariableContext) { contextWritten = GenerateVariableQuantificationOutput(subcontext, (VariableContext)t.Context); if (contextWritten) { output.Append(temp.ToString()); } } output.Append(GenerateNodeOutput(subcontext, t.Subject, TripleSegment.Subject, 0)); output.Append(" "); output.Append(GenerateNodeOutput(subcontext, t.Predicate, TripleSegment.Predicate, 0)); output.Append(" "); output.Append(GenerateNodeOutput(subcontext, t.Object, TripleSegment.Object, 0)); output.Append(". "); } output.Append("}"); break; case NodeType.Literal: if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("Notation 3")); } return(context.NodeFormatter.Format(n, segment)); case NodeType.Uri: return(context.NodeFormatter.Format(n, segment)); case NodeType.Variable: return(context.NodeFormatter.Format(n, segment)); default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("Notation 3")); } return(output.ToString()); }