- From: Gavin Carothers <gavin@carothers.name>
- Date: Sun, 7 Jul 2013 09:05:42 -0700
- To: "Eric Prud'hommeaux" <eric@w3.org>
- Cc: Guus Schreiber <guus.schreiber@vu.nl>, RDF WG <public-rdf-wg@w3.org>, Andy Seaborne <andy.seaborne@epimorphics.com>
- Message-ID: <CAPqY83yHwtJosRZKm3Q1YGSKHgV0Y0fv5b11B_=taj0WpdWmYg@mail.gmail.com>
The grammar as specified no longer allows empty graphs.
# This document encodes one empty graph.
@prefix : <http://www.example.org/exampleDataset#> .
:empty { }
The grammar is a bit odd when it comes to trailing dots as well:
# This document encodes one graph with no trailing dot
@prefix : <http://www.example.org/exampleDataset#> .
graph :g {
:s :p :o
}
# This document is an error as it's missing a trailing dot
@prefix : <http://www.example.org/exampleDataset#> .
:s :p :o
On Sat, Jul 6, 2013 at 3:49 PM, Eric Prud'hommeaux <eric@w3.org> wrote:
> https://www.w3.org/2011/rdf-wg/track/actions/278 says
> [[
> Create new grammar for TriG that includes optional graph keywords and
> make {} optional around the default graph
> ]]
>
> I followed Sandro's lead and replaced
> [[
> [1] turtleDoc ::= statement*
> [2] statement ::= directive | triples '.'
> ]]
> with:
> [[
> trigDoc ::= statement*
> statement ::= directive | tripleOrBareGraph | graphword |
> wrappedDefault
> tripleOrBareGraph ::= (iri | BlankNode | collection |
> BlankNodePropertyList) ('{' TriplesTemplate '}' | PropertyListNotEmpty '.')
> graphword ::= "GRAPH" (iri | BlankNode) '{' TriplesTemplate '}'
> wrappedDefault ::= '{' TriplesTemplate '}'
> ]].
> This permits docs like:
> [[
> PREFIX p: <ns>
> @prefix p: <ns> .
> <s> <p> <o> .
> { <s> <p> <o> }
> <g> { <s> <p> <o> }
> GRAPH <g> { <s> <p> <o> }
> _:g { <s> <p> <o> }
> GRAPH _:g { <s> <p> <o> }
> ]].
>
>
> We can be conservative or liberal about what can go the the graph name
> position:
> [[
> tripleOrBareGraph ::= (iri | BlankNode) ('{' TriplesTemplate '}' |
> PropertyListNotEmpty '.')
> | collection PropertyListNotEmpty '.'
> | BlankNodePropertyList PropertyListNotEmpty? '.'
> [[
> or more liberal:
> [[
> tripleOrBareGraph ::= (iri | BlankNode | collection |
> BlankNodePropertyList) ('{' TriplesTemplate '}' | PropertyListNotEmpty '.')
> ]]
> which permits bnodes from collections and property lists like:
> [[
> (1 2 3) { <s> <p> <o> }
> [ <p> <o> ] { <s> <p> <o> }
> ]].
> I prefer the latter as it encourages the good practice of making
> assertions about labeled graphs, e.g.
> [[
> [ :utteredBy "Bob" ] { <moon> <madeOf> <greenCheese> }
> ]]
>
>
> Following is <http://www.w3.org/2005/01/yacker/uploads/trigS_new>:
>
> trigDoc ::= statement*
> statement ::= directive | tripleOrBareGraph | graphword |
> wrappedDefault
> #tripleOrBareGraph ::= (iri | BlankNode) ('{' TriplesTemplate '}' |
> PropertyListNotEmpty '.')
> # | collection PropertyListNotEmpty '.'
> # | BlankNodePropertyList PropertyListNotEmpty? '.'
> tripleOrBareGraph ::= (iri | BlankNode | collection |
> BlankNodePropertyList) ('{' TriplesTemplate '}' | PropertyListNotEmpty '.')
> graphword ::= "GRAPH" (iri | BlankNode) '{' TriplesTemplate '}'
> wrappedDefault ::= '{' TriplesTemplate '}'
>
> [3] directive ::= prefixID | base | sparqlPrefix |
> sparqlBase
> [4] prefixID ::= PREFIX PNAME_NS IRIREF '.'
> [5] base ::= BASE IRIREF '.'
> [5s] sparqlBase ::= SPARQL_BASE IRIREF
> [6s] sparqlPrefix ::= SPARQL_PREFIX PNAME_NS IRIREF
> [52s] TriplesTemplate ::= TriplesSameSubject ( '.'
> TriplesTemplate? )?
> [6] TriplesSameSubject ::= subject PropertyListNotEmpty |
> BlankNodePropertyList PropertyList
> [76s] PropertyList ::= PropertyListNotEmpty?
> [77s] PropertyListNotEmpty ::= Verb ObjectList (';' (Verb
> ObjectList)?)*
> [8] ObjectList ::= object (',' object)*
> [9] Verb ::= predicate | 'a'
> [10] subject ::= iri | BlankNode | collection
> [11] predicate ::= iri
> [12] object ::= iri | BlankNode | collection |
> BlankNodePropertyList | literal
> [13] literal ::= RDFLiteral | NumericLiteral |
> BooleanLiteral
> [14] BlankNodePropertyList ::= '[' PropertyListNotEmpty ']'
> [15] collection ::= '(' object* ')'
> [16] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
> [128s] RDFLiteral ::= String (LANGTAG | '^^' iri)?
> [133s] BooleanLiteral ::= 'true' | 'false'
> [17] String ::= STRING_LITERAL1 | STRING_LITERAL2 |
> STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
> [135s] iri ::= IRIREF | PrefixedName
> [136s] PrefixedName ::= PNAME_LN | PNAME_NS
> [137s] BlankNode ::= BLANK_NODE_LABEL | ANON
>
> @terminals
>
> [18] IRIREF ::= '<' ([^#x00-#x20<>\"{}|^`\\] |
> UCHAR)* '>'
> [139s] PNAME_NS ::= PN_PREFIX? ':'
> [140s] PNAME_LN ::= PNAME_NS PN_LOCAL
> [141s] BLANK_NODE_LABEL ::= '_:' (PN_CHARS_U | [0-9])
> ((PN_CHARS | '.')* PN_CHARS)?
> [0] GRAPH1 ::= [Gg][Rr][Aa][Pp][Hh]
> [0] SPARQL_PREFIX ::= [Pp][Rr][Ee][Ff][Ii][Xx]
> [0] SPARQL_BASE ::= [Bb][Aa][Ss][Ee]
> [0] BASE ::= '@base'
> [0] PREFIX ::= '@prefix'
> [144s] LANGTAG ::= BASE | PREFIX | '@' [a-zA-Z]+ ('-'
> [a-zA-Z0-9]+)*
> [19] INTEGER ::= [+-]? [0-9]+
> [20] DECIMAL ::= [+-]? [0-9]* '.' [0-9]+
> [21] DOUBLE ::= [+-]? ([0-9]+ '.' [0-9]* EXPONENT |
> '.' [0-9]+ EXPONENT | [0-9]+ EXPONENT)
> [154s] EXPONENT ::= [eE] [+-]? [0-9]+
> [155s] STRING_LITERAL1 ::= "'" ([^#x27#x5C#xA#xD] | ECHAR |
> UCHAR)* "'"
> [156s] STRING_LITERAL2 ::= '"' ([^#x22#x5C#xA#xD] | ECHAR |
> UCHAR)* '"'
> [157s] STRING_LITERAL_LONG1 ::= "'''" (("'" | "''")? [^'\\] | ECHAR
> | UCHAR)* "'''"
> [158s] STRING_LITERAL_LONG2 ::= '"""' (('"' | '""')? [^"\\] | ECHAR
> | UCHAR)* '"""'
> [26] UCHAR ::= '\\u' HEX HEX HEX HEX | '\\U' HEX
> HEX HEX HEX HEX HEX HEX HEX
> [159s] ECHAR ::= '\\' [tbnrf\\"']
> [161s] WS ::= #x20 | #x9 | #xD | #xA
> [162s] ANON ::= '[' WS* ']'
> [163s] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] |
> [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] |
> [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] |
> [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
> [164s] PN_CHARS_U ::= PN_CHARS_BASE | '_'
> [166s] PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 |
> [#x0300-#x036F] | [#x203F-#x2040]
> [167s] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS | '.')*
> PN_CHARS)?
> [168s] PN_LOCAL ::= (PN_CHARS_U | ':' | [0-9] | PLX)
> ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX))?
> [169s] PLX ::= PERCENT | PN_LOCAL_ESC
> [170s] PERCENT ::= '%' HEX HEX
> [171s] HEX ::= [0-9] | [A-F] | [a-f]
> [172s] PN_LOCAL_ESC ::= '\\' ('_' | '~' | '.' | '-' | '!' |
> '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#'
> | '@' | '%')
>
> @pass: [ \t\r\n]+ | '#' [^\r\n]*
>
>
> --
> -ericP
>
>
Received on Sunday, 7 July 2013 16:06:10 UTC