Although triples can in principle express anything (well anything computational), this does not mean they are particularly appropriate for everything1.
RDF sequences are one of the most basic structured types and I have always found the use of rdf:_1, rdf:_2 at best clunky. In particular I don’t like the fact that the textual form embodies the meaning.
In the RDF schema, rdf:_1, rdf:_2, etc are all instances of the class rdfs:ContainerMembershipProperty and sub-properties of rdfs:member. However, I was also looking to see if there was some (implicitly defined) property of each of them that said which index they represented. For example:
<rdf:_3> <rdf:isSequenceNumber> “3”
This would mean that the fact that rdf:_3 corresponded to the third element in a sequence was expressed semantically by rdf:isSequenceNumber as well as lexically in the label “_3”.
Sadly I could find no mention of this or any alternative technique to give the rdf:_nnn properties explicit semantics 🙁
This is not just me being a purist, having explicit semantics makes it possible to express queries such as gathering together contiguous pairs in a sequence:
<ex:a> ?r1 ?a.
<ex:a> ?r2 ?b.
?r1 <rdf:hasSequenceNumber> ?index.
?r2 <rdf:hasSequenceNumber> ?index + 1.
Without explicit semantics, this would need to be expressed using string concatenation to create the labels for the relations – yuck!
Have I missed something? Is there an alternative mechanism in the RDF world that is like this or better?
Mind you I don’t see what’s wrong with a[index] … but may be that is just too simple?