anchor.diff:    ;
   
   PN_CHARS_BASE // ok
  -  : 'A' .. 'Z' | 'a' .. 'z' | '\u00C0' .. '\u00D6' | '\u00D8' .. '\u00F6' | '\u00F8' .. '\u02FF' | '\u0370' .. '\u037D' |
  -  '\u037F' .. '\u1FFF' | '\u200C' .. '\u200D' | '\u2070' .. '\u218F' | '\u2C00' .. '\u2FEF' | '\u3001' .. '\uD7FF' |
  -    '\uF900' .. '\uFDCF' | '\uFDF0' .. '\uFFFD'
  +  : [A-Z] | [a-z] | [\u00C0-\u00D6] | [\u00D8-\u00F6] | [\u00F8-\u02FF] | [\u0370-\u037D] |
  +  [\u037F-\u1FFF] | [\u200C-\u200D] | [\u2070-\u218F] | [\u2C00-\u2FEF] | [\u3001-\uD7FF] |
  +    [\uF900-\uFDCF] | [\uFDF0-\uFFFD]
   // Limitation: Unicode Characters beyond \uFFFF are not (yet?) supported by ANTLR
   //    | '\u10000' .. '\u1FFFD' | '\u20000' .. '\u2FFFD' |
   //    '\u30000' .. '\u3FFFD' | '\u40000' .. '\u4FFFD' | '\u50000' .. '\u5FFFD' | '\u60000' .. '\u6FFFD' |
  
positive.code:   : '_:'  PN_LOCAL_EXT
    ;
  
  BLANK_NODE_LABEL // ok
    : '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS )?
    ;
  
  /* LANGTAG */
  
negative.code: 
  // extends PN_LOCAL to allow curly brackets, and force at least one (opening) curly bracket
  PN_LOCAL_EXT
    : '{' ((RIGHT_PART_CHAR | '{' | '}')* (RIGHT_PART_END_CHAR | '}')) +
    | (PN_CHARS_U | ':' | '#' | [0-9] | PLX) (RIGHT_PART_CHAR | '{' | '}')* '{' (RIGHT_PART_CHAR | '{' | '}')* (RIGHT_PART_END_CHAR | '}')
    ;
  
  // extends PN_LOCAL in the original grammar to allow '/' and '#'
  // original (PN_CHARS_U | ':' | [0-9] | PLX) ((PN_CHARS | '.' | ':' | PLX)* (PN_CHARS | ':' | PLX))?
  PN_LOCAL
    : (PN_CHARS_U | ':' | '#' | [0-9] | PLX) (RIGHT_PART_CHAR* RIGHT_PART_END_CHAR)?
    ;
  
  PLX // ok
  