- From: Andy Seaborne <andy@apache.org>
- Date: Mon, 18 Nov 2013 10:29:49 +0000
- To: public-rdf-comments@w3.org
Richard, Thank you for your comment. I've recorded this as https://www.w3.org/2011/rdf-wg/track/issues/174 Andy One comment inline: On 17/11/13 19:09, Richard Smith wrote: > > Consider the following TriG document: > > { ex:Jack a foaf:Person } > ex:foo { ex:Jill a foaf:Person } > > Assuming the prefixes are bound, this is valid TriG document. The first > line puts a statement that Jack is a person into the default graph, and > the second line puts a similar statement about Jill into named graph > ex:foo. > > But it's very nearly a valid N3 document meaning something quite > different. N3's formulae are conceptually much the same as TriG's > graphs, but N3's formulae can be subject or object of statements. So in > N3, the following document makes some sort of statement (with predicate > ex:foo) about the two formulae or graphs. > > { ex:Jack a foaf:Person } ex:foo { ex:Jill a foaf:Person } . > > The only thing that stops that from being valid TriG is terminating > '.'. To express this in TriG we would write: > > _:a { ex:Jack a foaf:Person } > _:b { ex:Jill a foaf:Person } > _:a ex:foo _b > > Now I can entirely understand TriG not wanting to support this feature > of N3. But at the same time I would be pleased if some future TriG-like > language, maybe TriG 2.0, would include them because they're very useful > in technologies like the W3C's PROV language where it's common to want > to write: > > { ex:Jack a foaf:Person ; > bio:birth [ dc:date "1905-01-11"^^xsd:date ] } > prov:wasDerivedFrom [ a foaf:Document, > dc:title "Jack's birth certificate" ] . > > So it would be nice if TriG remained compatible with N3 by allowing for > the future possibility of such a feature. > > Even though N3 is not a W3C recommendation, it (or a subset of it) is in > use in several current products, such as cwm. Languages like N-Triples > and Turtle are both compatible with N3 insofar as no valid N-Triples or > Turtle document that is also a valid N3 document has different meanings > in the different languages. (They're not quite subsets of N3, but it > would be easy enough to update N3 so that this were true.) An > application wishing to support N-Triples, Turtle and N3 may well do so > with a single parser. > > Strictly speaking it is also the case that TriG and N3 because the final > '.' disambiguates it, but then makes the grammar a long way from being > LL(1) or LALR(1), as arbitrary look-ahead is required. Allowing a > single parser to handle both N3 and TriG easily is another reason why > this syntax is problematic. > > > If fixing this is considered desirable, requiring a '.' after the > closing '}' of the native (i.e. non-SPARQL) syntax would do this. (This > would require trival ammendments to grammar productions [2g] block and > [3g] triplesOrGraph.) But it does so at the cost of breaking > compatibility with the current (and earlier) drafts of TriG. This has a > pleasing symmetry with the Turtle syntax for anonymous blank nodes or > collections: > > ( ex:a ex:b ) . > [ a ex:class ] . > { ex:foo ex:pred ex:bar } . > > which generate the following (slightly abbreviated) N-Quads: > > <> _:1 rdf:type rdf:List . > <> _:1 rdf:first ex:a . > <> _:1 rdf:rest _:2 . > <> _:2 rdf:first ex:b . > <> _:2 rdf:rest rdf:nil . > <> _:3 rdf:type ex:class . > _:4 ex:foo ex:pred ex:bar . This is not quite right. The final line is a triple: ex:foo ex:pred ex:bar . The default graph is not a named graph with a blank node. > > > Richard >
Received on Monday, 18 November 2013 10:30:22 UTC