예제 #1
0
        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());
        }