- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Sat, 28 Feb 2009 02:52:26 -0500
- To: Jon Crump <jjcrump@myuw.net>
- CC: public-sparql-dev@w3.org
Jon Crump wrote:
> Dear all,
>
> Another naive question from the peanut gallery about date arithmetic (or
> arithmetic in general)
>
> Given a graph:
>
> :bob a :Person;
> :byear "1962".
> :carol a :Person;
> :byear "1963".
> :ted a :Person;
> :byear "1964".
> :alice a :Person;
> :byear "1965".
>
> :Smiths a :Family;
> :children :bob, :carol, :ted, :alice.
>
>
> How to find the minimum and maximum birthyears represented in family
> Smith? I've gotten this far:
>
> SELECT ?date
> WHERE{ ?family :children ?child .
> ?child :byear ?date .
> OPTIONAL{{
> {?earlier :byear ?edate . FILTER (?edate < ?date)}
> {?later :byear ?ldate . FILTER (?ldate > ?date)}
> }}
> FILTER (!bound(?later))
> }
>
> But this binds both earliest and latest to ?date. To make the comparison
> in the filters I have to compare ?edate and ?ldate to a common variable
> ?date, but what I'd like my query to return is the earliest date bound
> to ?start and the latest bound to ?end.
Hi John,
I think the key observation here is that you're trying to find two
different children. (They might be the same child twice for an only
child situation, but for the purposes of the query, it's two children.)
So let's rewrite your query with that in mind:
SELECT ?start ?end
WHERE {
?family :children ?oldest, ?youngest .
?oldest :byear ?start .
OPTIONAL { ?older :byear ?earlier . FILTER (?earlier < ?start) }
?youngest :byear ?end .
OPTIONAL { ?younger :byear ?later . FILTER (?later > ?end}
FILTER(!bound(?earlier) && !bound(?later))
}
(I haven't tested this, so apologies if it's not quite right, but I hope
it gets the idea across.)
Note that aggregate functions such as MIN and MAX are one potential
topic that the newly re-started SPARQL Working Group may end up tackling
in a new round of specification, which would make queries like this much
easier to express.
If you are associated with a W3C member organization and would like to
join the working group, please send me an email and let me know.
If you are not interested or able to join the working group but would
like to follow the group's work and contribute input to the future
direction of SPARQL, please do one or more of the following:
+ monitor the group's progress at http://www.w3.org/2009/sparql/wiki/
(site still being assembled)
+ monitor occasional announcements at the Semantic Web Activity News
blog - http://www.w3.org//2001/sw/anews/
+ send feedback to public-rdf-dawg-comments@w3.org
(In general, the -comments mailing list is the best way for community
members to make their voice heard to the working group.)
best,
Lee
> Something obvious here that I'm missing. Suggestions?
>
> Thanks,
> Jon
>
>
Received on Saturday, 28 February 2009 07:53:08 UTC