def derive_iobject_type(self, embedding_ns, embedded_ns, elt_name):
        """
        Derive type of information object stemming from an embedded element
        based on namespace information of embedding element, the embedded
        element itself, and the name of the element.

        """


        # Extract namespace-information

        ns_info = search_by_re_list(self.RE_LIST_NS_TYPE_FROM_NS_URL, self.namespace_dict.get(embedding_ns, ""))

        if not ns_info:
            ns_info = {}

        # This should yield the following information:
        # - For namespace of an Cybox Object such as http://cybox.mitre.org/objects#AddressObject-2:
        #   - iotype_ns = http://cybox.mitre.org/objects#AddressObject
        #   - family = cybox.mitre.org
        #   - family_tag = cybox
        #   - type = AddressObject
        #   - revision = 2
        # - For a base namespace such as http://cybox.mitre.org/common-2:
        #   - iotype_ns = http://cybox.mitre.org/common
        #   - family = cybox.mitre.org
        #   - family_tag = cybox
        #   - type = common
        #   - revision = 2

        iobject_family_name = ns_info.get('family',None)
        if not iobject_family_name:
            iobject_family_name = ""
        family_info = {}

        if ns_info.get('family_tag',None) in ['stix', 'cybox']:
            family_info = search_by_re_list(self.RE_LIST_NS_TYPE_FROM_NS_URL,
                                            self.namespace_dict.get(ns_info['family_tag'], ""))
            if family_info:
                iobject_family_revision_name = family_info["revision"]
            else:
                iobject_family_revision_name = None

        else:
            iobject_family_revision_name = ns_info.get("revision",None)
        if not iobject_family_revision_name:
            iobject_family_revision_name = ''

        # We take the object type from the ``xsi:type`` attribute
        # given as in the following example::
        #    <cybox:Properties xsi:type="EmailMessageObj:EmailMessageObjectType">
        #    <cybox:Properties xsi:type="AddrObj:AddressObjectType" category="ipv4-addr">
        #
        if embedded_ns:
            namespace_uri = self.namespace_dict.get(embedded_ns, "")
            type_info = search_by_re_list(self.RE_LIST_NS_TYPE_FROM_NS_URL, namespace_uri)
            if not type_info:
                type_info = {}
            if type_info and type_info.get('type',None) in ['common', 'cybox', 'stix']:
                iobject_type_name = elt_name
                iobject_type_namespace_uri = ns_info['iotype_ns']
                iobject_type_revision_name = ns_info['revision']
            else:
                iobject_type_namespace_uri = type_info.get('iotype_ns',"%s/%s" % (dingos.DINGOS_MISSING_ID_NAMESPACE_URI_PREFIX,embedded_ns))
                iobject_type_name = type_info.get('type',embedded_ns)#.split('Object')[0]
                iobject_type_revision_name = type_info.get('revision','')

        else:
            iobject_type_name = elt_name
            iobject_type_revision_name = iobject_family_revision_name
            iobject_type_namespace_uri = ns_info.get("iotype_ns", "%s/%s" % (dingos.DINGOS_MISSING_ID_NAMESPACE_URI_PREFIX,elt_name))


        if not iobject_type_revision_name:
            iobject_type_revision_name = ''

        logger.debug("Results of datatype extraction for ns %s, embedded ns %s and element name %s" % (
        embedding_ns, embedded_ns, elt_name))
        logger.debug("Family Name: %s" % iobject_family_name)
        logger.debug("Family Revision %s" % iobject_family_revision_name)
        logger.debug("Type Name %s" % iobject_type_name)
        logger.debug("Type NS URI %s" % iobject_type_namespace_uri)
        logger.debug("Type Revision %s" % iobject_type_revision_name)

        return {'iobject_type_name': iobject_type_name,
                'iobject_type_revision_name': iobject_type_revision_name,
                'iobject_type_namespace_uri': iobject_type_namespace_uri,
                'iobject_family_name': iobject_family_name,
                'iobject_family_revision_name': iobject_family_revision_name}
Derive type of information object stemming from an embedded element
        based on namespace information of embedding element, the embedded
        element itself, and the name of the element.