code: def loadSchema(uri, base_uri=None):
      
  
      # uri to use for reporting errors - include base uri if any
      if uri in _loaded_schemas:
          return _loaded_schemas[uri]
  
      error_uri = uri
      if base_uri is not None:
          error_uri += ' (base URI %s)' % base_uri
  
  
      try:
          logger.debug('Loading schema %s' % uri)
          _loaded_schemas[uri] = etree.XMLSchema(etree.parse(uri,
                                                             parser=_get_xmlparser(),
                                                             base_url=base_uri))
          return _loaded_schemas[uri]
      except IOError as io_err:
          # add a little more detail to the error message - but should still be an IO error
          raise IOError('Failed to load schema %s : %s' % (error_uri, io_err))
      except etree.XMLSchemaParseError as parse_err:
          # re-raise as a schema parse error, but ensure includes details about schema being loaded
          raise etree.XMLSchemaParseError('Failed to parse schema %s -- %s' % (error_uri, parse_err))
docs: Load an XSD XML document (specified by filename or URL), and return a
      :class:`lxml.etree.XMLSchema`.