docs: def prepare(self, strict=True):
          """ preparation for loaded json
  
          :param bool strict: when in strict mode, exception would be raised if not valid.
          """
  
          self.__root = self.prepare_obj(self.raw, self.__url)
          self.validate(strict=strict)
  
          if hasattr(self.__root, 'schemes') and self.__root.schemes:
              if len(self.__root.schemes) > 0:
                  self.__schemes = self.__root.schemes
              else:
                  # extract schemes from the url to load spec
                  self.__schemes = [six.moves.urlparse(self.__url).schemes]
  
          s = Scanner(self)
          s.scan(root=self.__root, route=[Merge()])
          s.scan(root=self.__root, route=[PatchObject()])
          s.scan(root=self.__root, route=[Aggregate()])
  
          # reducer for Operation
          tr = TypeReduce(self.__sep)
          cy = CycleDetector()
          s.scan(root=self.__root, route=[tr, cy])
  
          # 'op' -- shortcut for Operation with tag and operaionId
          self.__op = utils.ScopeDict(tr.op)
          # 'm' -- shortcut for model in Swagger 1.2
          if hasattr(self.__root, 'definitions') and self.__root.definitions != None:
              self.__m = utils.ScopeDict(self.__root.definitions)
          else:
              self.__m = utils.ScopeDict({})
          # update scope-separater
          self.__m.sep = self.__sep
          self.__op.sep = self.__sep
  
          # cycle detection
          if len(cy.cycles['schema']) > 0 and strict:
              raise errs.CycleDetectionError('Cycles detected in Schema Object: {0}'.format(cy.cycles['schema']))