付録A.5 XSLTの動作の差異

XSLTの動作の差異を表A-5に示します。

表A-5 XSLTの動作の差異

項番動作の差異
1TransformクラスおよびTransformerFactoryクラスのデフォルトのエラーリスナーは,06-00ではエラー時に例外をスローしますが,07-00以降ではエラー時に例外をスローしません。
2TransformerFactoryクラスのnewTransformer(Source source)メソッド, newTemplatesメソッドを実行したとき,これらのメソッドの入力であるスタイルシートに誤りがあると,ErrorListenerのfatalErrorメソッドにエラーが報告されます。このとき,ErrorListenerのfatalErrorメソッドの実装がTransformerExceptionをスローしない場合は,newTransformer(Source source)メソッド,newTemplatesメソッドの戻り値がnullになる場合がありますのでご注意ください。デフォルトの ErrorListenerは,TransformerExceptionをスローしません。したがって,回復できないエラー発生時の正常な動作を確保するため,ErrorListenerを登録してfatalErrorメソッドの中からTransformerException例外をスローすることを強くお勧めします。
3XMLをファイルに出力する際,xsl:output要素にindent="yes"が指定されていないか,または,TransformクラスのsetOutputProperty(OutputKeys.INDENT, "yes")メソッドが実行されていないとき,出力結果が異なります。06-00ではXML宣言の直後に改行が出力されますが,07-00以降では出力されません。
4変換結果をHTML形式で出力した場合,06-00と07-00以降とでは要素間の改行出力に差異があります。ただし,HTML文書では,要素間の改行は意味を持たないため問題ありません。
5system-property('xsl:version')関数を実行したとき,06-00では結果は"1"になりますが,07-00以降では"1.0"になります。
6xsl:attribute要素の内容がタブを含む文字列のとき,06-00では変換結果の属性値がタブ文字そのものになりますが,07-00以降では文字参照(	)になります。
7xsl:number要素のvalue属性にgenerate-id()関数を使用したとき,06-00では"0"が出力されますが,07-00以降では"NaN"が出力されます。
8xsl:stylesheet要素の名前空間宣言で定義した接頭辞が,xsl:element要素によって作成された要素の中で使われないとき,06-00ではその名前空間宣言がxsl:element要素に出力されますが,07-00以降では出力されません。
9xsl:version属性に"1.1"を指定した簡略化スタイルシートの中にトップレベル要素を記述したとき,前方互換処理の動作が異なります。06-00ではトップレベル要素がインスタンス化されて変換が実行されますが,07-00以降ではトップレベル要素が無視されます。
10xsl:attribute-set要素のuse-attribute-sets属性に「存在しない属性セット名」を指定したとき,06-00ではエラーになりませんが,07-00以降では属性セットが存在しない旨のエラーになります。
11xsl:template要素にname属性,match属性のどちらも指定されていない場合,06-00ではエラーになりませんが,07-00以降ではname属性かmatch属性のどちらかが必要な旨のエラーになります。
12exclude-result-prefixes属性で指定された「除外する名前空間の接頭辞」が,xsl:stylesheet要素の名前空間宣言で定義されていないとき,06-00ではエラーになりませんが,07-00以降ではエラーになります。
13xsl:stylesheet要素のversion属性に数値以外を指定したとき,06-00ではエラーになりませんが,07-00以降ではエラーになります。
14xsl:output要素のmethod属性に"xml"を指定し,かつ,xsl:output要素のversion属性に"1.0","1.1"以外を指定したとき,06-00ではワーニングは発生しませんが,07-00以降では"1.0"を仮定する旨のワーニングが発生します。
15テキスト出力で,出力時のエンコーディングでは表現できない文字を出力するとき,06-00では文字化けとなりますが,07-00以降では標準エラー出力にワーニングが出力され,その文字は文字参照として出力されます。
16Transformクラスのtransform(Source xmlSource, Result outputTarget)メソッドの引数xmlSourceに空のSourceを指定した場合,06-00ではエラーになりますが,07-00以降ではDocumentBuilderクラスのnewDocumentメソッドで生成された空のドキュメントが使われます。
17TransformerFactoryクラスのgetFeatureメソッドの引数にnullを指定した場合,06-00ではfalseが戻りますが,07-00以降ではNullPointerException例外が発生します。
18名前空間宣言のない接頭辞があるとき,06-00ではTransformerException例外が発生しますが,07-00以降ではXPathStylesheetDOM3Exception例外が発生する場合があります。この例外はTransformerException例外のサブクラスなので,TransformerExceptionによりキャッチできます。
19StreamResultクラスのStreamResult(File f)コンストラクタ,および,setSystemId(File f) メソッドの引数fにnullを指定したとき,06-00ではNullPointerException例外が発生しますが,07-00以降ではRuntimeException例外が発生します。
20xsl:call-template要素のname属性で指定した名前付きテンプレートが存在しない場合,06-00ではエラーKECX02019-Eを通知していましたが,07-00ではエラーKECX02019-Eに加えてエラーKECX02015-Eを通知するようになります。
21「namespace::局所名」を含むXPath式の評価結果は,06-00と07-00以降で差異があります。06-00では,局所名を接頭辞と見なして名前空間URIを解決し,その名前空間URIに一致する文字列値を持つ名前空間ノードが評価結果になります。07-00では,指定した局所名を持つ名前空間ノードが評価結果になります。