def __parse(value):
        """
        Parse the string date.

        Supports the subset of ISO8601 used by xsd:date, but is lenient with
        what is accepted, handling most reasonable syntax.

        Any timezone is parsed but ignored because a) it is meaningless without
        a time and b) B{datetime}.I{date} does not support timezone
        information.

        @param value: A date string.
        @type value: str
        @return: A date object.
        @rtype: B{datetime}.I{date}

        """
        match_result = _RE_DATE.match(value)
        if match_result is None:
            raise ValueError("date data has invalid format '%s'" % (value,))
        return _date_from_match(match_result)