anchor.diff:  				;
   singleElementGroup : unaryShape ';'? ;
   multiElementGroup : unaryShape (';' unaryShape)+ ';'? ;
  -valueConstraint : KW_UNIQUE '(' (KW_FOCUS ',')? accessor (',' accessor)* ')' # valueConstraintUnique
  -				| accessor ('<' | '=' | '!=' | '>') accessor 				 # valueConstraintAccessor
  -				;
  -accessor		: productionLabel 							# accessorProductionLabel
  -				| KW_LANGTAG '(' productionLabel ')'		# accessorLangTag
  -				| KW_DATATYPE '(' productionLabel ')'		# accessorDataType
  -				;
  -unaryShape      : tripleConstraint
  +unaryShape      : productionLabel? tripleConstraint
   				| include
  -				| encapsulatedShape
  -				| valueConstraint
  +				| productionLabel? encapsulatedShape
   				;
   encapsulatedShape  : '(' innerShape ')' cardinality? annotation* semanticActions ;
   include			: '&' shapeLabel ;
  
positive.code: KW_MAXLENGTH    	: M A X L E N G T H ;
  KW_TOTALDIGITS  	: T O T A L D I G I T S ;
  KW_FRACTIONDIGITS 	: F R A C T I O N D I G I T S ;
  KW_TRUE         	: 'true' ;
  KW_FALSE        	: 'false' ;
  
  
negative.code: predicate       : iri
  				| rdfType
  				;
  shapeAtom       : KW_LITERAL xsFacet*			# shapeAtomLiteral
  				| nonLiteralKind stringFacet* shapeOrRef?	# shapeAtomNonLiteral
  				| datatype xsFacet*				# shapeAtomDataType
  				| shapeOrRef stringFacet*		# shapeAtomGroup
  				| valueSet						# shapeAtomValueSet
  