docs: 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}