<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def serialize_link(ctx, document, elem, root):
 """Serilaze link element. This works only for external links at the moment. """


    _a = etree.SubElement(root, 'a')

    for el in elem.elements:
        _ser = ctx.get_serializer(el)

        if _ser:
            _td = _ser(ctx, document, el, _a)
        else:
            if isinstance(el, doc.Text):
                children = list(_a)

                if len(children) == 0:
                    _text = _a.text or u''

                    _a.text = u'{}{}'.format(_text, el.value())
                else:
                    _text = children[-1].tail or u''

                    children[-1].tail = u'{}{}'.format(_text, el.value())
   
    if elem.rid in document.relationships[ctx.options['relationship']]:
        _a.set('href', document.relationships[ctx.options['relationship']][elem.rid].get('target', ''))

    fire_hooks(ctx, document, elem, _a, ctx.get_hook('a'))

    return root