anchor.diff:  				| KW_BNODE
   				| KW_NONLITERAL
   				;
  -shapeOrRef      : ATPNAME_LN
  -				| ATPNAME_NS
  -				| '@' shapeLabel
  -				| shapeDefinition
  -				;
   xsFacet			: stringFacet
   				| numericFacet;
   stringFacet     : stringLength INTEGER
   			    | KW_PATTERN string
   				| '~' string			// shortcut for "PATTERN"
   				;
  -stringLength	: KW_LENGTH | KW_MINLENGTH | KW_MAXLENGTH;
  +stringLength	: KW_LENGTH
  +				| KW_MINLENGTH
  +				| KW_MAXLENGTH;
   numericFacet	: numericRange (numericLiteral | string '^^' datatype)
   				| numericLength INTEGER
   				;
  
positive.code: numericLength   : KW_TOTALDIGITS
  				| KW_FRACTIONDIGITS
  				;
  datatype        : iri ;
  annotation      : '//' predicate (iri | literal) ;
  cardinality     :  '*'
  				| '+'
  				| '?'
  				| repeatRange
  				;
  // BNF: REPEAT_RANGE ::= '{' INTEGER (',' (INTEGER | '*')?)? '}'
  repeatRange     : '{' min_range (',' max_range?)? '}' ;
  
negative.code: max_range       : INTEGER
  				| '*'
  				;
  valueSet		: '[' valueSetValue* ']' ;
  valueSetValue   : iriRange
  				| literal
  				;
  iriRange        : iri ('~' exclusion*)?
  