W3C home > Mailing lists > Public > public-rdf-wg@w3.org > October 2011

Re: proposals for Lists and Seq (ISSUE-77)

From: Steve Harris <steve.harris@garlik.com>
Date: Fri, 21 Oct 2011 12:01:52 +0100
Cc: public-rdf-wg@w3.org
Message-Id: <94536303-CA5B-4123-9EF5-D8C1F1113CF3@garlik.com>
To: Andy Seaborne <andy.seaborne@epimorphics.com>
On 2011-10-21, at 11:19, Andy Seaborne wrote:
> 
> On 20/10/11 14:05, Steve Harris wrote:
>> On 2011-10-20, at 13:47, Sandro Hawke wrote:
>> 
>>> On Thu, 2011-10-20 at 13:21 +0200, Dan Brickley wrote:
>>>> On 20 October 2011 13:13, Steve Harris<steve.harris@garlik.com>  wrote:
>>>>> I wouldn't be comfortable with marking Seq as "archaic" or similar unless there's a viable alternative, and I don't think List counts.
>>>> 
>>>> Me neither.  Nor "quaint", "twee", "retro" or "regrettable". It's just
>>>> what it is, with no great mystery or confusion.
>>> 
>>> Actually, there's a great deal of confusion.  Please do explain -- in
>>> one sentence for newbies -- why we have both Seq and List, and with Seq
>>> better supported in RDF/XML and List better supported in Turtle, and how
>>> someone should decide which to use.
>> 
>> Seq has the advantage that it's much easier to query with SPARQL. Still not great, but much easier.
>> 
>> Finding the 3rd member of a list:
>> 
>> Seq
>> 
>> SELECT ?m3
>> WHERE {
>>   <x>  rdf:_3 ?m3
>> }
> 
> If you assume a notion of well-formedness: else:
> 
> :x rdf:_1 1 ;
>   rdf:_1 10 ;
>   rdf:_1 11 ;
>   rdf:_2 2 ;
>   rdf:_9 3 .

I don't see how that's an issue - there isn't a 3rd member in that case, which is a bit at odds with the mathematical definition of a Sequence, but a reasonable thing to want to model.

> :-(
> 
> Maybe "well-formedness" for Seq and Lists is a useful way to go.

Perhaps, though I think it's fine as it is. Or at least not the biggest problem.

>> List
>> 
>> SELECT ?m3
>> WHERE {
>>   <x>  rdf:rest ?l2 .
>>   ?l2 rdf:rest ?l3 .
>>   ?l3 rdf:first ?m3 .
>> }
> 
> 0-based lists:
> 
> { <x>  rdf:rest{2}/rdf:first ?m . }

Oh, good point.

>> Finding all the members:
>> 
>> Seq (if you have RDFS)
>> 
>> SELECT ?m
>> WHERE {
>>   <x>  rdfs:member ?m .
>> }
>> 
>> List (if you have property paths)
>> 
>> SELECT ?m
>> WHERE {
>>   <x>  rdf:rest*/rdf:first ?m .
>> }
>> 
>> If you don't have RDFS or SPARQL 1.1 PPs, then "find all members" is ugly in Seqs (you need a regex), and very hard for Lists, unless you know the maximum length of the list.
>> 
>> It's possible to get all the Seq members in order, but it's a pretty nasty expression.
> 
> Understatement! It requires SPARQL 1.1 string bashing.

Yeah, a SUBSTR and an xsd:integer cast, ugly, but easier than getting the same information out of Lists.

- Steve

-- 
Steve Harris, CTO, Garlik Limited
1-3 Halford Road, Richmond, TW10 6AW, UK
+44 20 8439 8203  http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10 9AD
Received on Friday, 21 October 2011 11:02:36 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:25:46 GMT