input: from typing import List
  
  def parse_xml(text: str) -> List[Tag]:
      """ Parses an XML document and returns a list of Tag objects, where each Tag object corresponds to a child element with an 'id' attribute, and contains a list of values corresponding to the 'value' attributes of its subchild elements.
      >>> xml_text = '''
      ... <xml>
      ...   <root>
      ...     <child1 id="1">
      ...       <subchild1 value="a"></subchild1>
      ...       <subchild2 value="b"></subchild2>
      ...     </child1>
      ...     <child2 id="2">
      ...       <subchild3 value="c"></subchild3>
      ...       <subchild4 value="d"></subchild4>
      ...     </child2>
      ...   </root>
      ... </xml>
      ... '''
      >>> parse_xml(xml_text)
      [('1', ['a', 'b']), ('2', ['c', 'd'])]
      """
      
      tag_objects = []
  
      root = ET.fromstring(text)
      for child in root:
          tag = Tag(child.attrib["id"])
          for subchild in child:
              tag.add_value(subchild.attrib["value"])
          tag_objects.append((tag.tag_id, tag.values))
  
      return tag_objects
output:     
      import xml.etree.ElementTree as ET
  
      class Tag:
          def __init__(self, tag_id):
              self.tag_id = tag_id
              self.values = []
  
          def add_value(self, value):
              self.values.append(value)
  
      tag_objects = []
  
      root = ET.fromstring(text)
      for child in root:
          tag = Tag(child.attrib["id"])
          for subchild in child:
              tag.add_value(subchild.attrib["value"])
          tag_objects.append((tag.tag_id, tag.values))
  
      return tag_objects
  