Проверка SVG-файла в PHP с помощью XMLReader

Я проверяю документ 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 :

  • SVG.xsd
  • xlink.xsd
  • xml.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 .

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