<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def ReSpecTh_to_ChemKED(filename_xml, file_author='', file_author_orcid='', *, validate=False):
 """Convert ReSpecTh XML file to ChemKED-compliant dictionary. Args: filename_xml (`str`):
 Name of ReSpecTh XML file to be converted. file_author (`str`, optional):
 Name to override original file author file_author_orcid (`str`, optional):
 ORCID of file author validate (`bool`, optional, keyword-only):
 Set to `True` to validate the resulting property dictionary with `ChemKED`. Set to `False` if the file is being loaded and will be validated at some other point before use. """

    # get all information from XML file
    tree = etree.parse(filename_xml)
    root = tree.getroot()

    # get file metadata
    properties = get_file_metadata(root)

    # get reference info
    properties['reference'] = get_reference(root)
    # Save name of original data filename
    properties['reference']['detail'] = (properties['reference'].get('detail', '') +
                                         'Converted from ReSpecTh XML file ' +
                                         os.path.basename(filename_xml)
                                         )

    # Ensure ignition delay, and get which kind of experiment
    properties.update(get_experiment_kind(root))

    # Get properties shared across the file
    properties['common-properties'] = get_common_properties(root)

    # Determine definition of ignition delay
    properties['common-properties']['ignition-type'] = get_ignition_type(root)

    # Now parse ignition delay datapoints
    properties['datapoints'] = get_datapoints(root)

    # Ensure inclusion of pressure rise or volume history matches apparatus.
    has_pres_rise = ('pressure-rise' in properties['common-properties'] or
                     any([True for dp in properties['datapoints'] if 'pressure-rise' in dp])
                     )
    if has_pres_rise and properties['apparatus']['kind'] == 'rapid compression machine':
        raise KeywordError('Pressure rise cannot be defined for RCM.')

    has_vol_hist = any(
        [t.get('type') == 'volume' for dp in properties['datapoints']
         for t in dp.get('time-histories', [{}])]
    )
    if has_vol_hist and properties['apparatus']['kind'] == 'shock tube':
        raise KeywordError('Volume history cannot be defined for shock tube.')

    # add any additional file authors
    if file_author_orcid and not file_author:
        raise KeywordError('If file_author_orcid is specified, file_author must be as well')

    if file_author:
        temp_author = {'name': file_author}
        if file_author_orcid:
            temp_author['ORCID'] = file_author_orcid
        properties['file-authors'].append(temp_author)

    # Now go through datapoints and apply common properties
    for idx in range(len(properties['datapoints'])):
        for prop in properties['common-properties']:
            properties['datapoints'][idx][prop] = properties['common-properties'][prop]

    if validate:
        chemked.ChemKED(dict_input=properties)

    return properties