anchor.diff:  %% Constant definitions for Json schema keywords
   -define(TYPE,                 <<"type">>).
   -define(PROPERTIES,           <<"properties">>).
  --define(PATTERNPROPERTIES,    <<"patternProperties">>).    % NOT IMPLEMENTED YET
  +-define(PATTERNPROPERTIES,    <<"patternProperties">>).
   -define(ADDITIONALPROPERTIES, <<"additionalProperties">>).
   -define(ITEMS,                <<"items">>).
   -define(ADDITIONALITEMS,      <<"additionalItems">>).
   -define(REQUIRED,             <<"required">>).
  --define(DEPENDENCIES,         <<"dependencies">>).         % NOT IMPLEMENTED YET
  +-define(DEPENDENCIES,         <<"dependencies">>).
   -define(MINIMUM,              <<"minimum">>).
   -define(MAXIMUM,              <<"maximum">>).
   -define(EXCLUSIVEMINIMUM,     <<"exclusiveMinimum">>).
  
positive.code:               , Data       :: jesse:json_term()
                ) -> {ok, jesse:json_term()}
                   | no_return().
  validate(JsonSchema, Data) ->
    {check_property({none, Data}, JsonSchema), Data}.
  
  %% @doc Returns value of "id" field from json object `Schema', assuming that
  %% the given json object has such a field, otherwise an exception
  %% will be thrown.
  -spec get_schema_id(Schema :: jesse:json_term()) -> string().
  get_schema_id(Schema) ->
    case jesse_json_path:path(?ID, Schema) of
      [] ->
        throw({schema_invalid, Schema, missing_id_field});
      Id ->
        erlang:binary_to_list(Id)
    end.
  
  %% @doc A naive check if the given data is a json object.
  
negative.code: -define(DESCRIPTION,          <<"description">>).          % NOT IMPLEMENTED YET
  -define(FORMAT,               <<"format">>).               % NOT IMPLEMENTED YET
  -define(DIVISIBLEBY,          <<"divisibleBy">>).
  -define(DISALLOW,             <<"disallow">>).
  -define(EXTENDS,              <<"extends">>).
  -define(ID,                   <<"id">>).
  -define(_REF,                 <<"$ref">>).                 % NOT IMPLEMENTED YET
  