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