Re: N3 and Turtle Syntax Questions

\On Sep 10, 2012, at 9:59 AM, Hugh Glaser <hugh.glaser@seme4.com> wrote:

> Hi,
> Sandro has asked on the SemWeb list if there are any comments on Turtle syntax.
> I raised an issue (forwarded below) a few years ago, but it looks to me like the syntax is still the same.
> 
> I would like the syntax to allow comma and semicolon as a terminator (and thus also to be compatible with N3).

Production 7 does allow a statement to end with a semicolon:

[7]	predicateObjectList	::=	verb objectList (';' predicateObjectList?)*

However, production 8 does not allow this:

[8]	objectList	::=	object (',' object)*

It would be fairly easy, and would allow exactly the same form as 7, to just make it objectList ::= object (',' object?)*, or even objectList ::= object (',' objectList?)*. Either of these would create more recursive parser states and are certainly not optimal, but that's not really the standard for publishing normative grammars. I could go either way on making this change.

Gregg

> Hopefully the message is still sufficiently explanatory, but please ask if you need elaboration.
> Best
> Hugh
> 
> On 10 Jan 2008, at 02:25, Tim Berners-Lee <timbl@w3.org> wrote:
> 
>> Oh, I completely understand why -- that's indeed why N3 has it.
>> (I have sed files for generating N3 -- very practical. Don't tell anyone.)
>> Mind you, I have always been generating pred-object pairs,
>> so I have used the ability to end in a semicolon, not a comma.
>> 
>> Tim
>> 
>> PS: IIRC  Pascal and Algol has the same problem. See e.g.http://www.lysator.liu.se/c/bwk-on-pascal.html "Pascal, in common with most other Algol-inspired languages, uses the semicolon as a statement separator rather than a terminator". Just because I shave it off doesn't mean it ain't grey ;-)  Ee bah gum, when I were a lad, were would be lucky to even *have* semicolons, ... ;-)
>> 
>> On 2008-01 -09, at 14:33, Hugh Glaser wrote:
>> 
>>> 
>>> 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/
>>> 
>>> 
>>> 
>> 
> 
> --
> Hugh Glaser
> Chief Architect
> Seme4 Limited
> 18 Soho Square
> LONDON
> W1D 3QL
> Mobile: +44 7595334155
> Main: +44 2070601590
> 
> hugh.glaser@seme4.com
> www.seme4.com
> 
> Seme4 - the experts in semantic web and linked data applications
> 
> Notice of Confidentiality. This e-mail message (including any attached
> documents) is proprietary and confidential to Seme4 Limited and/or its
> affiliates and may contain legally privileged information. It is intended
> for the named recipient(s) only. If you are not the intended recipient,
> you may not review, retain, copy or distribute this message and we ask you
> to notify the sender immediately, then delete this message from your
> system. Thank you for your cooperation.
> 
> 

Received on Monday, 10 September 2012 22:45:19 UTC