def name(ctx, obj=None):
    '''
    Yields one string a node name or the empty string, operating on the first item in the provided obj, or the current item if obj is omitted
    If this item is a node, yield its node name (generic identifier), otherwise yield ''
    If obj is provided, but empty, yield ''
    '''
    if obj is None:
        item = ctx.item
    elif hasattr(obj, 'compute'):
        item = next(obj.compute(ctx), None)
    else:
        item = obj
    if isinstance(item, node):
        yield item.xml_name
    else:
        yield ''