def are_related(env, source, target, relationships):
    """
    Returns ``True`` if ``source`` and ``target`` items are related
    according a list, ``relationships``, of relationship types.
    ``False`` is returned otherwise

    If the list of relationship types is empty, all available
    relationship types are to be considered.

    """
    if not relationships:
        relationships = list(env.relationships.keys())

    for rel in relationships:
        if (target in env.traceability_all_items[source][rel] or
            source in
                env.traceability_all_items[target][env.relationships[rel]]):
            return True

    return False