- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Fri, 01 Feb 2008 14:20:34 -0500
- To: Richard Newman <rnewman@franz.com>
- CC: Max Voelkel <voelkel@fzi.de>, public-sparql-dev@w3.org
Richard Newman wrote:
>
>> is it possible to write a SPARQL query that given this data
>
> <snip>
>
>> returns only all subjects which belong only to class A?
>> So in my example, only "ex:1" should be returned.
>> Ah, and resources can have more than two classes.
>
> I haven't run this, but this might do the trick...
>
> SELECT ?x {
> ?x a ex:A .
> OPTIONAL {
> ?x a ?bar .
> }
> FILTER (!bound(?x) || sameTerm(?bar, ex:A))
> }
(I haven't run it either.) I think you meant !bound(?bar), but I don't
think that's quite right since it will still return resources that are
typed as ex:A and something else (since there will be one binding in
which ?bar binds to ex:A). This should work:
SELECT ?x {
?x a ex:A .
OPTIONAL {
?x a ?type .
FILTER(?type != ex:A)
}
FILTER(!bound(?type))
}
The OPTIONAL here tries to find a different type for the same resource
(?x). If it succeeds then ?type is bound to a second class, so we filter
out that case at the top-level.
Let's try it. I put the data from the original mail at:
http://thefigtrees.net/lee/sw/data/single-class.ttl
Using Joseki/ARQ at http://sparql.org, I go to
http://sparql.org/sparql.html and paste in
PREFIX ex: <http://example.org/>
SELECT ?x
FROM <http://thefigtrees.net/lee/sw/data/single-class.ttl>
{
?x a ex:A .
OPTIONAL {
?x a ?type .
FILTER(?type != ex:A)
}
FILTER(!bound(?type))
}
oh cripes, sparql.org is down right now. But I think this query is right.
>> 2) Is there any kind of collection on the web of common SPARQL
>> problems and
>> queries that solve it? Maybe some wiki page?
>
> Lee runs the SPARQL FAQ:
>
> http://thefigtrees.net/lee/sw/sparql-faq
>
...which needs some updating, but has a few of these sorts of things...
As always, please mail me if you have any suggestions for things to add
to the FAQ.
Lee
Received on Friday, 1 February 2008 19:20:48 UTC