blob: 98411b5f43ccfd408a4a8029bfbb9af976526acc [file] [log] [blame]
DOCUMENT START
TOKENS
<DEFAULT> SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\f"
}
<DEFAULT> SPECIAL : {
<SINGLE_LINE_COMMENT: "#" (~["\n","\r"])* ("\n" | "\r" | "\r\n")?>
}
<DEFAULT> TOKEN : {
<#WS: " " | "\t" | "\n" | "\r" | "\f">
| <#WSC: <WS> | <SINGLE_LINE_COMMENT>>
}
<DEFAULT> TOKEN : {
<IRIref: "<" (~[">","<","\"","{","}","^","\\","|","`","\u0000"-" "] | <UCHAR>)* ">">
| <PNAME_NS: (<PN_PREFIX>)? ":">
| <PNAME_LN: <PNAME_NS> <PN_LOCAL>>
| <BLANK_NODE_LABEL: "_:" (<PN_CHARS_U> | ["0"-"9"]) ((<PN_CHARS> | ".")* <PN_CHARS>)?>
| <VAR1: "?" <VARNAME>>
| <VAR2: "$" <VARNAME>>
| <LANGTAG: <AT> (<A2Z>)+ ("-" (<A2ZN>)+)*>
| <#A2Z: ["a"-"z","A"-"Z"]>
| <#A2ZN: ["a"-"z","A"-"Z","0"-"9"]>
}
<DEFAULT> TOKEN : {
<KW_A: "a">
}
<DEFAULT> TOKEN [IGNORE_CASE] : {
<BASE: "base">
| <PREFIX: "prefix">
| <SELECT: "select">
| <DISTINCT: "distinct">
| <REDUCED: "reduced">
| <DESCRIBE: "describe">
| <CONSTRUCT: "construct">
| <ASK: "ask">
| <LIMIT: "limit">
| <OFFSET: "offset">
| <ORDER: "order">
| <BY: "by">
| <VALUES: "values">
| <UNDEF: "undef">
| <ASC: "asc">
| <DESC: "desc">
| <NAMED: "named">
| <FROM: "from">
| <WHERE: "where">
| <AND: "and">
| <GRAPH: "graph">
| <OPTIONAL: "optional">
| <UNION: "union">
| <MINUS_P: "minus">
| <BIND: "bind">
| <SERVICE: "service">
| <TRIPLE: "TRIPLE">
| <IS_TRIPLE: "isTRIPLE">
| <SUBJECT: "SUBJECT">
| <PREDICATE: "PREDICATE">
| <OBJECT: "OBJECT">
| <EXISTS: "exists">
| <NOT: "not">
| <AS: "as">
| <GROUP: "group">
| <HAVING: "having">
| <SEPARATOR: "separator">
| <AGG: "agg">
| <COUNT: "count">
| <MIN: "min">
| <MAX: "max">
| <SUM: "sum">
| <AVG: "avg">
| <STDEV: "stdev">
| <STDEV_SAMP: "stdev_samp">
| <STDEV_POP: "stdev_pop">
| <VARIANCE: "variance">
| <VAR_SAMP: "var_samp">
| <VAR_POP: "var_pop">
| <SAMPLE: "sample">
| <GROUP_CONCAT: "group_concat">
| <FILTER: "filter">
| <BOUND: "bound">
| <COALESCE: "coalesce">
| <IN: "in">
| <IF: "if">
| <BNODE: "bnode">
| <IRI: "iri">
| <URI: "uri">
| <STR: "str">
| <STRLANG: "strlang">
| <STRDT: "strdt">
| <DTYPE: "datatype">
| <LANG: "lang">
| <LANGMATCHES: "langmatches">
| <IS_URI: "isURI">
| <IS_IRI: "isIRI">
| <IS_BLANK: "isBlank">
| <IS_LITERAL: "isLiteral">
| <IS_NUMERIC: "isNumeric">
| <REGEX: "regex">
| <SAME_TERM: "sameTerm">
| <RAND: "RAND">
| <ABS: "ABS">
| <CEIL: "CEIL">
| <FLOOR: "FLOOR">
| <ROUND: "ROUND">
| <CONCAT: "CONCAT">
| <SUBSTR: "SUBSTR">
| <STRLEN: "STRLEN">
| <REPLACE: "REPLACE">
| <UCASE: "UCASE">
| <LCASE: "LCASE">
| <ENCODE_FOR_URI: "ENCODE_FOR_URI">
| <CONTAINS: "CONTAINS">
| <STRSTARTS: "STRSTARTS">
| <STRENDS: "STRENDS">
| <STRBEFORE: "STRBEFORE">
| <STRAFTER: "STRAFTER">
| <YEAR: "YEAR">
| <MONTH: "MONTH">
| <DAY: "DAY">
| <HOURS: "HOURS">
| <MINUTES: "MINUTES">
| <SECONDS: "SECONDS">
| <TIMEZONE: "TIMEZONE">
| <TZ: "TZ">
| <NOW: "NOW">
| <UUID: "UUID">
| <STRUUID: "STRUUID">
| <MD5: "MD5">
| <SHA1: "SHA1">
| <SHA224: "SHA224">
| <SHA256: "SHA256">
| <SHA384: "SHA384">
| <SHA512: "SHA512">
| <TRUE: "true">
| <FALSE: "false">
}
<DEFAULT> TOKEN [IGNORE_CASE] : {
<DATA: "data">
| <INSERT: "insert">
| <DELETE: "delete">
| <INSERT_DATA: <INSERT> (<WSC>)* <DATA>>
| <DELETE_DATA: <DELETE> (<WSC>)* <DATA>>
| <DELETE_WHERE: <DELETE> (<WSC>)* <WHERE>>
| <LOAD: "load">
| <CLEAR: "clear">
| <CREATE: "create">
| <ADD: "add">
| <MOVE: "move">
| <COPY: "copy">
| <META: "meta">
| <SILENT: "silent">
| <DROP: "drop">
| <INTO: "into">
| <TO: "to">
| <DFT: "default">
| <ALL: "all">
| <WITH: "with">
| <USING: "using">
}
<DEFAULT> TOKEN : {
<#DIGITS: (["0"-"9"])+>
| <INTEGER: <DIGITS>>
| <DECIMAL: (<DIGITS>)? "." <DIGITS>>
| <DOUBLE: (["0"-"9"])+ "." (["0"-"9"])* <EXPONENT> | "." (["0"-"9"])+ <EXPONENT> | (["0"-"9"])+ <EXPONENT>>
| <INTEGER_POSITIVE: <PLUS> <INTEGER>>
| <DECIMAL_POSITIVE: <PLUS> <DECIMAL>>
| <DOUBLE_POSITIVE: <PLUS> <DOUBLE>>
| <INTEGER_NEGATIVE: <MINUS> <INTEGER>>
| <DECIMAL_NEGATIVE: <MINUS> <DECIMAL>>
| <DOUBLE_NEGATIVE: <MINUS> <DOUBLE>>
| <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
| <#QUOTE_3D: "\"\"\"">
| <#QUOTE_3S: "\'\'\'">
| <ECHAR: "\\" ("t" | "b" | "n" | "r" | "f" | "\\" | "\"" | "\'")>
| <#UCHAR: <UCHAR8>>
| <#UCHAR4: "\\" "u" <HEX> <HEX> <HEX> <HEX>>
| <#UCHAR8: "\\" "U" <HEX> <HEX> <HEX> <HEX> <HEX> <HEX> <HEX> <HEX>>
| <STRING_LITERAL1: "\'" (~["\'","\\","\n","\r"] | <ECHAR> | <UCHAR>)* "\'">
| <STRING_LITERAL2: "\"" (~["\"","\\","\n","\r"] | <ECHAR> | <UCHAR>)* "\"">
| <STRING_LITERAL_LONG1: <QUOTE_3S> (("\'" | "\'\'")? (~["\'","\\"] | <ECHAR> | <UCHAR>))* <QUOTE_3S>>
| <STRING_LITERAL_LONG2: <QUOTE_3D> (("\"" | "\"\"")? (~["\"","\\"] | <ECHAR> | <UCHAR>))* <QUOTE_3D>>
}
<DEFAULT> TOKEN : {
<LPAREN: "(">
| <RPAREN: ")">
| <NIL: <LPAREN> (<WSC>)* <RPAREN>>
| <LBRACE: "{">
| <RBRACE: "}">
| <LBRACKET: "[">
| <RBRACKET: "]">
| <ANON: <LBRACKET> (<WSC>)* <RBRACKET>>
| <SEMICOLON: ";">
| <COMMA: ",">
| <DOT: ".">
| <EQ: "=">
| <NE: "!=">
| <GT: ">">
| <LT: "<">
| <LE: "<=">
| <GE: ">=">
| <GT2: ">>">
| <LT2: "<<">
| <L_ANN: "{|">
| <R_ANN: "|}">
| <BANG: "!">
| <TILDE: "~">
| <COLON: ":">
| <SC_OR: "||">
| <SC_AND: "&&">
| <PLUS: "+">
| <MINUS: "-">
| <STAR: "*">
| <SLASH: "/">
| <DATATYPE: "^^">
| <AT: "@">
| <VBAR: "|">
| <CARAT: "^">
| <FPATH: "->">
| <RPATH: "<-">
| <QMARK: "?">
}
<DEFAULT> TOKEN : {
<#PN_CHARS_BASE: ["A"-"Z"] | ["a"-"z"] | ["\u00c0"-"\u00d6"] | ["\u00d8"-"\u00f6"] | ["\u00f8"-"\u02ff"] | ["\u0370"-"\u037d"] | ["\u037f"-"\u1fff"] | ["\u200c"-"\u200d"] | ["\u2070"-"\u218f"] | ["\u2c00"-"\u2fef"] | ["\u3001"-"\ud7ff"] | ["\uf900"-"\ufffd"]>
| <#PN_CHARS_U: <PN_CHARS_BASE> | "_">
| <#PN_CHARS: <PN_CHARS_U> | "-" | ["0"-"9"] | "\u00b7" | ["\u0300"-"\u036f"] | ["\u203f"-"\u2040"]>
| <#PN_PREFIX: <PN_CHARS_BASE> ((<PN_CHARS> | ".")* <PN_CHARS>)?>
| <#PN_LOCAL: (<PN_CHARS_U> | ":" | ["0"-"9"] | <PLX>) ((<PN_CHARS> | "." | ":" | <PLX>)* (<PN_CHARS> | ":" | <PLX>))?>
| <#VARNAME: (<PN_CHARS_U> | ["0"-"9"]) (<PN_CHARS_U> | ["0"-"9"] | "\u00b7" | ["\u0300"-"\u036f"] | ["\u203f"-"\u2040"])*>
| <#PN_LOCAL_ESC: "\\" ("_" | "~" | "." | "-" | "!" | "$" | "&" | "\'" | "(" | ")" | "*" | "+" | "," | ";" | "=" | "/" | "?" | "#" | "@" | "%")>
| <#PLX: <PERCENT> | <PN_LOCAL_ESC>>
| <#HEX: ["0"-"9"] | ["A"-"F"] | ["a"-"f"]>
| <#PERCENT: "%" <HEX> <HEX>>
}
<DEFAULT> TOKEN : {
<#UNKNOWN: (~[" ","\t","\n","\r","\f"])+>
}
NON-TERMINALS
QueryUnit := Query <EOF>
Query := Prologue ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) ValuesClause
UpdateUnit := Update <EOF>
Prologue := ( BaseDecl | PrefixDecl )*
BaseDecl := <BASE> IRIREF
PrefixDecl := <PREFIX> <PNAME_NS> IRIREF
SelectQuery := SelectClause ( DatasetClause )* WhereClause SolutionModifier
SubSelect := SelectClause WhereClause SolutionModifier ValuesClause
SelectClause := <SELECT> ( <DISTINCT> | <REDUCED> )? ( ( Var | ( <LPAREN> Expression <AS> Var <RPAREN> ) )+ | <STAR> )
ConstructQuery := <CONSTRUCT> ( ConstructTemplate ( DatasetClause )* WhereClause SolutionModifier | ( DatasetClause )* <WHERE> <LBRACE> ( TriplesTemplate )? <RBRACE> SolutionModifier )
DescribeQuery := <DESCRIBE> ( ( VarOrIri )+ | <STAR> ) ( DatasetClause )* ( WhereClause )? SolutionModifier
AskQuery := <ASK> ( DatasetClause )* WhereClause SolutionModifier
DatasetClause := <FROM> ( DefaultGraphClause | NamedGraphClause )
DefaultGraphClause := SourceSelector
NamedGraphClause := <NAMED> SourceSelector
SourceSelector := iri
WhereClause := ( <WHERE> )? GroupGraphPattern
SolutionModifier := ( GroupClause )? ( HavingClause )? ( OrderClause )? ( LimitOffsetClauses )?
GroupClause := <GROUP> <BY> ( GroupCondition )+
GroupCondition := ( BuiltInCall | FunctionCall | <LPAREN> Expression ( <AS> Var )? <RPAREN> | Var )
HavingClause := <HAVING> ( HavingCondition )+
HavingCondition := Constraint
OrderClause := <ORDER> <BY> ( OrderCondition )+
OrderCondition := ( ( ( <ASC> | <DESC> ) BrackettedExpression ) | ( Constraint | Var ) )
LimitOffsetClauses := ( LimitClause ( OffsetClause )? | OffsetClause ( LimitClause )? )
LimitClause := <LIMIT> <INTEGER>
OffsetClause := <OFFSET> <INTEGER>
ValuesClause := ( <VALUES> DataBlock )?
Update := Prologue ( Update1 ( <SEMICOLON> Update )? )?
Update1 := ( Load | Clear | Drop | Add | Move | Copy | Create | DeleteWhere | Modify | InsertData | DeleteData )
Load := <LOAD> ( <SILENT> )? iri ( <INTO> GraphRef )?
Clear := <CLEAR> ( <SILENT> )? GraphRefAll
Drop := <DROP> ( <SILENT> )? GraphRefAll
Create := <CREATE> ( <SILENT> )? GraphRef
Add := <ADD> ( <SILENT> )? GraphOrDefault <TO> GraphOrDefault
Move := <MOVE> ( <SILENT> )? GraphOrDefault <TO> GraphOrDefault
Copy := <COPY> ( <SILENT> )? GraphOrDefault <TO> GraphOrDefault
InsertData := <INSERT_DATA> QuadData
DeleteData := <DELETE_DATA> QuadData
DeleteWhere := <DELETE_WHERE> QuadPattern
Modify := ( <WITH> iri )? ( DeleteClause ( InsertClause )? | InsertClause ) ( UsingClause )* <WHERE> GroupGraphPattern
DeleteClause := <DELETE> QuadPattern
InsertClause := <INSERT> QuadPattern
UsingClause := <USING> ( iri | <NAMED> iri )
GraphOrDefault := ( <DFT> | ( <GRAPH> )? iri )
GraphRef := <GRAPH> iri
GraphRefAll := ( GraphRef | <DFT> | <NAMED> | <ALL> )
QuadPattern := <LBRACE> Quads <RBRACE>
QuadData := <LBRACE> Quads <RBRACE>
Quads := ( TriplesTemplate )? ( QuadsNotTriples ( <DOT> )? ( TriplesTemplate )? )*
QuadsNotTriples := <GRAPH> VarOrIri <LBRACE> ( TriplesTemplate )? <RBRACE>
TriplesTemplate := TriplesSameSubject ( <DOT> ( TriplesTemplate )? )?
GroupGraphPattern := <LBRACE> ( SubSelect | GroupGraphPatternSub ) <RBRACE>
GroupGraphPatternSub := ( TriplesBlock )? ( GraphPatternNotTriples ( <DOT> )? ( TriplesBlock )? )*
TriplesBlock := TriplesSameSubjectPath ( <DOT> ( TriplesBlock )? )?
GraphPatternNotTriples := ( GroupOrUnionGraphPattern | OptionalGraphPattern | MinusGraphPattern | GraphGraphPattern | ServiceGraphPattern | Filter | Bind | InlineData )
OptionalGraphPattern := <OPTIONAL> GroupGraphPattern
GraphGraphPattern := <GRAPH> VarOrIri GroupGraphPattern
ServiceGraphPattern := <SERVICE> ( <SILENT> )? VarOrIri GroupGraphPattern
Bind := <BIND> <LPAREN> Expression <AS> Var <RPAREN>
InlineData := <VALUES> DataBlock
DataBlock := ( InlineDataOneVar | InlineDataFull )
InlineDataOneVar := Var <LBRACE> ( DataBlockValue )* <RBRACE>
InlineDataFull := ( <NIL> | <LPAREN> ( Var )* <RPAREN> ) <LBRACE> ( <LPAREN> ( DataBlockValue )* <RPAREN> | <NIL> )* <RBRACE>
DataBlockValue := iri
| RDFLiteral
| NumericLiteral
| BooleanLiteral
| <UNDEF>
| QuotedTripleData
MinusGraphPattern := <MINUS_P> GroupGraphPattern
GroupOrUnionGraphPattern := GroupGraphPattern ( <UNION> GroupGraphPattern )*
Filter := <FILTER> Constraint
Constraint := ( BrackettedExpression | BuiltInCall | FunctionCall )
FunctionCall := iri ArgList
ArgList := ( <NIL> | <LPAREN> ( <DISTINCT> )? Expression ( <COMMA> Expression )* <RPAREN> )
ExpressionList := ( <NIL> | <LPAREN> Expression ( <COMMA> Expression )* <RPAREN> )
ConstructTemplate := <LBRACE> ( ConstructTriples )? <RBRACE>
ConstructTriples := TriplesSameSubject ( <DOT> ( ConstructTriples )? )?
TriplesSameSubject := VarOrTerm PropertyListNotEmpty
| TriplesNode PropertyList
PropertyList := ( PropertyListNotEmpty )?
PropertyListNotEmpty := Verb ObjectList ( <SEMICOLON> ( Verb ObjectList )? )*
Verb := ( VarOrIri | <KW_A> )
ObjectList := Object ( <COMMA> Object )*
Object := GraphNode Annotation
TriplesSameSubjectPath := VarOrTerm PropertyListPathNotEmpty
| TriplesNodePath PropertyListPath
PropertyListPath := ( PropertyListPathNotEmpty )?
PropertyListPathNotEmpty := ( VerbPath | VerbSimple ) ObjectListPath ( <SEMICOLON> ( ( VerbPath | VerbSimple ) ObjectListPath )? )*
VerbPath := Path
VerbSimple := Var
ObjectListPath := ObjectPath ( <COMMA> ObjectPath )*
ObjectPath := GraphNodePath AnnotationPath
Path := PathAlternative
PathAlternative := PathSequence ( <VBAR> PathSequence )*
PathSequence := PathEltOrInverse ( <SLASH> PathEltOrInverse )*
PathElt := PathPrimary ( PathMod )?
PathEltOrInverse := ( PathElt | <CARAT> PathElt )
PathMod := ( <QMARK> | <STAR> | <PLUS> )
PathPrimary := ( iri | <KW_A> | <BANG> PathNegatedPropertySet | <LPAREN> Path <RPAREN> )
PathNegatedPropertySet := ( PathOneInPropertySet | <LPAREN> ( PathOneInPropertySet ( <VBAR> PathOneInPropertySet )* )? <RPAREN> )
PathOneInPropertySet := ( iri | <KW_A> | <CARAT> ( iri | <KW_A> ) )
Integer := <INTEGER>
TriplesNode := Collection
| BlankNodePropertyList
BlankNodePropertyList := <LBRACKET> PropertyListNotEmpty <RBRACKET>
TriplesNodePath := CollectionPath
| BlankNodePropertyListPath
BlankNodePropertyListPath := <LBRACKET> PropertyListPathNotEmpty <RBRACKET>
Collection := <LPAREN> ( GraphNode )+ <RPAREN>
CollectionPath := <LPAREN> ( GraphNodePath )+ <RPAREN>
AnnotationPath := ( <L_ANN> PropertyListPathNotEmpty <R_ANN> )?
Annotation := ( <L_ANN> PropertyListNotEmpty <R_ANN> )?
GraphNode := VarOrTerm
| TriplesNode
GraphNodePath := VarOrTerm
| TriplesNodePath
VarOrTerm := ( Var | iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | <NIL> | QuotedTriple )
QuotedTriple := <LT2> VarOrTerm Verb VarOrTerm <GT2>
QuotedTripleData := <LT2> ( DataValueTerm ) ( iri | <KW_A> ) ( DataValueTerm ) <GT2>
DataValueTerm := iri
| RDFLiteral
| NumericLiteral
| BooleanLiteral
| QuotedTripleData
VarOrIri := ( Var | iri )
Var := ( <VAR1> | <VAR2> )
Expression := ConditionalOrExpression
ConditionalOrExpression := ConditionalAndExpression ( <SC_OR> ConditionalAndExpression )*
ConditionalAndExpression := ValueLogical ( <SC_AND> ValueLogical )*
ValueLogical := RelationalExpression
RelationalExpression := NumericExpression ( <EQ> NumericExpression | <NE> NumericExpression | <LT> NumericExpression | <GT> NumericExpression | <LE> NumericExpression | <GE> NumericExpression | <IN> ExpressionList | <NOT> <IN> ExpressionList )?
NumericExpression := AdditiveExpression
AdditiveExpression := MultiplicativeExpression ( <PLUS> MultiplicativeExpression | <MINUS> MultiplicativeExpression | ( NumericLiteralPositive | NumericLiteralNegative ) ( ( <STAR> UnaryExpression ) | ( <SLASH> UnaryExpression ) )* )*
MultiplicativeExpression := UnaryExpression ( <STAR> UnaryExpression | <SLASH> UnaryExpression )*
UnaryExpression := <BANG> PrimaryExpression
| <PLUS> PrimaryExpression
| <MINUS> PrimaryExpression
| PrimaryExpression
PrimaryExpression := ( BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprQuotedTriple )
ExprVarOrTerm := ( iri | RDFLiteral | NumericLiteral | BooleanLiteral | Var | ExprQuotedTriple )
ExprQuotedTriple := <LT2> ExprVarOrTerm Verb ExprVarOrTerm <GT2>
BrackettedExpression := <LPAREN> Expression <RPAREN>
BuiltInCall := Aggregate
| <STR> <LPAREN> Expression <RPAREN>
| <LANG> <LPAREN> Expression <RPAREN>
| <LANGMATCHES> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <DTYPE> <LPAREN> Expression <RPAREN>
| <BOUND> <LPAREN> Var <RPAREN>
| <IRI> <LPAREN> Expression <RPAREN>
| <URI> <LPAREN> Expression <RPAREN>
| <BNODE> ( <LPAREN> Expression <RPAREN> | <NIL> )
| <RAND> <NIL>
| <ABS> <LPAREN> Expression <RPAREN>
| <CEIL> <LPAREN> Expression <RPAREN>
| <FLOOR> <LPAREN> Expression <RPAREN>
| <ROUND> <LPAREN> Expression <RPAREN>
| <CONCAT> ExpressionList
| SubstringExpression
| <STRLEN> <LPAREN> Expression <RPAREN>
| StrReplaceExpression
| <UCASE> <LPAREN> Expression <RPAREN>
| <LCASE> <LPAREN> Expression <RPAREN>
| <ENCODE_FOR_URI> <LPAREN> Expression <RPAREN>
| <CONTAINS> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <STRSTARTS> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <STRENDS> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <STRBEFORE> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <STRAFTER> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <YEAR> <LPAREN> Expression <RPAREN>
| <MONTH> <LPAREN> Expression <RPAREN>
| <DAY> <LPAREN> Expression <RPAREN>
| <HOURS> <LPAREN> Expression <RPAREN>
| <MINUTES> <LPAREN> Expression <RPAREN>
| <SECONDS> <LPAREN> Expression <RPAREN>
| <TIMEZONE> <LPAREN> Expression <RPAREN>
| <TZ> <LPAREN> Expression <RPAREN>
| <NOW> <NIL>
| <UUID> <NIL>
| <STRUUID> <NIL>
| <MD5> <LPAREN> Expression <RPAREN>
| <SHA1> <LPAREN> Expression <RPAREN>
| <SHA256> <LPAREN> Expression <RPAREN>
| <SHA384> <LPAREN> Expression <RPAREN>
| <SHA512> <LPAREN> Expression <RPAREN>
| <COALESCE> ExpressionList
| <IF> <LPAREN> Expression <COMMA> Expression <COMMA> Expression <RPAREN>
| <STRLANG> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <STRDT> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <SAME_TERM> <LPAREN> Expression <COMMA> Expression <RPAREN>
| <IS_IRI> <LPAREN> Expression <RPAREN>
| <IS_URI> <LPAREN> Expression <RPAREN>
| <IS_BLANK> <LPAREN> Expression <RPAREN>
| <IS_LITERAL> <LPAREN> Expression <RPAREN>
| <IS_NUMERIC> <LPAREN> Expression <RPAREN>
| RegexExpression
| ExistsFunc
| NotExistsFunc
| <IS_TRIPLE> <LPAREN> Expression <RPAREN>
| <TRIPLE> <LPAREN> Expression <COMMA> Expression <COMMA> Expression <RPAREN>
| <SUBJECT> <LPAREN> Expression <RPAREN>
| <PREDICATE> <LPAREN> Expression <RPAREN>
| <OBJECT> <LPAREN> Expression <RPAREN>
RegexExpression := <REGEX> <LPAREN> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
SubstringExpression := <SUBSTR> <LPAREN> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
StrReplaceExpression := <REPLACE> <LPAREN> Expression <COMMA> Expression <COMMA> Expression ( <COMMA> Expression )? <RPAREN>
ExistsFunc := <EXISTS> GroupGraphPattern
NotExistsFunc := <NOT> <EXISTS> GroupGraphPattern
Aggregate := ( <COUNT> <LPAREN> ( <DISTINCT> )? ( <STAR> | Expression ) <RPAREN> | <SUM> <LPAREN> ( <DISTINCT> )? Expression <RPAREN> | <MIN> <LPAREN> ( <DISTINCT> )? Expression <RPAREN> | <MAX> <LPAREN> ( <DISTINCT> )? Expression <RPAREN> | <AVG> <LPAREN> ( <DISTINCT> )? Expression <RPAREN> | <SAMPLE> <LPAREN> ( <DISTINCT> )? Expression <RPAREN> | <GROUP_CONCAT> <LPAREN> ( <DISTINCT> )? Expression ( <SEMICOLON> <SEPARATOR> <EQ> String )? <RPAREN> )
iriOrFunction := iri ( ArgList )?
RDFLiteral := String ( ( <LANGTAG> ) | ( <DATATYPE> iri ) )?
NumericLiteral := ( NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative )
NumericLiteralUnsigned := <INTEGER>
| <DECIMAL>
| <DOUBLE>
NumericLiteralPositive := <INTEGER_POSITIVE>
| <DECIMAL_POSITIVE>
| <DOUBLE_POSITIVE>
NumericLiteralNegative := <INTEGER_NEGATIVE>
| <DECIMAL_NEGATIVE>
| <DOUBLE_NEGATIVE>
BooleanLiteral := <TRUE>
| <FALSE>
String := ( <STRING_LITERAL1> | <STRING_LITERAL2> | <STRING_LITERAL_LONG1> | <STRING_LITERAL_LONG2> )
iri := IRIREF
| PrefixedName
PrefixedName := ( <PNAME_LN> | <PNAME_NS> )
BlankNode := <BLANK_NODE_LABEL>
| <ANON>
IRIREF := <IRIref>
DOCUMENT END