- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Tue, 11 Dec 2007 02:24:31 -0500
- To: Bob MacGregor <bob.macgregor@gmail.com>
- CC: public-sparql-dev@w3.org
Bob MacGregor wrote: > Hi Lee, > > OK, we'll try sparql dev, as long as this is a how to, rather than a > "can't be > done". But it looks to me like > your query returns no bindings if an article does not have a timetag. I > say this because of the {?a ex:timetag ?maxtime} clause > that comes before the OPTIONAL. But in that case, it should return > the article. Can you fix this, or is it not expressible after all? Right, I did that purposefully to concentrate on the "max" idiom. If you want to include articles with no timetag, it becomes: PREFIX : <http://example.org/> SELECT ?a FROM <http://thefigtrees.net/lee/sw/data/times.ttl> WHERE { ?a a :article . OPTIONAL { ?a :timetag ?maxtime . OPTIONAL { ?a :timetag ?othertime . FILTER(?othertime > ?maxtime) } FILTER (!bound(?othertime)) } FILTER(!bound(?maxtime) || ?maxtime < 5) } The key is, I guess, to make the whole "find the max time" part optional and then filter outside that on "there is no maxtime or the maxtime is early enough". (Note, I put some actual data at the above URL so that you can try this out. To do this I changed the predicate names a bit and used integers instead of datetimes for simplicity. I made "now" equal to 5. :-) ARQ deployed at http://sparql.org is a great place to try it.) The data is: @prefix : <http://example.org/> . :onetimeOK a :article ; :timetag 1 . :onetimeNotOK a :article ; :timetag 10 . :twotimesOK a :article ; :timetag 1, 2 . :twotimesNotOK a :article ; :timetag 1, 10 . :notimeOK a :article . ... and when I run the above query through ARQ at sparql.org I get: a: <http://example.org/notimeOK> <http://example.org/twotimesOK> <http://example.org/onetimeOK> Lee > > > In SPARQL, this query is (unedited, untested): > > SELECT ?a > FROM :model > WHERE { > ?a rdf:type ft:article ; ex:timetag ?maxtime . > OPTIONAL { ?a ex:timetag ?othertime . FILTER(?othertime > ?maxtime) } > FILTER (!bound(?othertime) && ?maxtime > '...now...') > } > > Original target: > > > SELECT ?a > FROM model > WHERE > (?a rdf:type ft:Article) AND > UNSAID ((?a ex:timetag ?time) AND > (?time > $NOW)) > > ===================================== > Robert MacGregor > Chief Scientist > Siderean Software, Inc. > bob.macgregor@gmail.com <mailto:bob.macgregor@gmail.com> > Mobile: 310-469-2810 > =====================================
Received on Tuesday, 11 December 2007 07:24:46 UTC