[1] Query ::= Prolog ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) [2] Prolog ::= BaseDecl? PrefixDecl* [3] BaseDecl ::= 'BASE' QuotedIRIref [4] PrefixDecl ::= 'PREFIX' QNAME_NS QuotedIRIref [5] SelectQuery ::= 'SELECT' 'DISTINCT'? ( Var+ | '*' ) DatasetClause* WhereClause SolutionModifier [6] ConstructQuery ::= 'CONSTRUCT' ConstructTemplate DatasetClause* WhereClause SolutionModifier [7] DescribeQuery ::= 'DESCRIBE' ( VarOrIRIref+ | '*' ) DatasetClause* WhereClause? SolutionModifier [8] AskQuery ::= 'ASK' DatasetClause* WhereClause [9] DatasetClause ::= 'FROM' ( DefaultGraphClause | NamedGraphClause ) [10] DefaultGraphClause ::= SourceSelector [11] NamedGraphClause ::= 'NAMED' SourceSelector [12] SourceSelector ::= IRIref [13] WhereClause ::= 'WHERE'? GroupGraphPattern [14] SolutionModifier ::= OrderClause? LimitClause? OffsetClause? [15] OrderClause ::= 'ORDER' 'BY' OrderCondition+ [16] OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression ) | ( FunctionCall | Var | BrackettedExpression ) [17] LimitClause ::= 'LIMIT' INTEGER [18] OffsetClause ::= 'OFFSET' INTEGER [19] GroupGraphPattern ::= OpenCurly GraphPattern CloseCurly [20] GraphPattern ::= ( Triples OptDot? )? ( GraphPatternNotTriples Dot? GraphPattern )? [21] GraphPatternNotTriples ::= OptionalGraphPattern | GroupOrUnionGraphPattern | GraphGraphPattern | Constraint [22] OptionalGraphPattern ::= 'OPTIONAL' GroupGraphPattern [23] GraphGraphPattern ::= 'GRAPH' VarOrBlankNodeOrIRIref GroupGraphPattern [24] GroupOrUnionGraphPattern ::= GroupGraphPattern ( 'UNION' GroupGraphPattern )* [25] Constraint ::= 'FILTER' ( BrackettedExpression | CallExpression ) [26] ConstructTemplate ::= OpenCurly Triples? OptDot? CloseCurly [27] Triples ::= Triples1 ( Dot Triples )? [28] Triples1 ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList [29] PropertyList ::= PropertyListNotEmpty? [30] PropertyListNotEmpty ::= Verb ObjectList ( ';' PropertyList )? [31] ObjectList ::= Object ( ',' ObjectList )? [32] Verb ::= VarOrBlankNodeOrIRIref | RDFTYPE [33] Object ::= VarOrTerm | TriplesNode [34] TriplesNode ::= Collection | BlankNodePropertyList [35] BlankNodePropertyList ::= OpenSquare PropertyListNotEmpty CloseSquare [36] Collection ::= '(' GraphNode+ ')' [37] GraphNode ::= VarOrTerm | TriplesNode [38] VarOrTerm ::= Var | GraphTerm [39] VarOrIRIref ::= Var | IRIref [40] VarOrBlankNodeOrIRIref ::= Var | BlankNode | IRIref [41] Var ::= VAR1 | VAR2 [42] GraphTerm ::= RDFTerm | '(' ')' [43] Expression ::= ConditionalOrExpression [44] ConditionalOrExpression ::= ConditionalAndExpression ( '||' ConditionalAndExpression )* [45] ConditionalAndExpression ::= ValueLogical ( '&&' ValueLogical )* [46] ValueLogical ::= RelationalExpression [47] RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression )? [48] NumericExpression ::= AdditiveExpression [49] AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression )* [50] MultiplicativeExpression ::= UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* [51] UnaryExpression ::= '!' PrimaryExpression | '+' PrimaryExpression | '-' PrimaryExpression | PrimaryExpression [52] CallExpression ::= 'STR' '(' Expression ')' | 'LANG' '(' Expression ')' | 'DATATYPE' '(' Expression ')' | 'BOUND' '(' Var ')' | 'isURI' '(' Expression ')' | 'isBLANK' '(' Expression ')' | 'isLITERAL' '(' Expression ')' | RegexExpression | FunctionCall [53] RegexExpression ::= 'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')' [54] FunctionCall ::= IRIref ArgList [55] ArgList ::= ( '(' ')' | '(' Expression ( ',' Expression )* ')' ) [56] BrackettedExpression ::= '(' Expression ')' [57] PrimaryExpression ::= BrackettedExpression | CallExpression | Var | RDFTerm [58] RDFTerm ::= IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode [59] NumericLiteral ::= INTEGER | FLOATING_POINT [60] RDFLiteral ::= String ( LANGTAG | ( '^^' IRIref ) )? [61] BooleanLiteral ::= 'true' | 'false' [62] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 [63] IRIref ::= QuotedIRIref | QName [64] QName ::= QNAME | QNAME_NS [65] BlankNode ::= BNODE_LABEL | OpenSquare CloseSquare @terminals [66] QuotedIRIref ::= '<' ([^> ])* '>' [67] QNAME_NS ::= NCNAME_PREFIX? ':' [68] QNAME ::= NCNAME_PREFIX? ':' NCNAME? [69] BNODE_LABEL ::= '_:' NCNAME [70] VAR1 ::= '?' VARNAME [71] VAR2 ::= '$' VARNAME [72] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* [73] INTEGER ::= [0-9]+ [74] DECIMAL ::= [0-9]+ '.' [0-9]* | '.' [0-9]+ [75] FLOATING_POINT ::= [0-9]+ '.' [0-9]* EXPONENT? | '.' ([0-9])+ EXPONENT? | ([0-9])+ EXPONENT [76] EXPONENT ::= [eE] [+-]? [0-9]+ [77] STRING_LITERAL1 ::= "'" ( ([^#x27#x5C#xA#xD]) | ('\\' [^#xD#xA]) )* "'" [78] STRING_LITERAL2 ::= '"' ( ([^#x22#x5C#xA#xD]) | ('\\' [^#xD#xA]) )* '"' [79] STRING_LITERAL_LONG1 ::= "'''" ( [^'\\] | ('\\' [^#xD#xA]) | ("'" [^']) | ("''" [^']) )* "'''" [80] STRING_LITERAL_LONG2 ::= '"""' ( [^"\\] | ('\\' [^#xD#xA]) | ('"' [^"]) | ('""' [^"]) )* '"""' [81] NCCHAR1 ::= [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] [82] VARNAME ::= ( NCCHAR1 | [0-9] ) ( NCCHAR1 | "_" | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )* [83] NCCHAR ::= NCCHAR1 | '_' | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] [84] NCNAME_PREFIX ::= NCCHAR1 ((NCCHAR|".")* NCCHAR)? [85] NCNAME ::= ( "_" | NCCHAR1 ) ((NCCHAR|".")* NCCHAR)? SPACE: #x0009 | #x000A | #x000D | #x0020 | #x00A0 | [#x2000-#x200B] | #x202F | #x205F | #x3000 ; @pass: SPACE+ | '#' [^\n]* "\n" ; Dot: '.' ; OptDot: '.' / ( PASSED_TOKENS* ( ( 'UNION'|'OPTIONAL'|'GRAPH'|'FILTER' ) [^a-z] |'{') ) ; OpenCurly: '{' ; CloseCurly: PASSED_TOKENS* ';'? PASSED_TOKENS* '.'? PASSED_TOKENS* '}' ; OpenSquare: '[' ; CloseSquare: PASSED_TOKENS* ';'? PASSED_TOKENS* ']' ; RDFTYPE: 'a'