anchor.diff:      ;
   
   describeQuery
  -    : DESCRIBE ( (v+=varOrIRIref)+ | ASTERISK ) datasetClause* whereClause? solutionModifier -> ^(DESCRIBE $v* ASTERISK* datasetClause* whereClause? solutionModifier*)
  +    : DESCRIBE ((v+=varOrIRIref)+ | ASTERISK) datasetClause* whereClause? solutionModifier -> ^(DESCRIBE $v* ASTERISK* datasetClause* whereClause? solutionModifier*)
       ;
   
   askQuery
  
positive.code: 
  fragment
  PN_LOCAL : (PN_CHARS_U|DIGIT)  ((PN_CHARS|{    
                      	                       if ( input.LA(1)=='.' ) {
                      	                          int LA2 = input.LA(2);
                      	       	                  if ( !((LA2>='-' && LA2<='.')||(LA2>='0' && LA2<='9')||(LA2>='A' && LA2<='Z')||LA2=='_'||(LA2>='a' && LA2<='z')||LA2=='\u00B7'||(LA2>='\u00C0' && LA2<='\u00D6')||(LA2>='\u00D8' && LA2<='\u00F6')||(LA2>='\u00F8' && LA2<='\u037D')||(LA2>='\u037F' && LA2<='\u1FFF')||(LA2>='\u200C' && LA2<='\u200D')||(LA2>='\u203F' && LA2<='\u2040')||(LA2>='\u2070' && LA2<='\u218F')||(LA2>='\u2C00' && LA2<='\u2FEF')||(LA2>='\u3001' && LA2<='\uD7FF')||(LA2>='\uF900' && LA2<='\uFDCF')||(LA2>='\uFDF0' && LA2<='\uFFFD')) ) {
                      	       	                     return;
                      	       	                  }
                      	                       }
  
negative.code:     ;
      	
  selectClause
      : SELECT (DISTINCT | REDUCED)? ASTERISK -> ^(SELECT_CLAUSE DISTINCT* REDUCED* ASTERISK)
      | SELECT (DISTINCT | REDUCED)? (v+=selectVariables)+ -> ^(SELECT_CLAUSE DISTINCT* REDUCED* $v*)
      ;
  
  selectVariables
  