|
Contents
5 複数ファイルへの出力
7 XPathによる様々な表記
|
5 複数ファイルへの出力一つのXMLファイルからいくつかのファイルを作成したいことが良くあります。たとえば、各章ごとにファイルを分割したいときや、フレームを使ったHTMLファイルを出力したい場合などがあげられます。 これまで、多くの処理系では独自に複数ファイルへの出力機能を提供してきました。例えば、Xalanではredirect:open, redirect:write, redirect:closeによって提供されていました。 XSLT2.0では、標準的な複数ファイル出力機能として、新たにxsl:principal-result-documentエレメントとxsl:result-documentエレメントが定義されています。前者は、xsl:outputと同様にxsl:style-sheetの子として定義し、href属性でデフォルトの出力先を指定します。後者はどこにおいても良く、このタグで囲まれた内容はhref属性で指定された名前のファイルに出力されます。。これをみると、「出力ファイルは基本的には一つだが、それ以外のファイルにも出力できる」という方針なのですね。 現在ある唯一のXSLT2.0処理系であるSAXON7系列では、xsl:principal-result-documentエレメントを指定するとエラーになります。SAXON7.xは「xsl:principal-result-documentエレメントを実装してある」とアナウンスしておりますが(※1)、実際にはXSLT2.0の2001年12月20日付けのdraftでのエレメント名xsl:destination(※2)として実装されています(※3)。 SAXONではxsl:destinationは無視されます(※4)。そのため、principal-result-documentはコマンドラインで設定された出力先となります。しかし、ここに一つ落とし穴があります。多くの場合、コマンドラインでは出力先をリダイレクトで指定していると思いますが、リダイレクトだとSAXONが出力先ファイルを特定できず、「The system identifier of the principal output file is unknown」というエラーが発生します。これを回避するには、コマンドラインの-o filenameオプションで出力先を明示する必要があります(※5)
※1 SAXON 7.1: Standards Conformance |