/// <summary> /// Generates Output for Nodes in Turtle syntax /// </summary> /// <param name="globalContext">Context for writing the Store</param> /// <param name="context">Context for writing the Graph</param> /// <param name="n">Node to generate output for</param> /// <param name="segment">Segment of the Triple being written</param> /// <returns></returns> private String GenerateNodeOutput(TriGWriterContext globalContext, TurtleWriterContext context, INode n, TripleSegment segment) { switch (n.NodeType) { case NodeType.Blank: if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("TriG")); } break; case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("TriG")); case NodeType.Literal: if (segment == TripleSegment.Subject) { throw new RdfOutputException(WriterErrorMessages.LiteralSubjectsUnserializable("TriG")); } if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("TriG")); } break; case NodeType.Uri: break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("TriG")); } return(context.NodeFormatter.Format(n, segment)); }
/// <summary> /// Converts a Node into relevant NTriples Syntax. /// </summary> /// <param name="n">Node to convert.</param> /// <param name="context">Writer Context.</param> /// <param name="segment">Triple Segment being written.</param> /// <returns></returns> private string NodeToNTriples(NTriplesWriterContext context, INode n, TripleSegment segment) { switch (n.NodeType) { case NodeType.Blank: if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("NQuads")); } break; case NodeType.Literal: if (segment == TripleSegment.Subject) { throw new RdfOutputException(WriterErrorMessages.LiteralSubjectsUnserializable("NQuads")); } if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("NQuads")); } break; case NodeType.Uri: break; case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("NQuads")); default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("NQuads")); } return(context.NodeFormatter.Format(n)); }
private void GeneratePredicateOutput(RdfXmlWriterContext context, Triple t) { context.NamespaceMap.IncrementNesting(); // Must ensure a URI predicate switch (t.Predicate.NodeType) { case NodeType.Blank: throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("RDF/XML")); case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/XML")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("RDF/XML")); case NodeType.Variable: throw new RdfOutputException(WriterErrorMessages.VariableNodesUnserializable("RDF/XML")); } IUriNode p = (IUriNode)t.Predicate; // First generate the Predicate Node UriRefType outType; String uriref = GenerateUriRef(context, p.Uri, UriRefType.QName, out outType); String tempPrefix = null, tempUri = null; if (outType != UriRefType.QName) { // Need to generate a temporary namespace GenerateTemporaryNamespace(context, p, out tempPrefix, out tempUri); uriref = GenerateUriRef(context, p.Uri, UriRefType.QName, out outType); if (outType != UriRefType.QName) { throw new RdfOutputException(WriterErrorMessages.UnreducablePropertyURIUnserializable + " - '" + p.Uri + "'"); } } // Use the QName for the Node if (uriref.Contains(':')) { // Create an element in the appropriate namespace String ns = context.NamespaceMap.GetNamespaceUri(uriref.Substring(0, uriref.IndexOf(':'))).AbsoluteUri; context.Writer.WriteStartElement(uriref.Substring(0, uriref.IndexOf(':')), uriref.Substring(uriref.IndexOf(':') + 1), ns); } else { // Create an element in the default namespace context.Writer.WriteStartElement(uriref); } if (tempPrefix != null && tempUri != null) { context.Writer.WriteAttributeString("xmlns", tempPrefix, null, Uri.EscapeUriString(tempUri)); } // Then generate the Object Output GenerateObjectOutput(context, t); context.Writer.WriteEndElement(); context.NamespaceMap.DecrementNesting(); }
private void GeneratePredicateNode(RdfXmlWriterContext context, INode p) { switch (p.NodeType) { case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/XML")); case NodeType.Blank: throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("RDF/XML")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("RDF/XML")); case NodeType.Uri: // OK UriRefType rtype; String predRef = this.GenerateUriRef(context, ((IUriNode)p).Uri, UriRefType.QName, out rtype); String prefix, uri; prefix = uri = null; if (rtype != UriRefType.QName) { this.GenerateTemporaryNamespace(context, (IUriNode)p, out prefix, out uri); predRef = this.GenerateUriRef(context, ((IUriNode)p).Uri, UriRefType.QName, out rtype); if (rtype != UriRefType.QName) { throw new RdfOutputException(WriterErrorMessages.UnreducablePropertyURIUnserializable + " - '" + p.ToString() + "'"); } } this.GenerateElement(context, predRef); // Add Temporary Namespace to current XML Element // CORE-431: This is unecessary and causes malformed XML under monotouch // if (prefix != null && uri != null) // { // context.Writer.WriteStartAttribute("xmlns", prefix, null); // context.Writer.WriteRaw(Uri.EscapeUriString(WriterHelper.EncodeForXml(uri))); // context.Writer.WriteEndAttribute(); // } break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/XML")); } // Write the Predicate }
/// <summary> /// Generates Output for Nodes in Turtle 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 written</param> /// <param name="indent">Indentation</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 (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("Turtle")); } if (context.Collections.ContainsKey(n)) { output.Append(this.GenerateCollectionOutput(context, context.Collections[n], indent)); } else { return(context.NodeFormatter.Format(n, segment)); } break; case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("Turtle")); case NodeType.Literal: if (segment == TripleSegment.Subject) { throw new RdfOutputException(WriterErrorMessages.LiteralSubjectsUnserializable("Turtle")); } if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("Turtle")); } return(context.NodeFormatter.Format(n, segment)); case NodeType.Uri: return(context.NodeFormatter.Format(n, segment)); default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("Turtle")); } return(output.ToString()); }
private XmlElement GeneratePredicateNode(RdfXmlWriterContext context, INode p, ref int nextNamespaceID, List <String> tempNamespaces, XmlDocument doc, XmlElement subj) { XmlElement pred; switch (p.NodeType) { case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/XML")); case NodeType.Blank: throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("RDF/XML")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("RDF/XML")); case NodeType.Uri: //OK UriRefType rtype; String predRef = this.GenerateUriRef(context, (IUriNode)p, UriRefType.QName, tempNamespaces, out rtype); if (rtype != UriRefType.QName) { this.GenerateTemporaryNamespace(context, (IUriNode)p, ref nextNamespaceID, tempNamespaces, doc); predRef = this.GenerateUriRef(context, (IUriNode)p, UriRefType.QName, tempNamespaces, out rtype); if (rtype != UriRefType.QName) { throw new RdfOutputException(WriterErrorMessages.UnreducablePropertyURIUnserializable + " - '" + p.ToString() + "'"); } } pred = this.GenerateElement(context, predRef, doc); break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/XML")); } //Write the Predicate subj.AppendChild(pred); return(pred); }
/// <summary> /// Generates Output for the given Node. /// </summary> /// <param name="context">Writer Context.</param> /// <param name="n">Node.</param> /// <param name="segment">Triple Segment.</param> private void GenerateNodeOutput(BaseWriterContext context, INode n, TripleSegment segment) { switch (n.NodeType) { case NodeType.Blank: if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("CSV")); } context.Output.Write(_formatter.Format(n)); break; case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("CSV")); case NodeType.Literal: if (segment == TripleSegment.Subject) { throw new RdfOutputException(WriterErrorMessages.LiteralSubjectsUnserializable("CSV")); } if (segment == TripleSegment.Predicate) { throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("CSV")); } context.Output.Write(_formatter.Format(n)); break; case NodeType.Uri: context.Output.Write(_formatter.Format(n)); break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("CSV")); } }
/// <summary> /// Internal method which generates the RDF/Json Output for a Graph. /// </summary> /// <param name="g">Graph to save.</param> /// <param name="output">Stream to save to.</param> private void GenerateOutput(IGraph g, TextWriter output) { // Get a Blank Node Output Mapper BlankNodeOutputMapper bnodeMapper = new BlankNodeOutputMapper(WriterHelper.IsValidBlankNodeID); // Get the Writer and Configure Options JsonTextWriter writer = new JsonTextWriter(output); if (_prettyprint) { writer.Formatting = Newtonsoft.Json.Formatting.Indented; } else { writer.Formatting = Newtonsoft.Json.Formatting.None; } // Start the overall Object which represents the Graph writer.WriteStartObject(); // Get the Triples as a Sorted List List <Triple> ts = g.Triples.ToList(); ts.Sort(new FullTripleComparer(new FastNodeComparer())); // Variables we need to track our writing INode lastSubj, lastPred; lastSubj = lastPred = null; for (int i = 0; i < ts.Count; i++) { Triple t = ts[i]; if (lastSubj == null || !t.Subject.Equals(lastSubj)) { // Terminate previous Triples if (lastSubj != null) { writer.WriteEndArray(); writer.WriteEndObject(); } // Start a new set of Triples // Validate Subject switch (t.Subject.NodeType) { case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/JSON")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralSubjectsUnserializable("RDF/JSON")); case NodeType.Blank: break; case NodeType.Uri: // OK break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/JSON")); } // Write out the Subject if (t.Subject.NodeType != NodeType.Blank) { writer.WritePropertyName(t.Subject.ToString()); } else { // Remap Blank Node IDs as appropriate writer.WritePropertyName("_:" + bnodeMapper.GetOutputID(((IBlankNode)t.Subject).InternalID)); } // Start an Object for the Subject writer.WriteStartObject(); lastSubj = t.Subject; // Write the first Predicate // Validate Predicate switch (t.Predicate.NodeType) { case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/JSON")); case NodeType.Blank: throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("RDF/JSON")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("RDF/JSON")); case NodeType.Uri: // OK break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/JSON")); } // Write the Predicate writer.WritePropertyName(t.Predicate.ToString()); // Create an Array for the Objects writer.WriteStartArray(); lastPred = t.Predicate; } else if (lastPred == null || !t.Predicate.Equals(lastPred)) { // Terminate previous Predicate Object list writer.WriteEndArray(); // Write the next Predicate // Validate Predicate switch (t.Predicate.NodeType) { case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/JSON")); case NodeType.Blank: throw new RdfOutputException(WriterErrorMessages.BlankPredicatesUnserializable("RDF/JSON")); case NodeType.Literal: throw new RdfOutputException(WriterErrorMessages.LiteralPredicatesUnserializable("RDF/JSON")); case NodeType.Uri: // OK break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/JSON")); } // Write the Predicate writer.WritePropertyName(t.Predicate.ToString()); // Create an Array for the Objects writer.WriteStartArray(); lastPred = t.Predicate; } // Write the Object // Create an Object for the Object INode obj = t.Object; writer.WriteStartObject(); writer.WritePropertyName("value"); switch (obj.NodeType) { case NodeType.Blank: // Remap Blank Node IDs as appropriate writer.WriteValue("_:" + bnodeMapper.GetOutputID(((IBlankNode)obj).InternalID)); writer.WritePropertyName("type"); writer.WriteValue("bnode"); break; case NodeType.GraphLiteral: throw new RdfOutputException(WriterErrorMessages.GraphLiteralsUnserializable("RDF/JSON")); case NodeType.Literal: ILiteralNode lit = (ILiteralNode)obj; writer.WriteValue(lit.Value); if (!lit.Language.Equals(String.Empty)) { writer.WritePropertyName("lang"); writer.WriteValue(lit.Language); } else if (lit.DataType != null) { writer.WritePropertyName("datatype"); writer.WriteValue(lit.DataType.AbsoluteUri); } writer.WritePropertyName("type"); writer.WriteValue("literal"); break; case NodeType.Uri: writer.WriteValue(obj.ToString()); writer.WritePropertyName("type"); writer.WriteValue("uri"); break; default: throw new RdfOutputException(WriterErrorMessages.UnknownNodeTypeUnserializable("RDF/JSON")); } writer.WriteEndObject(); } // Terminate the Object which represents the Graph writer.WriteEndObject(); }
/// <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()); }