Turtle - Terse RDF Triple Language EBNF
[1]    turtleDoc    ::=    (statement)*
[2]    statement    ::=    directive "."
| triples "."
[3]    directive    ::=    prefixID
| base
[4]    prefixID    ::=    PREFIX PNAME_NS IRI_REF
[5]    base    ::=    BASE IRI_REF
[6]    triples    ::=    subject predicateObjectList
[7]    predicateObjectList    ::=    verb objectList (( ";" verb objectList ))* (";")?
[8]    objectList    ::=    object (( "," object ))*
[9]    verb    ::=    predicate
| "a"
[10]    subject    ::=    IRIref
| blank
[11]    predicate    ::=    IRIref
[12]    object    ::=    IRIref
| blank
| literal
[13]    literal    ::=    RDFLiteral
| NumericLiteral
| BooleanLiteral
[14]    blank    ::=    BlankNode
| "[" predicateObjectList "]"
| collection
[15]    collection    ::=    "(" (object)* ")"
[16]    RDFLiteral    ::=    String (( LANGTAG | ( "^^" IRIref ) ))?
[17]    NumericLiteral    ::=    NumericLiteralUnsigned
| NumericLiteralPositive
| NumericLiteralNegative
[18]    NumericLiteralUnsigned    ::=    INTEGER
| DECIMAL
| DOUBLE
[19]    NumericLiteralPositive    ::=    INTEGER_POSITIVE
| DECIMAL_POSITIVE
| DOUBLE_POSITIVE
[20]    NumericLiteralNegative    ::=    INTEGER_NEGATIVE
| DECIMAL_NEGATIVE
| DOUBLE_NEGATIVE
[21]    BooleanLiteral    ::=    "true"
| "false"
[22]    String    ::=    STRING_LITERAL1
| STRING_LITERAL2
| STRING_LITERAL_LONG1
| STRING_LITERAL_LONG2
[23]    IRIref    ::=    IRI_REF
| PrefixedName
[24]    PrefixedName    ::=    PNAME_LN
| PNAME_NS
[25]    BlankNode    ::=    BLANK_NODE_LABEL
| ANON
[26]    <BASE>    ::=    "@base"
[27]    <PREFIX>    ::=    "@prefix"
[28]    <IRI_REF>    ::=    "<" (( [^<>\"{}|^`\\] - [#0000- ] ) | UCHAR )* ">"
[29]    <PNAME_NS>    ::=    (PN_PREFIX)? ":"
[30]    <PNAME_LN>    ::=    PNAME_NS PN_LOCAL
[31]    <BLANK_NODE_LABEL>    ::=    "_:" PN_LOCAL
[32]    <VAR1>    ::=    "?" VARNAME
[33]    <VAR2>    ::=    "$" VARNAME
[34]    <LANGTAG>    ::=    BASE
| PREFIX
| "@" ([a-zA-Z])+ (( "-" ([a-zA-Z0-9])+ ))*
[35]    <INTEGER>    ::=    ([0-9])+
[36]    <DECIMAL>    ::=    ([0-9])+ "." ([0-9])*
| "." ([0-9])+
[37]    <DOUBLE>    ::=    ([0-9])+ "." ([0-9])* EXPONENT
| "." (( [0-9] ))+ EXPONENT
| (( [0-9] ))+ EXPONENT
[38]    <INTEGER_POSITIVE>    ::=    "+" INTEGER
[39]    <DECIMAL_POSITIVE>    ::=    "+" DECIMAL
[40]    <DOUBLE_POSITIVE>    ::=    "+" DOUBLE
[41]    <INTEGER_NEGATIVE>    ::=    "-" INTEGER
[42]    <DECIMAL_NEGATIVE>    ::=    "-" DECIMAL
[43]    <DOUBLE_NEGATIVE>    ::=    "-" DOUBLE
[44]    <EXPONENT>    ::=    [eE] ([+-])? ([0-9])+
[45]    <STRING_LITERAL1>    ::=    "'" (( ( [^'\\\n\r] ) | ECHAR | UCHAR ))* "'"
[46]    <STRING_LITERAL2>    ::=    '"' (( ( [^\"\\\n\r] ) | ECHAR | UCHAR ))* '"'
[47]    <STRING_LITERAL_LONG1>    ::=    "'''" (( (( "'" | "''" ))? ( [^'\\] | ECHAR | UCHAR ) ))* "'''"
[48]    <STRING_LITERAL_LONG2>    ::=    '"""' (( (( '"' | '""' ))? ( [^\"\\] | ECHAR | UCHAR ) ))* '"""'
[49]    <UCHAR>    ::=    ( "\\u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] )
| ( "\\U" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] )
[49]    <ECHAR>    ::=    "\\" [tbnrf\\\"']
[50]    <NIL>    ::=    "(" (WS)* ")"
[51]    <WS>    ::=    " "
| "\t"
| "\r"
| "\n"
[52]    <ANON>    ::=    "[" (WS)* "]"
[53]    <PN_CHARS_BASE>    ::=    [A-Z]
| [a-z]
| [#00C0-#00D6]
| [#00D8-#00F6]
| [#00F8-#02FF]
| [#0370-#037D]
| [#037F-#1FFF]
| [#200C-#200D]
| [#2070-#218F]
| [#2C00-#2FEF]
| [#3001-#D7FF]
| [#F900-#FDCF]
| [#FDF0-#FFFD]
| [#10000-#EFFFF]
| UCHAR
[54]    <PN_CHARS_U>    ::=    PN_CHARS_BASE
| "_"
[55]    <VARNAME>    ::=    ( PN_CHARS_U | [0-9] ) (( PN_CHARS_U | [0-9] | #00B7 | [#0300-#036F] | [#203F-#2040] ))*
[56]    <PN_CHARS>    ::=    PN_CHARS_U
| "-"
| [0-9]
| #00B7
| [#0300-#036F]
| [#203F-#2040]
[57]    <PN_PREFIX>    ::=    PN_CHARS_BASE (( (( PN_CHARS | "." ))* PN_CHARS ))?
[58]    <PN_LOCAL>    ::=    ( PN_CHARS_U | [0-9] ) (( (( PN_CHARS | "." ))* PN_CHARS ))?
[59]    PASSED TOKENS    ::=    ([ \t\r\n])+
| "#" ([^\r\n])*