Download MARC OAI document with given `doc_id` from given (logical) `base`.

    Funny part is, that some documents can be obtained only with this function
    in their full text.

    Args:
        doc_id (str):         You will get this from :func:`getDocumentIDs`.
        base (str, optional): Base from which you want to download Aleph
                              document.
                              This seems to be duplicite with
                              :func:`searchInAleph` parameters, but it's just
                              something Aleph's X-Services wants, so ..

    Returns:
        str: MARC XML Unicode string.

    Raises:
        InvalidAlephBaseException
        DocumentNotFoundException

def downloadMARCOAI(doc_id, base):
    """
    Download MARC OAI document with given `doc_id` from given (logical) `base`.

    Funny part is, that some documents can be obtained only with this function
    in their full text.

    Args:
        doc_id (str):         You will get this from :func:`getDocumentIDs`.
        base (str, optional): Base from which you want to download Aleph
                              document.
                              This seems to be duplicite with
                              :func:`searchInAleph` parameters, but it's just
                              something Aleph's X-Services wants, so ..

    Returns:
        str: MARC XML Unicode string.

    Raises:
        InvalidAlephBaseException
        DocumentNotFoundException
    """
    downer = Downloader()

    data = downer.download(
        ALEPH_URL + Template(OAI_DOC_URL_TEMPLATE).substitute(
            DOC_ID=doc_id,
            BASE=base
        )
    )

    dom = dhtmlparser.parseString(data)

    # check for errors
    error = dom.find("error")
    if len(error) <= 0:  # no errors
        return data

    if "Error reading document" in error[0].getContent():
        raise DocumentNotFoundException(
            str(error[0].getContent())
        )
    else:
        raise InvalidAlephBaseException(
            error[0].getContent() + "\n" +
            "The base you are trying to access probably doesn't exist."
        )