- From: Richard Smith <richard@ex-parrot.com>
- Date: Sun, 17 Nov 2013 17:49:09 +0000 (GMT)
- To: public-rdf-comments Comments <public-rdf-comments@w3.org>
The following is not a valid Turtle document, per the
candidate recommendation:
( :foo :bar ) .
This is because a collection can only appear as the subject
of a statement in Turtle.
The same document is a valid TriG document as it matches the
triples2 production in the grammar.
It seems desirable that both TriG and Turtle should do the
same thing here, and in general that any valid TriG document
that does not use the { ... } construct should be a valid
Turtle document.
SPARQL 1.0 allows bare collections that are not the subject
of a statement, and that is now a stable recommendation. It
therefore seems best to conform to that by allowing bare
collections in both TriG and Turtle.
In TriG, if it the collection is placed inside a wrapped
graph in TriG, it is no longer valid:
GRAPH { ( :foo :bar ) }
This is directly incompatible with SPARQL 1.0, and for that
reason should be fixed. It also introduces a surprising
difference between implicit and explicit use of the default
graph.
Bare collections are potentially useful as they do generate
RDF statements. So I think the right solution is to allow
bare collections in both languages, inside and outside of
wrapped graphs. The simplest way of fixing this seems to me
to be to redefine the following grammar productions:
Currently in Turtle:
[6] triples ::= subject predicateObjectList
| blankNodePropertyList predicateObjectList?
[10] subject ::= iri | BlankNode | colection
Proposed in Turtle:
[6] triples ::= subject predicateObjectList
| triplesNode predicateObjectList?
[10] subject ::= iri | BlankNode
[NN] triplesNode ::= blankNodePropertyList | collection
The name 'triplesNode' is chosen because the corresponding
grammar production in SPARQL is called TriplesNode.
The same change to the same grammar productions will fix
TriG. However it may be desirable at the same time to:
1) change [4g] triples2 to reference the new triplesNode
production;
2) delete production [7g] labelOrSubject and replace its
use with subject, as the two are now identical; and
3) delete production [14] blank and expand its sole use
in [12] object because (i) it has a misleading name,
(ii) it causes the definition of object to differ
(albeit cosmetically) between TriG and Turtle, and
(iii) it is misnumbered (it should have a 'g' suffix)
and throws out the correspondence between production
numbers in Turtle and TriG.
Richard
Received on Sunday, 17 November 2013 17:49:33 UTC