1- [1] turtleDoc ::= statement*
2- [2] statement ::= directive | triples "."
3- [3] directive ::= prefixID | base | sparqlPrefix | sparqlBase
4- [4] prefixID ::= PREFIX PNAME_NS IRIREF "."?
5- [5] base ::= BASE IRIREF "."?
6- [5s] sparqlPrefix ::= "PREFIX" PNAME_NS IRIREF
7- [6s] parqlBase ::= "BASE" IRIREF
8- [6] triples ::= subject predicateObjectList | blankNodePropertyList predicateObjectList?
9- [7] predicateObjectList ::= verb objectList ( ";" ( verb objectList)? )*
10- [8] objectList ::= object annotation? ( "," object annotation? )*
11- [9] verb ::= predicate | "a"
12- [10] subject ::= iri | BlankNode | collection | quotedTriple
13- [11] predicate ::= iri
14- [12] object ::= iri | BlankNode | collection | blankNodePropertyList | literal | quotedTriple
15- [13] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
16- [14] blankNodePropertyList ::= "[" predicateObjectList "]"
17- [15] collection ::= "(" object* ")"
18- [16] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
19- [128s] RDFLiteral ::= String ( LANGTAG | ( "^^" iri ) )?
20- [133s] BooleanLiteral ::= "true" | "false"
21- [17] String ::= STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_LONG_SINGLE_QUOTE |
22- STRING_LITERAL_LONG_QUOTE
23- [135s] iri ::= IRIREF | PrefixedName
24- [136s] PrefixedName ::= PNAME_LN | PNAME_NS
25- [137s] BlankNode ::= BLANK_NODE_LABEL | ANON
26- [27] quotedTriple ::= "<<" qtSubject predicate qtObject ">>"
27- [28] qtSubject ::= iri | BlankNode | quotedTriple
28- [29] qtObject ::= iri | BlankNode | literal | quotedTriple
29- [30] annotation ::= '{|' predicateObjectList '|}'
1+ turtleDoc ::= statement*
2+ statement ::= directive | triples "."
3+ directive ::= prefixID | base | sparqlPrefix | sparqlBase
4+ prefixID ::= PREFIX PNAME_NS IRIREF "."?
5+ base ::= BASE IRIREF "."?
6+ sparqlPrefix ::= "PREFIX" PNAME_NS IRIREF
7+ parqlBase ::= "BASE" IRIREF
8+ triples ::= subject predicateObjectList | blankNodePropertyList predicateObjectList?
9+ predicateObjectList ::= verb objectList ( ";" ( verb objectList)? )*
10+ objectList ::= object annotation? ( "," object annotation? )*
11+ verb ::= predicate | "a"
12+ subject ::= iri | BlankNode | collection | quotedTriple
13+ predicate ::= iri
14+ object ::= iri | BlankNode | collection | blankNodePropertyList | literal | quotedTriple
15+ literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
16+ blankNodePropertyList ::= "[" predicateObjectList "]"
17+ collection ::= "(" object* ")"
18+ NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
19+ RDFLiteral ::= String ( LANG_DIR | ( "^^" iri ) )?
20+ BooleanLiteral ::= "true" | "false"
21+ String ::= STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_LONG_SINGLE_QUOTE |
22+ STRING_LITERAL_LONG_QUOTE
23+ iri ::= IRIREF | PrefixedName
24+ PrefixedName ::= PNAME_LN | PNAME_NS
25+ BlankNode ::= BLANK_NODE_LABEL | ANON
26+ quotedTriple ::= "<<" qtSubject predicate qtObject ">>"
27+ qtSubject ::= iri | BlankNode | quotedTriple
28+ qtObject ::= iri | BlankNode | literal | quotedTriple
29+ annotation ::= '{|' predicateObjectList '|}'
3030
3131@terminals
3232
33- [18] IRIREF ::= '<' ([^#x00-#x20<>"{}|^`\] | UCHAR)* '>'
34- [139s] PNAME_NS ::= PN_PREFIX? ":"
35- [140s] PNAME_LN ::= PNAME_NS PN_LOCAL
36- [141s] BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
37- [144s] LANGTAG ::= "@" [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )*
38- [19] INTEGER ::= [+-]? [0-9]+
39- [20] DECIMAL ::= [+-]? ( ([0-9])* '.' ([0-9])+ )
40- [21] DOUBLE ::= [+-]? ( [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT )
41- [154s] EXPONENT ::= [eE] [+-]? [0-9]+
42- [22] STRING_LITERAL_QUOTE ::= '"' ( [^#x22#x5C#xA#xD] | ECHAR | UCHAR )* '"'
43- [23] STRING_LITERAL_SINGLE_QUOTE ::= "'" ( [^#x27#x5C#xA#xD] | ECHAR | UCHAR )* "'"
44- [24] STRING_LITERAL_LONG_SINGLE_QUOTE ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR | UCHAR ) )* "'''"
45- [25] STRING_LITERAL_LONG_QUOTE ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR | UCHAR ) )* '"""'
46- [26] UCHAR ::= ( "\u" HEX HEX HEX HEX ) | ( "\U" HEX HEX HEX HEX HEX HEX HEX HEX )
47- [159s] ECHAR ::= "\" [tbnrf\"']
48- [28t] PREFIX ::= "@"?[Pp][Rr][Ee][Ff][Ii][Xx]
49- [29t] BASE ::= "@"?[Bb][Aa][Ss][Ee]
50- [161s] WS ::= #x20 | #x9 | #xD | #xA
51- [162s] ANON ::= "[" WS* "]"
52- [163s] PN_CHARS_BASE ::= [A-Z]
53- | [a-z]
54- | [#x00C0-#x00D6]
55- | [#x00D8-#x00F6]
56- | [#x00F8-#x02FF]
57- | [#x0370-#x037D]
58- | [#x037F-#x1FFF]
59- | [#x200C-#x200D]
60- | [#x2070-#x218F]
61- | [#x2C00-#x2FEF]
62- | [#x3001-#xD7FF]
63- | [#xF900-#xFDCF]
64- | [#xFDF0-#xFFFD]
65- | [#x10000-#xEFFFF]
66- [164s] PN_CHARS_U ::= PN_CHARS_BASE | '_'
67- [166s] PN_CHARS ::= PN_CHARS_U | "-" | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
68- [167s] PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | "." )* PN_CHARS )?
69- [168s] PN_LOCAL ::= ( PN_CHARS_U | ':' | [0-9] | PLX ) ( ( PN_CHARS | '.' | ':' | PLX )* ( PN_CHARS | ':' | PLX ) ) ?
70- [169s] PLX ::= PERCENT | PN_LOCAL_ESC
71- [170s] PERCENT ::= '%' HEX HEX
72- [171s] HEX ::= [0-9] | [A-F] | [a-f]
73- [172s] PN_LOCAL_ESC ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '='
74- | '/' | '?' | '#' | '@' | '%' )
33+ IRIREF ::= '<' ([^#x00-#x20<>"{}|^`\] | UCHAR)* '>'
34+ PNAME_NS ::= PN_PREFIX? ":"
35+ PNAME_LN ::= PNAME_NS PN_LOCAL
36+ BLANK_NODE_LABEL ::= '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
37+ LANG_DIR ::= "@" [a-zA-Z]+ ( "-" [a-zA-Z0-9]+ )* ('--' [a-zA-Z]+)?`
38+ INTEGER ::= [+-]? [0-9]+
39+ DECIMAL ::= [+-]? ( ([0-9])* '.' ([0-9])+ )
40+ DOUBLE ::= [+-]? ( [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT )
41+ EXPONENT ::= [eE] [+-]? [0-9]+
42+ STRING_LITERAL_QUOTE ::= '"' ( [^#x22#x5C#xA#xD] | ECHAR | UCHAR )* '"'
43+ STRING_LITERAL_SINGLE_QUOTE ::= "'" ( [^#x27#x5C#xA#xD] | ECHAR | UCHAR )* "'"
44+ STRING_LITERAL_LONG_SINGLE_QUOTE ::= "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR | UCHAR ) )* "'''"
45+ STRING_LITERAL_LONG_QUOTE ::= '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR | UCHAR ) )* '"""'
46+ UCHAR ::= ( "\u" HEX HEX HEX HEX ) | ( "\U" HEX HEX HEX HEX HEX HEX HEX HEX )
47+ ECHAR ::= "\" [tbnrf\"']
48+ PREFIX ::= "@"?[Pp][Rr][Ee][Ff][Ii][Xx]
49+ BASE ::= "@"?[Bb][Aa][Ss][Ee]
50+ WS ::= #x20 | #x9 | #xD | #xA
51+ ANON ::= "[" WS* "]"
52+ PN_CHARS_BASE ::= [A-Z]
53+ | [a-z]
54+ | [#x00C0-#x00D6]
55+ | [#x00D8-#x00F6]
56+ | [#x00F8-#x02FF]
57+ | [#x0370-#x037D]
58+ | [#x037F-#x1FFF]
59+ | [#x200C-#x200D]
60+ | [#x2070-#x218F]
61+ | [#x2C00-#x2FEF]
62+ | [#x3001-#xD7FF]
63+ | [#xF900-#xFDCF]
64+ | [#xFDF0-#xFFFD]
65+ | [#x10000-#xEFFFF]
66+ PN_CHARS_U ::= PN_CHARS_BASE | '_'
67+ PN_CHARS ::= PN_CHARS_U | "-" | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
68+ PN_PREFIX ::= PN_CHARS_BASE ( ( PN_CHARS | "." )* PN_CHARS )?
69+ PN_LOCAL ::= ( PN_CHARS_U | ':' | [0-9] | PLX ) ( ( PN_CHARS | '.' | ':' | PLX )* ( PN_CHARS | ':' | PLX ) ) ?
70+ PLX ::= PERCENT | PN_LOCAL_ESC
71+ PERCENT ::= '%' HEX HEX
72+ HEX ::= [0-9] | [A-F] | [a-f]
73+ PN_LOCAL_ESC ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '='
74+ | '/' | '?' | '#' | '@' | '%' )
0 commit comments