I think you can also do this in SPARQL 1.0 with the OPTIONAL clause, since OPTIONAL is "greedy" (will bind if it can).

SELECT ?person
WHERE {
  ?person a ex:Person .
  OPTIONAL {
    ?person :has_number ?number.
    FILTER(?number > 10)
  }
  FILTER(!bound(?number)) # keep those that couldn't match the opt.
}

This is untested and it's 5am, so I may be missing something obvious :-)

Lee

On 12/21/2010 3:47 AM, Andy Seaborne wrote:
In SPARQL 1.1, there is grouping and MAX:

SELECT ?person
WHERE {
?person :has_number ?number .
}
GROUP BY ?person
HAVING (MAX(?number) < 10)

Andy

On 20/12/10 14:53, Matteo Busanelli wrote:
I everyone sparql people,
i need support on a query that is giving me trouble.

I want to select all instances of a class witch have ALL the value of
the property P1 matching a condition.
My problem is to express the ALL assertion. I'm able of selecting all
the triple in witch an instance verify the condition for the property P1
but I can't assert that this istance doesen't have also a valorization
of the property that doesn't verify my condition.

EXAMPLE
Having:

Matteo has_number 12
Matteo has_number 3
Matteo has_number 8

Lee has_number 9
Lee has_number 2
Lee has_number 4

I want to find the persons that HAS ONLY number less than 10.

This doesn't work because return also Matteo:

SELECT DISTINCT ?person
WHERE {
?person :has_number ?number .
FILTER (?number < 10)
}

Result:

Matteo
Lee

Wanted result:
Lee

Can you suggest me the way I can do that?

Thank you for your time,
Matteo





Reply via email to