code: def loads(inputStr):
      
      inCat = json.loads(inputStr)
      assert CATALOGUE_TYPE in _values(inCat[CATALOGUE_METADATA], ISCONTENTTYPE_RELATION)
      # Manually copy mandatory fields, to check that they are they, and exclude other garbage
      desc = _values(inCat[CATALOGUE_METADATA], DESCRIPTION_RELATION)[0]  # TODO: We are ASSUMING just one description, which may not be true
      outCat = Hypercat(desc)
      for i in inCat[ITEMS]:
          href = i[HREF]
          contentType = _values(i[ITEM_METADATA], ISCONTENTTYPE_RELATION) [0]
          desc = _values(i[ITEM_METADATA], DESCRIPTION_RELATION) [0]
          if contentType == CATALOGUE_TYPE:
              r = Hypercat(desc)
          else:
              r = Resource(desc, contentType)
          outCat.addItem(r, href)
  
      return outCat
docs: Takes a string and converts it into an internal hypercat object, with some checking