def find_reference(name, element_types, version):
    """
    Look for an element of the given name and version into the given types and return its reference structure

    :type name: ``str``
    :param name: the element name to look for (e.g. 'MSH')
    :type types: ``list`` or ``tuple``
    :param types: the element classes where to look for the element (e.g. (Group, Segment))
    :type version: ``str``
    :param version: the version of the library where to search the element (e.g. '2.6')
    :rtype: ``dict``
    :return: a dictionary describing the element structure
    :raise: :class:`hl7apy.exceptions.ChildNotFound` if the element has not been found

    >>> from hl7apy.core import Message, Segment
    >>> find_reference('UNKNOWN', (Segment, ), '2.5')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    ChildNotFound: No child named UNKNOWN
    >>> find_reference('ADT_A01', (Segment,),  '2.5')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    ChildNotFound: No child named ADT_A01
    >>> r = find_reference('ADT_A01', (Message,),  '2.5')
    >>> print('%s %s' % (r['name'], r['cls']))
    ADT_A01 <class 'hl7apy.core.Message'>
    """
    lib = load_library(version)
    ref = lib.find(name, element_types)
    return ref
Look for an element of the given name and version into the given types and return its reference structure

    :type name: ``str``
    :param name: the element name to look for (e.g. 'MSH')
    :type types: ``list`` or ``tuple``
    :param types: the element classes where to look for the element (e.g. (Group, Segment))
    :type version: ``str``
    :param version: the version of the library where to search the element (e.g. '2.6')
    :rtype: ``dict``
    :return: a dictionary describing the element structure
    :raise: :class:`hl7apy.exceptions.ChildNotFound` if the element has not been found

    >>> from hl7apy.core import Message, Segment
    >>> find_reference('UNKNOWN', (Segment, ), '2.5')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    ChildNotFound: No child named UNKNOWN
    >>> find_reference('ADT_A01', (Segment,),  '2.5')  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    ChildNotFound: No child named ADT_A01
    >>> r = find_reference('ADT_A01', (Message,),  '2.5')
    >>> print('%s %s' % (r['name'], r['cls']))
    ADT_A01 <class 'hl7apy.core.Message'>