Sparqlify icon indicating copy to clipboard operation
Sparqlify copied to clipboard

Counting subquery results: count(?res) vs. count(*)

Open patrickwestphal opened this issue 11 years ago • 1 comments

When the SPARQL query

SELECT (count(?res) AS ?count)  {
    SELECT DISTINCT ?res  { 
        ?s ?p1 ?res . ?res ?p2 ?o
    }
}

Sparqlify raises this error:

[...]
Dec 16, 2013 10:02:56 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.RuntimeException: Could not decide on a best match from a set of candidates
    at org.aksw.sparqlify.core.algorithms.MappingOpsImpl.rewrite(MappingOpsImpl.java:2168)
    at org.aksw.sparqlify.core.algorithms.MappingRefactor.applyAggregators(MappingRefactor.java:647)
    at org.aksw.sparqlify.core.algorithms.MappingRefactor.groupBy(MappingRefactor.java:293)
    at org.aksw.sparqlify.core.algorithms.MappingOpsImpl.groupBy(MappingOpsImpl.java:1865)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:244)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:293)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:181)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:305)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:204)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:317)
    at org.aksw.sparqlify.core.interfaces.SparqlSqlOpRewriterImpl.rewrite(SparqlSqlOpRewriterImpl.java:95)
    at org.aksw.sparqlify.core.algorithms.SparqlSqlStringRewriterImpl.rewrite(SparqlSqlStringRewriterImpl.java:45)
    at org.aksw.sparqlify.core.sparql.QueryExecutionSelect._execSelect(QueryExecutionSelect.java:131)
    at org.aksw.sparqlify.core.sparql.QueryExecutionSelect.execSelect(QueryExecutionSelect.java:57)
    at org.aksw.jena_sparql_api.core.QueryExecutionBaseSelect.executeCoreSelect(QueryExecutionBaseSelect.java:146)
    at org.aksw.sparqlify.core.sparql.QueryExecutionSparqlify.executeCoreSelect(QueryExecutionSparqlify.java:182)
    at org.aksw.jena_sparql_api.core.QueryExecutionBaseSelect.execSelect(QueryExecutionBaseSelect.java:381)
    at org.aksw.sparqlify.web.ProcessQuery.processQuery(ProcessQuery.java:98)
    at org.aksw.sparqlify.web.ProcessQuery.processQuery(ProcessQuery.java:56)
    at org.aksw.sparqlify.web.ProcessQuery.processQuery(ProcessQuery.java:46)
    at org.aksw.sparqlify.web.HttpSparqlEndpoint.processQuery(HttpSparqlEndpoint.java:108)
    at org.aksw.sparqlify.web.HttpSparqlEndpoint.executeQueryXml(HttpSparqlEndpoint.java:149)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[...]
    at java.lang.Thread.run(Thread.java:679)
2013-12-16 10:02:56,416 WARN  org.eclipse.jetty.servlet.ServletHandler: /sparql
java.lang.RuntimeException: Could not decide on a best match from a set of candidates
    at org.aksw.sparqlify.core.algorithms.MappingOpsImpl.rewrite(MappingOpsImpl.java:2168)
    at org.aksw.sparqlify.core.algorithms.MappingRefactor.applyAggregators(MappingRefactor.java:647)
    at org.aksw.sparqlify.core.algorithms.MappingRefactor.groupBy(MappingRefactor.java:293)
    at org.aksw.sparqlify.core.algorithms.MappingOpsImpl.groupBy(MappingOpsImpl.java:1865)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:244)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:293)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:181)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:305)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:204)
    at org.aksw.sparqlify.core.algorithms.OpMappingRewriterImpl.rewrite(OpMappingRewriterImpl.java:317)
[...]

This does not happen if count(*) is used instead, as in

SELECT (count(*) AS ?count)  {
    SELECT DISTINCT ?res  { 
        ?s ?p1 ?res . ?res ?p2 ?o
    }
}

The Sparqlify verision used is 0.6.5.

patrickwestphal avatar Dec 16 '13 15:12 patrickwestphal

0.6.5 does not support variables in aggregate functions, maybe we get this for 0.6.6

count(?res) 

Aklakan avatar Jan 20 '14 23:01 Aklakan