/// <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; }
/// <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; }