Exemplo n.º 1
0
        public override Stream GetFragment(string id, string contentType)
        {
            // need to see which definition we match
                ResourcePublishingDefinition definition = null;
                UriTemplateMatch match = null;
                foreach (var resourcePublishingDefinition in _publishingDefinitions)
                {
                    var newuri = new Uri(id);
                    match = resourcePublishingDefinition.UriTemplate.Match(resourcePublishingDefinition.ResourcePrefix, newuri);
                    if (match != null)
                    {
                        definition = resourcePublishingDefinition;
                        break;
                    }
                }

                if (definition == null) { throw new Exception("Unable to find matching definition for uri " + id); }

                var sb = new StringBuilder();
                foreach (var generationDefinition in definition.FragmentGenerationDefinitions)
                {
                    try
                    {
                        var data = ExecuteQuery(_dataSourceConnectionString, generationDefinition.FragmentQuery.Replace("[[id]]", match.BoundVariables["id"]));
                        foreach (DataRow row in data.Rows)
                        {
                            var dra = new DbDataRow(row);
                            foreach (var line in generationDefinition.RdfTemplateLines)
                            {
                                var linePattern = new NTripleLinePattern(line);
                                linePattern.GenerateNTriples(sb, dra, generationDefinition.GenericTemplateExcludeColumns, contentType.Equals("xml"));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logging.LogError(1, "Error processing definition {0} {1} {2} {3}", ex.Message, generationDefinition.SnapshotQuery, _dataSourceConnectionString, ex.StackTrace);
                    }
                }

                try
                {
                    var g = new Graph();
                    var parser = new NTriplesParser(TokenQueueMode.SynchronousBufferDuringParsing);
                    var triplesStr = sb.ToString();
                    parser.Load(g, new StringReader(triplesStr));

                    if (contentType.Equals("xml"))
                    {
                        var ms = new MemoryStream();
                        var sw = new StreamWriter(ms, Encoding.UTF8);
                        var rdfxmlwriter = new RdfXmlWriter();

                        var strw = new System.IO.StringWriter();
                        rdfxmlwriter.Save(g, strw);
                        var data = strw.ToString();

                        data = data.Replace("~~~2B~~~", "%2B");
                        data = data.Replace("~~~SLASH~~~", "%2F");
                        data = data.Replace("utf-16", "utf-8");
                        sw.Write(data);
                        sw.Flush();
                        ms.Seek(0, SeekOrigin.Begin);
                        return ms;
                    }
                    else
                    {
                        var ms = new MemoryStream();
                        var sw = new StreamWriter(ms);
                        sw.Write(triplesStr);
                        sw.Flush();
                        ms.Seek(0, SeekOrigin.Begin);
                        return ms;
                    }
                }
                catch (Exception ex)
                {
                    Logging.LogError(1, "Error getting fragment {0} {1}", ex.Message, ex.StackTrace);
                    throw;
                }
        }
Exemplo n.º 2
0
        public override Stream GetFragment(string id, string contentType)
        {
            // need to see which definition we match
            ResourcePublishingDefinition definition = null;
            UriTemplateMatch             match      = null;

            foreach (var resourcePublishingDefinition in _publishingDefinitions)
            {
                var newuri = new Uri(id);
                match = resourcePublishingDefinition.UriTemplate.Match(resourcePublishingDefinition.ResourcePrefix, newuri);
                if (match != null)
                {
                    definition = resourcePublishingDefinition;
                    break;
                }
            }

            if (definition == null)
            {
                throw new Exception("Unable to find matching definition for uri " + id);
            }

            var sb = new StringBuilder();

            foreach (var generationDefinition in definition.FragmentGenerationDefinitions)
            {
                try
                {
                    var data = ExecuteQuery(_dataSourceConnectionString, generationDefinition.FragmentQuery.Replace("[[id]]", match.BoundVariables["id"]));
                    foreach (DataRow row in data.Rows)
                    {
                        var dra = new DbDataRow(row);
                        foreach (var line in generationDefinition.RdfTemplateLines)
                        {
                            var linePattern = new NTripleLinePattern(line);
                            linePattern.GenerateNTriples(sb, dra, generationDefinition.GenericTemplateExcludeColumns, contentType.Equals("xml"));
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logging.LogError(1, "Error processing definition {0} {1} {2} {3}", ex.Message, generationDefinition.SnapshotQuery, _dataSourceConnectionString, ex.StackTrace);
                }
            }

            try
            {
                var g          = new Graph();
                var parser     = new NTriplesParser(TokenQueueMode.SynchronousBufferDuringParsing);
                var triplesStr = sb.ToString();
                parser.Load(g, new StringReader(triplesStr));

                if (contentType.Equals("xml"))
                {
                    var ms           = new MemoryStream();
                    var sw           = new StreamWriter(ms, Encoding.UTF8);
                    var rdfxmlwriter = new RdfXmlWriter();

                    var strw = new System.IO.StringWriter();
                    rdfxmlwriter.Save(g, strw);
                    var data = strw.ToString();

                    data = data.Replace("~~~2B~~~", "%2B");
                    data = data.Replace("~~~SLASH~~~", "%2F");
                    data = data.Replace("utf-16", "utf-8");
                    sw.Write(data);
                    sw.Flush();
                    ms.Seek(0, SeekOrigin.Begin);
                    return(ms);
                }
                else
                {
                    var ms = new MemoryStream();
                    var sw = new StreamWriter(ms);
                    sw.Write(triplesStr);
                    sw.Flush();
                    ms.Seek(0, SeekOrigin.Begin);
                    return(ms);
                }
            }
            catch (Exception ex)
            {
                Logging.LogError(1, "Error getting fragment {0} {1}", ex.Message, ex.StackTrace);
                throw;
            }
        }