'process the specified type then process its children'

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.unbounded():
        value = []
    elif (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[:])
