Sparqlify
Sparqlify copied to clipboard
Counting subquery results: count(?res) vs. count(*)
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.
0.6.5 does not support variables in aggregate functions, maybe we get this for 0.6.6
count(?res)