def structure(self):
        """
        Returns the structure for this scaffold.
        
        :return     <xml.etree.ElementTree.Element> || None
        """
        opts = {'scaffold': self}

        # build from a zip file
        if zipfile.is_zipfile(self.source()):
            zfile = zipfile.ZipFile(self.source(), 'r')
            try:
                contents = zfile.read('structure.xml')
                contents = makotext.render(contents, opts)
                zfile.close()
                return ElementTree.fromstring(contents)
            except StandardError:
                logger.exception('Failed to load structure.')
                zfile.close()
                return None

        else:
            try:
                filename = os.path.join(os.path.dirname(self.source()),
                                        'structure.xml')
                xdata = open(filename, 'r').read()
                xdata = makotext.render(xdata, opts)
                return ElementTree.fromstring(xdata)
            except StandardError:
                logger.exception('Failed to load structure.')
                return None