XslTransform クラスの随意動作の実装
更新 : November 2007
メモ : |
---|
.NET Framework version 2.0 では、XslTransform クラスが廃止されています。XslCompiledTransform クラスを使用して XSLT (Extensible Stylesheet Language for Transformations) 変換を実行できます。詳細については、「XslCompiledTransform クラスの使用」および「XslTransform クラスからの移行」を参照してください。 |
随意動作とは、W3C (World Wide Web Consortium) 勧告『XSL Transformations (XSLT) Version 1.0』(www.w3.org/TR/xslt) で列挙されている動作で、ある状況に対処する手段として、実装プロバイダが複数のオプションから 1 つ選択するものです。たとえば、W3C Recommendation は、セクション 7.3「Creating Processing Instructions」で、xsl:processing-instruction の内容をインスタンス化したときに、テキスト ノード以外のノードが作成されるのはエラーであるとしています。いくつかの問題に関しては、プロセッサがエラー状態から回復するときにどのような対処をするべきかを、W3C が規定しています。セクション 7.3 に記述されている問題に関しては、W3C では、作成されたノードとその内容を無視することで、このエラーから回復できるとしています。
W3C で許可されている随意動作について、.NET Framework の XslTransform クラスに実装されている随意動作と、その問題について記述している W3C 勧告『XSLT 1.0』のセクションを次の表に示します。
問題 |
動作 |
セクション |
---|---|---|
テキスト ノードが xsl:strip-space と xsl:preserve-space の両方に適合している。 |
復元 |
3.4 |
ソース ノードが複数のテンプレート規則に適合している。 |
復元 |
5.5 |
1 つの名前空間 URI (Uniform Resource Identifier) が同じインポート優先順位を持つ複数の名前空間 URI のエイリアスとして宣言されている。 |
復元 |
7.1.1 |
属性値テンプレートから生成された xsl:attribute と xsl:element 内の名前属性が有効な QName (修飾名) ではない。 |
例外をスロー |
7.1.2 および 7.1.3 |
要素ノードに子ノードが既に追加されているにもかかわらず、その要素に属性が追加される。 |
復元 |
7.1.3 |
要素ノード以外のノードに属性が追加される。 |
復元 |
7.1.3 |
xsl:attribute 要素のコンテンツをインスタンス化してもテキスト ノードが作成されない。 |
復元 |
7.1.3 |
2 つの属性セットが同じインポート優先順位と展開名を持っている。両方が同じ属性を持っており、同じ名前を持ち、より重要度の高い共通の属性が含まれた属性セットが他にない。 |
復元 |
7.1.4 |
xsl:processing-instruction 名前属性が NCName (コロンが含まれていない名前) も処理命令ターゲットも生成しない。 |
復元 |
7.3 |
xsl:processing-instruction の内容をインスタンス化すると、テキスト ノード以外のノードが作成される。 |
復元 |
7.3 |
xsl:processing-instruction の内容をインスタンス化した結果に文字列 "?>" が含まれている。 |
復元 |
7.3 |
xsl:comment の内容をインスタンス化した結果に文字列 "--" が含まれているか、結果が "-" で終了している。 |
復元 |
7.4 |
xsl:comment の内容をインスタンス化した結果、テキスト ノード以外のノードが作成される。 |
復元 |
7.4 |
変数バインディング要素内のテンプレートが属性ノードまたは名前空間ノードを返す。 |
復元 |
11.2 |
document 関数に渡された URI からのリソースの取得時にエラーが発生する。 |
例外をスロー |
12.1 |
document 関数内の URI 参照にフラグメント ID が含まれており、その ID を処理するとエラーが発生する。 |
例外をスロー |
12.1 |
同じ名前 (xls:output の cdata-section-elements 以外) を持つ複数の属性があり、これらの属性が同じインポート優先順位を持つ。 |
復元 |
16 |
プロセッサが xsl:output 要素の encoding 属性で指定されている文字エンコード値をサポートしない。 |
復元 |
16.1 |
disable-output-escaping がテキスト ノードに使用されており、そのテキスト ノードを使用して、結果ツリーにテキスト ノード以外のものが作成されている。 |
disable-output-escaping 属性を無視 |
16.4 |
出力エスケープが有効に設定されているテキスト ノードが結果ツリー フラグメントに含まれている場合に、そのフラグメントが数値や文字列に変換される。 |
無視 |
16.4 |
XSLT プロセッサが出力に使用しているエンコーディングで表すことができない文字に対して、出力エスケープが無効に設定される。 |
無視 |
16.4 |
要素に子または属性が追加された後で、その要素に名前空間ノードが追加される。 |
復元 |
正誤表 e25 |
xsl:number が NaN、無限、または 0.5 未満である。 |
復元 |
正誤表 e24 |
document 関数への 2 番目の引数ノード セットが空であり、URI 参照が相対 URI 参照である。 |
復元 |
正誤表 e14 |
正誤表は、W3C (World Wide Web Consortium) の『XSL Transformations (XSLT) Version 1.0 Specification Errata』(www.w3.org/1999/11/REC-xslt-19991116-errata/) にあります。
カスタム定義の動作の実装
XslTransform クラスの実装には固有の動作があります。このセクションでは、xsl:sort のプロバイダ固有の実装と、XslTransform クラスでサポートされているオプション機能について説明します。
xsl:sort
W3C 勧告『XSLT 1.0』には、変換を使用した並べ替えに関する留意事項の記述があります。それらの留意事項を次に示します。
2 つの XSLT プロセッサの両方が勧告に準拠している場合でも、それらの並べ替え動作は異なることがあります。
すべての XSLT プロセッサが同じ言語をサポートするわけではありません。
言語については、xsl:sort. で指定されていない特定の言語での並べ替え動作がプロセッサによって異なる場合があります。
XslTransform を使用した変換の .NET Framework の実装で各データ型に対して実装されている並べ替え動作を次の表に示します。
データ型 |
並べ替え動作 |
---|---|
Text |
データは、共通言語ランタイム (CLR: Common Language Runtime) の String.Compare メソッドとカルチャ ロケールを使用して並べ替えられます。データ型が "テキスト" である場合、XslTransform クラスの並べ替え動作は、CLR の文字列比較動作と同じです。 |
数値 |
数値は、XPath (XML Path Language) 数値として処理され、W3C 勧告『XML Path Language (XPath) Version 1.0』のセクション 3.5 (www.w3.org/TR/xpath.html#numbers) に記述されている方法に従って並べ替えられます。 |
サポートされているオプション機能
XSLT プロセッサがオプションで実装する機能を次に示します。これらの機能は、XslTransform クラスに実装されます。
機能 |
参照先 |
メモ |
---|---|---|
<xsl:text...> タグと <xsl:value-of...> タグの disable-output-escaping 属性 |
W3C 勧告『XSLT 1.0』 セクション 16.4 |
xsl:text 要素または xsl:value-of 要素が xsl:comment、xsl:processing-instruction、または xsl:attribute のいずれかの要素で使用される場合、disable-output-escaping 属性は無視されます。 テキストが含まれた結果ツリー フラグメントおよびエスケープされたテキスト出力はサポートされません。 XmlReader オブジェクトまたは XmlWriter オブジェクトへの変換時には、disable-output-escaping 属性が無視されます。 |
参照
概念
XslTransform クラスによる XSLT プロセッサの実装
XslTransform への XPathDocument の入力
XslTransform への XmlDataDocument の入力
XslTransform への XmlDocument の入力