DynamicSPARQLSpace.BrightstarDB.Connector.GetQueryingFunction C# (CSharp) Method

GetQueryingFunction() public method

Constructs querying function for BrightstarDB
public GetQueryingFunction ( ) : SPARQLQueryResults>.Func
return SPARQLQueryResults>.Func
        public Func<string, SPARQLQueryResults> GetQueryingFunction()
        {
            Func<string, SPARQLQueryResults> queringFunction = xquery =>
            {
                var settings = new XmlReaderSettings();
                settings.ConformanceLevel = ConformanceLevel.Auto;
                settings.IgnoreComments = true;
                settings.IgnoreWhitespace = true;

                XmlDocument doc = new XmlDocument();
                var reader = XmlReader.Create(Client.ExecuteQuery(StoreName, xquery, resultsFormat: SparqlResultsFormat.Xml), settings);
                var root = XElement.Load(reader, LoadOptions.None);
                var resultSet = new SPARQLQueryResults();

                var head = root.Elements().First(x => x.Name.LocalName.ToLower() == "head");
                foreach (var variableElement in head.Elements())
                {
                    if (variableElement.Name.LocalName.ToLower() != "variable")
                        continue;

                    var variable = variableElement.Attributes().FirstOrDefault(attr => attr.Name.LocalName.ToLower() == "name");
                    if (variable!=null)
                        resultSet.Variables.Add(variable.Value);
                }

                var results = root.Elements().First(x => x.Name.LocalName.ToLower() == "results");
                foreach (var resultElement in results.Elements())
                {
                    var result = new SPARQLQueryResult();
                    foreach (var bindingElement in resultElement.Elements())
                    {
                        var valueElement = bindingElement.Elements().First();
                        ResultBinding binding = null;
                        if (valueElement.Name.LocalName.ToLower() == "literal")
                        {
                            var literalBinding = new LiteralBinding();
                            literalBinding.Literal = valueElement.Value;
                            binding = literalBinding;
                            var attribute = valueElement.Attributes().FirstOrDefault(attr => attr.Name.LocalName.ToLower() == "datatype");
                            if (attribute != null)
                                literalBinding.DataType = new Uri(attribute.Value);
                            attribute = valueElement.Attributes().FirstOrDefault(attr => attr.Name.LocalName.ToLower() == "lang");
                            if (attribute != null)
                                literalBinding.Language = attribute.Value;

                        }
                        else if (valueElement.Name.LocalName.ToLower() == "uri")
                        {
                            var iriBinding = new IriBinding();
                            iriBinding.Iri = new Uri(valueElement.Value);
                            binding = iriBinding;
                        }
                        binding.Name = bindingElement.Attributes().First(attr => attr.Name.LocalName.ToLower() == "name").Value;
                        result.AddBinding(binding);

                    }
                    resultSet.AddResult(result);
                }

                return resultSet;
            };

            return queringFunction;
        }

Usage Example

        public void BrightstarGetUpdateFunction()
        {
            string storeName = null;

            try
            {
                storeName = "UpdStore_" + Guid.NewGuid();
                brightstarConnector = new Connector("type=embedded;storesdirectory=brightstar;storename=" + storeName);
                brightstarConnector.Client.CreateStore(storeName);

                var updFunc = brightstarConnector.GetUpdateFunction();
                var queryFunc = brightstarConnector.GetQueryingFunction();

                var dyno = DynamicSPARQL.CreateDyno(queryingFunc: queryFunc, updateFunc: updFunc, autoquotation: false);

                var updres = dyno.Insert(
                   prefixes: new[] {
                        SPARQL.Prefix("dc", "http://purl.org/dc/elements/1.1/")
                    },
                   insert: SPARQL.Triple(s: "<http://example/book1>", p: new[] { @"dc:title ""David Copperfield""@fr",
                                                                                  @"dc:creator ""Edmund Wells""",
                                                                                  "dc:price 42"})
                );

                ((IJobInfo)updres).JobCompletedOk.Should().Be.True();

                IEnumerable<dynamic> res = dyno.Select(
                    projection: "?s ?p ?o",
                    where: SPARQL.Triple("?s ?p ?o")
                );

                var list = res.ToList();
                list.Count.Should().Equal(3);
                list.Where(x => x.p == "price" && x.o == 42).Count().Should().Equal(1);
                list.Where(x => x.p == "title" && x.o == "David Copperfield").Count().Should().Equal(1);
                list.Where(x => x.p == "creator" && x.o == "Edmund Wells").Count().Should().Equal(1);

                dyno.Delete(
                    where: SPARQL.Triple(s: "<http://example/book1>", p: "?property ?value" )
                );

                res = dyno.Select(
                   projection: "?s ?p ?o",
                   where: SPARQL.Triple("?s ?p ?o")
                );

                res.ToList().Count.Should().Equal(0);
            }
            finally
            {
                if (brightstarConnector.Client != null)
                    brightstarConnector.Client.DeleteStore(brightstarConnector.StoreName);
            }
        }
All Usage Examples Of DynamicSPARQLSpace.BrightstarDB.Connector::GetQueryingFunction