public static function validate($input)
    {
        if (is_string($input)) {
            $doc = new DOMDocument();
            $doc->preserveWhiteSpace = false;

            if (!@$doc->loadXML($input)) {
                throw InvalidXmlException::lastError();
            }

            $input = $doc;
        } elseif (!($input instanceof DOMDocument)) {
            throw InvalidArgumentException::create(
                'The $input argument must be an instance of DOMDocument, %s given.',
                gettype($input)
            );
        }

        if (!@$input->schemaValidate(self::SCHEMA)) {
            throw InvalidXmlException::lastError();
        }
    }