Cosminexus V9 アプリケーションサーバ Cosminexus XML Processor ユーザーズガイド

[目次][用語][索引][前へ][次へ]

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

XSLTの動作の差異を次の表に示します。

表A-5 XSLTの動作の差異(バージョン06-00とバージョン07-00以降の比較)

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/2199/XSL/Transform">
KECX02009-Eのエラーを通知します。 KECX02518-Eのエラーを通知します。
28 次の両方の条件に該当する場合
  • TransformerクラスのsetOutputPropertyメソッドでOutputKeys.DOCTYPE_SYSTEMを指定
  • TransformerクラスのsetOutputPropertyメソッドでOutputKeys.METHODに"html"を指定
生成されるDOCTYPE宣言の"HTML"が大文字になります。 生成されるDOCTYPE宣言の"HTML"が小文字になります。
29 xsl:output要素のmethod属性が"xml"で,かつversion属性に"1.1"を指定した場合 出力されるXML文書のXML宣言にversion="1.0"が出力されます。 version="1.1"が出力されます。
30 スタイルシート中に<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="#default">の定義があり,かつデフォルト名前空間の指定がない場合 errorが呼ばれ,TransformerException例外の原因の例外としてNullPointerExceptionが発生します。 errorおよびfatalErrorが呼ばれ,KECX02257-Eのエラーを通知します。

表A-6 XSLTの動作の差異(バージョン08-50とバージョン08-70以降の比較)

項番 条件 XML Processorの動作
バージョン08-50の場合 バージョン08-70以降の場合
1 XMLInputFactory.createXMLEventReader()メソッドで取得したXMLEventReaderをStAXSourceのコンストラクタ引数に指定して,Transformer.transform()メソッドの入力ソースとした場合 入力XML文書のルート要素の外側にある処理命令は無視されます。 入力XML文書のルート要素の外側にある処理命令も変換対象となります。
2 次の両方の条件に該当する場合
  • トランスフォーマの入力XML文書内の要素がXSLT以外の名前空間に属している
  • XMLEventWriterから作成したStAXResultを使用して変換している
変換中にエラーが発生するか,変換結果が不正になります。 正常に処理されます。
3 次のすべての条件に該当する場合
  • トランスフォーマのスタイルシートでxsl:sortを使った変換を実施する
  • トランスフォーマのスタイルシートのソートキーに日本語が指定されている
J2SE 5.0とJava SE 6の場合とで,ソートの出力結果が異なります。

08-70までの場合
J2SE 5.0とJava SE 6の場合とで,ソートの出力結果が異なります。

09-00以降の場合
Java SE 6だけのため,差異はありません。
4 出力メソッドがxmlで,かつ,指定した出力エンコーディングでは表現できない文字を出力する場合 J2SE 5.0とJava SE 6とで出力結果が異なる場合があります。

08-70までの場合
J2SE 5.0とJava SE 6とで出力結果が異なる場合があります。

09-00以降の場合
Java SE 6だけのため,差異はありません。