docs: def _load_schema(self, location, xml=None):
          """
          location -- location of schema, also used as a key
          xml -- optional string representation of schema
          """
          cachedir = self._cachedir
          # wsdl2py: deal with XML Schema
          if not os.path.isdir(cachedir): os.mkdir(cachedir)
      
          file = os.path.join(cachedir, '.cache')
          section = 'TYPES'
          cp = ConfigParser()
          try:
              cp.readfp(open(file, 'r'))
          except IOError:
              del cp;  cp = None
              
          option = location.replace(':', '-') # colons seem to screw up option
          if (cp is not None and cp.has_section(section) and 
              cp.has_option(section, option)):
              types = cp.get(section, option)
          else:
              # dont do anything to anames
              if not self._pyclass:
                  containers.ContainerBase.func_aname = lambda instnc,n: str(n)
                  
              from pyremotevbox.ZSI.wstools import XMLSchema
              reader = XMLSchema.SchemaReader(base_url=location)
              if xml is not None and isinstance(xml, basestring):
                  schema = reader.loadFromString(xml)
              elif xml is not None:
                  raise RuntimeError, 'Unsupported: XML must be string'
              elif not os.path.isfile(location):
                  schema = reader.loadFromURL(location)
              else:
                  schema = reader.reader.loadFromFile(location)
                  
              # TODO: change this to keyword list
              class options:
                  output_dir = cachedir
                  schema = True
                  simple_naming = False
                  address = False
                  lazy = self._lazy
                  complexType = self._pyclass
  
              schema.location = location
              files = commands._wsdl2py(options, schema)
              if cp is None: cp = ConfigParser()
              if not cp.has_section(section): cp.add_section(section)
              types = filter(lambda f: f.endswith('_types.py'), files)[0]
              cp.set(section, option, types)
              cp.write(open(file, 'w'))
              
          if os.path.abspath(cachedir) not in sys.path:
              sys.path.append(os.path.abspath(cachedir))
              
          mod = os.path.split(types)[-1].rstrip('.py')
          return __import__(mod)