code: def process(self, data, type, history):
          
          if type in history:
              return
          if type.enum():
              return
          history.append(type)
          resolved = type.resolve()
          value = None
          if type.multi_occurrence():
              value = []
          else:
              if len(resolved) > 0:
                  if resolved.mixed():
                      value = Factory.property(resolved.name)
                      md = value.__metadata__
                      md.sxtype = resolved
                  else:
                      value = Factory.object(resolved.name)
                      md = value.__metadata__
                      md.sxtype = resolved
                      md.ordering = self.ordering(resolved)
          setattr(data, type.name, value)
          if value is not None:
              data = value
          if not isinstance(data, list):
              self.add_attributes(data, resolved)
              for child, ancestry in resolved.children():
                  if self.skip_child(child, ancestry):
                      continue
                  self.process(data, child, history[:])
docs: process the specified type then process its children