<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process(self, article):
 """ Ingests an article and processes it for metadata and elements to provide proper references in the EPUB spine. This method may only be called once unless the Package was instantiated in collection mode using ``Package(collection=True)``. It places entries in an internal spine list for the Main Content Document, the Bibliographic Content Document (if there are ref elements in Back), and the Tables Content Document (if there are table elements). It then employs the publisher specific methods for extracting article metadata using the article's publisher attribute (an instance of a Publisher class). Parameters article : openaccess_epub.article.Article instance An article to be included in the EPUB, to be processed for metadata and appropriate content document references. """

        if self.article is not None and not self.collection:
            log.warning('Could not process additional article. Package only \
handles one article unless collection mode is set.')
            return False

        if article.publisher is None:
            log.error('''Package cannot be generated for an Article \
without a publisher!''')
            return
        self.article = article
        self.article_doi = self.article.doi.split('/')[1]
        self.all_dois.append(self.article.doi)

        #Analyze the article to add entries to the spine
        dash_doi = self.article_doi.replace('.', '-')

        #Entry for the main content document
        main_idref = 'main-{0}-xhtml'.format(dash_doi)
        self.spine_list.append(spine_item(main_idref, True))

        #Entry for the biblio content document
        biblio_idref = 'biblio-{0}-xhtml'.format(dash_doi)
        if self.article.root.xpath('./back/ref-list/ref'):
                self.spine_list.append(spine_item(biblio_idref, True))

        #Entry for the tables content document
        tables_idref = 'tables-{0}-xhtml'.format(dash_doi)
        if self.article.publisher.has_out_of_flow_tables():
            self.spine_list.append(spine_item(tables_idref, False))

        self.acquire_metadata()