0

バッチ/シェル スクリプトを使用する代わりに、XProc を介して変換を実行したいだけです。

私の変換プロセスは、入力ドキュメントと出力ドキュメントの単純な連結であるため、変換 1 の出力は変換 2 の入力になります。変換 2 の出力は変換 3 の入力になります。

次のコードは、変換の例を示しています。

<p:xslt name="Transformation1">
    <p:input port="source">
        <p:document href="input.xml"/>
    </p:input>
    <p:input port="stylesheet">
        <p:document href="trans1.xsl"/>
    </p:input>
    <p:input port="parameters">
        <p:empty/>
    </p:input>
</p:xslt>

<p:store href="output1.xml"/> 

<p:xslt name="Transformation2">
    <p:input port="source">
        <p:pipe step="Transformation1" port="result"/>
    </p:input>
    <p:input port="stylesheet">
        <p:document href="trans2.xsl"/>
    </p:input>
    <p:input port="parameters">
        <p:empty/>
    </p:input>
</p:xslt>

<p:store href="output2.xml"/>

それは機能し、さらに、すべての一時的な結果ドキュメントを取得して、各 XSLT スクリプトの機能を再確認しました。XProc スクリプトは常に最初から開始されるため、複雑で複数の変換を処理すると速度が低下します。しかし、変換 4 で何かを修正したいだけです。通常は (バッチ/シェルを使用して) 変換 4 の出力を削除し、XSLT スクリプトを修正し、if-test の代わりに以前のすべての変換をスキップします (例: output3.xml が存在する場合)。後藤変換 4)。XProc スクリプトでこれを行う方法は?

XPath パターンは次のとおりnot(doc-available(‘output1.xml’))です。ap:choose を使用しようとしましたが、p:otherwise の出力パイプラインがなく、プロセスは常に失敗します。p:choose を使用しても、必要な解決策が得られないと思いますか?

何か案は?

敬具 オリバー

4

1 に答える 1

0

最初の xslt をスキップしたいのですが、その出力を取得する必要があるため、少し厄介です。これを行う唯一の方法は、存在する場合に output1.xml を明示的に読み取ることです。多かれ少なかれ次のようにすることができます:

<p:choose name="Transformation1">
    <p:when test="doc-available('output1.xml')">
        <p:output port="result">
            <p:pipe step="Transformation1-a" port="result"/>
        </p:output>
        <p:identity name="Transformation1-a">
            <p:input port="source">
                <p:document href="output1.xml"/>
            </p:input>
        </p:identity>
    </p:when>
    <p:otherwise>
        <p:output port="result">
            <p:pipe step="Transformation1-b" port="result"/>
        </p:output>
        <p:xslt name="Transformation1-b">
            <p:input port="source">
                <p:document href="input.xml"/>
            </p:input>
            <p:input port="stylesheet">
                <p:document href="trans1.xsl"/>
            </p:input>
            <p:input port="parameters">
                <p:empty/>
            </p:input>
        </p:xslt>

        <p:store href="output1.xml"/> 
    </p:otherwise>
</p:choose>

<p:xslt name="Transformation2">
    <p:input port="source">
        <p:pipe step="Transformation1" port="result"/>
    </p:input>
    <p:input port="stylesheet">
        <p:document href="trans2.xsl"/>
    </p:input>
    <p:input port="parameters">
        <p:empty/>
    </p:input>
</p:xslt>

<p:store href="output2.xml"/>

チッ!

于 2012-09-10T15:21:01.423 に答える