PHP xmlreader:如何缓存xsd模式?

PHP xmlreader:如何缓存xsd模式?,php,caching,xsd,schema,xmlreader,Php,Caching,Xsd,Schema,Xmlreader,我正在使用PHP xmlreader验证和解析xml数据。通过XMLReader::setSchema函数和http://via-xsd:import/include的远程xsd模式从本地文件验证此xml。所有这些都可以正常工作,但每次调用时都会从网络获取xsd模式并从磁盘读取 所以我的问题是: 是否有在本地RAM中缓存远程xsd模式的方法? 对于本地模式文件,我认为Linux中的tmpfs可以正常工作,但是是否有其他方法可以缓存本地xsd模式文件 解决方案 感谢VolkerK指出xmlcata

我正在使用PHP xmlreader验证和解析xml数据。通过XMLReader::setSchema函数和http://via-xsd:import/include的远程xsd模式从本地文件验证此xml。所有这些都可以正常工作,但每次调用时都会从网络获取xsd模式并从磁盘读取

所以我的问题是:

是否有在本地RAM中缓存远程xsd模式的方法? 对于本地模式文件,我认为Linux中的tmpfs可以正常工作,但是是否有其他方法可以缓存本地xsd模式文件

解决方案

感谢VolkerK指出xmlcatalog系统。它可以与libxml/phpxmlreader配合使用。在Linux中,只需编辑文件/etc/xml/catalog(当您在Fedora时,它来自xml common),添加一些条目,如(例如):


和手动下载模式(例如->/etc/xml/SOAP Encoding.xsd),则php xmlreader在解析SOAP消息时可以像预期的那样工作。

php的xmlreader使用并且支持:

什么是目录?基本上它是一种查找机制[…]
它主要用于三个方面:
[…]
  • 提供本地缓存机制,允许加载与公共标识符或远程资源关联的实体,这对于任何重要的XML或SGML部署都是非常重要的功能,因为它允许避免与获取远程资源相关的ALEA和延迟。

    • 还没有试过,但我想值得一试。

      这个问题是关于
      setSchema('localfile')与setSchema('localfile')的“唯一”问题吗http://something“)
      还是xsd:import/include要缓存的其他架构文件?当然,对于setSchema('http://'),它是xsd:import/include实现我自己的缓存系统很容易。创建/etc/catalog。2. <代码>xmlcatalog--create--noout--add“rewriteURI”http://schemas.xmlsoap.org/soap/envelope/" \ "file:///etc/xml/soap-envelope-1.1.xsd“\/etc/xml/catalog3。重启apache,声音非常好。如果php xmlreader使用xmlcatalog,似乎不仅可以解决缓存问题,还可以解决我的模式版本问题,因为(据我所知)我不想显式调用setSchema函数来加载我自己的shema(这里的问题是我不知道要加载哪个版本的模式),只需在catalog中定义并让libxml自动查找它!对吗?我会尽快尝试和反馈,谢谢!
      <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"/>