docs: def to_json(el, schema=None):
      """Convert an element to VDOM JSON
  
      If you wish to validate the JSON, pass in a schema via the schema keyword
      argument. If a schema is provided, this raises a ValidationError if JSON
      does not match the schema.
      """
      if type(el) is str:
          json_el = el
      elif type(el) is list:
          json_el = list(map(to_json, el))
      elif type(el) is dict:
          assert 'tagName' in el
          json_el = el.copy()
          if 'attributes' not in el:
              json_el['attributes'] = {}
          if 'children' not in el:
              json_el['children'] = []
      elif isinstance(el, VDOM):
          json_el = el.to_dict()
      else:
          json_el = el
  
      if schema:
          try:
              validate(instance=json_el, schema=schema, cls=Draft4Validator)
          except ValidationError as e:
              raise ValidationError(_validate_err_template.format(schema, e))
  
      return json_el