中間 XML ファイルを使用していくつかの XSLT 変換を行う必要があります。(ファイルが必要です。実際のケースは、後のステップで中間ファイルをロードするため、もう少し注意が必要です)
first.xml ------------> intermediate.xml ------------> final.xml
first.xsl final.xsl
XProc パイプラインを作成したいと思います。次のコードを記述しようとしましたが、これによりエラーが発生します。
SCHWERWIEGEND: runxslt.xpl:26:44:err:XD0011:Could not read: intermediate.xml
17.05.2012 15:15:35 com.xmlcalabash.drivers.Main error
SCHWERWIEGEND: It is a dynamic error if the resource referenced by a p:document element does not exist, cannot be accessed, or is not a well-formed XML document.
17.05.2012 15:15:35 com.xmlcalabash.drivers.Main error
SCHWERWIEGEND: Underlying exception: net.sf.saxon.s9api.SaxonApiException: I/O error reported by XML parser processing file:/<somepath>/intermediate.xml:
/<somepath>/intermediate.xml (No such file or directory)
(SCHWERWIEGEND は FATAL のようなものを意味します) したがって、明らかにファイルintermediate.xml
は書き込まれていません。
これはxpl
私が使用したドキュメントです:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source">
<p:document href="first.xml"/>
</p:input>
<p:output port="result" sequence="true">
<p:empty/>
</p:output>
<p:xslt name="first-to-intermediate">
<p:input port="stylesheet">
<p:document href="first.xsl"/>
</p:input>
<p:input port="parameters">
<p:empty/>
</p:input>
</p:xslt>
<p:store href="intermediate.xml" />
<p:xslt>
<p:input port="source">
<p:document href="intermediate.xml"/>
</p:input>
<p:input port="stylesheet">
<p:document href="final.xsl"/>
</p:input>
<p:input port="parameters">
<p:empty/>
</p:input>
</p:xslt>
<p:store href="final.xml"/>
</p:declare-step>
完全を期すために、これらは変換ファイルです。
ソース.xml:
<root>
<element name="A" />
</root>
最初の.xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="root">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="element">
<intermediate name="A" />
</xsl:template>
</xsl:stylesheet>
final.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="root">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="intermediate">
<final name="A" />
</xsl:template>
</xsl:stylesheet>
実際のアプリケーションに関する注意事項を次に示します (上記はもちろん簡略化したものです)。
- 最初のステップ: ソースを処理に適したものに変換します。出力:
companies.xml
- 手順 1 の出力を取得し、そこからインデックス ファイル (
index.xml
) を作成します。インデックス ファイルは手動で編集できる必要があります。 - 3 番目のステップは、ステップ 1 と 2 で作成されたファイルをマージし、最終的な xml (
final.xml
)を作成することです。
インデックス ファイルはディスクに書き込まれる必要があり、最後のステップを単独で実行できる必要があります (これは別の問題です。別のパイプラインを作成します)。
(ステップ 1)の出力companies.xml
はオプションであり、メモリに保存できます (ただし、大きくなる可能性があります)。