docs: def add_node_element(self, node):
          """Add a (syntax category) <node> to the document graph.
  
          Parameters
          ----------
          node : etree.Element
              etree representation of a <node> element
              A <node> describes an element of a syntax tree.
              The root <node> element does not have a parent attribute,
              while non-root nodes do
  
          Example
          -------
          <node xml:id="s1_505" cat="SIMPX" func="--">
              <node xml:id="s1_501" cat="LK" func="-" parent="s1_505">
  
              # this is the root of the syntax tree of the sentence, but
              # it is not the root node of the sentence, since there might
              # be nodes outside of the tree which are children of the
              # sentence root node (e.g. <word> elements representing a
              # quotation mark)
  
          """
          node_id = self.get_element_id(node)
          if 'parent' in node.attrib:
              parent_id = self.get_parent_id(node)
          else:
              # <node> is the root of the syntax tree of a sentence,
              # but it might be embedded in a <edu> or <edu-range>.
              # we want to attach it directly to the <sentence> element
              parent_id = self.get_sentence_id(node)
          self.add_node(node_id, layers={self.ns, self.ns+':syntax'},
                        attr_dict=self.element_attribs_to_dict(node),
                        label=node.attrib['cat'])
          self.add_edge(parent_id, node_id, edge_type=dg.EdgeTypes.dominance_relation)