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.

Author: hdang, 2011-07-26

1 answers

Xmlreader Php использует libxml, а libxml поддерживает xml-каталоги:

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

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

 3
Author: VolkerK, 2011-07-26 07:47:43