anchor.diff:  stringLength	: KW_LENGTH
   				| KW_MINLENGTH
   				| KW_MAXLENGTH;
  -numericFacet	: numericRange numericLiteral
  +numericFacet	: numericRange rawNumeric
   				| numericLength INTEGER
   				;
   numericRange	: KW_MININCLUSIVE
  
positive.code: 				| PNAME_NS
  				;
  blankNode       : BLANK_NODE_LABEL ;
  extension       : KW_EXTENDS shapeExprLabel
                  | '&' shapeExprLabel
                  ;
  restrictions    : KW_RESTRICTS shapeExprLabel
                  | '-' shapeExprLabel
                  ;
  
  // Keywords
  KW_ABSTRACT         : A B S T R A C T ;
  KW_BASE 			: B A S E ;
  KW_EXTENDS          : E X T E N D S ;
  KW_IMPORT           : I M P O R T ;
  KW_RESTRICTS        : R E S T R I C T S ;
  KW_EXTERNAL			: E X T E R N A L ;
  KW_PREFIX       	: P R E F I X ;
  KW_START        	: S T A R T ;
  
negative.code: unaryTripleExpr : ('$' tripleExprLabel)? (tripleConstraint | bracketedTripleExpr)
  				| include
  				;
  bracketedTripleExpr : '(' tripleExpression ')' cardinality? /* onShapeExpr? */ annotation* semanticAction* ;
  tripleConstraint : senseFlags? predicate inlineShapeExpression cardinality? /* onShapeExpr? */ annotation* semanticAction* ;
  cardinality     :  '*'         # starCardinality
  				| '+'          # plusCardinality
  				| '?'          # optionalCardinality
  