Пробовал использовать XSD схему, но тоже при всех попытках получал true.
Поэтому решил вопрос скачиванием архива на сервер и параллельно проверкой его на правильность.
private function upload($uri, $temp)
{
if (preg_match('/[^\/]+(.(gz)|(bz2))$/i', $uri, $match)) {
$compress = array(
'.gz' => 'compress.zlib://',
'.bz2' => 'compress.bzip2://'
);
$source = $compress[ $match[1] ] . $uri;
} else {
$source = $uri;
}
$hR = fopen($source, "r");
$hW = fopen($temp, "w");
$part = 0;
while ( ! feof($hR)) {
$str = fread($hR, 1024);
if ($part == 0 && stripos($str, '<?xml') === false) {
throw new \Exception('Передаваемый файл не XML.');
}
fwrite($hW, $str, strlen($str));
$part++;
}
fclose($hW);
fclose($hR);
}