You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Paolo Castagna <ca...@googlemail.com> on 2011/03/31 19:25:38 UTC

Error parsing a SPARQL query: "Non-group key variable in SELECT: ?n in expression ?n"

Hi,
I have a SPARQL query (QUERY #1) which does this:

prefix e: <http://example.com/schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct (?r as ?e) (count(?s) as ?v)
where {
  ?s rdf:type e:CS .
  ?s e:r ?r .
  ?r rdfs:label ?n
}
group by ?r
order by ?r

It gets parsed find by ARQ and this is the algebra structure:

   1 (base <http://example/base/>
   2   (prefix ((rdfs: <http://www.w3.org/2000/01/rdf-schema#>)
   3            (e: <http://example.com/schema#>)
   4            (rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>))
   5     (distinct
   6       (project (?e ?v)
   7         (order (?r)
   8           (extend ((?e ?r) (?v ?.0))
   9             (group (?r) ((?.0 (count ?s)))
  10               (bgp
  11                 (triple ?s rdf:type e:CS)
  12                 (triple ?s e:r ?r)
  13                 (triple ?r rdfs:label ?n)
  14               ))))))))


Now, I add (?n as ?l) to the select distinct (QUERY #2):

prefix e: <http://example.com/schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct (?r as ?e) (?n as ?l) (count(?s) as ?v)
where {
  ?s rdf:type e:CS .
  ?s e:r ?r .
  ?r rdfs:label ?n
}
group by ?r
order by ?r

And I have this syntax error:

"Non-group key variable in SELECT: ?n in expression ?n"

So, I tried this (QUERY #3):

prefix e: <http://example.com/schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct (?r as ?e) (?n as ?l) (count(?s) as ?v)
where {
  ?s rdf:type e:CS .
  ?s e:r ?r .
  ?r rdfs:label ?n
}
group by ?r ?n
order by ?r

And, indeed it does solve the problem. Algebra structure is:

   1 (base <http://example/base/>
   2   (prefix ((rdfs: <http://www.w3.org/2000/01/rdf-schema#>)
   3            (e: <http://example.com/schema#>)
   4            (rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>))
   5     (distinct
   6       (project (?e ?l ?v)
   7         (order (?r)
   8           (extend ((?e ?r) (?l ?n) (?v ?.0))
   9             (group (?r ?n) ((?.0 (count ?s)))
  10               (bgp
  11                 (triple ?s rdf:type e:CS)
  12                 (triple ?s e:r ?r)
  13                 (triple ?r rdfs:label ?n)
  14               ))))))))


Is QUERY #2 invalid or it is showing a problem with ARQ's query parser?

I am happy with QUERY #3, however, I would like to learn and understand.

I did try to go thorough the current SPARQL 1.1 Query Language spec,
but I did not find a place which would help me to understand.

Thank you,
Paolo

Re: Error parsing a SPARQL query: "Non-group key variable in SELECT: ?n in expression ?n"

Posted by Anuj Kumar <an...@gmail.com>.
The responses to this question might have your answer:
http://tech.groups.yahoo.com/group/jena-dev/message/46986
See Andy's response.

<http://tech.groups.yahoo.com/group/jena-dev/message/46986>Regards,
Anuj

On Thu, Mar 31, 2011 at 10:55 PM, Paolo Castagna <
castagna.lists@googlemail.com> wrote:

> Hi,
> I have a SPARQL query (QUERY #1) which does this:
>
> prefix e: <http://example.com/schema#>
> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>
> select distinct (?r as ?e) (count(?s) as ?v)
> where {
>  ?s rdf:type e:CS .
>  ?s e:r ?r .
>  ?r rdfs:label ?n
> }
> group by ?r
> order by ?r
>
> It gets parsed find by ARQ and this is the algebra structure:
>
>  1 (base <http://example/base/>
>  2   (prefix ((rdfs: <http://www.w3.org/2000/01/rdf-schema#>)
>  3            (e: <http://example.com/schema#>)
>  4            (rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>))
>  5     (distinct
>  6       (project (?e ?v)
>  7         (order (?r)
>  8           (extend ((?e ?r) (?v ?.0))
>  9             (group (?r) ((?.0 (count ?s)))
>  10               (bgp
>  11                 (triple ?s rdf:type e:CS)
>  12                 (triple ?s e:r ?r)
>  13                 (triple ?r rdfs:label ?n)
>  14               ))))))))
>
>
> Now, I add (?n as ?l) to the select distinct (QUERY #2):
>
> prefix e: <http://example.com/schema#>
> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>
> select distinct (?r as ?e) (?n as ?l) (count(?s) as ?v)
> where {
>  ?s rdf:type e:CS .
>  ?s e:r ?r .
>  ?r rdfs:label ?n
> }
> group by ?r
> order by ?r
>
> And I have this syntax error:
>
> "Non-group key variable in SELECT: ?n in expression ?n"
>
> So, I tried this (QUERY #3):
>
> prefix e: <http://example.com/schema#>
> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>
> select distinct (?r as ?e) (?n as ?l) (count(?s) as ?v)
> where {
>  ?s rdf:type e:CS .
>  ?s e:r ?r .
>  ?r rdfs:label ?n
> }
> group by ?r ?n
> order by ?r
>
> And, indeed it does solve the problem. Algebra structure is:
>
>  1 (base <http://example/base/>
>  2   (prefix ((rdfs: <http://www.w3.org/2000/01/rdf-schema#>)
>  3            (e: <http://example.com/schema#>)
>  4            (rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>))
>  5     (distinct
>  6       (project (?e ?l ?v)
>  7         (order (?r)
>  8           (extend ((?e ?r) (?l ?n) (?v ?.0))
>  9             (group (?r ?n) ((?.0 (count ?s)))
>  10               (bgp
>  11                 (triple ?s rdf:type e:CS)
>  12                 (triple ?s e:r ?r)
>  13                 (triple ?r rdfs:label ?n)
>  14               ))))))))
>
>
> Is QUERY #2 invalid or it is showing a problem with ARQ's query parser?
>
> I am happy with QUERY #3, however, I would like to learn and understand.
>
> I did try to go thorough the current SPARQL 1.1 Query Language spec,
> but I did not find a place which would help me to understand.
>
> Thank you,
> Paolo
>