def __execute_validations(self, validations, data, property_name, ancestors, negation=False, prefix=None):
        if not isinstance(ancestors, OrderedDict):
            raise TypeError("ancestors must be an OrderedDict. type: {0} was passed.".format(type(ancestors)))
        if not isinstance(validations, dict):
            raise TypeError('validations is required to be a dict. type: {1} was passed.'.format(type(validations)))
        if not isinstance(property_name, six.string_types):
            raise TypeError("property_key must be a string. type: {0} was passed.".format(type(property_name)))
        order = ['type', 'required'] + [key for key in validations.keys() if key not in ('required', 'type')]
        ordered_validations = OrderedDict(sorted(validations.items(), key=lambda x: order.index(x[0])))
        for validation, value in six.iteritems(ordered_validations):
            if validation in VALIDATORS:
                if validation == 'not':
                    for err in self.__execute_validations(value, data, property_name, ancestors, negation, prefix):
                        yield err
                    continue
                for err in getattr(self, '_{0}'.format(validation))(value, data, property_name, ancestors, negation, prefix):
                    yield err
            else:
                raise LookupError("{0} isn't a validator or reserved scheme key.".format(validation))