Dimitris Kontokostas created JENA-766:
-----------------------------------------

             Summary: Aggregate reports possible wrong results
                 Key: JENA-766
                 URL: https://issues.apache.org/jira/browse/JENA-766
             Project: Apache Jena
          Issue Type: Bug
          Components: Jena
    Affects Versions: Jena 2.11.2
         Environment: Ubuntu 14.04
            Reporter: Dimitris Kontokostas
            Priority: Minor


I have the following query

{code:title=SPARQL-Query}
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
 SELECT (COUNT (DISTINCT ?resource) as ?total) WHERE {
        ?resource rdf:type/rdfs:subClassOf* 
<http://example.com/ns#CardExact3Class>.
        ?resource <http://example.com/ns#cardExact3> ?c.
} GROUP BY ?resource
HAVING ( ( count(?c)  != 3 ) && ( count(?c)  != 0 ) )
{code}

run against the following data

{code:title=TTL-Data}
@prefix ex: <http://example.com/ns#> .
ex:error3a a ex:CardExact3Class ; # 1 error
        ex:cardExact3 ex:abc1 ;
        ex:cardExact3 ex:abc2 .

ex:error3b a ex:CardExact3Class ; # 1 error
        ex:cardExact3 ex:abc1 ;
        ex:cardExact3 ex:abc2 ;
        ex:cardExact3 ex:abc3 ;
        ex:cardExact3 ex:abc4 .
{code}

The query should return 2 as result but instead returns 1.
If I change the query type to SELECT DISTINCT ?resource I get 2 results so I 
think this should be a Jena issue (but maybe I miss something again)

Here's some sample Java code to reproduce
{code:title=Java code to reproduce}
        Model model = ModelFactory.createDefaultModel();
        String Query =
                "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" +
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n" +
                "SELECT (COUNT (DISTINCT ?resource) as ?total) WHERE {\n" +
                "\t?resource rdf:type/rdfs:subClassOf* 
<http://example.com/ns#CardExact3Class>.\n" +
                "\t?resource <http://example.com/ns#cardExact3> ?c.\n" +
                "} GROUP BY ?resource\n" +
                "HAVING ( ( count(?c)  != 3 ) && ( count(?c)  != 0 ) )\n" +
                "\n" +
                "  ";

        String data =
                "@prefix ex: <http://example.com/ns#> .\n\n" +
                "ex:error3a a ex:CardExact3Class ; # 1 error\n" +
                "\tex:cardExact3 ex:abc1 ;\n" +
                "\tex:cardExact3 ex:abc2 ;\n" +
                "\t.\n" +
                "ex:error3b a ex:CardExact3Class ; # 1 error\n" +
                "   \tex:cardExact3 ex:abc1 ;\n" +
                "   \tex:cardExact3 ex:abc2 ;\n" +
                "   \tex:cardExact3 ex:abc3 ;\n" +
                "   \tex:cardExact3 ex:abc4 ;\n" +
                "   \t.\n";

        model.read(new ByteArrayInputStream( data.getBytes() ), null, "TTL");

        QueryExecution qe = 
com.hp.hpl.jena.query.QueryExecutionFactory.create(Query, model);
        ResultSet results = qe.execSelect();
        if (results.hasNext()) {

            QuerySolution qs = results.next();

            int total = qs.get("total").asLiteral().getInt();
            // Total should be 2 while it is 1
        }
{code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to