Constructor @param parent If first is String, it must be String and set to
external_id. Otherwise, it is set as the parent of this object. @param
first can be multiple types. If String, name is set to this and external_id
is set to nil. If DocType, the object is cloned.
If Source, the source is scanned for the DOCTYPE