anchor.diff:  link_header_val
     : link_path_attr rel_attr (self_attr | link_category_attr)* link_attributes_attr?
   ;
  -link_path_attr:
  -  OPEN_PATH link_path_val CLOSE_PATH
  -;
  -link_path_val:
  -  PATH
  -;
  -
  -self_attr:
  -  CAT_ATTR_SEP SELF_ATTR VAL_ASSIGN QUOTE self_val QUOTE
  -;
  -self_val:
  -  TOKEN
  -;
  -
  -link_category_attr:
  -  CAT_ATTR_SEP CAT_ATTR VAL_ASSIGN QUOTE link_category_val QUOTE
  -;
  -link_category_val:
  -  TOKEN
  +link_path_attr returns [String link_path_val]
  +  : OPEN_PATH link_path_val CLOSE_PATH
  +    {$link_path_val = $link_path_val.link_path_val;}
  +;
  +link_path_val returns [String link_path_val]
  +  : PATH
  +    {$link_path_val = $PATH.text;}
  +;
  +
  +self_attr returns [String self_val]
  +  : CAT_ATTR_SEP SELF_ATTR VAL_ASSIGN QUOTE self_val QUOTE
  +    {$self_val = $self_val.self_val;}
  +;
  +self_val returns [String self_val]
  +  : TOKEN
  +  {$self_val = $TOKEN.text;}
  +;
  +
  +link_category_attr returns [String link_category_val]
  +  : CAT_ATTR_SEP CAT_ATTR VAL_ASSIGN QUOTE link_category_val QUOTE
  +    {$link_category_val = $link_category_val.link_category_val;}
  +;
  +link_category_val returns [String link_category_val]
  +  : TOKEN
  +  {$link_category_val = $TOKEN.text;}
   ;
   
   link_attributes_attr:
  
positive.code:   X-OCCI-Location: http://example.com/compute/123
    X-OCCI-Location: http://example.com/compute/123, http://example.com/compute/123
  */
  //TODO output location header as JSON
  location_header:
    LOCATION_HEADER location_paths
  ;
  location_paths:
    location_path (COMMA location_path)*
  ;
  location_path:
    PATH
  ;
  
  //TODO many of these lexical rules need to be more accurate
  ATTRIB_NAME: ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | DIGIT)+ ('.') TOKEN;
  PATH: ('/' TOKEN) ('/' TOKEN)*;
  CLASS: ('kind'|'mixin'|'action');
  URI: ('http://' | 'https://') TOKEN;
  TOKEN: ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z')*;
  DIGIT: '0'..'9'+;
  WS: (' ' | '\t' | '\n' | '\r'){$channel = HIDDEN;};
negative.code: attribute_attr_val:
    (QUOTE attribute_attr_string_val QUOTE) | attribute_attr_int_val
  ;
  attribute_attr_string_val returns [String attr_str]
    : TOKEN
      {$attr_str = $TOKEN.text;}
  ;
  attribute_attr_int_val returns [String attr_int]
    : DIGIT
      {$attr_int = $DIGIT.text;}
  ;
  
  
  