1

我正在用 php 编写一个应用程序来使用 Zorba XQuery 处理器(v2.6.0)查询巨大的 xml 文件(GB),为此我正在尝试使用此处描述的 XML 流:

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 处理器 2.6.0\share\zorba\uris\core\2.6.0\org\expath\ns\file.xq

我正在 Windows 上开发,并为 Apache 和 PHP 使用标准 WAMP 安装。

有人知道我的代码或环境有什么问题吗?

编辑:我刚刚注意到查询从命令行运行正常,所以可能不是 URI 转换

4

0 回答 0