我正在用PHP编写一个应用程序来使用Zorba XQuery处理器(v2.6.0)查询大型xml文件(GB)并且这样做我正在尝试使用此处描述的XML Streaming:
http://www.zorba-xquery.com/html/entry/2012/05/31/XML_Streaming
以下是代码:
<?php
require_once 'XQueryProcessor.php';
$xquery = new XQueryProcessor();
$query = '
import module namespace file = "http://expath.org/ns/file";
import module namespace p = "http://www.zorba-xquery.com/modules/xml";
import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";:)
let $raw-data as xs:string := file:read-text("C:\TEMP\traces\2011_03\Orders201103.xml")
let $pages := p:parse($raw-data, <opt:options>
<opt:parse-external-parsed-entity opt:skip-root-nodes="1"/>
</opt:options>)
for $page in $pages
return
$page
';
$xquery->importQuery($query);
$result = $xquery->execute();
echo $result;
?>
上面的代码不起作用。没有错误代码,没有堆栈跟踪,根本不会向Web浏览器返回任何内容。
我认为问题在于它没有导入名称空间,因为当我执行一个没有导入的简单查询时,它会成功地执行它,当我添加导入语句时,它会失败。当它失败时,网络浏览器会告诉我,如果URI没有找到资源,请按此处说明:
如果在搜索所有URI路径目录后,找不到给定URI的匹配项,Zorba默认会回退到将URI解释为URL并通过HTTP加载资源(假设URI具有http) :计划)
http://www.zorba-xquery.com/html/documentation/2.7.0/zorba/uriresolvers
我还查看了zorba安装文件夹以及导入URI的转换方式(在上面的链接中),似乎一切正常。
例如,文件模块位于以下路径中(请注意它是核心模块):
C:\ Program Files \ Zorba XQuery Processor 2.6.0 \ share \ zorba \ uris \ core \ 2.6.0 \ org \ expath \ ns \ file.xq
我正在开发Windows并使用Apache和PHP的标准WAMP安装。
有人知道我的代码或环境有什么问题吗?
编辑:我刚刚注意到查询从命令行运行正常,所以可能不是URI转换