/// <summary> /// Serializes the given store to the given filepath using N-Quads data format. /// </summary> internal static void Serialize(RDFStore store, Stream outputStream) { try { #region serialize using (StreamWriter sw = new StreamWriter(outputStream, Encoding.ASCII)) { String quadrupleTemplate = String.Empty; foreach (var q in store.SelectAllQuadruples()) { #region template if (q.TripleFlavor == RDFModelEnums.RDFTripleFlavor.SPO) { quadrupleTemplate = "<{SUBJ}> <{PRED}> <{OBJ}> <{CTX}> ."; } else { if (q.Object is RDFPlainLiteral) { quadrupleTemplate = "<{SUBJ}> <{PRED}> \"{VAL}\"@{LANG} <{CTX}> ."; } else { quadrupleTemplate = "<{SUBJ}> <{PRED}> \"{VAL}\"^^<{DTYPE}> <{CTX}> ."; } } #endregion #region subj if (((RDFResource)q.Subject).IsBlank) { quadrupleTemplate = quadrupleTemplate.Replace("<{SUBJ}>", RDFModelUtilities.Unicode_To_ASCII(q.Subject.ToString()).Replace("bnode:", "_:")); } else { quadrupleTemplate = quadrupleTemplate.Replace("{SUBJ}", RDFModelUtilities.Unicode_To_ASCII(q.Subject.ToString())); } #endregion #region pred quadrupleTemplate = quadrupleTemplate.Replace("{PRED}", RDFModelUtilities.Unicode_To_ASCII(q.Predicate.ToString())); #endregion #region object if (q.TripleFlavor == RDFModelEnums.RDFTripleFlavor.SPO) { if (((RDFResource)q.Object).IsBlank) { quadrupleTemplate = quadrupleTemplate.Replace("<{OBJ}>", RDFModelUtilities.Unicode_To_ASCII(q.Object.ToString())).Replace("bnode:", "_:"); } else { quadrupleTemplate = quadrupleTemplate.Replace("{OBJ}", RDFModelUtilities.Unicode_To_ASCII(q.Object.ToString())); } } #endregion #region literal else { quadrupleTemplate = quadrupleTemplate.Replace("{VAL}", RDFModelUtilities.Unicode_To_ASCII(((RDFLiteral)q.Object).Value.Replace("\"", "\\\""))); quadrupleTemplate = quadrupleTemplate.Replace("\n", "\\n") .Replace("\t", "\\t") .Replace("\r", "\\r"); #region plain literal if (q.Object is RDFPlainLiteral) { if (((RDFPlainLiteral)q.Object).Language != String.Empty) { quadrupleTemplate = quadrupleTemplate.Replace("{LANG}", ((RDFPlainLiteral)q.Object).Language); } else { quadrupleTemplate = quadrupleTemplate.Replace("@{LANG}", String.Empty); } } #endregion #region typed literal else { quadrupleTemplate = quadrupleTemplate.Replace("{DTYPE}", RDFModelUtilities.GetDatatypeFromEnum(((RDFTypedLiteral)q.Object).Datatype)); } #endregion } #endregion #region context quadrupleTemplate = quadrupleTemplate.Replace("{CTX}", RDFModelUtilities.Unicode_To_ASCII(q.Context.ToString())); #endregion sw.WriteLine(quadrupleTemplate); } } #endregion } catch (Exception ex) { throw new RDFStoreException("Cannot serialize N-Quads because: " + ex.Message, ex); } }
/// <summary> /// Serializes the given graph to the given stream using N-Triples data format. /// </summary> internal static void Serialize(RDFGraph graph, Stream outputStream) { try { #region serialize using (StreamWriter sw = new StreamWriter(outputStream, Encoding.ASCII)) { String tripleTemplate = String.Empty; foreach (var t in graph) { #region template if (t.TripleFlavor == RDFModelEnums.RDFTripleFlavors.SPO) { tripleTemplate = "<{SUBJ}> <{PRED}> <{OBJ}> ."; } else { if (t.Object is RDFPlainLiteral) { tripleTemplate = "<{SUBJ}> <{PRED}> \"{VAL}\"@{LANG} ."; } else { tripleTemplate = "<{SUBJ}> <{PRED}> \"{VAL}\"^^<{DTYPE}> ."; } } #endregion #region subj if (((RDFResource)t.Subject).IsBlank) { tripleTemplate = tripleTemplate.Replace("<{SUBJ}>", RDFModelUtilities.Unicode_To_ASCII(t.Subject.ToString()).Replace("bnode:", "_:")); } else { tripleTemplate = tripleTemplate.Replace("{SUBJ}", RDFModelUtilities.Unicode_To_ASCII(t.Subject.ToString())); } #endregion #region pred tripleTemplate = tripleTemplate.Replace("{PRED}", RDFModelUtilities.Unicode_To_ASCII(t.Predicate.ToString())); #endregion #region object if (t.TripleFlavor == RDFModelEnums.RDFTripleFlavors.SPO) { if (((RDFResource)t.Object).IsBlank) { tripleTemplate = tripleTemplate.Replace("<{OBJ}>", RDFModelUtilities.Unicode_To_ASCII(t.Object.ToString())).Replace("bnode:", "_:"); } else { tripleTemplate = tripleTemplate.Replace("{OBJ}", RDFModelUtilities.Unicode_To_ASCII(t.Object.ToString())); } } #endregion #region literal else { tripleTemplate = tripleTemplate.Replace("{VAL}", RDFModelUtilities.EscapeControlCharsForXML(RDFModelUtilities.Unicode_To_ASCII(((RDFLiteral)t.Object).Value.Replace("\\", "\\\\").Replace("\"", "\\\"")))); tripleTemplate = tripleTemplate.Replace("\n", "\\n") .Replace("\t", "\\t") .Replace("\r", "\\r"); #region plain literal if (t.Object is RDFPlainLiteral) { if (((RDFPlainLiteral)t.Object).Language != String.Empty) { tripleTemplate = tripleTemplate.Replace("{LANG}", ((RDFPlainLiteral)t.Object).Language); } else { tripleTemplate = tripleTemplate.Replace("@{LANG}", String.Empty); } } #endregion #region typed literal else { tripleTemplate = tripleTemplate.Replace("{DTYPE}", RDFModelUtilities.GetDatatypeFromEnum(((RDFTypedLiteral)t.Object).Datatype)); } #endregion } #endregion sw.WriteLine(tripleTemplate); } } #endregion } catch (Exception ex) { throw new RDFModelException("Cannot serialize N-Triples because: " + ex.Message, ex); } }