anchor.diff:  groupShape      : singleElementGroup
   				| multiElementGroup
   				;
  -singleElementGroup : unaryShape ','? ;
  -multiElementGroup : unaryShape (',' unaryShape)+ ','? ;
  +singleElementGroup : unaryShape (','|';')? ;
  +multiElementGroup : unaryShape ((','|';') unaryShape)+ (','|';')? ;
   unaryShape      : tripleConstraint
   				| include
   				| encapsulatedShape
  
positive.code: max_range       : INTEGER
  				| '*'
  				;
  valueSet        : '(' value* ')' ;
  value           : iriRange
  				| literal
  				;
  
negative.code: 				;
  xsFacet			: stringFacet
  				| numericFacet;
  stringFacet     : stringLength INTEGER
  			    | KW_PATTERN string
  				| '~' string			// shortcut for "PATTERN"
  				;
  stringLength	: KW_LENGTH | KW_MINLENGTH | KW_MAXLENGTH;
  numericFacet	: numericRange (numericLiteral | string '^^' datatype)
  				| numericLength INTEGER
  				;
  numericRange	: KW_MININCLUSIVE
  