input: Write a function to parse an XML document and return a list of tag objects, where each tag object contains an id and a list of its subchild values. The function should take in the XML document as a string and should use the `ElementTree` module from the `xml.etree.ElementTree` library. If the XML document is empty, return an empty list.
  
  assert parse_xml('<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>') == [Tag('1', ['a', 'b']), Tag('2', ['c', 'd'])]
  assert parse_xml('') == []
output: def parse_xml(xml_str):
      if not xml_str:
          return []
      from xml.etree import ElementTree as ET
      root = ET.fromstring(xml_str)
      tags = []
      for child in root.findall('.//child'):
          tag_id = child.get('id')
          subchild_values = [subchild.get('value') for subchild in child.findall('subchild')]
          tags.append(Tag(tag_id, subchild_values))
      return tags