Exemplo n.º 1
0
        /// <summary>
        /// Constructs querying function for BrightstarDB
        /// </summary>
        /// <returns>Querying function</returns>
        public Func<string, SPARQLQueryResults> GetQueryingFunction()
        {
            Func<string, SPARQLQueryResults> queringFunction = xquery =>
            {
                var queryProcessor = new LeviathanQueryProcessor(Dataset);
                var dnRdfResultSet = queryProcessor.ProcessQuery(new SparqlQueryParser().ParseFromString(xquery)) as SparqlResultSet;
                var results = new SPARQLQueryResults();

                foreach (var dnRdfVariable in dnRdfResultSet.Variables)
                    results.Variables.Add(dnRdfVariable);

                foreach (var dnRdfResult in dnRdfResultSet)
                {
                    var result = new SPARQLQueryResult();

                    foreach (var node in dnRdfResult)
                    {
                        ResultBinding binding = null;

                        if (node.Value.NodeType == VDS.RDF.NodeType.Uri)
                        {
                            var uriNode = node.Value as IUriNode;
                            var iriBinding = new IriBinding();
                            iriBinding.Iri = uriNode.Uri;
                            binding = iriBinding;
                        }
                        else if (node.Value.NodeType == VDS.RDF.NodeType.Literal)
                        {
                            var literalNode = node.Value as ILiteralNode;
                            var litBinding = new LiteralBinding();
                            litBinding.DataType = literalNode.DataType;
                            litBinding.Language = literalNode.Language;
                            litBinding.Literal = literalNode.Value;
                            binding = litBinding;
                        }
                        else
                            binding = new LiteralBinding();

                        binding.Name = node.Key;
                        result.AddBinding(binding);
                    }

                    results.AddResult(result);
                }

                return results;
            };

            return queringFunction;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Constructs querying function for BrightstarDB
        /// </summary>
        /// <returns>Querying function</returns>
        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;
        }