public void SparqlGroupByRefactor4() { String query = @"PREFIX : <http://example/> SELECT ?s ?w FROM <http://group-data-2.ttl> WHERE { ?s :p ?v . OPTIONAL { ?s :q ?w . } } GROUP BY ?s ?w"; String data = @"<http://example/s1> <http://example/p> ""1""^^<http://www.w3.org/2001/XMLSchema#integer> <http://group-data-2.ttl> . <http://example/s3> <http://example/p> ""1""^^<http://www.w3.org/2001/XMLSchema#integer> <http://group-data-2.ttl> . <http://example/s1> <http://example/q> ""9""^^<http://www.w3.org/2001/XMLSchema#integer> <http://group-data-2.ttl> . <http://example/s2> <http://example/p> ""2""^^<http://www.w3.org/2001/XMLSchema#integer> <http://group-data-2.ttl> ."; TripleStore store = new TripleStore(); StringParser.ParseDataset(store, data, new NQuadsParser()); SparqlResultSet results = store.ExecuteQuery(query) as SparqlResultSet; Assert.IsNotNull(results); TestTools.ShowResults(results); Assert.AreEqual(3, results.Count); Assert.AreEqual(2, results.Variables.Count()); Assert.IsTrue(results.All(r => r.Count > 0), "One or more rows were empty"); Assert.IsTrue(results.All(r => r.HasBoundValue("s")), "One or more rows were empty or failed to have a value for ?s"); }
public void SparqlFilterOptionalNotBound() { Graph g = new Graph(); g.LoadFromEmbeddedResource("VDS.RDF.Configuration.configuration.ttl"); SparqlParameterizedString query = new SparqlParameterizedString(); query.Namespaces.AddNamespace("rdf", new Uri(NamespaceMapper.RDF)); query.Namespaces.AddNamespace("rdfs", new Uri(NamespaceMapper.RDFS)); query.CommandText = "SELECT * WHERE { ?property a rdf:Property . OPTIONAL { ?property rdfs:range ?range } FILTER (!BOUND(?range)) }"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); SparqlResultSet results = g.ExecuteQuery(q) as SparqlResultSet; if (results != null) { TestTools.ShowResults(results); Assert.True(results.All(r => !r.HasValue("range") || r["range"] == null), "There should be no values for ?range returned"); } else { Assert.True(false, "Did not get a SparqlResultSet as expected"); } }
public void SparqlGroupByAssignmentSimple2() { String query = "SELECT ?x (COUNT(?p) AS ?predicates) WHERE { ?s ?p ?o } GROUP BY ?s AS ?x"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); SparqlFormatter formatter = new SparqlFormatter(); Console.WriteLine(formatter.Format(q)); Console.WriteLine(); QueryableGraph g = new QueryableGraph(); FileLoader.Load(g, "resources\\InferenceTest.ttl"); Object results = g.ExecuteQuery(q); if (results is SparqlResultSet) { SparqlResultSet rset = (SparqlResultSet)results; TestTools.ShowResults(rset); Assert.True(rset.All(r => r.HasValue("x") && !r.HasValue("s") && r.HasValue("predicates")), "All Results should have a ?x and ?predicates variables and no ?s variable"); } else { Assert.True(false, "Didn't get a Result Set as expected"); } }
public void SparqlGroupByAssignmentExpression3() { if (!TestConfigManager.GetSettingAsBoolean(TestConfigManager.UseRemoteParsing)) { throw new SkipTestException("Test Config marks Remote Parsing as unavailable, test cannot be run"); } String query = "SELECT ?lang (SAMPLE(?o) AS ?example) WHERE { ?s ?p ?o . FILTER(ISLITERAL(?o)) } GROUP BY (LANG(?o) AS ?lang) HAVING LANGMATCHES(?lang, \"*\")"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); SparqlFormatter formatter = new SparqlFormatter(); Console.WriteLine(formatter.Format(q)); Console.WriteLine(); QueryableGraph g = new QueryableGraph(); UriLoader.Load(g, new Uri("http://dbpedia.org/resource/Southampton")); Object results = g.ExecuteQuery(q); if (results is SparqlResultSet) { SparqlResultSet rset = (SparqlResultSet)results; TestTools.ShowResults(rset); Assert.True(rset.All(r => r.HasValue("lang") && r.HasValue("example")), "All Results should have a ?lang and a ?example variable"); } else { Assert.True(false, "Didn't get a Result Set as expected"); } }
public void SparqlBindExistsAsChildExpression2() { String query = @"SELECT * WHERE { ?s a ?type . BIND(IF(EXISTS { ?s rdfs:range ?range . FILTER EXISTS { ?s rdfs:domain ?domain } }, true, false) AS ?hasRangeAndDomain) }"; SparqlParameterizedString queryStr = new SparqlParameterizedString(query); queryStr.Namespaces.AddNamespace("rdfs", UriFactory.Create(NamespaceMapper.RDFS)); SparqlQuery q = new SparqlQueryParser().ParseFromString(queryStr); IGraph g = new Graph(); g.LoadFromEmbeddedResource("VDS.RDF.Configuration.configuration.ttl"); SparqlResultSet results = g.ExecuteQuery(q) as SparqlResultSet; Assert.NotNull(results); TestTools.ShowResults(results); Assert.True(results.All(r => r.HasBoundValue("hasRangeAndDomain"))); }
public void SparqlGroupByComplex1() { String data = @"PREFIX : <http://test/> INSERT DATA { :x :p 1 , 2 . :y :p 5 }"; String query = @"SELECT ?s (CONCAT('$', STR(SUM(?o))) AS ?Total) WHERE { ?s ?p ?o } GROUP BY ?s"; TripleStore store = new TripleStore(); store.ExecuteUpdate(data); Assert.AreEqual(1, store.Graphs.Count); Assert.AreEqual(3, store.Triples.Count()); //Aggregates may occur in project expressions and should evaluate correctly SparqlResultSet results = store.ExecuteQuery(query) as SparqlResultSet; Assert.IsNotNull(results); Assert.IsTrue(results.All(r => r.HasBoundValue("Total"))); SparqlResult x = results.Where(r => ((IUriNode)r["s"]).Uri.Equals(new Uri("http://test/x"))).FirstOrDefault(); Assert.IsNotNull(x); Assert.AreEqual("$3", x["Total"].AsValuedNode().AsString()); SparqlResult y = results.Where(r => ((IUriNode)r["s"]).Uri.Equals(new Uri("http://test/y"))).FirstOrDefault(); Assert.IsNotNull(y); Assert.AreEqual("$5", y["Total"].AsValuedNode().AsString()); }
public void SparqlGroupByAssignmentExpression3() { String query = "SELECT ?lang (SAMPLE(?o) AS ?example) WHERE { ?s ?p ?o . FILTER(ISLITERAL(?o)) } GROUP BY (LANG(?o) AS ?lang) HAVING LANGMATCHES(?lang, \"*\")"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); SparqlFormatter formatter = new SparqlFormatter(); Console.WriteLine(formatter.Format(q)); Console.WriteLine(); QueryableGraph g = new QueryableGraph(); UriLoader.Load(g, new Uri("http://dbpedia.org/resource/Southampton")); Object results = g.ExecuteQuery(q); if (results is SparqlResultSet) { SparqlResultSet rset = (SparqlResultSet)results; TestTools.ShowResults(rset); Assert.IsTrue(rset.All(r => r.HasValue("lang") && r.HasValue("example")), "All Results should have a ?lang and a ?example variable"); } else { Assert.Fail("Didn't get a Result Set as expected"); } }
public void SparqlGroupByAssignmentExpression() { String query = "SELECT ?s ?sum WHERE { ?s ?p ?o } GROUP BY ?s (1 + 2 AS ?sum)"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); SparqlFormatter formatter = new SparqlFormatter(); Console.WriteLine(formatter.Format(q)); Console.WriteLine(); QueryableGraph g = new QueryableGraph(); FileLoader.Load(g, "InferenceTest.ttl"); Object results = g.ExecuteQuery(q); if (results is SparqlResultSet) { SparqlResultSet rset = (SparqlResultSet)results; TestTools.ShowResults(rset); Assert.IsTrue(rset.All(r => r.HasValue("s") && r.HasValue("sum")), "All Results should have a ?s and a ?sum variable"); } else { Assert.Fail("Didn't get a Result Set as expected"); } }
public void SparqlBlankNodeVariables1() { this.EnsureTestData(); SparqlQuery q = this._parser.ParseFromString("SELECT ?o WHERE { _:s ?p1 ?o1 FILTER(ISURI(?o1)) ?o1 ?p2 ?o . FILTER(ISLITERAL(?o)) }"); q.AlgebraOptimisers = new IAlgebraOptimiser[] { new StrictAlgebraOptimiser() }; SparqlFormatter formatter = new SparqlFormatter(); Console.WriteLine(formatter.Format(q)); Console.WriteLine(q.ToAlgebra().ToString()); SparqlResultSet results = this._processor.ProcessQuery(q) as SparqlResultSet; if (results == null) { Assert.True(false, "Did not get a SPARQL Result Set as expected"); } Assert.False(results.Count == 0, "Result Set should not be empty"); Assert.True(results.All(r => r.HasValue("o") && r["o"] != null && r["o"].NodeType == NodeType.Literal), "All results should be literals"); }
public void SparqlParsingSubQueryWithLimitAndOrderBy() { Graph g = new Graph(); FileLoader.Load(g, "resources\\InferenceTest.ttl"); String query = "SELECT * WHERE { { SELECT * WHERE {?s ?p ?o} ORDER BY ?p ?o LIMIT 2 } }"; SparqlQueryParser parser = new SparqlQueryParser(); SparqlQuery q = parser.ParseFromString(query); Object results = g.ExecuteQuery(q); if (results is SparqlResultSet) { SparqlResultSet rset = (SparqlResultSet)results; TestTools.ShowResults(rset); Assert.IsTrue(rset.All(r => r.HasValue("s") && r.HasValue("p") && r.HasValue("o")), "All Results should have had ?s, ?p and ?o variables"); } else { Assert.Fail("Expected a SPARQL Result Set"); } }