code: def process_classes(self, limit):
          
          myfile = '/'.join((self.rawdir, self.files['data']['file']))
          fh = gzip.open(myfile, 'rb')
          filereader = io.TextIOWrapper(fh, newline="")
          filereader.readline()  # remove the xml declaration line
  
          # iterparse is not deprecated
          for event, elem in ET.iterparse(filereader):
              self.process_xml_table(elem, 'Articles', self._process_article_row, limit)
              self.process_xml_table(elem, 'Breed', self._process_breed_row, limit)
              self.process_xml_table(elem, 'Genes_gb', self._process_gene_row, limit)
              self.process_xml_table(
                  elem, 'OMIA_Group', self._process_omia_group_row, limit)
              self.process_xml_table(elem, 'Phene', self._process_phene_row, limit)
              self.process_xml_table(
                  elem, 'Omim_Xref', self._process_omia_omim_map, limit)
          fh.close()
  
          # post-process the omia-omim associations to filter out the genes
          # (keep only phenotypes/diseases)
          self.clean_up_omim_genes()
  
          return
docs: After all species have been processed .
          Loop through the xml file and process the articles,
          breed, genes, phenes, and phenotype-grouping classes.
          We add elements to the graph,
          and store the id-to-label in the label_hash dict,
          along with the internal key-to-external id in the id_hash dict.
          The latter are referenced in the association processing functions.
          :param limit:
          :return: