N3 and Turtle Syntax Questions

This was going to be a quick confirmation on N3 and turtle syntax for ';'
and ',', but seems to have got a bit complicated.

I want to write

@prefix owl:  <http://www.w3.org/2002/07/owl#> .
<http://southampton.rkbexplorer.com/id/person-00021>
owl:sameAs <http://citeseer.rkbexplorer.com/id/resource-CSP109020> ;
owl:sameAs 
<http://dblp.rkbexplorer.com/id/people-1726e6ee8fb20c8704f47285949b39b3-d101
32da488b7179a8b1844f88470032> ;
.

Similarily:
@prefix owl:  <http://www.w3.org/2002/07/owl#> .
<http://southampton.rkbexplorer.com/id/person-00021> owl:sameAs
<http://citeseer.rkbexplorer.com/id/resource-CSP109020> ,
<http://dblp.rkbexplorer.com/id/people-1726e6ee8fb20c8704f47285949b39b3-d101
32da488b7179a8b1844f88470032> ,
.

That is:
<#pat> <#age> 24;  <#eyecolor> "blue"; .
and
<#pat> <#child> [ <#age> 4 ], [ <#age> 3 ], .

Looking at the syntagmata in (1) and (2), my reading is that I can do this
for ';', although they have different structures:
N3 seems to do it by the possibility of () for propertylist.
Turtle seems to have an explicit optional ';' (in rule 7).

On the other hand, for ',':
N3 seems to do it by the possibility of () for objecttail.
However, I don't think I can do the same in turtle, as rule 8 in (2) lacks
the extra (',')?

(I would have downloaded the yacc grammar for N3 and tried it for real, but
the link on (3) to the yacc grammar gives 404, by the way.)

So the question is: have I got something wrong?
If not, then to use the second, ',', construct, I need to use N3, not
turtle.
So some questions are:
Is this what is intended, rather than an omission?
If so, why?
It seems a bit strange that such simple N3 is not compatible with turtle.

(1) http://www.w3.org/2000/10/swap/grammar/n3.n3
(2) http://www.dajobe.org/2004/01/turtle/#sec-tutorial
(3) http://www.w3.org/DesignIssues/Notation3.html

PS
And if you want to know why, it is because I want to generate a load of
sameAs triples. It is a common problem for program (and other) generators
not to want to know you are generating the last item in a list, and simply
treat the ';' or ',' as terminator, rather than separator. This can be
achieved by allowing null productions (as N3 above), or an explicit optional
(as turtle ';'), or by actually making it a terminator, although then you
tend to end up with ';;;' in the code.
And you can't put it at the front of each output either, otherwise you need
to treat the first item in the list specially.
(For the grey beards among us, this is why generating something like Algol68
was more of a pain than generating Pascal!)

Best
Hugh
-- 
Hugh Glaser,  Reader
              Dependable Systems & Software Engineering
              School of Electronics and Computer Science,
              University of Southampton,
              Southampton SO17 1BJ
Work: +44 (0)23 8059 3670, Fax: +44 (0)23 8059 3045
Mobile: +44 (0)78 9422 3822, Home: +44 (0)23 8061 5652
http://www.ecs.soton.ac.uk/~hg/

Received on Wednesday, 9 January 2008 19:33:53 UTC