Zorba XQueryプロセッサ(v2.6.0)で巨大なxmlファイル(GB)をクエリするために、phpでアプリケーションを作成しています。そのために、ここで説明する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ブラウザに何も返さないだけです。
問題は、インポートなしで単純なクエリを実行すると名前空間がインポートされないことです。インポートは正常に実行され、インポート文を追加すると失敗します。失敗すると、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変換ではない可能性があります