- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Tue, 25 Aug 2009 09:10:44 -0400
- To: Dan Brickley <danbri@danbri.org>
- CC: Toby Inkster <tai@g5n.co.uk>, public-sparql-dev@w3.org
[CC- public-rdf-dawg]
Dan Brickley wrote:
> On Tue, Aug 25, 2009 at 2:45 PM, Lee Feigenbaum<lee@thefigtrees.net> wrote:
>> Hi Toby,
>>
>> I've CCed the SPARQL WG list but also the public-sparql-dev list which in
>> general is better suited for "how do I..." SPARQL questions. If I'm correct
>> that that best suits the nature of this question, please drop
>> public-rdf-dawg@w3.org from future messages in this thread.
>>
>> If I understand you correctly, the pattern you're looking for is that you
>> have a prioritized list of predicates that you want to use for a particular
>> value, in this case date. The "canonical" way to do this in SPARQL (or, at
>> least, what I've always done and seen done) is to use a series of OPTIONAL
>> clauses that all bind to the same variable:
>>
>> SELECT ?date {
>> ?item a ex:Item .
>> OPTIONAL { ?item dct:created ?date }
>> OPTIONAL { ?item dct:issued ?date }
>> OPTIONAL { ?item dct:date ?date }
>> OPTIONAL { ?item dc:date ?date }
>> } ORDER BY ?date
>>
>> This will bind ?date to the first of the predicates that have a value for
>> each ex:Item.
>
> First in the query (textually, ie. created before issued before date,
> ...), or first in the data?
First in the query.
> If the former - I hadn't realised OPTIONAL was ordered, if it is...
Yes, OPTIONAL is order sensitive, by virtue of being a non-commutative
binary operator (analogous to left join in SQL).
That said, there are many cases in which the placement of an OPTIONAL is
irrelevant. I believe that smarter people than me have attempted to
characterize when the order matters.
Lee
> cheers,
>
> Dan
>
Received on Tuesday, 25 August 2009 13:11:26 UTC