2017-02-26 3 views
2

私はファイルに読み込む文書を指定するクエリを持っています。Saxon 9.6HEで複数のファイルに対するxqueryの実行を自動化

私は多くのファイルに対してこのクエリを実行する必要があるので、コマンドラインからファイル名を渡すようなものが必要です。

私はこれを行う方法がわかりません。問題を解決するにはどうしたらいいですか?

私のクエリファイルの例は

for $i in doc("myfile") 
return $i 

であると私は最も簡単な方法は、クエリのコンテキスト項目としてソースドキュメントを渡すことです。このコマンドライン

#!/bin/bash 
java -cp "./tagsoup/tagsoup-1.2.1.jar:./saxon/saxon9he.jar" net.sf.saxon.Query -x:org.ccil.cowan.tagsoup.Parser $1 
+0

これらのファイルすべてに共通のディレクトリ構造はありますか?もしそうなら、ディレクトリパスを渡し、 'collection()'を使ってファイルを処理することを検討してください。 –

+1

@DanielHaleyあなたは正しいです、私はこれを私の答えに加えました。 –

+0

コレクション手法は実現不可能ですが、興味深いものです – cdarwin

答えて

2

でそれを実行していますよ。 (「」だけに簡略化された)

for $i in . return $i 

をクエリを変更し、コマンドラインで-s:source.xmlオプションでソースドキュメントを設定します。

また、たとえば、クエリで外部変数を宣言すると、コマンドラインからそれらを設定することができます

declare variable $uri external; doc($uri) 

その後、

java net.sf.saxon.Query -q:query.xq uri=source.xml 

私はあなたが管理していなかった質問から推測Saxon XQueryコマンドラインのドキュメントを探してください:ここにあります:

http://saxonica.com/documentation/index.html#!using-xquery/commandline

これはあなたの質問への直接的な回答ですが、@DanielHaleyが提案するcollection()アプローチを使用すると、Java VMを初期化して各ファイルのクエリをコンパイルするオーバーヘッドを避けることができます処理される。

関連する問題