docs: def add(self, origin, rel, target, attrs=None):
          '''
          Add one relationship to the model
  
          origin - origin of the relationship (similar to an RDF subject)
          rel - type IRI of the relationship (similar to an RDF predicate)
          target - target of the relationship (similar to an RDF object), a boolean, floating point or unicode object
          attrs - optional attribute mapping of relationship metadata, i.e. {attrname1: attrval1, attrname2: attrval2}
          '''
          if not origin: 
              raise ValueError('Relationship origin cannot be null')
          if not rel: 
              raise ValueError('Relationship ID cannot be null')
  
          attrs = attrs or {}
  
          origin_item = self._db_coll.find_one({'origin': origin})
          rel = self._abbreviate(rel)
          target = self._abbreviate(target)
          rel_info = {'rid': rel, 'instances': [[target, attrs]]}
          if origin_item is None:
              self._db_coll.insert_one(
                  {
                      'origin': origin,
                      'rels': [rel_info],
                  }
              )
          else:
              origin_item['rels'].append(rel_info)
              self._db_coll.replace_one(
                  {'origin': origin}, origin_item
              )
          return