Thanks Damian. That did the trick!

On 10/05/2011 11:39 AM, Damian Steer wrote:
On 5 Oct 2011, at 18:40, Eric Scott wrote:

Hi all-
Hi Eric,

I've tried using a subquery like this:

SELECT ?entity ?arbitraryLabel
where
{
   ?entity my:hasFeature my:VeryImportantFeature.
   {
    SELECT ?arbitraryLabel
    {
      ?entity my:hasLabelSet ?labelSet.
      ?labelSet my:hasLabel ?arbitraryLabel.
    }
    LIMIT 1
   }
}

on the assumption that the variables in the main query are scoped in such a way 
that they are shared with the subquery.
What's happening is this: sparql is evaluated from inside out. So your inner 
select happens first, and you get one row:

?arbitraryLabel =  "unrelated label 25"

which is then (cross) joined with the result of  ?entity my:hasFeature 
my:VeryImportantFeature.

You could make the inner select:

{
   SELECT ?entity ?arbitraryLabel
...
}

which gives a more understandable result, perhaps, in that you'll get the 
entity with that label returned.

One way to get what you want is:

SELECT ?entity (SAMPLE(?label) AS ?arbitraryLabel)
where
{
      ?entity my:hasLabelSet ?labelSet .
      ?labelSet my:hasLabel ?label .
}
GROUP BY ?entity

which says: I want one entity per row. Pick any label.

Damian

Reply via email to