docs: def add_many(self, rels):
          '''
          Add a list of relationships to the extent
  
          rels - a list of 0 or more relationship tuples, e.g.:
          [
              (origin, rel, target, {attrname1: attrval1, attrname2: attrval2}),
          ]
  
          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}
  
          you can omit the dictionary of attributes if there are none, as long as you are not specifying a statement ID
          '''
          for curr_rel in rels:
              attrs = self._attr_cls()
              if len(curr_rel) == 2: # handle __iter__ output for copy()
                  origin, rel, target, attrs = curr_rel[1]
              elif len(curr_rel) == 3:
                  origin, rel, target = curr_rel
              elif len(curr_rel) == 4:
                  origin, rel, target, attrs = curr_rel
              else:
                  raise ValueError
              assert rel
              self.add(origin, rel, target, attrs)
          return