Проверка файла SVG в PHP с помощью XMLReader - PullRequest
3 голосов
/ 11 марта 2012

Я проверяю документ SVG (который я считаю действительным) по спецификации SVG.Я использую XMLReader в PHP, и предпочел бы придерживаться этого, так как я буду использовать XMLReader в другом месте;Тем не менее, если есть другие потоковые программы чтения, которые будут делать это проще / лучше, дайте мне знать.

ОК, вот код:

    // Set some values for the purpose of this example
    $this->path = '/Users/jon/Development/Personal/Visualised/master/test-assets/import-png.svg';
    $xsdPath = '/Users/jon/Development/Personal/Visualised/master/test-assets/xsd/SVG.xsd';

    $reader = new XMLReader();
    $reader->open($this->path);
    $valid = $reader->setSchema($xsdPath);
    $reader->close();

ОК, так что XSDВ папке xsd находятся следующие файлы:

Кажется, что анализатор импортирует второй и третий XSD из первого - я хочу, чтобы все зависимости были сохранены на диске, а не извлечены из Интернета.

Хорошо, вот вывод:

    XMLReader::setSchema(): Element '{http://www.w3.org/2001/XMLSchema}import': Skipping import of schema located at '/Users/jon/Development/Personal/Visualised/master/test-assets/xsd/xml.xsd' for the namespace 'http://www.w3.org/XML/1998/namespace', since this namespace was already imported with the schema located at 'http://www.w3.org/2001/xml.xsd'. in /Users/jon/Development/Personal/Visualised/master/lib/Visualised/Document.php on line 45

    Warning: XMLReader::setSchema(): Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'type' is not allowed. in /Users/jon/Development/Personal/Visualised/master/lib/Visualised/Document.php on line 45

    Warning: XMLReader::setSchema(): Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'type' is not allowed. in /Users/jon/Development/Personal/Visualised/master/lib/Visualised/Document.php on line 45

    Warning: XMLReader::setSchema(): Element '{http://www.w3.org/2001/XMLSchema}attribute': The attribute 'type' is not allowed. in /Users/jon/Development/Personal/Visualised/master/lib/Visualised/Document.php on line 45

    Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in /Users/jon/Development/Personal/Visualised/master/lib/Visualised/Document.php on line 45

Похоже, что я импортировал неправильную версию схемы куда-то - я нашел все документы XSD только через веб-поиск.Любые идеи?

Редактировать: последняя ошибка предполагает, что схема должна быть установлена ​​до чтения документа.Итак, я изменил код на это:

$reader = new XMLReader();
$valid = $reader->setSchema($xsdPath);
$reader->open($this->path);
$reader->close();

- некоторые из начальных предупреждений идут, но я все еще получаю Unable to set schema.

1 Ответ

1 голос
/ 14 марта 2012

XSD-файл для SVG, на который вы ссылаетесь, взят из старой рабочей версии SVG 1.1. В настоящее время нет официально поддерживаемой XML-схемы для SVG 1.1. Пожалуйста, смотрите этот ответ для более подробной информации.

...