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 @@
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
- [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
::=
'\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )
@@ -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 ')' ) )+ | '*' )