PHP xmlreader: как кэшировать схему xsd? - PullRequest
4 голосов
/ 26 июля 2011

Я использую PHP xmlreader для проверки и анализа данных XML.Этот xml проверяется с помощью некоторой xsd-схемы из локального файла через функцию XMLReader :: setSchema и удаленной xsd-схемы из http: // через xsd: import / include.Все работает нормально, но он извлекает схему xsd из сети и читает с диска каждый раз при вызове.

Итак, мои вопросы:

Есть ли способ кэширования удаленной схемы xsd в локальной оперативной памяти?Для локальных файлов схемы, я думаю, что tmpfs в Linux будет работать нормально, но есть ли другой способ кэшировать локальные файлы схемы xsd?

Решение

Спасибо VolkerK за указаниесистема xmlcatalog.Он прекрасно работает с libxml / php xmlreader.В Linux просто отредактируйте файл / etc / xml / catalog (это происходит из xml-common, когда вы находитесь в Fedora), добавьте некоторые записи, например (например):

<rewriteURI uriStartString="http://schemas.xmlsoap.org/soap/envelope/" rewritePrefix="/etc/xml/SOAP-Envolope.xsd"/>
<rewriteURI uriStartString="http://schemas.xmlsoap.org/soap/encoding/" rewritePrefix="/etc/xml/SOAP-Encoding.xsd"/>

и схему загрузки вручную (например, http://schemas.xmlsoap.org/soap/encoding/ -> /etc/xml/SOAP-Encoding.xsd), тогда php xmlreader работает, как и ожидалось, при разборе SOAP-сообщений.

1 Ответ

3 голосов
/ 26 июля 2011

php xmlreader использует libxml , а libxml поддерживает xml catalouges :

Что такое каталог? По сути, это механизм поиска [...]
Он в основном используется для 3 вещей:
[...]
  • , обеспечивающий механизм локального кэша, позволяющий загружать объекты, связанные с общедоступными идентификаторами или удаленными ресурсами, это действительно важная функция для любого значительного развертывания XML или SGML, поскольку она позволяет избежать проблем и задержек, связанных с извлечением удаленные ресурсы.

Не пробовал, но, думаю, стоит попробовать.

...