/// <summary> /// Builds a new union store from this store and a given one /// </summary> public RDFMemoryStore UnionWith(RDFStore store) { RDFMemoryStore result = new RDFMemoryStore(); //Add quadruples from this store foreach (RDFQuadruple q in this) { result.AddQuadruple(q); } //Manage the given store if (store != null) { //Add quadruples from the given store foreach (RDFQuadruple q in store.SelectAllQuadruples()) { result.AddQuadruple(q); } } return(result); }
/// <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); } }