This section presents the syntax of the RDF Query Language.
QUERY ::=  SELECT DEFINE STAT ;
SELECT ::= select [one] [more] [list] [merge] GROUP COUNT SORT  [distinct] VARLIST DISPLAY MAX where  |  ;
GROUP ::=  group VAR GROUP | ;
COUNT ::= count VAR | ;
VARLIST ::= QNAME VARLIST | VAR VARLIST | ;
VAR ::= '?'[a-zA-Z0-9]*
SORT ::=  sort [reverse] VAR SORT | 
          sort [reverse] count SORT  |   ;
DISPLAY ::= display table | display flat | display asquery | display INT | ;
MAX ::= PROJECTION RESULT ;
PROJECTION ::= projection INT | ;
RESULT ::= result INT | ;
DEFINE ::=  PREF DEFINE | ;
PREF ::= PREFIX as NAMESPACE ;
STAT ::=  STRIPLE | STAT STAT | OR | STAT and STAT | 
          SOURCE  '(' STAT ')' | OPTION '(' STAT ')' ; 
OR ::= STAT or STAT ;
STRIPLE ::= SOURCE TRIPLE | CONSTRAINT ;
TRIPLE ::= RES PROP VALUE ;
SOURCE ::= source VAR | source QNAME | ;
OPTION ::=  | 'option' ;
CONSTRAINT ::=  RES is NODETEST | EXP OPER EXP ;
NODETEST ::= 'BlankNode' | 'Literal' | 'URI' | 'Bound' ;
EXP ::= TERM '+' EXP | TERM '-' EXP | TERM ;
TERM ::= FACT '*' TERM | FACT '/' TERM | FACT ;
FACT ::= '(' EXP ')' | '-' FACT | VAR | LIT | QNAME ;
RES ::=  VAR | QNAME ;
VALUE ::= RES |  VAR LANG | LIT ;
LIT ::= NUMBER | NUMBER '^^' DATATYPE | STR LANG | STR '^^' DATATYPE ;
STR ::=  '"' STRING '"' | "'" STRING "'" ;
LANG ::= | @en | @fr | ... ;
PROP ::= PQUALIFIER PROPERTY | ALL PROPERTY PATH ;
PROPERTY ::= QNAME | VAR |  QNAME :: VAR ;
PQUALIFIER ::=  not:: | direct:: |  ;
ALL ::= all | ;
PATH ::= '{' INT '}' | '[' INT ']' ;
OPER ::= SOPER | TOPER ;
SOPER ::= '<' | '<=' | '=' | '==' | '>=' | '>' | '!=' | '!==' | '~' | '!~' | 'in' |
'!in' | '^' | '!^' ;
TOPER ::= '<:' | '<=:' | '=:' | '>=:' | '>:' | '!<:' | '!<=:' | '!=:' |
          '!>=:' | '!>:' ;
QNAME : XML Namespace Qualified Name