[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 GraphPatternList CloseCurly [20] GraphPatternList ::= ( Triples1 GraphPatternListTail | GraphPatternNotTriples GraphPatternNotTriplesTail)? [21] GraphPatternListTail ::= ( Dot GraphPatternList)? | GraphPatternNotTriplesList [28] GraphPatternNotTriplesTail ::= ( Dot? GraphPatternList) [281] GraphPatternNotTriplesList ::= GraphPatternNotTriples GraphPatternNotTriplesTail [22] GraphPatternNotTriples ::= OptionalGraphPattern | GroupOrUnionGraphPattern | GraphGraphPattern | Constraint [23] OptionalGraphPattern ::= 'OPTIONAL' GroupGraphPattern [24] GraphGraphPattern ::= 'GRAPH' VarOrBlankNodeOrIRIref GroupGraphPattern [25] GroupOrUnionGraphPattern ::= GroupGraphPattern ( 'UNION' GroupGraphPattern )* [26] Constraint ::= 'FILTER' ( BrackettedExpression | CallExpression ) [27] ConstructTemplate ::= OpenCurly Triples? CloseCurly [28a] Triples ::= Triples1 (Dot Triples?)? [29] Triples1 ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList [30] PropertyList ::= PropertyListNotEmpty? [31] PropertyListNotEmpty ::= Verb ObjectList ( ';' PropertyList )? [33] ObjectList ::= Object ( ',' ObjectList )? [35] Verb ::= VarOrBlankNodeOrIRIref | 'a' [36] Object ::= VarOrTerm | TriplesNode [37] TriplesNode ::= Collection | BlankNodePropertyList [38] BlankNodePropertyList ::= OpenSquare PropertyListNotEmpty CloseSquare [39] Collection ::= '(' GraphNode+ ')' [40] GraphNode ::= VarOrTerm | TriplesNode [41] VarOrTerm ::= Var | GraphTerm [42] VarOrIRIref ::= Var | IRIref [43] VarOrBlankNodeOrIRIref ::= Var | BlankNode | IRIref [44] Var ::= VAR1 | VAR2 [45] GraphTerm ::= RDFTerm | '(' ')' [46] Expression ::= ConditionalOrExpression [47] ConditionalOrExpression ::= ConditionalAndExpression ( '||' ConditionalAndExpression )* [48] ConditionalAndExpression ::= ValueLogical ( '&&' ValueLogical )* [49] ValueLogical ::= RelationalExpression [50] RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression )? [51] NumericExpression ::= AdditiveExpression [52] AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression | '-' MultiplicativeExpression )* [53] MultiplicativeExpression ::= UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* [54] UnaryExpression ::= '!' PrimaryExpression | '+' PrimaryExpression | '-' PrimaryExpression | PrimaryExpression [55] CallExpression ::= 'STR' '(' Expression ')' | 'LANG' '(' Expression ')' | 'DATATYPE' '(' Expression ')' | 'BOUND' '(' Var ')' | 'isURI' '(' Expression ')' | 'isBLANK' '(' Expression ')' | 'isLITERAL' '(' Expression ')' | RegexExpression | FunctionCall [56] RegexExpression ::= 'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')' [57] FunctionCall ::= IRIref ArgList [58] ArgList ::= ( '(' ')' | '(' Expression ( ',' Expression )* ')' ) [59] BrackettedExpression ::= '(' Expression ')' [60] PrimaryExpression ::= BrackettedExpression | CallExpression | Var | RDFTerm [61] RDFTerm ::= IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode [62] NumericLiteral ::= INTEGER | FLOATING_POINT [63] RDFLiteral ::= String ( LANGTAG | ( '^^' IRIref ) )? [64] BooleanLiteral ::= 'true' | 'false' [65] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 [66] IRIref ::= QuotedIRIref | QName [67] QName ::= QNAME | QNAME_NS [68] BlankNode ::= BNODE_LABEL | OpenSquare CloseSquare @terminals [69] QuotedIRIref ::= '<' ([^> ])* '>' [70] QNAME_NS ::= NCNAME_PREFIX? ':' [71] QNAME ::= NCNAME_PREFIX? ':' NCNAME? [72] BNODE_LABEL ::= '_:' NCNAME [73] VAR1 ::= '?' VARNAME [74] VAR2 ::= '$' VARNAME [75] LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* [76] INTEGER ::= [0-9]+ [77] DECIMAL ::= [0-9]+ '.' [0-9]* | '.' [0-9]+ [78] FLOATING_POINT ::= [0-9]+ '.' [0-9]* EXPONENT? | '.' ([0-9])+ EXPONENT? | ([0-9])+ EXPONENT [79] EXPONENT ::= [eE] [+-]? [0-9]+ [80] STRING_LITERAL1 ::= "'" ( ([^#x27#x5C#xA#xD]) | ('\\' [^#xD#xA]) )* "'" [81] STRING_LITERAL2 ::= '"' ( ([^#x22#x5C#xA#xD]) | ('\\' [^#xD#xA]) )* '"' [82] STRING_LITERAL_LONG1 ::= "'''" ( [^'\\] | ('\\' [^#xD#xA]) | ("'" [^']) | ("''" [^']) )* "'''" [83] STRING_LITERAL_LONG2 ::= '"""' ( [^"\\] | ('\\' [^#xD#xA]) | ('"' [^"]) | ('""' [^"]) )* '"""' [84] 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] [85] NCCHAR ::= NCCHAR1 | '_' | '-' | "." | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] [86] NCNAME_PREFIX ::= NCCHAR1 NCCHAR* [87] NCNAME ::= ( "_" | NCCHAR1 ) NCCHAR* [88] VARNAME ::= NCCHAR1 ( NCCHAR1 | "_" | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )* SPACE: #x0009 | #x000A | #x000D | #x0020 | #x00A0 | [#x2000-#x200B] | #x202F | #x205F | #x3000 ; @pass: SPACE+ | '#' [^\n]* "\n" ; Dot: '.' ; OpenCurly: '{' ; CloseCurly: '}' ; OpenSquare: '[' ; CloseSquare: ']' ;