diff --git a/spec/index.html b/spec/index.html index ff40c943..1ca8f6c3 100644 --- a/spec/index.html +++ b/spec/index.html @@ -6482,7 +6482,7 @@
DATATYPE
- +
IRI
               iri  IRI(xsd:string)
@@ -10865,7 +10865,7 @@ 

Grammar

[4]   Prologue   ::=   - ( BaseDecl | PrefixDecl )* + ( BaseDecl | PrefixDecl | VersionDecl )* @@ -10884,1049 +10884,1063 @@

Grammar

[7]   + VersionDecl +   ::=   + 'VERSION' VersionSpecifier + + + + [8]   + VersionSpecifier +   ::=   + STRING_LITERAL1 | STRING_LITERAL2 + + + + [9]   SelectQuery   ::=   SelectClause DatasetClause* WhereClause SolutionModifier - [8]   + [10]   SubSelect   ::=   SelectClause WhereClause SolutionModifier ValuesClause - [9]   + [11]   SelectClause   ::=   'SELECT' ( 'DISTINCT' | 'REDUCED' )? ( ( Var | ( '(' Expression 'AS' Var ')' ) )+ | '*' ) - [10]   + [12]   ConstructQuery   ::=   'CONSTRUCT' ( ConstructTemplate DatasetClause* WhereClause SolutionModifier | DatasetClause* 'WHERE' '{' TriplesTemplate? '}' SolutionModifier ) - [11]   + [13]   DescribeQuery   ::=   'DESCRIBE' ( VarOrIri+ | '*' ) DatasetClause* WhereClause? SolutionModifier - [12]   + [14]   AskQuery   ::=   'ASK' DatasetClause* WhereClause SolutionModifier - [13]   + [15]   DatasetClause   ::=   'FROM' ( DefaultGraphClause | NamedGraphClause ) - [14]   + [16]   DefaultGraphClause   ::=   SourceSelector - [15]   + [17]   NamedGraphClause   ::=   'NAMED' SourceSelector - [16]   + [18]   SourceSelector   ::=   iri - [17]   + [19]   WhereClause   ::=   'WHERE'? GroupGraphPattern - [18]   + [20]   SolutionModifier   ::=   GroupClause? HavingClause? OrderClause? LimitOffsetClauses? - [19]   + [21]   GroupClause   ::=   'GROUP' 'BY' GroupCondition+ - [20]   + [22]   GroupCondition   ::=   BuiltInCall | FunctionCall | '(' Expression ( 'AS' Var )? ')' | Var - [21]   + [23]   HavingClause   ::=   'HAVING' HavingCondition+ - [22]   + [24]   HavingCondition   ::=   Constraint - [23]   + [25]   OrderClause   ::=   'ORDER' 'BY' OrderCondition+ - [24]   + [26]   OrderCondition   ::=   ( ( 'ASC' | 'DESC' ) BrackettedExpression )
| ( Constraint | Var )
- [25]   + [27]   LimitOffsetClauses   ::=   LimitClause OffsetClause? | OffsetClause LimitClause? - [26]   + [28]   LimitClause   ::=   'LIMIT' INTEGER - [27]   + [29]   OffsetClause   ::=   'OFFSET' INTEGER - [28]   + [30]   ValuesClause   ::=   ( 'VALUES' DataBlock )? - [29]   + [31]   Update   ::=   Prologue ( Update1 ( ';' Update )? )? - [30]   + [32]   Update1   ::=   Load | Clear | Drop | Add | Move | Copy | Create | DeleteWhere | Modify | InsertData | DeleteData - [31]   + [33]   Load   ::=   'LOAD' 'SILENT'? iri ( 'INTO' GraphRef )? - [32]   + [34]   Clear   ::=   'CLEAR' 'SILENT'? GraphRefAll - [33]   + [35]   Drop   ::=   'DROP' 'SILENT'? GraphRefAll - [34]   + [36]   Create   ::=   'CREATE' 'SILENT'? GraphRef - [35]   + [37]   Add   ::=   'ADD' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault - [36]   + [38]   Move   ::=   'MOVE' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault - [37]   + [39]   Copy   ::=   'COPY' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault - [38]   + [40]   InsertData   ::=   'INSERT DATA' QuadData - [39]   + [41]   DeleteData   ::=   'DELETE DATA' QuadData - [40]   + [42]   DeleteWhere   ::=   'DELETE WHERE' QuadPattern - [41]   + [43]   Modify   ::=   ( 'WITH' iri )? ( DeleteClause InsertClause? | InsertClause ) UsingClause* 'WHERE' GroupGraphPattern - [42]   + [44]   DeleteClause   ::=   'DELETE' QuadPattern - [43]   + [45]   InsertClause   ::=   'INSERT' QuadPattern - [44]   + [46]   UsingClause   ::=   'USING' ( iri | 'NAMED' iri ) - [45]   + [47]   GraphOrDefault   ::=   'DEFAULT' | 'GRAPH'? iri - [46]   + [48]   GraphRef   ::=   'GRAPH' iri - [47]   + [49]   GraphRefAll   ::=   GraphRef | 'DEFAULT' | 'NAMED' | 'ALL' - [48]   + [50]   QuadPattern   ::=   '{' Quads '}' - [49]   + [51]   QuadData   ::=   '{' Quads '}' - [50]   + [52]   Quads   ::=   TriplesTemplate? ( QuadsNotTriples '.'? TriplesTemplate? )* - [51]   + [53]   QuadsNotTriples   ::=   'GRAPH' VarOrIri '{' TriplesTemplate? '}' - [52]   + [54]   TriplesTemplate   ::=   TriplesSameSubject ( '.' TriplesTemplate? )? - [53]   + [55]   GroupGraphPattern   ::=   '{' ( SubSelect | GroupGraphPatternSub ) '}' - [54]   + [56]   GroupGraphPatternSub   ::=   TriplesBlock? ( GraphPatternNotTriples '.'? TriplesBlock? )* - [55]   + [57]   TriplesBlock   ::=   TriplesSameSubjectPath ( '.' TriplesBlock? )? - [56]   + [58]   ReifiedTripleBlock   ::=   ReifiedTriple PropertyList - [57]   + [59]   ReifiedTripleBlockPath   ::=   ReifiedTriple PropertyListPath - [58]   + [60]   GraphPatternNotTriples   ::=   GroupOrUnionGraphPattern | OptionalGraphPattern | MinusGraphPattern | GraphGraphPattern | ServiceGraphPattern | Filter | Bind | InlineData - [59]   + [61]   OptionalGraphPattern   ::=   'OPTIONAL' GroupGraphPattern - [60]   + [62]   GraphGraphPattern   ::=   'GRAPH' VarOrIri GroupGraphPattern - [61]   + [63]   ServiceGraphPattern   ::=   'SERVICE' 'SILENT'? VarOrIri GroupGraphPattern - [62]   + [64]   Bind   ::=   'BIND' '(' Expression 'AS' Var ')' - [63]   + [65]   InlineData   ::=   'VALUES' DataBlock - [64]   + [66]   DataBlock   ::=   InlineDataOneVar | InlineDataFull - [65]   + [67]   InlineDataOneVar   ::=   Var '{' DataBlockValue* '}' - [66]   + [68]   InlineDataFull   ::=   ( NIL | '(' Var* ')' ) '{' ( '(' DataBlockValue* ')' | NIL )* '}' - [67]   + [69]   DataBlockValue   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF' | TripleTermData - [68]   + [70]   Reifier   ::=   '~' VarOrReifierId? - [69]   + [71]   VarOrReifierId   ::=   Var | iri | BlankNode - [70]   + [72]   MinusGraphPattern   ::=   'MINUS' GroupGraphPattern - [71]   + [73]   GroupOrUnionGraphPattern   ::=   GroupGraphPattern ( 'UNION' GroupGraphPattern )* - [72]   + [74]   Filter   ::=   'FILTER' Constraint - [73]   + [75]   Constraint   ::=   BrackettedExpression | BuiltInCall | FunctionCall - [74]   + [76]   FunctionCall   ::=   iri ArgList - [75]   + [77]   ArgList   ::=   NIL | '(' 'DISTINCT'? Expression ( ',' Expression )* ')' - [76]   + [78]   ExpressionList   ::=   NIL | '(' Expression ( ',' Expression )* ')' - [77]   + [79]   ConstructTemplate   ::=   '{' ConstructTriples? '}' - [78]   + [80]   ConstructTriples   ::=   TriplesSameSubject ( '.' ConstructTriples? )? - [79]   + [81]   TriplesSameSubject   ::=   VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList | ReifiedTripleBlock - [80]   + [82]   PropertyList   ::=   PropertyListNotEmpty? - [81]   + [83]   PropertyListNotEmpty   ::=   Verb ObjectList ( ';' ( Verb ObjectList )? )* - [82]   + [84]   Verb   ::=   VarOrIri | 'a' - [83]   + [85]   ObjectList   ::=   Object ( ',' Object )* - [84]   + [86]   Object   ::=   GraphNode Annotation - [85]   + [87]   TriplesSameSubjectPath   ::=   VarOrTerm PropertyListPathNotEmpty | TriplesNodePath PropertyListPath | ReifiedTripleBlockPath - [86]   + [88]   PropertyListPath   ::=   PropertyListPathNotEmpty? - [87]   + [89]   PropertyListPathNotEmpty   ::=   ( VerbPath | VerbSimple ) ObjectListPath ( ';' ( ( VerbPath | VerbSimple ) ObjectListPath )? )* - [88]   + [90]   VerbPath   ::=   Path - [89]   + [91]   VerbSimple   ::=   Var - [90]   + [92]   ObjectListPath   ::=   ObjectPath ( ',' ObjectPath )* - [91]   + [93]   ObjectPath   ::=   GraphNodePath AnnotationPath - [92]   + [94]   Path   ::=   PathAlternative - [93]   + [95]   PathAlternative   ::=   PathSequence ( '|' PathSequence )* - [94]   + [96]   PathSequence   ::=   PathEltOrInverse ( '/' PathEltOrInverse )* - [95]   + [97]   PathElt   ::=   PathPrimary PathMod? - [96]   + [98]   PathEltOrInverse   ::=   PathElt | '^' PathElt - [97]   + [99]   PathMod   ::=   '?' | '*' | '+' - [98]   + [100]   PathPrimary   ::=   iri | 'a' | '!' PathNegatedPropertySet | '(' Path ')' - [99]   + [101]   PathNegatedPropertySet   ::=   PathOneInPropertySet | '(' ( PathOneInPropertySet ( '|' PathOneInPropertySet )* )? ')' - [100]   + [102]   PathOneInPropertySet   ::=   iri | 'a' | '^' ( iri | 'a' ) - [101]   + [103]   TriplesNode   ::=   Collection | BlankNodePropertyList - [102]   + [104]   BlankNodePropertyList   ::=   '[' PropertyListNotEmpty ']' - [103]   + [105]   TriplesNodePath   ::=   CollectionPath | BlankNodePropertyListPath - [104]   + [106]   BlankNodePropertyListPath   ::=   '[' PropertyListPathNotEmpty ']' - [105]   + [107]   Collection   ::=   '(' GraphNode+ ')' - [106]   + [108]   CollectionPath   ::=   '(' GraphNodePath+ ')' - [107]   + [109]   AnnotationPath   ::=   ( Reifier | AnnotationBlockPath )* - [108]   + [110]   AnnotationBlockPath   ::=   '{|' PropertyListPathNotEmpty '|}' - [109]   + [111]   Annotation   ::=   ( Reifier | AnnotationBlock )* - [110]   + [112]   AnnotationBlock   ::=   '{|' PropertyListNotEmpty '|}' - [111]   + [113]   GraphNode   ::=   VarOrTerm | TriplesNode | ReifiedTriple - [112]   + [114]   GraphNodePath   ::=   VarOrTerm | TriplesNodePath | ReifiedTriple - [113]   + [115]   VarOrTerm   ::=   Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL | TripleTerm - [114]   + [116]   ReifiedTriple   ::=   '<<' ReifiedTripleSubject Verb ReifiedTripleObject Reifier? '>>' - [115]   + [117]   ReifiedTripleSubject   ::=   Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | ReifiedTriple - [116]   + [118]   ReifiedTripleObject   ::=   Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | ReifiedTriple | TripleTerm - [117]   + [119]   TripleTerm   ::=   '<<(' TripleTermSubject Verb TripleTermObject ')>>' - [118]   + [120]   TripleTermSubject   ::=   Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode - [119]   + [121]   TripleTermObject   ::=   Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | TripleTerm - [120]   + [122]   TripleTermData   ::=   '<<(' TripleTermDataSubject ( iri | 'a' ) TripleTermDataObject ')>>' - [121]   + [123]   TripleTermDataSubject   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral - [122]   + [124]   TripleTermDataObject   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | TripleTermData - [123]   + [125]   VarOrIri   ::=   Var | iri - [124]   + [126]   Var   ::=   VAR1 | VAR2 - [125]   + [127]   Expression   ::=   ConditionalOrExpression - [126]   + [128]   ConditionalOrExpression   ::=   ConditionalAndExpression ( '||' ConditionalAndExpression )* - [127]   + [129]   ConditionalAndExpression   ::=   ValueLogical ( '&&' ValueLogical )* - [128]   + [130]   ValueLogical   ::=   RelationalExpression - [129]   + [131]   RelationalExpression   ::=   NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT' 'IN' ExpressionList )? - [130]   + [132]   NumericExpression   ::=   AdditiveExpression - [131]   + [133]   AdditiveExpression   ::=   MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( '*' UnaryExpression ) | ( '/' UnaryExpression ) )* )* - [132]   + [134]   MultiplicativeExpression   ::=   UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* - [133]   + [135]   UnaryExpression   ::=     '!' PrimaryExpression
| '+' PrimaryExpression
| '-' PrimaryExpression
| PrimaryExpression
- [134]   + [136]   PrimaryExpression   ::=   BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprTripleTerm - [135]   + [137]   ExprTripleTerm   ::=   '<<(' ExprTripleTermSubject Verb ExprTripleTermObject ')>>' - [136]   + [138]   ExprTripleTermSubject   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var - [137]   + [139]   ExprTripleTermObject   ::=   iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprTripleTerm - [138]   + [140]   BrackettedExpression   ::=   '(' Expression ')' - [139]   + [141]   BuiltInCall   ::=     Aggregate
| 'STR' '(' Expression ')'
| 'LANG' '(' Expression ')'
| 'LANGMATCHES' '(' Expression ',' Expression ')'
| 'LANGDIR' '(' Expression ')'
| 'DATATYPE' '(' Expression ')'
| 'BOUND' '(' Var ')'
| 'IRI' '(' Expression ')'
| 'URI' '(' Expression ')'
| 'BNODE' ( '(' Expression ')' | NIL )
| 'RAND' NIL
| 'ABS' '(' Expression ')'
| 'CEIL' '(' Expression ')'
| 'FLOOR' '(' Expression ')'
| 'ROUND' '(' Expression ')'
| 'CONCAT' ExpressionList
| SubstringExpression
| 'STRLEN' '(' Expression ')'
| StrReplaceExpression
| 'UCASE' '(' Expression ')'
| 'LCASE' '(' Expression ')'
| 'ENCODE_FOR_URI' '(' Expression ')'
| 'CONTAINS' '(' Expression ',' Expression ')'
| 'STRSTARTS' '(' Expression ',' Expression ')'
| 'STRENDS' '(' Expression ',' Expression ')'
| 'STRBEFORE' '(' Expression ',' Expression ')'
| 'STRAFTER' '(' Expression ',' Expression ')'
| 'YEAR' '(' Expression ')'
| 'MONTH' '(' Expression ')'
| 'DAY' '(' Expression ')'
| 'HOURS' '(' Expression ')'
| 'MINUTES' '(' Expression ')'
| 'SECONDS' '(' Expression ')'
| 'TIMEZONE' '(' Expression ')'
| 'TZ' '(' Expression ')'
| 'NOW' NIL
| 'UUID' NIL
| 'STRUUID' NIL
| 'MD5' '(' Expression ')'
| 'SHA1' '(' Expression ')'
| 'SHA256' '(' Expression ')'
| 'SHA384' '(' Expression ')'
| 'SHA512' '(' Expression ')'
| 'COALESCE' ExpressionList
| 'IF' '(' Expression ',' Expression ',' Expression ')'
| 'STRLANG' '(' Expression ',' Expression ')'
| 'STRLANGDIR' '(' Expression ',' Expression ',' Expression ')'
| 'STRDT' '(' Expression ',' Expression ')'
| 'sameTerm' '(' Expression ',' Expression ')'
| 'isIRI' '(' Expression ')'
| 'isURI' '(' Expression ')'
| 'isBLANK' '(' Expression ')'
| 'isLITERAL' '(' Expression ')'
| 'isNUMERIC' '(' Expression ')'
| 'hasLANG' '(' Expression ')'
| 'hasLANGDIR' '(' Expression ')'
| RegexExpression
| ExistsFunc
| NotExistsFunc
| 'isTRIPLE' '(' Expression ')'
| 'TRIPLE' '(' Expression ',' Expression ',' Expression ')'
| 'SUBJECT' '(' Expression ')'
| 'PREDICATE' '(' Expression ')'
| 'OBJECT' '(' Expression ')'
- [140]   + [142]   RegexExpression   ::=   'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')' - [141]   + [143]   SubstringExpression   ::=   'SUBSTR' '(' Expression ',' Expression ( ',' Expression )? ')' - [142]   + [144]   StrReplaceExpression   ::=   'REPLACE' '(' Expression ',' Expression ',' Expression ( ',' Expression )? ')' - [143]   + [145]   ExistsFunc   ::=   'EXISTS' GroupGraphPattern - [144]   + [146]   NotExistsFunc   ::=   'NOT' 'EXISTS' GroupGraphPattern - [145]   + [147]   Aggregate   ::=     'COUNT' '(' 'DISTINCT'? ( '*' | Expression ) ')'
| 'SUM' '(' 'DISTINCT'? Expression ')'
| 'MIN' '(' 'DISTINCT'? Expression ')'
| 'MAX' '(' 'DISTINCT'? Expression ')'
| 'AVG' '(' 'DISTINCT'? Expression ')'
| 'SAMPLE' '(' 'DISTINCT'? Expression ')'
| 'GROUP_CONCAT' '(' 'DISTINCT'? Expression ( ';' 'SEPARATOR' '=' String )? ')'
- [146]   + [148]   iriOrFunction   ::=   iri ArgList? - [147]   + [149]   RDFLiteral   ::=   String ( LANG_DIR | '^^' iri )? - [148]   + [150]   NumericLiteral   ::=   NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative - [149]   + [151]   NumericLiteralUnsigned   ::=   INTEGER | DECIMAL | DOUBLE - [150]   + [152]   NumericLiteralPositive   ::=   INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE - [151]   + [153]   NumericLiteralNegative   ::=   INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE - [152]   + [154]   BooleanLiteral   ::=   'true' | 'false' - [153]   + [155]   String   ::=   STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 - [154]   + [156]   iri   ::=   IRIREF | PrefixedName - [155]   + [157]   PrefixedName   ::=   PNAME_LN | PNAME_NS - [156]   + [158]   BlankNode   ::=   BLANK_NODE_LABEL | ANON @@ -11938,245 +11952,245 @@

Grammar

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -12274,8 +12288,9 @@

Changes between SPARQL 1.1 Query Language and SPARQL 1.2 Query Language

in
  • Add functions related to triple terms to : - `TRIPLE`, `isTRIPLE`, `SUBJECT`, `PREDICATE`, `OBJECT`.
  • + `TRIPLE`, `isTRIPLE`, `SUBJECT`, `PREDICATE`, `OBJECT`
  • Update grammar for literal base direction syntax
  • +
  • Update grammar for VERSION declaration
  • Add functions related to language tag and base direction: diff --git a/spec/sparql.bnf b/spec/sparql.bnf index 14cb3973..ba9ea574 100644 --- a/spec/sparql.bnf +++ b/spec/sparql.bnf @@ -1,9 +1,11 @@ QueryUnit ::= Query Query ::= Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause UpdateUnit ::= Update -Prologue ::= ( BaseDecl | PrefixDecl )* +Prologue ::= ( BaseDecl | PrefixDecl | VersionDecl )* BaseDecl ::= 'BASE' IRIREF PrefixDecl ::= 'PREFIX' PNAME_NS IRIREF +VersionDecl ::= 'VERSION' VersionSpecifier +VersionSpecifier ::= STRING_LITERAL1 | STRING_LITERAL2 SelectQuery ::= SelectClause DatasetClause* WhereClause SolutionModifier SubSelect ::= SelectClause WhereClause SolutionModifier ValuesClause SelectClause ::= 'SELECT' ( 'DISTINCT' | 'REDUCED' )? ( ( Var | ( '(' Expression 'AS' Var ')' ) )+ | '*' )
  • [157]  [159]   IRIREF   ::=   '<' ([^<>"{}|^`\]-[#x00-#x20])* '>'
    [158]  [160]   PNAME_NS   ::=   PN_PREFIX? ':'
    [159]  [161]   PNAME_LN   ::=   PNAME_NS PN_LOCAL
    [160]  [162]   BLANK_NODE_LABEL   ::=   '_:' ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
    [161]  [163]   VAR1   ::=   '?' VARNAME
    [162]  [164]   VAR2   ::=   '$' VARNAME
    [163]  [165]   LANG_DIR   ::=   '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* ('--' [a-zA-Z]+)?
    [164]  [166]   INTEGER   ::=   [0-9]+
    [165]  [167]   DECIMAL   ::=   [0-9]* '.' [0-9]+
    [166]  [168]   DOUBLE   ::=   [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT
    [167]  [169]   INTEGER_POSITIVE   ::=   '+' INTEGER
    [168]  [170]   DECIMAL_POSITIVE   ::=   '+' DECIMAL
    [169]  [171]   DOUBLE_POSITIVE   ::=   '+' DOUBLE
    [170]  [172]   INTEGER_NEGATIVE   ::=   '-' INTEGER
    [171]  [173]   DECIMAL_NEGATIVE   ::=   '-' DECIMAL
    [172]  [174]   DOUBLE_NEGATIVE   ::=   '-' DOUBLE
    [173]  [175]   EXPONENT   ::=   [eE] [+-]? [0-9]+
    [174]  [176]   STRING_LITERAL1   ::=   "'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'"
    [175]  [177]   STRING_LITERAL2   ::=   '"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"'
    [176]  [178]   STRING_LITERAL_LONG1   ::=   "'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''"
    [177]  [179]   STRING_LITERAL_LONG2   ::=   '"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""'
    [178]  [180]   ECHAR   ::=   '\' [tbnrf\"']
    [179]  [181]   NIL   ::=   '(' WS* ')'
    [180]  [182]   WS   ::=   #x20 | #x9 | #xD | #xA
    [181]  [183]   ANON   ::=   '[' WS* ']'
    [182]  [184]   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]
    [183]  [185]   PN_CHARS_U   ::=   PN_CHARS_BASE | '_'
    [184]  [186]   VARNAME   ::=   ( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*
    [185]  [187]   PN_CHARS   ::=   PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
    [186]  [188]   PN_PREFIX   ::=   PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)?
    [187]  [189]   PN_LOCAL   ::=   (PN_CHARS_U | ':' | [0-9] | PLX ) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX) )?
    [188]  [190]   PLX   ::=   PERCENT | PN_LOCAL_ESC
    [189]  [191]   PERCENT   ::=   '%' HEX HEX
    [190]  [192]   HEX   ::=   [0-9] | [A-F] | [a-f]
    [191]  [193]   PN_LOCAL_ESC   ::=   '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )