code: def fill_schema_from_xsd_file(filename, schema):
      
      ifmap_statements = _parse_xsd_file(filename)
      properties_all = []
  
      for v in ifmap_statements.values():
          if (isinstance(v[0], IDLParser.Link)):
              src_name = v[1]
              target_name = v[2]
              src = schema._get_or_add_resource(src_name)
              target = schema._get_or_add_resource(target_name)
              if "has" in v[3]:
                  src.children.append(target_name)
                  target.parent = src_name
              if "ref" in v[3]:
                  src.refs.append(target_name)
                  target.back_refs.append(src_name)
          elif isinstance(v[0], IDLParser.Property):
              target_name = v[1][0]
              prop = ResourceProperty(v[0].name, is_list=v[0].is_list, is_map=v[0].is_map)
              if target_name != 'all':
                  target = schema._get_or_add_resource(target_name)
                  target.properties.append(prop)
              else:
                  properties_all.append(prop)
  
      for r in schema.all_resources():
          schema.resource(r).properties += properties_all
docs: From an xsd file, it fills the schema by creating needed
      Resource. The generateds idl_parser is used to parse ifmap
      statements in the xsd file.