Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <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);
            }
        }