PHP xmlreader: Как кэшировать схему xsd?
Я использую PHP xmlreader для проверки и анализа xml-данных. Этот xml проверяется с помощью некоторой схемы xsd из локального файла с помощью функции XmlReader::setSchema и удаленной схемы xsd с http://через xsd:импорт/включение. Все работает нормально, но он извлекает схему xsd из сети и читает с диска каждый раз при вызове.
Итак, мои вопросы таковы:
Существует ли способ кэширования удаленной схемы xsd в локальной оперативной памяти? Для файлов локальной схемы я думаю, что tmpfs в Linux будет работать нормально, но есть другой способ кэшировать локальные файлы схемы xsd?
Решение
Поблагодарите Фолькерка за то, что он указал на систему xmlcatalog. Он отлично работает с libxml/php xmlreader. В Linux просто отредактируйте файл /etc/xml/каталог (он взят из xml-общего, когда вы находитесь в 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 answers
Xmlreader Php использует libxml, а libxml поддерживает xml-каталоги:
Что такое каталог? В основном это механизм поиска [...]
Он в основном используется для 3 вещей:
[...]
- предоставляя механизм локального кэша, позволяющий загружать объекты, связанные с общедоступными идентификаторами или удаленными ресурсами, это действительно важная функция для любого значительного развертывания XML или SGML, поскольку она позволяет избежать сбоев и задержек, связанных с извлечение удаленных ресурсов.
Еще не пробовал, но, думаю, стоит попробовать.