docs: def add_edu(self, edu):
          """
          Parameters
          ----------
          edu : etree.Element
              etree representation of a <edu> element
              (annotates an EDU)
              Note: the arg1 EDU has a discRel child, the arg2 doesn't
  
          Example
          -------
          <edu xml:id="edu_55_21_1">
           <discRel relation="Explanation-Cause" marking="-|*um zu" arg2="edu_55_21_2"/>
           <word xml:id="s905_9" form="und" pos="KON" lemma="und" func="-" parent="s905_526" dephead="s905_3" deprel="KON"/>
           <node xml:id="s905_525" cat="FKONJ" func="KONJ" parent="s905_526" span="s905_10..s905_19">
  
          ...
  
         <edu xml:id="edu_55_21_2" span="s905_14..s905_20">
          <node xml:id="s905_524" cat="NF" func="-" parent="s905_525">
          """
          edu_id = self.get_element_id(edu)
          edu_attribs = self.element_attribs_to_dict(edu) # contains 'span' or nothing
          self.add_node(edu_id, layers={self.ns, self.ns+':edu'}, attr_dict=edu_attribs)
  
          edu_token_ids = []
          for word in edu.iterdescendants('word'):
              word_id = self.get_element_id(word)
              edu_token_ids.append(word_id)
              self.add_edge(edu_id, word_id, layers={self.ns, self.ns+':edu'},
                            edge_type=dg.EdgeTypes.spanning_relation)
  
          self.node[edu_id]['tokens'] = edu_token_ids