//Query ::= Prolog ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery ) // Prolog ::= ( BaseDecl )? ( PrefixDecl )* // BaseDecl ::= 'BASE' QuotedIRIref // PrefixDecl ::= 'PREFIX' QNAME_NS QuotedIRIref // SelectQuery ::= 'SELECT' ( 'DISTINCT' )? ( ( Var )+ | '*' ) (DatasetClause )? // WhereClause ( OrderClause )? ( LimitClause )? ( OffsetClause )? // ConstructQuery ::= 'CONSTRUCT' ConstructTemplate (DatasetClause )? // WhereClause ( OrderClause )? ( LimitClause )? ( OffsetClause )? // DescribeQuery ::= 'DESCRIBE' ( ( VarOrIRIref )+ | 'DESCRIBE' '*' ) (DatasetClause )? // ( WhereClause )? ( OrderClause )? ( LimitClause )? ( OffsetClause )? // AskQuery ::= 'ASK' (DatasetClause )? ( WhereClause )? // DatasetClause ::= ( DefaultGraphClause | NamedGraphClause )+ // DefaultGraphClause ::= 'FROM' SourceSelector // NamedGraphClause ::= 'FROM' 'NAMED' SourceSelector // SourceSelector ::= IRIref // WhereClause ::= ( 'WHERE' )? GroupGraphPattern // OrderClause ::= 'ORDER' 'BY' ( OrderCondition )+ // OrderCondition ::= ( ( 'ASC' | 'DESC' ) BrackettedExpression ) // | ( FunctionCall | Var | '(' Expression ')' ) // LimitClause ::= 'LIMIT' INTEGER // OffsetClause ::= 'OFFSET' INTEGER // GroupGraphPattern ::= '{' GraphPatternList // GraphPatternList ::= ( Triples ( '.' )? )? ( GraphPatternNotTriples ( '.' )? // GraphPatternList | '}' ) // GraphPattern ::= Triples | GraphPatternNotTriples // GraphPatternNotTriples ::= OptionalGraphPattern | UnionGraphPattern | GroupGraphPattern // | GraphGraphPattern | Constraint // OptionalGraphPattern ::= 'OPTIONAL' GroupGraphPattern // GraphGraphPattern ::= 'GRAPH' VarOrBlankNodeOrIRIref GroupGraphPattern // UnionGraphPattern ::= GroupGraphPattern ( 'UNION' GroupGraphPattern )* // Constraint ::= 'FILTER' Expression // ConstructTemplate ::= '{' ( Triples )? '}' // Triples ::= Triples1 ( '.' Triples )? // Triples1 ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList // PropertyList ::= ( PropertyListNotEmpty )? // PropertyListNotEmpty ::= Verb ObjectList PropertyListTail // PropertyListTail ::= ( ';' PropertyList )? // ObjectList ::= Object ObjectTail // ObjectTail ::= ( ',' ObjectList )? // Verb ::= VarOrBlankNodeOrIRIref | 'a' // Object ::= VarOrTerm | TriplesNode // TriplesNode ::= Collection | BlankNodePropertyList // BlankNodePropertyList ::= '[' PropertyList ']' // Collection ::= '(' ( GraphNode )+ ')' // GraphNode ::= VarOrTerm | TriplesNode // VarOrTerm ::= Var | GraphTerm // VarOrIRIref ::= Var | IRIref // VarOrBlankNodeOrIRIref ::= Var | BlankNode | IRIref // Var ::= VAR1 | VAR2 // GraphTerm ::= RDFTerm | '(' ')' // Expression ::= ConditionalOrExpression // ConditionalOrExpression ::= ConditionalAndExpression ( '||' ConditionalAndExpression )* // ConditionalAndExpression ::= ValueLogical ( '&&' ValueLogical )* // ValueLogical ::= RelationalExpression // RelationalExpression ::= NumericExpression ( '=' NumericExpression | '!=' NumericExpression // | '<' NumericExpression | '>' NumericExpression // | '<=' NumericExpression | '>=' NumericExpression )? // NumericExpression ::= AdditiveExpression // AdditiveExpression ::= MultiplicativeExpression ( '+' MultiplicativeExpression // | '-' MultiplicativeExpression )* // MultiplicativeExpression ::= UnaryExpression ( '*' UnaryExpression | '/' UnaryExpression )* // UnaryExpression ::= '!' CallExpression | '+' CallExpression | '-' CallExpression // | CallExpression // CallExpression ::= 'STR' '(' Expression ')' | 'LANG' '(' Expression ')' // | 'DATATYPE' '(' Expression ')' | RegexExpression | 'BOUND' '(' Var ')' // | 'isURI' '(' Expression ')' | 'isBLANK' '(' Expression ')' // | 'isLITERAL' '(' Expression ')' | FunctionCall | PrimaryExpression // RegexExpression ::= 'REGEX' '(' Expression ',' Expression ( ',' Expression )? ')' // BracketedExpression ::= '(' Expression ')' // PrimaryExpression ::= Var | RDFTerm | BracketedExpression // FunctionCall ::= IRIref ArgList // ArgList ::= '(' ( Expression ( ',' Expression )* )? ')' // RDFTerm ::= IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode // NumericLiteral ::= INTEGER | FLOATING_POINT // RDFLiteral ::= String ( ( LANGTAG ) | ( '^^' IRIref ) )? // BooleanLiteral ::= 'true' | 'false' // String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2 // IRIref ::= QuotedIRIref | QName // QName ::= QNAME | QNAME_NS // BlankNode ::= BNODE_LABEL | '[' ']' // QuotedIRIref ::= '<' ([^> ])* '>' /* An IRI reference : RFC 3987 */ // QNAME_NS ::= NCNAME_PREFIX? ':' // QNAME ::= NCNAME_PREFIX? ':' NCNAME? // BNODE_LABEL ::= '_:' NCNAME // VAR1 ::= '?' VARNAME // VAR2 ::= '$' VARNAME // LANGTAG ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* // INTEGER ::= [0-9]+ // DECIMAL ::= [0-9]+ '.' [0-9]* | '.' [0-9]+ // FLOATING_POINT ::= [0-9]+ '.' [0-9]* EXPONENT? | '.' ([0-9])+ EXPONENT? | ([0-9])+ EXPONENT // EXPONENT ::= [eE] [+-]? [0-9]+ // STRING_LITERAL1 ::= "'" ( ([^'\\\n\r]) | ('\\' [^\n\r]) )* "'" // STRING_LITERAL2 ::= '"' ( ([^"\\\n\r]) | ('\\' [^\n\r]) )* '"' // STRING_LITERAL_LONG1 ::= '"""' ( [^"\\] | ("\\" [^\n\r]) | ('"' [^"]) | ('""' [^"]) )* '"""' // STRING_LITERAL_LONG2 ::= "'''" ( [^'\\] | ("\\" [^\n\r]) | ("'" [^']) | ("''" [^']) )* "'''" // 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] // NCCHAR ::= NCCHAR1 | '_' | '-' | "." | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] // NCNAME_PREFIX ::= NCCHAR1 NCCHAR* // NCNAME ::= ( "_" | NCCHAR1 ) NCCHAR* // VARNAME ::= ( NCCHAR1 | "_" | [0-9] | #x00B7 )*