def parse_data_slots(value):
    """Parse data-slots value into slots used to wrap node, prepend to node or
    append to node.

       >>> parse_data_slots('')
       ([], [], [])

       >>> parse_data_slots('foo bar')
       (['foo', 'bar'], [], [])

       >>> parse_data_slots('foo bar > foobar')
       (['foo', 'bar'], ['foobar'], [])

       >>> parse_data_slots('> foobar')
       ([], ['foobar'], [])

       >>> parse_data_slots('> foo * bar')
       ([], ['foo'], ['bar'])

       >>> parse_data_slots('foobar > foo * bar')
       (['foobar'], ['foo'], ['bar'])

       >>> parse_data_slots('foo > * bar')
       (['foo'], [], ['bar'])

    """
    value = unquote(value)
    if '>' in value:
        wrappers, children = value.split('>', 1)
    else:
        wrappers = value
        children = ''
    if '*' in children:
        prepends, appends = children.split('*', 1)
    else:
        prepends = children
        appends = ''

    wrappers = list(filter(bool, list(map(str.strip, wrappers.split()))))
    prepends = list(filter(bool, list(map(str.strip, prepends.split()))))
    appends = list(filter(bool, list(map(str.strip, appends.split()))))

    return wrappers, prepends, appends