Derives InfoObjectType and import InfoObjectType

def iobject_import(self,
                       id_and_rev_info,
                       elt_name,
                       obj_dict,
                       markings=None,
                       cybox_id=None):
        """
        Derives InfoObjectType and import InfoObjectType

        """

        iobject_type_ns = None

        # Derive the namespace information
        if ('@xsi:type' in obj_dict or
                    '@@embedded_type_info' in obj_dict or
                    '@xsi:type' in obj_dict.get('Properties', {}) or
                    '@xsi:type' in obj_dict.get('Defined_Object', {}) ):
            if '@xsi:type' in obj_dict:
                iobject_type_ns = obj_dict['@xsi:type'].split(':')[0]
            elif '@xsi:type' in obj_dict.get('Properties', {}):
                iobject_type_ns = obj_dict['Properties']['@xsi:type'].split(':')[0]
            elif '@xsi:type' in obj_dict.get('Defined_Object', {}):
                iobject_type_ns = obj_dict['Defined_Object']['@xsi:type'].split(':')[0]
            else:
                iobject_type_ns = obj_dict['@@embedded_type_info']

        # Find out what the type of the Information Object to be created should be
        type_info = self.derive_iobject_type(obj_dict['@@ns'], iobject_type_ns, elt_name)

        if (not 'id' in id_and_rev_info or not id_and_rev_info['id']) and (not 'id_ns' in id_and_rev_info):
            logger.info("Object of type %s without id information encountered, skipping" % elt_name)
            return
        if 'id_ns' in id_and_rev_info:
            namespace_uri = id_and_rev_info['id_ns']
            uid = id_and_rev_info['id_uid']
        else:
            (namespace, namespace_uri, uid) = self.split_qname(id_and_rev_info['id'])

        object_timestamp = id_and_rev_info.get('timestamp',None)
        if not object_timestamp:
            object_timestamp = self.default_timestamp

        (info_obj, existed) = MantisImporter.create_iobject(iobject_family_name=type_info['iobject_family_name'],
                                                            iobject_family_revision_name=type_info[
                                                                'iobject_family_revision_name'],
                                                            iobject_type_name=type_info['iobject_type_name'],
                                                            iobject_type_namespace_uri=type_info[
                                                                'iobject_type_namespace_uri'],
                                                            iobject_type_revision_name=type_info[
                                                                'iobject_type_revision_name'],
                                                            iobject_data=obj_dict,
                                                            uid=uid,
                                                            identifier_ns_uri=namespace_uri,
                                                            timestamp= object_timestamp,
                                                            create_timestamp=self.create_timestamp,
                                                            markings=markings,
                                                            config_hooks={
                                                            'special_ft_handler': self.fact_handler_list(),
                                                            'datatype_extractor': self.cybox_datatype_extractor,
                                                            'attr_ignore_predicate': self.attr_ignore_predicate,
                                                            'force_nonleaf_fact_predicate': self.force_nonleaf_fact_predicate},
                                                            namespace_dict=self.namespace_dict,
        )

        return (info_obj, existed)