- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Thu, 17 Jan 2008 03:50:07 -0500 (EST)
- To: semantic-web@w3.org
From: Peter F. Patel-Schneider <pfps@research.bell-labs.com> Subject: Re: comments on the N3 team submission Date: Wed, 16 Jan 2008 16:31:50 -0500 (EST) > From: Peter F. Patel-Schneider <pfps@research.bell-labs.com> > Subject: comments on the N3 and Turtle team submissions > Date: Wed, 16 Jan 2008 09:08:22 -0500 (EST) > > > From: Sandro Hawke <sandro@w3.org> > > Subject: Re: ISSUE-93 (Language tags): RFC 3066 - Tags for the Identification of Languages > > Date: Wed, 16 Jan 2008 09:29:48 -0500 > > [...] > > > > If you've actually read through the documents [the N3 and Turtle > > > team submissions], it'd be great if you'd > > > send along any constructive comments you have. > > > > > > - s > > > > As I've said in some other contexts, I'm willing to provide what I > > consider to be constructive comments on many documents. However I don't > > guarantee that the authors will like my comments. > > > > peter What is Turtle? >From the document: This document defines a textual syntax for RDF called Turtle that allows RDF graphs to be completely written in a compact and natural text form, with abbreviations for common usage patterns and datatypes. This document defines Turtle, the Terse RDF Triple Language, a concrete syntax for RDF as defined in the RDF Concepts and Abstract Syntax ([RDF-CONCEPTS]) W3C Recommendation. A Turtle document allows writing down an RDF graph in a compact textual form. It consists of a sequence of directives, triple-generating statements [and] blank lines. I was thus expecting to find not only a grammar for Turtle, but a normative mechanism for turning a Turtle document into an RDF graph. Unfortunately there is no such mechanism in the document, even parts of the informative Section 2 are promoted to being normative. The document contains portions of what is needed, but not a complete mechanism. The flaws are four-fold: 1/ There is nothing said about how to process some parts of the Turtle language, e.g., collections with other than zero or two components or even the [] construct. 2/ There is no overall guidance on the order in which actions needed to convert a Turtle document into an RDF graph are performed. For example, dealing with [] after , can give different results from dealing with [] before ,. 3/ Some statements in the document are not correct. For example, triple-generating statements are not defined in the document, but this notion is used in the document. 4/ The target of the conversion is not specified. The target could be N-Triples or RDF graphs. If the target is N-Triples, then Turtle documents have to be carefully processed to turn any non-ASCII characters into ASCII. To make the document complete requires a processing model for Turtle. I suggest something like: A Turtle document is turned into an RDF graph in a multi-stage process. This process turns a sequence of Unicode charaters into an abstract object. To implement the process requires more than just character replacement, as intermediate results are abstract objects like URI references. Throughout, rdf:XXX will mean the RDF URI reference of the form http://www.w3.org/1999/02/22-rdf-syntax-ns#XXX for XXX any name. 0/ Handle escape characters and white space 0.2/ Turn each uriref into a URI references, handling escaping as in S3.3 (and removing the enclosing <>). 0.3/ Turn each quotedString into a Normal Form C Unicode string, handling escaping as in S3.3 (and removing the enclosing " or """). 0.4/ Discard any ws 1/ Turn each qname and URI reference into an RDF URI reference. 1.1/ Turn each URI reference into an RDF URI reference, as in S3.4. 1.2/ Expand each qname into a uriref as in S2.1, which will be an RDF URI reference (because all relative URIs have been dealt with already). 1.3/ Replace each occurence of 'a' as a verb with the RDF URI reference rdf:type 1.4/ Discard any directive and trailing . 2/ Turn each literal into an RDF literal. The only non-obvious part is to add the appropriate datatype to integer, double, decimal, and boolean. >From now on the process is working with a sequence of processed occurences of the triples production, i.e., pieces of the occurences may have been replaced with abstract objects. 3/ Handle blank nodes 3.1/ For each name used in a nodeID in the document select a fresh blank node and replace any occurence of nodeID of the form _:name with that blank node. This processes each of the occurences. 3.2/ Recursively, until no unprocessed blank is left in the document, select an unprocessed blank that does not contain an unprocessed blank, select a fresh blank node, and process the blank as follows: a) If blank is of the form [] replace it with the fresh blank node. b) If blank is of the form [ predicateObjectList ] replace it with fresh blank node and add a new triples consisting of the fresh blank node (as subject) and the predicateObjectlist. c) If blank is of the form () replace it with the RDF URI reference rdf:nil e) If blank is of the form ( object1 ... objectn ) for n>=1 - select n fresh nodes, node1, ...., noden, - replace the blank with node1, - add 2n-2 triples with triple 2i-1 having subject nodei, verb rdf:first, and object objecti and triple 2i having subject nodei, verb rdf:rest, and object nodei+1, and - add two triples with the first having subject noden, verb rdf:first, and object objectn and the second having subject noden, verb rdf:rest, and object rdf:nil (Yes, this is being a bit sloppy.) 4/ Handle ; constructs 4.1/ Recursively replace any subject verb1 objectlist1 ; verb2 objectlist2 with subject verb1 objectlist1 . subject verb2 objectlist2 4.2/ Remove any remaining ; 5/ Handle , constructs 5.1/ Recursively replace any subject verb object1 , object2 with subject verb object1 . subject verb object2 6/ Turn each subject verb object . into an RDF triple. Selecting a fresh blank node means to select a blank node (from the infinite collection of blank nodes available) that has not yet been used in the process so far. The process results in an RDF graph as in http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-rdf-graph Some typographical and wording problems: triple-generating statements or blank lines. -> triple-generating statements and blank lines. in the RDF Concepts and -> in RDF Concepts and keeping it in the RDF model. -> keeping within the RDF model. separated by whitespace and terminated by '.' after each triple. -> ??? repeated URIs -> URIs any legal URI form (full or qualified) : full URI has not been defined a blank node either from the given nodeID. -> a blank node with the given nodeID. A generated blank node -> An anonymous blank node ?? be made with [] -> written as [] Boolean may be -> Booleans may be an relative -> a relative
Received on Thursday, 17 January 2008 09:17:47 UTC